From 5b729732089dec3cffa5c6f201748d7b527a7e73 Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@nexedi.com>
Date: Mon, 28 Sep 2009 15:35:47 +0000
Subject: [PATCH] * add unit test to make sure that parenthesis in strings  
 are not a problem for catalog research

* As suggested by Vincent, do not make parenthesis a criterion
  to swith to advanced search. This solve issue when you
  have documents with such titles :
    foo (bar)
  Before, the catalog was looking at title=foo AND title=bar

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29236 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Catalog/tests/testERP5Catalog.py  | 20 +++++++++++++++++++
 .../SearchText/AdvancedSearchTextDetector.py  |  5 ++++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/product/ERP5Catalog/tests/testERP5Catalog.py b/product/ERP5Catalog/tests/testERP5Catalog.py
index 46fa34106f..0764bc12dc 100644
--- a/product/ERP5Catalog/tests/testERP5Catalog.py
+++ b/product/ERP5Catalog/tests/testERP5Catalog.py
@@ -3850,6 +3850,26 @@ VALUES
     person1.is_indexable = person2.is_indexable = True
     self.assertRaises(ValueError, portal_catalog.catalogObjectList,[person1, person2])
 
+  def test_SearchFolderWithParenthesis(self, quiet=quiet):
+    if not quiet:
+      message = 'Search Folder With Parenthesis'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ',0,message)
+
+    person_module = self.getPersonModule()
+
+    # Make sure that the catalog will not split it with such research :
+    # title=foo AND title=bar
+    title='foo (bar)'
+    person = person_module.newContent(portal_type='Person',title=title)
+    person_id = person.getId()
+    person.immediateReindexObject()
+    folder_object_list = [x.getObject().getId() for x in person_module.searchFolder()]
+    self.assertTrue(person_id in folder_object_list)
+    folder_object_list = [x.getObject().getId() for x in 
+                              person_module.searchFolder(title=title)]
+    self.assertEquals([person_id],folder_object_list)
+  
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestERP5Catalog))
diff --git a/product/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py b/product/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py
index bcd7d5673c..b621e6a9db 100644
--- a/product/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py
+++ b/product/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py
@@ -37,7 +37,10 @@ class AdvancedSearchTextDetector(lexer):
     return t
 
   def t_LEFT_PARENTHESE(self, t):
-    self.found = True
+    t.type = 'WORD'
+    return t
+
+  def t_RIGHT_PARENTHESE(self, t):
     t.type = 'WORD'
     return t
 
-- 
2.30.9