From: <fg...@us...> - 2010-03-29 20:44:24
|
Revision: 2229 http://openutils.svn.sourceforge.net/openutils/?rev=2229&view=rev Author: fgiust Date: 2010-03-29 20:44:18 +0000 (Mon, 29 Mar 2010) Log Message: ----------- CRIT-10 escape of ' and + Modified Paths: -------------- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AdvancedCriteriaSearchTest.java Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-03-27 11:47:44 UTC (rev 2228) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-03-29 20:44:18 UTC (rev 2229) @@ -91,21 +91,9 @@ return str.replaceAll("'", "\""); } - private static String[] JCR_SEARCH_EXP_UNESCAPED = new String[] { - "'", - "\"", - "-", - "\\", - "?" - }; + private static String[] JCR_SEARCH_EXP_UNESCAPED = new String[]{"'", "\"", "-", "\\", "?", "+" }; - private static String[] JCR_SEARCH_EXP_ESCAPED = new String[] { - "\\'", - "\\\"", - "\\-", - "\\\\", - "\\?" - }; + private static String[] JCR_SEARCH_EXP_ESCAPED = new String[]{"''", "\\\"", "\\-", "\\\\", "\\?", "\\+" }; /** * Convert a string to a JCR search expression literal, suitable for use in jcr:contains() (inside XPath queries). Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AdvancedCriteriaSearchTest.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AdvancedCriteriaSearchTest.java 2010-03-27 11:47:44 UTC (rev 2228) +++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AdvancedCriteriaSearchTest.java 2010-03-29 20:44:18 UTC (rev 2229) @@ -84,10 +84,12 @@ // "frappè" should not show up since "excludedproperty" is not indexed. But looks like it only works with // jackrabbit 2? - assertSortedResults( - new String[]{"Parigi (Francia)", "Parigi (Frància)", "Frància", "Tallart, Camille d'Hostun, cónte di-", "federale" }, - result, - "francia"); + assertSortedResults(new String[]{ + "Parigi (Francia)", + "Parigi (Frància)", + "Frància", + "Tallart, Camille d'Hostun, cónte di-", + "federale" }, result, "francia"); } @Test @@ -184,6 +186,42 @@ } @Test + public void testEscapeSingleQuotesForContainsRestriction() throws Exception + { + String searchText = "Milano'"; + Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE); + criteria.setBasePath(StringUtils.EMPTY); + criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content")); + criteria.add(Restrictions.contains("@title", searchText)); + try + { + criteria.execute(); + } + catch (JCRQueryException e) + { + Assert.fail("Search string not properly escaped. " + e.getMessage()); + } + } + + @Test + public void testEscapePlusForContainsRestriction() throws Exception + { + String searchText = "Milano +"; + Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE); + criteria.setBasePath(StringUtils.EMPTY); + criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content")); + criteria.add(Restrictions.contains("@title", searchText)); + try + { + criteria.execute(); + } + catch (JCRQueryException e) + { + Assert.fail("Search string not properly escaped. " + e.getMessage()); + } + } + + @Test public void testNotInPrivatePropertiesNoMagnoliaUser() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |