From: <svn...@os...> - 2012-04-16 03:06:44
|
Author: bencaradocdavies Date: 2012-04-15 20:06:37 -0700 (Sun, 15 Apr 2012) New Revision: 38674 Modified: branches/2.7.x/modules/library/main/src/main/java/org/geotools/filter/function/StaticGeometry.java branches/2.7.x/modules/library/main/src/test/java/org/geotools/filter/function/StringFunctionTest.java Log: GEOT-4103: Can't select last character with OCQL strSubstring() Modified: branches/2.7.x/modules/library/main/src/main/java/org/geotools/filter/function/StaticGeometry.java =================================================================== --- branches/2.7.x/modules/library/main/src/main/java/org/geotools/filter/function/StaticGeometry.java 2012-04-16 03:06:09 UTC (rev 38673) +++ branches/2.7.x/modules/library/main/src/main/java/org/geotools/filter/function/StaticGeometry.java 2012-04-16 03:06:37 UTC (rev 38674) @@ -546,14 +546,14 @@ static public String strSubstring(String s1, Integer beg, Integer end) { if (s1 == null || beg == null || end == null) return null; - if (beg < 0 || end < 0 || beg >= s1.length() || end >= s1.length()) return null; + if (beg < 0 || end > s1.length() || beg > end) return null; return s1.substring(beg,end); } static public String strSubstringStart(String s1, Integer beg) { if (s1 == null || beg == null) return null; - if (beg < 0 || beg >= s1.length()) return null; + if (beg < 0 || beg > s1.length()) return null; return s1.substring(beg); } Modified: branches/2.7.x/modules/library/main/src/test/java/org/geotools/filter/function/StringFunctionTest.java =================================================================== --- branches/2.7.x/modules/library/main/src/test/java/org/geotools/filter/function/StringFunctionTest.java 2012-04-16 03:06:09 UTC (rev 38673) +++ branches/2.7.x/modules/library/main/src/test/java/org/geotools/filter/function/StringFunctionTest.java 2012-04-16 03:06:37 UTC (rev 38674) @@ -17,6 +17,7 @@ package org.geotools.filter.function; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNull; import org.geotools.factory.CommonFactoryFinder; import org.junit.Test; @@ -91,4 +92,70 @@ assertEquals("4", ff.function("strPosition", ff.literal("l"), ff.literal("hello"), ff.literal("backToFront")).evaluate(null, String.class)); } + + @Test + public void testStrSubstring() throws Exception { + // test bad ranges return null + assertNull(ff.function("strSubstring", ff.literal("ABCD"), ff.literal(-1), ff.literal(2)) + .evaluate(null)); + assertNull(ff.function("strSubstring", ff.literal("ABCD"), ff.literal(2), ff.literal(5)) + .evaluate(null)); + assertNull(ff.function("strSubstring", ff.literal("ABCD"), ff.literal(3), ff.literal(2)) + .evaluate(null)); + // test empty string input + assertEquals("", ff.function("strSubstring", ff.literal(""), ff.literal(0), ff.literal(0)) + .evaluate(null)); + // test empty string output + assertEquals("", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(0), ff.literal(0)) + .evaluate(null)); + assertEquals("", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(2), ff.literal(2)) + .evaluate(null)); + assertEquals("", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(4), ff.literal(4)) + .evaluate(null)); + // test non-empty substrings + assertEquals("ABCD", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(0), ff.literal(4)) + .evaluate(null)); + assertEquals("A", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(0), ff.literal(1)) + .evaluate(null)); + assertEquals("AB", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(0), ff.literal(2)) + .evaluate(null)); + assertEquals("BC", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(1), ff.literal(3)) + .evaluate(null)); + assertEquals("CD", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(2), ff.literal(4)) + .evaluate(null)); + assertEquals("D", + ff.function("strSubstring", ff.literal("ABCD"), ff.literal(3), ff.literal(4)) + .evaluate(null)); + } + + @Test + public void testStrSubstringStart() throws Exception { + // test bad index returns null + assertNull(ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(-1)).evaluate( + null)); + assertNull(ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(5)).evaluate( + null)); + // test empty string input + assertEquals("", + ff.function("strSubstringStart", ff.literal(""), ff.literal(0)).evaluate(null)); + // test empty string output + assertEquals("", ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(4)) + .evaluate(null)); + // test non-empty substrings + assertEquals("ABCD", ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(0)) + .evaluate(null)); + assertEquals("CD", ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(2)) + .evaluate(null)); + assertEquals("D", ff.function("strSubstringStart", ff.literal("ABCD"), ff.literal(3)) + .evaluate(null)); + } + } |