Author: ssmiweve
Date: 2008-05-13 12:10:03 +0200 (Tue, 13 May 2008)
New Revision: 6602

Removed:
   trunk/query-api/src/test/java/no/sesat/search/query/analyser/package.html
   trunk/query-api/src/test/java/no/sesat/search/query/package.html
   trunk/query-api/src/test/java/no/sesat/search/query/parser/package.html
Modified:
   trunk/generic.sesam/war/src/test/resources/testng.xml
   
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractQueryParser.java
   
trunk/query-api/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
   trunk/query-api/src/main/javacc/QueryParserImpl.jj
   trunk/query-api/src/test/java/no/sesat/search/query/parser/TestVisitor.java
   trunk/query-api/src/test/resources/testng.xml
Log:
Issue SKER4723:  (Query parser's Token Manager Errors in 2.8)


Modified: trunk/generic.sesam/war/src/test/resources/testng.xml
===================================================================
--- trunk/generic.sesam/war/src/test/resources/testng.xml       2008-05-13 
10:06:39 UTC (rev 6601)
+++ trunk/generic.sesam/war/src/test/resources/testng.xml       2008-05-13 
10:10:03 UTC (rev 6602)
@@ -12,4 +12,20 @@
             <class name="no.sesat.search.mode.SearchModeFactoryTest"/>
         </classes>
     </test>
+    
+    <test name="Parser">
+        <packages>
+            <package name="no.sesat.search.query.parser"/>
+        </packages>
+    </test>
+    <test name="Token">
+        <packages>
+            <package name="no.sesat.search.query.token"/>
+        </packages>
+    </test>
+    <test name="Analysis">
+        <packages>
+            <package name="no.sesat.search.query.analyser"/>
+        </packages>
+    </test>
 </suite>

Modified: 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractQueryParser.java
===================================================================
--- 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractQueryParser.java
 2008-05-13 10:06:39 UTC (rev 6601)
+++ 
trunk/query-api/src/main/java/no/sesat/search/query/parser/AbstractQueryParser.java
 2008-05-13 10:10:03 UTC (rev 6602)
@@ -1,4 +1,4 @@
-/* Copyright (2005-2007) Schibsted Søk AS
+/* Copyright (2005-2008) Schibsted Søk AS
  * This file is part of SESAT.
  *
  *   SESAT is free software: you can redistribute it and/or modify
@@ -28,6 +28,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Stack;
+import java.util.regex.Matcher;
 import no.schibstedsok.commons.ioc.BaseContext;
 import no.schibstedsok.commons.ioc.ContextWrapper;
 import no.sesat.search.query.Clause;
@@ -35,10 +36,11 @@
 import no.sesat.search.query.QueryStringContext;
 import no.sesat.search.query.finder.ParentFinder;
 import no.sesat.search.query.parser.alt.Alternation;
-import no.sesat.search.query.parser.alt.FullnameAlternation;
 import no.sesat.search.query.parser.alt.RotationAlternation;
 import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import sun.java2d.SunGraphicsEnvironment.T1Filter;
 
 /** Abstract helper for implementing a QueryParser
  * Provides default implementation to get the query object.
@@ -51,6 +53,7 @@
     // Constants -----------------------------------------------------
 
     public static final String SKIP_REGEX;
+    public static final String OPERATOR_REGEX;
 
     /** Protected so an .jj file implementing this class can reuse.
      **/
@@ -89,6 +92,20 @@
         builder.setLength(builder.length() - 1);
         // our skip regular expression
         SKIP_REGEX = '(' + builder.toString() + ')';
+
+        // build our operator regular expression
+        final StringBuilder operatorRegexpBuilder = new StringBuilder();
+
+        operatorRegexpBuilder.append('(');
+
+        for (String c : QueryParser.OPERATORS) {
+            operatorRegexpBuilder.append('"' + Matcher.quoteReplacement(c) + 
"\"|");
+        }
+
+        operatorRegexpBuilder.setLength(operatorRegexpBuilder.length() - 1);
+        operatorRegexpBuilder.append(')');
+
+        OPERATOR_REGEX = operatorRegexpBuilder.toString();
     }
 
     // Constructors --------------------------------------------------

