summaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java')
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java71
1 files changed, 71 insertions, 0 deletions
diff --git a/container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java b/container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java
new file mode 100644
index 00000000000..7a34674f554
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/prelude/semantics/test/AutomataTestCase.java
@@ -0,0 +1,71 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.prelude.semantics.test;
+
+import com.yahoo.search.Query;
+import com.yahoo.prelude.semantics.RuleBase;
+
+/**
+ * Tests rule bases using automatas for matching
+ *
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon S Bratseth</a>
+ */
+public class AutomataTestCase extends RuleBaseAbstractTestCase {
+
+ private final String root="src/test/java/com/yahoo/prelude/semantics/test/rulebases/";
+
+ public AutomataTestCase(String name) {
+ super(name,"automatarules.sr","semantics.fsa");
+ }
+
+ public void testAutomataRuleBase() throws Exception {
+ RuleBase ruleBase=searcher.getDefaultRuleBase();
+ assertEquals(RuleBase.class,ruleBase.getClass());
+ assertTrue(ruleBase.getSource().endsWith(root + "automatarules.sr"));
+ assertEquals(root + "semantics.fsa",ruleBase.getAutomataFile());
+
+ Query query=new Query("?query=sony+digital+camera");
+ ruleBase.analyze(query,0);
+ assertEquals("RANK (AND sony digital camera) dsp1:sony dsp5:digicamera", query.getModel().getQueryTree().getRoot().toString());
+
+ query=new Query("?query=sony+digital+camera&rules.reload");
+ ruleBase=searcher.getDefaultRuleBase();
+ assertTrue(ruleBase.getSource().endsWith(root + "automatarules.sr"));
+ assertEquals(root + "semantics.fsa",ruleBase.getAutomataFile());
+ ruleBase.analyze(query,0);
+ assertEquals("RANK (AND sony digital camera) dsp1:sony dsp5:digicamera", query.getModel().getQueryTree().getRoot().toString());
+ }
+
+ public void testAutomataSingleQuery() throws Exception {
+ assertSemantics("RANK sony dsp1:sony","sony");
+ }
+
+ public void testAutomataFilterIsIgnored() throws Exception {
+ assertSemantics("RANK sony |something dsp1:sony","sony&filter=something");
+ assertSemantics("RANK something |sony","something&filter=sony");
+ }
+
+ public void testAutomataPluralMatches() throws Exception {
+ assertSemantics("RANK sonys dsp1:sony","sonys");
+
+ assertSemantics("RANK (AND car cleaner) dsp1:\"car cleaners\" dsp5:\"car cleaners\"","car cleaner");
+
+ assertSemantics("RANK (AND sony digitals cameras) dsp1:sony dsp5:digicamera","sony digitals cameras");
+ }
+
+ public void testMatchingMultipleAutomataConditionsSingleWord() {
+ assertSemantics("RANK carpenter dsp1:carpenter dsp5:carpenter","carpenter");
+ }
+
+ public void testMatchingMultipleAutomataConditionsPhrase() {
+ assertSemantics("RANK (AND car cleaners) dsp1:\"car cleaners\" dsp5:\"car cleaners\"","car cleaners");
+ }
+
+ public void tstReplaceOnNoMatch() { // TODO: Make this work again
+ assertSemantics("nomatch:sonny","sonny&donomatch");
+ assertSemantics("RANK sony dsp1:sony","sony&donomatch");
+ assertSemantics("RANK sonys dsp1:sony","sonys&donomatch");
+ assertSemantics("AND nomatch:sonny nomatch:boy","sonny boy&donomatch");
+ assertSemantics("RANK (AND sony nomatch:boy) dsp1:sony","sony boy&donomatch");
+ }
+
+}