This is an automated email from the ASF dual-hosted git repository. jeb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 1afc12f1e3468a972f8527005b92faaf3c4654f3 Author: Jason E Bailey <[email protected]> AuthorDate: Fri Jun 8 14:31:52 2018 -0400 conforming to formatting standards --- .../sling/resource/filter/ResourceFilter.java | 2 +- .../filter/api/ResourceFilterFunction.java | 2 +- .../filter/api/impl/ComparisonVisitor.java | 2 +- .../filter/api/impl/ResourceFactoryImpl.java | 4 +- .../resource/filter/ResourceFilterArgTest.java | 12 +- .../resource/filter/ResourceFilterDateTest.java | 140 +++---- .../resource/filter/ResourceFilterLogicTest.java | 60 ++- .../sling/resource/filter/ResourceFilterTest.java | 463 +++++++++++---------- 8 files changed, 341 insertions(+), 344 deletions(-) diff --git a/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java b/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java index 4dd517e..a752032 100644 --- a/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java +++ b/resource-filter/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java @@ -54,7 +54,7 @@ public class ResourceFilter implements Predicate<Resource> { this.context = context; return this; } - + public ResourceFilter addArgument(String key, Object value) { getContext().addArgument(key, value); return this; diff --git a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/ResourceFilterFunction.java b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/ResourceFilterFunction.java index c5b2747..1633bc1 100644 --- a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/ResourceFilterFunction.java +++ b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/ResourceFilterFunction.java @@ -36,7 +36,7 @@ public interface ResourceFilterFunction extends BiFunction<Object[], Resource, O * used as part of a comparison or Function */ Object apply(Object[] arguments, Resource resource); - + /** * Allows the name of the function to be defined * diff --git a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ComparisonVisitor.java b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ComparisonVisitor.java index 6ac0cf0..de87c16 100644 --- a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ComparisonVisitor.java +++ b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ComparisonVisitor.java @@ -48,7 +48,7 @@ public class ComparisonVisitor implements Visitor<Function<Resource, Object>> { @Override public Function<Resource, Object> visit(Node node) { - + switch (node.kind) { case FilterParserConstants.FUNCTION_NAME: // will only get here in the case of the 'FUNCTION' switch case diff --git a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ResourceFactoryImpl.java b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ResourceFactoryImpl.java index a206b79..c2ef533 100644 --- a/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ResourceFactoryImpl.java +++ b/resource-filter/src/main/java/org/apache/sling/resource/filter/api/impl/ResourceFactoryImpl.java @@ -30,7 +30,7 @@ public class ResourceFactoryImpl implements ResourceFilterFactory { @Reference List<ResourceFilterFunction> functions; - + protected final Logger log = LoggerFactory.getLogger(getClass()); @Override @@ -38,7 +38,7 @@ public class ResourceFactoryImpl implements ResourceFilterFactory { try { ResourceFilter filter = new ResourceFilter(script); Context context = filter.getContext(); - for (ResourceFilterFunction func: functions) { + for (ResourceFilterFunction func : functions) { context.addArgument(func.getName(), func); } } catch (ParseException e) { diff --git a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java index 585a37a..cfb0017 100644 --- a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java +++ b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java @@ -41,20 +41,19 @@ public class ResourceFilterArgTest { @Test public void testMatchingNameInArg() throws Exception { ResourceFilter filter = new ResourceFilter("[jcr:content/jcr:title] == $lang") - .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian"); + .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian"); List<Resource> found = handle(START_PATH, filter); assertEquals(1, found.size()); } - + @Test public void testMatchingNameAndMultipleArgs() throws Exception { - ResourceFilter filter = new ResourceFilter( - "[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang") - .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian"); + ResourceFilter filter = new ResourceFilter("[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang") + .addArgument("date", "2013-08-08T16:32:59").addArgument("lang", "Mongolian"); List<Resource> found = handle(START_PATH, filter); assertEquals(1, found.size()); } - + @Test public void testNameFunctionAgainstRegex() throws ParseException, Exception { ResourceFilter query = new ResourceFilter("name() like $regex").addArgument("regex", "testpage[1-2]"); @@ -67,5 +66,4 @@ public class ResourceFilterArgTest { return new ResourceStream(resource).stream(r -> true).filter(filter).collect(Collectors.toList()); } - } diff --git a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java index 7937fba..69eb00c 100644 --- a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java +++ b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterDateTest.java @@ -28,74 +28,74 @@ import org.junit.Test; public class ResourceFilterDateTest { - @Rule - public final SlingContext context = new SlingContext(); - - private static String START_PATH = "/content/sample/en"; - - @Before - public void setUp() throws ParseException, java.text.ParseException { - context.load().json("/data.json", "/content/sample/en"); - } - - @Test - public void testPropLessThanDateFunction() throws ParseException { - String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00')"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] < 2013-08-08T16:32:59.000"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] < 2013-08-08T16:32"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] < date('2013-08-08','yyyy-MM-dd')"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] less than 2013-08-07T14:32:59"; - found = handle(START_PATH, query); - assertEquals(2, found.size()); - - query = "[jcr:content/created] <= 2013-08-07T14:32:59"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] <= 2013-08-07T14:32"; - found = handle(START_PATH, query); - assertEquals(2, found.size()); - - query = "[jcr:content/created] < 2013-08-07T14:32:59.010"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] > 2013-08-07T14:32"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] greater than 2013-08-07T14:32:59"; - found = handle(START_PATH, query); - assertEquals(2, found.size()); - - query = "[jcr:content/created] >= 2013-08-07T14:32:59"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); - - query = "[jcr:content/created] like '2013-08-07.*'"; - found = handle(START_PATH, query); - assertEquals(1, found.size()); - - query = "[jcr:content/created] like '201[2-5].*'"; - found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - - private List<Resource> handle(String path, String filter) throws ParseException { - Resource resource = context.resourceResolver().getResource(path); - return new ResourceFilterStream(resource).stream(r -> true).filter(new ResourceFilter(filter)).collect(Collectors.toList()); - } + @Rule + public final SlingContext context = new SlingContext(); + + private static String START_PATH = "/content/sample/en"; + + @Before + public void setUp() throws ParseException, java.text.ParseException { + context.load().json("/data.json", "/content/sample/en"); + } + + @Test + public void testPropLessThanDateFunction() throws ParseException { + String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00')"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] < 2013-08-08T16:32:59.000"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] < 2013-08-08T16:32"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] < date('2013-08-08','yyyy-MM-dd')"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] less than 2013-08-07T14:32:59"; + found = handle(START_PATH, query); + assertEquals(2, found.size()); + + query = "[jcr:content/created] <= 2013-08-07T14:32:59"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] <= 2013-08-07T14:32"; + found = handle(START_PATH, query); + assertEquals(2, found.size()); + + query = "[jcr:content/created] < 2013-08-07T14:32:59.010"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] > 2013-08-07T14:32"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] greater than 2013-08-07T14:32:59"; + found = handle(START_PATH, query); + assertEquals(2, found.size()); + + query = "[jcr:content/created] >= 2013-08-07T14:32:59"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] like '2013-08-07.*'"; + found = handle(START_PATH, query); + assertEquals(1, found.size()); + + query = "[jcr:content/created] like '201[2-5].*'"; + found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + private List<Resource> handle(String path, String filter) throws ParseException { + Resource resource = context.resourceResolver().getResource(path); + return new ResourceFilterStream(resource).stream(r -> true).filter(new ResourceFilter(filter)) + .collect(Collectors.toList()); + } } diff --git a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java index 470c15a..99f6591 100644 --- a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java +++ b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterLogicTest.java @@ -28,40 +28,38 @@ import org.junit.Test; public class ResourceFilterLogicTest { - @Rule - public final SlingContext context = new SlingContext(); - - private static String START_PATH = "/content/sample/en"; - + @Rule + public final SlingContext context = new SlingContext(); - @Before - public void setUp() throws ParseException, java.text.ParseException { - context.load().json("/data.json", START_PATH); - } + private static String START_PATH = "/content/sample/en"; - - @Test - public void testDateAndProperty() throws ParseException { - String query = "[jcr:content/created] > '2013-08-08T16:32:59' and [jcr:content/jcr:title] == 'Mongolian'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); + @Before + public void setUp() throws ParseException, java.text.ParseException { + context.load().json("/data.json", START_PATH); + } - query = "([jcr:content/created] < '2013-08-08T16:32' and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'"; - found = handle(START_PATH, query); - assertEquals(4, found.size()); + @Test + public void testDateAndProperty() throws ParseException { + String query = "[jcr:content/created] > '2013-08-08T16:32:59' and [jcr:content/jcr:title] == 'Mongolian'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); - query = "[jcr:content/created] < '2013-08-08T16:32' and ([jcr:content/jcr:title] == 'English' or [jcr:content/jcr:title] == 'Mongolian')"; - found = handle(START_PATH, query); - assertEquals(3, found.size()); + query = "([jcr:content/created] < '2013-08-08T16:32' and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'"; + found = handle(START_PATH, query); + assertEquals(4, found.size()); - query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'"; - found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - - private List<Resource> handle(String path, String filter) throws ParseException { - Resource resource = context.resourceResolver().getResource(path); - return new ResourceFilterStream(resource).stream(r -> true).filter(new ResourceFilter(filter)).collect(Collectors.toList()); - } + query = "[jcr:content/created] < '2013-08-08T16:32' and ([jcr:content/jcr:title] == 'English' or [jcr:content/jcr:title] == 'Mongolian')"; + found = handle(START_PATH, query); + assertEquals(3, found.size()); + + query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'"; + found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + private List<Resource> handle(String path, String filter) throws ParseException { + Resource resource = context.resourceResolver().getResource(path); + return new ResourceFilterStream(resource).stream(r -> true).filter(new ResourceFilter(filter)) + .collect(Collectors.toList()); + } } diff --git a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java index f57f7a2..1fc6cc8 100644 --- a/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java +++ b/resource-filter/src/test/java/org/apache/sling/resource/filter/ResourceFilterTest.java @@ -32,235 +32,236 @@ import org.junit.Test; public class ResourceFilterTest { - @Rule - public final SlingContext context = new SlingContext(); - - private static String START_PATH = "/content/sample/en"; - private Date midPoint; - - private static String DATE_STRING = "Thu Aug 07 2013 16:32:59 GMT+0200"; - private static String NEW_DATE = "2013-08-08T16:32:59.000+02:00"; - private static String DATE_FORMAT = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z"; - - @Before - public void setUp() throws ParseException, java.text.ParseException { - context.load().json("/data.json", "/content/sample/en"); - midPoint = new SimpleDateFormat(DATE_FORMAT).parse(DATE_STRING); - } - - @Test - public void testPropertyEquals() throws ParseException { - String query = "[jcr:content/jcr:title] == 'English'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testPropertyIs() throws ParseException { - String query = "[jcr:content/jcr:title] is 'English'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testDateBeforeValue() throws ParseException { - String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00')"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - } - - @Test - public void testDateBeforeValue2() throws ParseException { - String query = "[jcr:content/created] less than date('2013-08-08T16:32:59.000+02:00')"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - } - - @Test - public void testDateBeforeValue3() throws ParseException { - String query = "[jcr:content/created] < date('2013-08-08','yyyy-MM-dd')"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - } - - @Test - public void testDateAndProperty() throws ParseException { - String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - } - - @Test - public void testDateAndPropertyTwice() throws ParseException { - String query = "([jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testDateOrProperty() throws ParseException { - String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testDateAsString() throws ParseException { - String query = "[jcr:content/created] < '2013-08-08T16:32'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(3, found.size()); - } - - @Test - public void testNullPropertyAndLimit() throws ParseException { - String query = "[jcr:content/foo] == null "; - Resource resource = context.resourceResolver().getResource(START_PATH); - List<Resource> found = new ResourceStream(resource).stream(r -> true).filter(new ResourceFilter(query)).limit(3).collect(Collectors.toList()); - assertEquals(3, found.size()); - } - - @Test - public void testNullProperty() throws ParseException { - String query = "[jcr:content/foo] == null "; - List<Resource> found = handle(START_PATH, query); - assertEquals(20, found.size()); - } - - @Test - public void testNumberLiteral() throws ParseException { - String query = "[count] < 2 "; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testNumberLiteral2() throws ParseException { - String query = "[count] < 2 or [count] > 1"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testNumberLiteral3() throws ParseException { - String query = "[views] < 7 "; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testNotNullProperty() throws ParseException { - String query = "[layout] != null "; - List<Resource> found = handle(START_PATH, query); - assertEquals(5, found.size()); - } - - @Test - public void testNotProperty() throws ParseException { - String query = "[layout] != 'foo' "; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testNameFunctionIs() throws ParseException { - String query = "name() == 'testpage1'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testNameFunctionAgainstRegex() throws ParseException { - String query = "name() like 'testpage.*'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testNameFunctionAgainstRegex2() throws ParseException { - String query = "name() like 'testpage[1-2]'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(2, found.size()); - } - - @Test - public void testChildExistence() throws ParseException { - String query = "name() == 'testpage3' "; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testBoolean() throws ParseException { - String query = "[published] == true"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testContains() throws ParseException { - String query = "[jcr:content/monkey] contains 'fish'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testContainsNot() throws ParseException { - String query = "[jcr:content/monkey] contains not 'fish'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(19, found.size()); - } - - @Test - public void testIn() throws ParseException { - String query = "'fish' in [jcr:content/monkey]"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testPathLike() throws ParseException { - String query = "path() like '/content/sample/en/testpage1.*'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(4, found.size()); - } - - @Test - public void testPathLike2() throws ParseException { - String query = "path() like '/content/sample/en/testpage1'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testPathLike3() throws ParseException { - String query = "path() is '/content/sample/en/testpage1'"; - List<Resource> found = handle(START_PATH, query); - assertEquals(1, found.size()); - } - - @Test - public void testNotIn() throws ParseException { - String query = "'fish' not in [jcr:content/monkey]"; - List<Resource> found = handle(START_PATH, query); - assertEquals(19, found.size()); - } - - @Test - public void testInNotException() throws ParseException { - ParseException error = null; - try { - String query = "'fish' in not [jcr:content/monkey]"; - handle(START_PATH, query); - } catch (ParseException e) { - error = e; - } - assert (error.getMessage() - .startsWith("Encountered \" <PROPERTY> \"jcr:content/monkey \"\" at line 1, column 15.")); - } - - private List<Resource> handle(String path, String filter) throws ParseException { - Resource resource = context.resourceResolver().getResource(path); - Predicate<Resource> f = new ResourceFilter(filter); - return new ResourceStream(resource).stream(r -> true).filter(f).collect(Collectors.toList()); - } + @Rule + public final SlingContext context = new SlingContext(); + + private static String START_PATH = "/content/sample/en"; + private Date midPoint; + + private static String DATE_STRING = "Thu Aug 07 2013 16:32:59 GMT+0200"; + private static String NEW_DATE = "2013-08-08T16:32:59.000+02:00"; + private static String DATE_FORMAT = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z"; + + @Before + public void setUp() throws ParseException, java.text.ParseException { + context.load().json("/data.json", "/content/sample/en"); + midPoint = new SimpleDateFormat(DATE_FORMAT).parse(DATE_STRING); + } + + @Test + public void testPropertyEquals() throws ParseException { + String query = "[jcr:content/jcr:title] == 'English'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testPropertyIs() throws ParseException { + String query = "[jcr:content/jcr:title] is 'English'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testDateBeforeValue() throws ParseException { + String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00')"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + } + + @Test + public void testDateBeforeValue2() throws ParseException { + String query = "[jcr:content/created] less than date('2013-08-08T16:32:59.000+02:00')"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + } + + @Test + public void testDateBeforeValue3() throws ParseException { + String query = "[jcr:content/created] < date('2013-08-08','yyyy-MM-dd')"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + } + + @Test + public void testDateAndProperty() throws ParseException { + String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + } + + @Test + public void testDateAndPropertyTwice() throws ParseException { + String query = "([jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') and [jcr:content/jcr:title] == 'English') or [jcr:content/jcr:title] == 'Mongolian'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testDateOrProperty() throws ParseException { + String query = "[jcr:content/created] < date('2013-08-08T16:32:59.000+02:00') or [jcr:content/jcr:title] == 'Mongolian'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testDateAsString() throws ParseException { + String query = "[jcr:content/created] < '2013-08-08T16:32'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(3, found.size()); + } + + @Test + public void testNullPropertyAndLimit() throws ParseException { + String query = "[jcr:content/foo] == null "; + Resource resource = context.resourceResolver().getResource(START_PATH); + List<Resource> found = new ResourceStream(resource).stream(r -> true).filter(new ResourceFilter(query)).limit(3) + .collect(Collectors.toList()); + assertEquals(3, found.size()); + } + + @Test + public void testNullProperty() throws ParseException { + String query = "[jcr:content/foo] == null "; + List<Resource> found = handle(START_PATH, query); + assertEquals(20, found.size()); + } + + @Test + public void testNumberLiteral() throws ParseException { + String query = "[count] < 2 "; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testNumberLiteral2() throws ParseException { + String query = "[count] < 2 or [count] > 1"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testNumberLiteral3() throws ParseException { + String query = "[views] < 7 "; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testNotNullProperty() throws ParseException { + String query = "[layout] != null "; + List<Resource> found = handle(START_PATH, query); + assertEquals(5, found.size()); + } + + @Test + public void testNotProperty() throws ParseException { + String query = "[layout] != 'foo' "; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testNameFunctionIs() throws ParseException { + String query = "name() == 'testpage1'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testNameFunctionAgainstRegex() throws ParseException { + String query = "name() like 'testpage.*'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testNameFunctionAgainstRegex2() throws ParseException { + String query = "name() like 'testpage[1-2]'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(2, found.size()); + } + + @Test + public void testChildExistence() throws ParseException { + String query = "name() == 'testpage3' "; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testBoolean() throws ParseException { + String query = "[published] == true"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testContains() throws ParseException { + String query = "[jcr:content/monkey] contains 'fish'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testContainsNot() throws ParseException { + String query = "[jcr:content/monkey] contains not 'fish'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(19, found.size()); + } + + @Test + public void testIn() throws ParseException { + String query = "'fish' in [jcr:content/monkey]"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testPathLike() throws ParseException { + String query = "path() like '/content/sample/en/testpage1.*'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(4, found.size()); + } + + @Test + public void testPathLike2() throws ParseException { + String query = "path() like '/content/sample/en/testpage1'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testPathLike3() throws ParseException { + String query = "path() is '/content/sample/en/testpage1'"; + List<Resource> found = handle(START_PATH, query); + assertEquals(1, found.size()); + } + + @Test + public void testNotIn() throws ParseException { + String query = "'fish' not in [jcr:content/monkey]"; + List<Resource> found = handle(START_PATH, query); + assertEquals(19, found.size()); + } + + @Test + public void testInNotException() throws ParseException { + ParseException error = null; + try { + String query = "'fish' in not [jcr:content/monkey]"; + handle(START_PATH, query); + } catch (ParseException e) { + error = e; + } + assert (error.getMessage() + .startsWith("Encountered \" <PROPERTY> \"jcr:content/monkey \"\" at line 1, column 15.")); + } + + private List<Resource> handle(String path, String filter) throws ParseException { + Resource resource = context.resourceResolver().getResource(path); + Predicate<Resource> f = new ResourceFilter(filter); + return new ResourceStream(resource).stream(r -> true).filter(f).collect(Collectors.toList()); + } } -- To stop receiving notification emails like this one, please contact [email protected].