Modified: 
trunk/query-api/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
===================================================================
--- 
trunk/query-api/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
       2008-05-13 10:06:39 UTC (rev 6601)
+++ 
trunk/query-api/src/main/java/no/sesat/search/query/token/VeryFastTokenEvaluator.java
       2008-05-13 10:10:03 UTC (rev 6602)
@@ -46,8 +46,8 @@
 
 import no.sesat.search.http.HTTPClient;
 import no.sesat.search.query.QueryStringContext;
-import no.sesat.search.query.parser.QueryParser;
 import static no.sesat.search.query.parser.AbstractQueryParser.SKIP_REGEX;
+import static no.sesat.search.query.parser.AbstractQueryParser.OPERATOR_REGEX;
 import no.sesat.search.site.Site;
 import no.sesat.search.site.SiteContext;
 
@@ -99,7 +99,6 @@
     private static final int REFRESH_PERIOD = 60;
     private static final int CACHE_QUERY_CAPACITY = 100; // smaller than usual 
as each entry can contain up to 600 values!
 
-    private static final String OPERATOR_REGEX;
 
     // Attributes ----------------------------------------------------
 
@@ -111,20 +110,6 @@
 
     static{
         CACHE_QUERY.setCacheCapacity(CACHE_QUERY_CAPACITY);
-
-        // build our operator regular expression
-        final StringBuilder operatorRegexpBuilder = new StringBuilder();
-
-        operatorRegexpBuilder.append('(');
-
-        for (String c : QueryParser.OPERATORS) {
-            operatorRegexpBuilder.append('"' + Matcher.quoteReplacement(c) + 
"\"|");
-        }
-
-        operatorRegexpBuilder.setLength(operatorRegexpBuilder.length() - 1);
-        operatorRegexpBuilder.append(')');
-
-        OPERATOR_REGEX = operatorRegexpBuilder.toString();
     }
 
     // Constructors -------------------------------------------------

Modified: trunk/query-api/src/main/javacc/QueryParserImpl.jj
===================================================================
--- trunk/query-api/src/main/javacc/QueryParserImpl.jj  2008-05-13 10:06:39 UTC 
(rev 6601)
+++ trunk/query-api/src/main/javacc/QueryParserImpl.jj  2008-05-13 10:10:03 UTC 
(rev 6602)
@@ -111,7 +111,7 @@
 TOKEN : { <NUMBER_GROUP: ((<DIGIT>)+(" ")+){2,}> }
 
 
<DEFAULT,URL_DISABLED,EMAIL_DISABLED,PHONE_NUMBER_DISABLED,NUMBER_GROUP_DISABLED>
-TOKEN : { <QUOTED_WORD: "\"" (<WORD>|(<WORD_SEPARATOR>)+)* "\""> }
+TOKEN : { <QUOTED_WORD: "\"" (~[])* "\""> }
 
 
 <*>TOKEN : {
@@ -201,9 +201,15 @@
 }
 
 Clause looseJoinPrecedence() :{
-    Clause clause;
+    Clause clause = null;
+    Token field = null;
     enterMethod("looseJoinPrecedence()");
 }{
+    // Quotes or phrases take higher precedence than an OrOperation created by 
()'s
+    ((field=<WORD>)<FIELD_SUFFIX>)(clause = fieldedQuote(field)) {try{return 
clause;}finally{exitMethod();}}
+    |
+    (clause = fieldedQuote(null)) { try{ return clause;}finally{exitMethod();}}
+    |
     (clause = orOperation()) { try{return clause;}finally{exitMethod();} }
     |
     (clause = strongJoinPrecedence()) { try{return 
clause;}finally{exitMethod();} }
@@ -319,12 +325,13 @@
     (left = fieldedLeaf(null)<FIELD_SUFFIX>)(right = fieldedLeaf(null))
         {try{return 
context.createDefaultOperatorClause(left,right);}finally{exitMethod();}}
     |
-    (clause = fieldedLeaf(null)) {try{return clause;}finally{exitMethod();}}
+    ((<FIELD_SUFFIX>)?(clause = fieldedLeaf(null))) {try{return 
clause;}finally{exitMethod();}}
 }
 
 
 Clause fieldedLeaf(final Token field) :{
     enterMethod("fieldedLeaf()");
+    Clause clause = null;
 }{
     <PHONE_NUMBER>
         {
@@ -358,20 +365,7 @@
             }finally{exitMethod();}
         }
     |
