// 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" +
"[102, 111, 111]\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" +
"\n[98, 97, 114]\n[98, 97, 122]\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" +
"\n" +
"\n" +
"\n");
group = newGroup(new StringId("foo"));
group.setField("foo", "b\u00e6r");
group.setField("b\u00e5z", "cox");
assertRender(group, "\n" +
"foo\n" +
"\n" +
"\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" +
"\n" +
"\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" +
"\n" +
"\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;
}
}
}