// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.result; import com.yahoo.search.grouping.Continuation; import com.yahoo.search.result.HitGroup; import com.yahoo.search.result.Relevance; import com.yahoo.text.Utf8; import com.yahoo.text.XMLWriter; import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.StringWriter; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; /** * @author Simon Thoresen Hult */ public class HitRendererTestCase { @Test void requireThatGroupListsRenderAsExpected() { assertRender(new GroupList("foo"), "\n"); assertRender(new GroupList("b\u00e6z"), "\n"); GroupList lst = new GroupList("foo"); lst.continuations().put("bar.key", new MyContinuation("bar.val")); lst.continuations().put("baz.key", new MyContinuation("baz.val")); assertRender(lst, "\n" + "bar.val\n" + "baz.val\n" + "\n"); } @Test void requireThatGroupIdsRenderAsExpected() { assertRender(newGroup(new DoubleId(6.9)), "\n" + "6.9\n" + "\n"); assertRender(newGroup(new LongId(69L)), "\n" + "69\n" + "\n"); assertRender(newGroup(new BoolId(true)), "\n" + "true\n" + "\n"); assertRender(newGroup(new BoolId(false)), "\n" + "false\n" + "\n"); assertRender(newGroup(new NullId()), "\n" + "\n" + "\n"); assertRender(newGroup(new RawId(Utf8.toBytes("foo"))), "\n" + "Zm9v\n" + "\n"); assertRender(newGroup(new StringId("foo")), "\n" + "foo\n" + "\n"); assertRender(newGroup(new StringId("b\u00e6z")), "\n" + "b\u00e6z\n" + "\n"); assertRender(newGroup(new DoubleBucketId(6.9, 9.6)), "\n" + "\n6.9\n9.6\n\n" + "\n"); assertRender(newGroup(new LongBucketId(6L, 9L)), "\n" + "\n6\n9\n\n" + "\n"); assertRender(newGroup(new StringBucketId("bar", "baz")), "\n" + "\nbar\nbaz\n\n" + "\n"); assertRender(newGroup(new StringBucketId("b\u00e6r", "b\u00e6z")), "\n" + "\nb\u00e6r\nb\u00e6z\n\n" + "\n"); assertRender(newGroup(new RawBucketId(Utf8.toBytes("bar"), Utf8.toBytes("baz"))), "\n" + "\nYmFy\nYmF6\n\n" + "\n"); } @Test void requireThatGroupsRenderAsExpected() { Group group = newGroup(new StringId("foo")); group.setField("foo", "bar"); group.setField("baz", "cox"); assertRender(group, "\n" + "foo\n" + "bar\n" + "cox\n" + "\n"); group = newGroup(new StringId("foo")); group.setField("foo", "b\u00e6r"); group.setField("b\u00e5z", "cox"); assertRender(group, "\n" + "foo\n" + "b\u00e6r\n" + "cox\n" + "\n"); } @Test void requireThatRootGroupsRenderAsExpected() { RootGroup group = new RootGroup(0, new MyContinuation("69")); group.setField("foo", "bar"); group.setField("baz", "cox"); assertRender(group, "\n" + "\n" + "69\n" + "bar\n" + "cox\n" + "\n"); group = new RootGroup(0, new MyContinuation("96")); group.setField("foo", "b\u00e6r"); group.setField("b\u00e5z", "cox"); assertRender(group, "\n" + "\n" + "96\n" + "b\u00e6r\n" + "cox\n" + "\n"); } @Test void requireThatHitListsRenderAsExpected() { assertRender(new HitList("foo"), "\n"); assertRender(new HitList("b\u00e6z"), "\n"); HitList lst = new HitList("foo"); lst.continuations().put("bar.key", new MyContinuation("bar.val")); lst.continuations().put("baz.key", new MyContinuation("baz.val")); assertRender(lst, "\n" + "bar.val\n" + "baz.val\n" + "\n"); } private static Group newGroup(GroupId id) { return new Group(id, new Relevance(1)); } private static void assertRender(HitGroup hit, String expectedXml) { StringWriter str = new StringWriter(); XMLWriter out = new XMLWriter(str, 0, -1); try { HitRenderer.renderHeader(hit, out); while (out.openTags().size() > 0) { out.closeTag(); } } catch (IOException e) { fail(); } assertEquals(expectedXml, str.toString()); } private static class MyContinuation extends Continuation { final String str; MyContinuation(String str) { this.str = str; } @Override public Continuation copy() { return null; } @Override public String toString() { return str; } } }