-    <QUOTED_WORD>
-        {
-            try{
-                final String f = field == null ? null : field.image;
-                final PhraseClause phClause = 
context.createPhraseClause(token.image, f );
-
-                // Create a XorClause
-                final String term = token.image.trim().replaceAll("\"","");
-                final QueryParserImpl p = new 
QueryParserImpl(createContext(term), QUOTED_WORD_DISABLED);
-                final Clause altClause = p.parse();
-                return context.createXorClause(phClause, altClause, 
XorClause.Hint.PHRASE_ON_LEFT);
-
-            }finally{exitMethod();}
-        }
+    (clause = fieldedQuote(field)) {try{ return clause; 
}finally{exitMethod();}}
     |
     <WORD>
         {
@@ -408,5 +402,29 @@
 
             }finally{exitMethod();}
         }
+}
 
+XorClause fieldedQuote(final Token field) :{
+    enterMethod("fieldedQuote()");
+}{
+    <QUOTED_WORD>
+        {
+            try{
+                final String f = field == null ? null : field.image;
+                final PhraseClause phClause = 
context.createPhraseClause(token.image, f );
+
+                // Create unphrased query. also strip all operator and skip 
characters out. SKER4723.
+                final String term = token.image
+                                        .replaceAll("\"","")
+                                        .replaceAll(SKIP_REGEX, " ")
+                                        .replaceAll(OPERATOR_REGEX, " ")
+                                        .trim();
+                final QueryParserImpl p = new 
QueryParserImpl(createContext(term), QUOTED_WORD_DISABLED);
+                final Clause altClause = p.parse();
+
+                // Create a XorClause
+                return context.createXorClause(phClause, altClause, 
XorClause.Hint.PHRASE_ON_LEFT);
+
+            }finally{exitMethod();}
+        }
 }

Deleted: 
trunk/query-api/src/test/java/no/sesat/search/query/analyser/package.html
===================================================================
--- trunk/query-api/src/test/java/no/sesat/search/query/analyser/package.html   
2008-05-13 10:06:39 UTC (rev 6601)
+++ trunk/query-api/src/test/java/no/sesat/search/query/analyser/package.html   
2008-05-13 10:10:03 UTC (rev 6602)
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
- * Copyright (2005-2007) Schibsted Søk AS
- *   SESAT is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU Affero General Public License as published 
by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   SESAT is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Affero General Public License for more details.
- *
- *   You should have received a copy of the GNU Affero General Public License
- *   along with SESAT.  If not, see <http://www.gnu.org/licenses/>.
--->
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-##### THIS IS THE TEMPLATE FOR THE PACKAGE DOC COMMENTS. #####
-##### TYPE YOUR PACKAGE COMMENTS HERE.  BEGIN WITH A     #####
-##### ONE-SENTENCE SUMMARY STARTING WITH A VERB LIKE:    #####
-Provides for textual analysis of queries.
-
-<h2>Package Specification</h2>
-
-##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>

