From 7221ea4b2edc54688f4a89eb4095fecef4be68cd Mon Sep 17 00:00:00 2001 From: Kyle Rowan Date: Fri, 5 Feb 2021 09:16:48 +0000 Subject: added searcher to replace OrItems --- .../WeakAndReplacementSearcherTestCase.java | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java (limited to 'container-search/src/test/java/com') diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java new file mode 100644 index 00000000000..efc525cdd8d --- /dev/null +++ b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java @@ -0,0 +1,104 @@ +package com.yahoo.search.querytransform; + +import com.yahoo.component.chain.Chain; +import com.yahoo.prelude.query.*; +import com.yahoo.processing.request.CompoundName; +import com.yahoo.search.Query; +import com.yahoo.search.Result; +import com.yahoo.search.Searcher; +import com.yahoo.search.searchchain.Execution; +import org.junit.Test; + +import java.util.stream.IntStream; + +import static org.junit.Assert.*; + +public class WeakAndReplacementSearcherTestCase { + + private static final CompoundName WEAKAND_REPLACE = new CompoundName("weakand.replace"); + private static final int N = 99; + + + private Execution buildExec() { + return new Execution(new Chain(new WeakAndReplacementSearcher()), + Execution.Context.createContextStub()); + } + + private Query buildDefaultQuery(boolean searcherEnabled) { + Query query = new Query(); + query.properties().set("wand.hits", N); + query.properties().set(WEAKAND_REPLACE, searcherEnabled); + OrItem root = new OrItem(); + root.addItem(new WordItem("text")); + NotItem notItem = new NotItem(); + OrItem notItemOr = new OrItem(); + notItemOr.addItem(new IntItem(1, "index")); + notItemOr.addItem(new WordItem("positive")); + notItem.addPositiveItem(notItemOr); + notItem.addNegativeItem(new WordItem("negative")); + query.getModel().getQueryTree().setRoot(root); + return query; + } + + + + + @Test + public void requireOrItemsToBeReplaced() { + Query query = buildDefaultQuery(true); + Result result = buildExec().search(query); + Item root = TestUtils.getQueryTreeRoot(result); + assertFalse(orItemsExist(root)); + assertTrue(root instanceof WeakAndItem); + assertEquals(N, ((WeakAndItem)root).getN()); + } + + @Test + public void requireQueryPropertyToWork() { + Query query = buildDefaultQuery(false); + Item preRoot = query.getModel().getQueryTree().getRoot(); + Result result = buildExec().search(query); + Item root = TestUtils.getQueryTreeRoot(result); + assertTrue(orItemsExist(root)); + assertTrue(deepEquals(root, preRoot)); + } + + @Test + public void requireDoNothingOnNoOrItems() { + Query query = new Query(); + query.properties().set(WEAKAND_REPLACE, true); + AndItem andItem = new AndItem(); + andItem.addItem(new WordItem("1")); + andItem.addItem(new WordItem("2")); + query.getModel().getQueryTree().setRoot(andItem); + Result result = buildExec().search(query); + Item root = TestUtils.getQueryTreeRoot(result); + assertTrue(deepEquals(root, andItem)); + } + + private boolean deepEquals(Item item1, Item item2) { + if (item1 != item2) { + return false; + } + if (!(item1 instanceof CompositeItem)) { + return true; + } + + CompositeItem compositeItem1 = (CompositeItem) item1; + CompositeItem compositeItem2 = (CompositeItem) item2; + return IntStream.range(0, compositeItem1.getItemCount()) + .allMatch(i -> deepEquals(compositeItem1.getItem(i), compositeItem2.getItem(i))); + } + + private boolean orItemsExist(Item item) { + if (!(item instanceof CompositeItem)) { + return false; + } + if (item instanceof OrItem) { + return true; + } + CompositeItem compositeItem = (CompositeItem) item; + return compositeItem.items().stream().anyMatch(this::orItemsExist); + } + +} -- cgit v1.2.3 From f4ad7f18427f9c775d66106acb88808a0b518ab0 Mon Sep 17 00:00:00 2001 From: karowan Date: Fri, 5 Feb 2021 02:37:40 -0800 Subject: added another test --- .../WeakAndReplacementSearcherTestCase.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'container-search/src/test/java/com') diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java index efc525cdd8d..9dc0e6b3769 100644 --- a/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java @@ -76,6 +76,21 @@ public class WeakAndReplacementSearcherTestCase { assertTrue(deepEquals(root, andItem)); } + @Test + public void requireChildrenAreTheSame() { + Query query = new Query(); + query.properties().set(WEAKAND_REPLACE, true); + OrItem preRoot = new OrItem(); + preRoot.addItem(new WordItem("val1")); + preRoot.addItem(new WordItem("val2")); + + query.getModel().getQueryTree().setRoot(preRoot); + Result result = buildExec().search(query); + WeakAndItem root = (WeakAndItem)TestUtils.getQueryTreeRoot(result); + assertEquals(preRoot.getItem(0), root.getItem(0)); + assertEquals(preRoot.getItem(1), root.getItem(1)); + } + private boolean deepEquals(Item item1, Item item2) { if (item1 != item2) { return false; -- cgit v1.2.3 From 2e0c5d67cece9811042cf6195394cf785bd0694b Mon Sep 17 00:00:00 2001 From: karowan Date: Tue, 9 Feb 2021 12:19:30 -0800 Subject: updated test --- .../yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'container-search/src/test/java/com') diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java index 9dc0e6b3769..1aa61d7535b 100644 --- a/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/querytransform/WeakAndReplacementSearcherTestCase.java @@ -15,7 +15,7 @@ import static org.junit.Assert.*; public class WeakAndReplacementSearcherTestCase { - private static final CompoundName WEAKAND_REPLACE = new CompoundName("weakand.replace"); + private static final CompoundName WEAKAND_REPLACE = new CompoundName("weakAnd.replace"); private static final int N = 99; -- cgit v1.2.3