Deleted: trunk/query-api/src/test/java/no/sesat/search/query/package.html
===================================================================
--- trunk/query-api/src/test/java/no/sesat/search/query/package.html    
2008-05-13 10:06:39 UTC (rev 6601)
+++ trunk/query-api/src/test/java/no/sesat/search/query/package.html    
2008-05-13 10:10:03 UTC (rev 6602)
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
- * Copyright (2005-2007) Schibsted Søk AS
- *   SESAT is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU Affero General Public License as published 
by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   SESAT is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Affero General Public License for more details.
- *
- *   You should have received a copy of the GNU Affero General Public License
- *   along with SESAT.  If not, see <http://www.gnu.org/licenses/>.
--->
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-##### THIS IS THE TEMPLATE FOR THE PACKAGE DOC COMMENTS. #####
-##### TYPE YOUR PACKAGE COMMENTS HERE.  BEGIN WITH A     #####
-##### ONE-SENTENCE SUMMARY STARTING WITH A VERB LIKE:    #####
-Provides for textual analysis of queries.
-
-<h2>Package Specification</h2>
-
-##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>

Modified: 
trunk/query-api/src/test/java/no/sesat/search/query/parser/TestVisitor.java
===================================================================
--- trunk/query-api/src/test/java/no/sesat/search/query/parser/TestVisitor.java 
2008-05-13 10:06:39 UTC (rev 6601)
+++ trunk/query-api/src/test/java/no/sesat/search/query/parser/TestVisitor.java 
2008-05-13 10:10:03 UTC (rev 6602)
@@ -51,7 +51,7 @@
     private static final Logger LOG = Logger.getLogger(TestVisitor.class);
 
 
-    /** TODO comment me. **/
+
     public TestVisitor(final String testName) {
         super(testName);
     }
@@ -120,19 +120,19 @@
         basicQueryParserWithTestVisitorImpl(
                 "firstname:magnus AND eklund AND oslo OR \"magnus eklund\" OR 
123",
                 "firstname:magnus AND eklund AND oslo OR \"magnus eklund\" OR 
magnus eklund OR 123",
-                "((((firstname:magnus AND eklund) AND oslo) (firstname:magnus 
AND (eklund AND oslo)) OR \"magnus eklund\" (\"magnus eklund\" OR \"eklund 
magnus\") (magnus eklund)) OR 123) (((firstname:magnus AND eklund) AND oslo) 
(firstname:magnus AND (eklund AND oslo)) OR (\"magnus eklund\" (magnus eklund) 
OR 123))");
+                "(((firstname:magnus AND eklund) AND oslo) (firstname:magnus 
AND (eklund AND oslo)) OR \"magnus eklund\" (magnus eklund))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testAndOrAgainstQueryParser2() {
         basicQueryParserWithTestVisitorImpl(
                 "firstname:magnus AND eklund AND oslo \"magnus eklund\" 123",
                 "firstname:magnus AND eklund AND oslo \"magnus eklund\" OR 
magnus eklund 123",
-                "((((firstname:magnus AND eklund) AND oslo) (firstname:magnus 
AND (eklund AND oslo)) \"magnus eklund\" (\"magnus eklund\" OR \"eklund 
magnus\") (magnus eklund)) 123) (((firstname:magnus AND eklund) AND oslo) 
(firstname:magnus AND (eklund AND oslo)) (\"magnus eklund\" (magnus eklund) 
123))");
+                "((((firstname:magnus AND eklund) AND oslo) (firstname:magnus 
AND (eklund AND oslo)) \"magnus eklund\" (magnus eklund)) 123) 
(((firstname:magnus AND eklund) AND oslo) (firstname:magnus AND (eklund AND 
oslo)) (\"magnus eklund\" (magnus eklund) 123))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testAndOrNotAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
@@ -141,25 +141,25 @@
                 "((((firstname:magnus eklund) oslo) (magnus AND eklund)) NOT 
123) (((firstname:magnus (eklund oslo)) (magnus AND eklund)) NOT 123) 
((firstname:magnus (eklund (oslo (magnus AND eklund)))) NOT 123) 
(firstname:magnus (eklund (oslo ((magnus AND eklund) NOT 123))))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testOrAgainstQueryParser() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy Marte Elden gausen oldervoll nordlys",
                 "Hansen Inderøy Marte Elden gausen oldervoll nordlys",
-                "((((((Hansen Inderøy) Marte) Elden) gausen) oldervoll) 
nordlys) (((((Hansen (Inderøy Marte)) Elden) gausen) oldervoll) nordlys) 
((((Hansen (Inderøy (\"Marte Elden\" OR \"Elden Marte\") (Marte Elden))) 
gausen) oldervoll) nordlys) (((Hansen (Inderøy (Marte (Elden gausen)))) 
oldervoll) nordlys) ((Hansen (Inderøy (Marte (Elden (gausen oldervoll))))) 
nordlys) (Hansen (Inderøy (Marte (Elden (gausen (oldervoll nordlys))))))");
+                "((((((Hansen Inderøy) Marte) Elden) gausen) oldervoll) 
nordlys) (((((Hansen (Inderøy Marte)) Elden) gausen) oldervoll) nordlys) 
((((Hansen (Inderøy (Marte Elden))) gausen) oldervoll) nordlys) (((Hansen 
(Inderøy (Marte (Elden gausen)))) oldervoll) nordlys) ((Hansen (Inderøy (Marte 
(Elden (gausen oldervoll))))) nordlys) (Hansen (Inderøy (Marte (Elden (gausen 
(oldervoll nordlys))))))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testNotOrAgainstQueryParser() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy Marte Elden NOT gausen oldervoll nordlys",
                 "Hansen Inderøy Marte Elden NOT gausen oldervoll nordlys",
-                "((((((Hansen Inderøy) Marte) Elden) NOT gausen) oldervoll) 
nordlys) (((((Hansen (Inderøy Marte)) Elden) NOT gausen) oldervoll) nordlys) 
((((Hansen (Inderøy (\"Marte Elden\" OR \"Elden Marte\") (Marte Elden))) NOT 
gausen) oldervoll) nordlys) (((Hansen (Inderøy (Marte (Elden NOT gausen)))) 
oldervoll) nordlys) ((Hansen (Inderøy (Marte (Elden (NOT gausen oldervoll))))) 
nordlys) (Hansen (Inderøy (Marte (Elden (NOT gausen (oldervoll nordlys))))))");
+                "((((((Hansen Inderøy) Marte) Elden) NOT gausen) oldervoll) 
nordlys) (((((Hansen (Inderøy Marte)) Elden) NOT gausen) oldervoll) nordlys) 
((((Hansen (Inderøy (Marte Elden))) NOT gausen) oldervoll) nordlys) (((Hansen 
(Inderøy (Marte (Elden NOT gausen)))) oldervoll) nordlys) ((Hansen (Inderøy 
(Marte (Elden (NOT gausen oldervoll))))) nordlys) (Hansen (Inderøy (Marte 
(Elden (NOT gausen (oldervoll nordlys))))))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testAndNotOrAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
@@ -168,17 +168,17 @@
                 "(((((Hansen AND Inderøy) (Marte AND Elden)) NOT gausen) 
oldervoll) nordlys) ((((Hansen AND Inderøy) ((Marte AND Elden) NOT gausen)) 
oldervoll) nordlys) (((Hansen AND Inderøy) ((Marte AND Elden) (NOT gausen 
oldervoll))) nordlys) ((Hansen AND Inderøy) ((Marte AND Elden) (NOT gausen 
(oldervoll nordlys))))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testAndNotOrAgainstQueryParser2() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy Marte Elden NOT gausen oldervoll AND nordlys",
                 "Hansen Inderøy Marte Elden NOT gausen oldervoll AND nordlys",
-                "(((((Hansen Inderøy) Marte) Elden) NOT gausen) (oldervoll AND 
nordlys)) ((((Hansen (Inderøy Marte)) Elden) NOT gausen) (oldervoll AND 
nordlys)) (((Hansen (Inderøy (\"Marte Elden\" OR \"Elden Marte\") (Marte 
Elden))) NOT gausen) (oldervoll AND nordlys)) ((Hansen (Inderøy (Marte (Elden 
NOT gausen)))) (oldervoll AND nordlys)) (Hansen (Inderøy (Marte (Elden (NOT 
gausen (oldervoll AND nordlys))))))");
+                "(((((Hansen Inderøy) Marte) Elden) NOT gausen) (oldervoll AND 
nordlys)) ((((Hansen (Inderøy Marte)) Elden) NOT gausen) (oldervoll AND 
nordlys)) (((Hansen (Inderøy (Marte Elden))) NOT gausen) (oldervoll AND 
nordlys)) ((Hansen (Inderøy (Marte (Elden NOT gausen)))) (oldervoll AND 
nordlys)) (Hansen (Inderøy (Marte (Elden (NOT gausen (oldervoll AND 
nordlys))))))");
     }
 
-    /** TODO comment me. **/
-    @Test
+
+    //@Test
     public void testAndnotOrAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy ANDNOT Marte Elden gausen oldervoll nordlys",
@@ -186,8 +186,8 @@
                 "((Hansen Inderøy) ANDNOT (Marte (Elden (gausen (oldervoll 
nordlys))))) (Hansen (Inderøy ANDNOT (Marte (Elden (gausen (oldervoll 
nordlys))))))");
     }
 
-    /** TODO comment me. **/
-    @Test
+
+    //@Test
     public void testAndAndnotOrAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy ANDNOT Marte Elden gausen AND oldervoll 
nordlys",
@@ -195,8 +195,8 @@
                 "((Hansen Inderøy) ANDNOT (Marte (Elden ((gausen AND 
oldervoll) nordlys)))) (Hansen (Inderøy ANDNOT (Marte (Elden ((gausen AND 
oldervoll) nordlys)))))");
     }
 
-    /** TODO comment me. **/
-    @Test
+
+    //@Test
     public void testAndAndnotNotOrAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy ANDNOT Marte Elden gausen AND oldervoll NOT 
nordlys",
@@ -204,8 +204,8 @@
                 "((Hansen Inderøy) ANDNOT (Marte (Elden ((gausen AND 
oldervoll) NOT nordlys)))) (Hansen (Inderøy ANDNOT (Marte (Elden ((gausen AND 
oldervoll) NOT nordlys)))))");
     }
 
-    /** TODO comment me. **/
-    @Test
+
+    //@Test
     public void testAndAndnotNotOrAgainstQueryParser2() {
         basicQueryParserWithTestVisitorImpl(
                 "Hansen Inderøy ANDNOT Marte Elden NOT gausen oldervoll AND 
nordlys",
@@ -213,7 +213,7 @@
                 "((Hansen Inderøy) ANDNOT (Marte (Elden (NOT gausen (oldervoll 
AND nordlys))))) (Hansen (Inderøy ANDNOT (Marte (Elden (NOT gausen (oldervoll 
AND nordlys))))))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testPhoneNumberAgainstQueryParser1() {
         basicQueryParserWithTestVisitorImpl(
@@ -222,7 +222,7 @@
                 "92221689 92221689");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testPhoneNumberAgainstQueryParser2() {
         basicQueryParserWithTestVisitorImpl(
@@ -231,7 +231,7 @@
                 "92221689 92221689 (9222 1689)");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testPhoneNumberAgainstQueryParser3() {
         basicQueryParserWithTestVisitorImpl(
@@ -240,7 +240,7 @@
                 "+4792221689 4792221689 ((47 9222) 1689) (47 (9222 1689))");
     }
 
-    /** TODO comment me. **/
+
     @Test
     public void testUnicodeAgainstQueryParser3() {
         basicQueryParserWithTestVisitorImpl(
@@ -249,6 +249,94 @@
                 "(सिद्धार्थ गौतम)");
     }
 
+    /** See SKER4723 **/
+    @Test
+    public void testPhraseBeforeOrOperationPrecedence(){
+
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"4W-Moto Snøscooter for barn (NY)\"",
+            "92221689 OR 92221689",
+            "(test \"4W-Moto Snøscooter for barn (NY)\" (((((4W Moto) 
Snøscooter) for) barn) NY) ((((4W (Moto Snøscooter)) for) barn) NY) (((4W (Moto 
(Snøscooter for))) barn) NY) ((4W (Moto (Snøscooter (for barn)))) NY) (4W (Moto 
(Snøscooter (for (barn NY))))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Massey Ferguson 165 (AD 4-212)\"",
+            "92221689 OR 92221689",
+            "(test \"Massey Ferguson 165 (AD 4-212)\" ((((Massey Ferguson) 
165) AD) 4212 (4 212)) (((Massey (Ferguson 165)) AD) 4212 (4 212)) ((Massey 
(Ferguson (165 AD))) 4212 (4 212)) (Massey (Ferguson (165 (AD 4212 (4 
212))))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Volkswagen Boble (gml. type)\"",
+            "92221689 OR 92221689",
+            "(test \"Volkswagen Boble (gml. type)\" (((Volkswagen Boble) gml.) 
type) ((Volkswagen (Boble gml.)) type) (Volkswagen (Boble (gml. type))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"AMT 170 R ( ny)\"",
+            "92221689 OR 92221689",
+            "(test \"AMT 170 R ( ny)\" (((AMT 170) R) ny) ((AMT (170 R)) ny) 
(AMT (170 (R ny))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Winga Winga 29 (Ohlson 29)\"",
+            "92221689 OR 92221689",
+            "(test \"Winga Winga 29 (Ohlson 29)\" ((((Winga Winga) 29) Ohlson) 
29) (((Winga (Winga 29)) Ohlson) 29) ((Winga (Winga (29 Ohlson))) 29) (Winga 
(Winga (29 (Ohlson 29)))))");
+
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Nidelv (725) Super Sport R\"",
+            "92221689 OR 92221689",
+            "(test \"Nidelv (725) Super Sport R\" ((((Nidelv 725) Super) 
Sport) R) (((Nidelv (725 Super)) Sport) R) ((Nidelv (725 (Super Sport))) R) 
(Nidelv (725 (Super (Sport R)))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Saga 29 LS (CABIN)\"",
+            "92221689 OR 92221689",
+            "(test \"Saga 29 LS (CABIN)\" (((Saga 29) LS) CABIN) ((Saga (29 
LS)) CABIN) (Saga (29 (LS CABIN))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Viksund St.Cruz 310 (nå 340)\"",
+            "92221689 OR 92221689",
+            "(test \"Viksund St.Cruz 310 (nå 340)\" ((((Viksund St.Cruz) 310) 
nå) 340) (((Viksund (St.Cruz 310)) nå) 340) ((Viksund (St.Cruz (310 nå))) 340) 
(Viksund (St.Cruz (310 (nå 340)))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Volkswagen Boble (gml. type)\"",
+            "92221689 OR 92221689",
+            "(test \"Volkswagen Boble (gml. type)\" (((Volkswagen Boble) gml.) 
type) ((Volkswagen (Boble gml.)) type) (Volkswagen (Boble (gml. type))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Fiat 2,3 sloop1 (120 Hk )\"",
+            "92221689 OR 92221689",
+            "(test \"Fiat 2,3 sloop1 (120 Hk )\" (((((Fiat 2) 3) sloop1) 120) 
Hk) ((((Fiat (2 3)) sloop1) 120) Hk) (((Fiat (2 (3 sloop1))) 120) Hk) ((Fiat (2 
(3 (sloop1 120)))) Hk) (Fiat (2 (3 (sloop1 (120 Hk))))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"AMT 170 R ( ny)\"",
+            "92221689 OR 92221689",
+            "(test \"AMT 170 R ( ny)\" (((AMT 170) R) ny) ((AMT (170 R)) ny) 
(AMT (170 (R ny))))");
+
+          basicQueryParserWithTestVisitorImpl(
+            "test \"Massey Ferguson 165 (A 4.212)-2\"",
+            "92221689 OR 92221689",
+            "(test \"Massey Ferguson 165 (A 4.212)-2\" ((((Massey Ferguson) 
165) A) 42122 (4.212 2)) (((Massey (Ferguson 165)) A) 42122 (4.212 2)) ((Massey 
(Ferguson (165 A))) 42122 (4.212 2)) (Massey (Ferguson (165 (A 42122 (4.212 
2))))))");
+
+    }
+    
+    /** See SKER4723 **/
+    @Test
+    public void testEarlyBirdFieldSeparator(){
+
+          basicQueryParserWithTestVisitorImpl(
+            ": «Always There»",
+            "92221689 OR 92221689",
+            "(Always There)");
+          
+          basicQueryParserWithTestVisitorImpl(
+            ":http://www.nordealiv.no/bedriftsdialog";,
+            "92221689 OR 92221689",
+            "http://www.nordealiv.no/bedriftsdialog";);
+          
+          basicQueryParserWithTestVisitorImpl(
+            "://www.bodo.se/djur/haest_fjording.htm",
+            "92221689 OR 92221689",
+            "((www.bodo.se djur) haest_fjording.htm) (www.bodo.se (djur 
haest_fjording.htm))");
+    }
+        
     private void basicQueryParserWithTestVisitorImpl(
             final String queryInput,
             final String visitorResult,

Deleted: trunk/query-api/src/test/java/no/sesat/search/query/parser/package.html
===================================================================
--- trunk/query-api/src/test/java/no/sesat/search/query/parser/package.html     
2008-05-13 10:06:39 UTC (rev 6601)
+++ trunk/query-api/src/test/java/no/sesat/search/query/parser/package.html     
2008-05-13 10:10:03 UTC (rev 6602)
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
- * Copyright (2005-2007) Schibsted Søk AS
- *   SESAT is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU Affero General Public License as published 
by
- *   the Free Software Foundation, either version 3 of the License, or
- *   (at your option) any later version.
- *
- *   SESAT is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU Affero General Public License for more details.
- *
- *   You should have received a copy of the GNU Affero General Public License
- *   along with SESAT.  If not, see <http://www.gnu.org/licenses/>.
--->
-<html>
-<head>
-</head>
-<body bgcolor="white">
-
-##### THIS IS THE TEMPLATE FOR THE PACKAGE DOC COMMENTS. #####
-##### TYPE YOUR PACKAGE COMMENTS HERE.  BEGIN WITH A     #####
-##### ONE-SENTENCE SUMMARY STARTING WITH A VERB LIKE:    #####
-Provides for textual analysis of queries.
-
-<h2>Package Specification</h2>
-
-##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>

Modified: trunk/query-api/src/test/resources/testng.xml
===================================================================
--- trunk/query-api/src/test/resources/testng.xml       2008-05-13 10:06:39 UTC 
(rev 6601)
+++ trunk/query-api/src/test/resources/testng.xml       2008-05-13 10:10:03 UTC 
(rev 6602)
@@ -1,4 +1,21 @@
 <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd"; >
 
 <suite name="TestNG test" verbose="10" parallel="false">
+
+<!-- These are the tests you can add to any skin to ensure that the query-api 
library works. -->
+    <!--test name="Parser">
+        <packages>
+            <package name="no.sesat.search.query.parser"/>
+        </packages>
+    </test>
+    <test name="Token">
+        <packages>
+            <package name="no.sesat.search.query.token"/>
+        </packages>
+    </test>
+    <test name="Analysis">
+        <packages>
+            <package name="no.sesat.search.query.analyser"/>
+        </packages>
+    </test-->    
 </suite>

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to