This is an automated email from the ASF dual-hosted git repository.

enorman pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-jcr-mock.git


The following commit(s) were added to refs/heads/master by this push:
     new 81259bd  SLING-11807 mocking-queries whose result iterator size is not 
known (#15)
81259bd is described below

commit 81259bd8237a6ff63ce8ac1f76a39ce237c21159
Author: Eric Norman <[email protected]>
AuthorDate: Mon Mar 20 15:54:42 2023 -0700

    SLING-11807 mocking-queries whose result iterator size is not known (#15)
---
 .../org/apache/sling/testing/mock/jcr/MockJcr.java | 80 ++++++++++++++----
 .../sling/testing/mock/jcr/MockQueryResult.java    | 11 ++-
 .../sling/testing/mock/jcr/package-info.java       |  2 +-
 .../testing/mock/jcr/MockQueryManagerTest.java     | 97 +++++++++++++++++++---
 4 files changed, 160 insertions(+), 30 deletions(-)

diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java 
b/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
index df1cb3c..c9f0871 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
@@ -99,17 +99,39 @@ public final class MockJcr {
         setQueryResult(getQueryManager(session), resultList);
     }
 
+    /**
+     * Sets the expected result list for all queries executed with the given 
query manager.
+     * @param session JCR session
+     * @param resultList Result list
+     * @param simulateUnknownSize true to simulate the result iterator having 
an unknown size
+     */
+    public static void setQueryResult(@NotNull final Session session, @NotNull 
final List<Node> resultList,
+            boolean simulateUnknownSize) {
+        setQueryResult(getQueryManager(session), resultList, 
simulateUnknownSize);
+    }
+
+
     /**
      * Sets the expected result list for all queries executed with the given 
query manager.
      * @param queryManager Mocked query manager
      * @param resultList Result list
      */
     public static void setQueryResult(@NotNull final QueryManager 
queryManager, @NotNull final List<Node> resultList) {
-        addQueryResultHandler(queryManager, new MockQueryResultHandler() {
-            @Override
-            public MockQueryResult executeQuery(MockQuery query) {
-                return new MockQueryResult(resultList);
-            }
+        setQueryResult(queryManager, resultList, false);
+    }
+
+    /**
+     * Sets the expected result list for all queries executed with the given 
query manager.
+     * @param queryManager Mocked query manager
+     * @param resultList Result list
+     * @param simulateUnknownSize true to simulate the result iterator having 
an unknown size
+     */
+    public static void setQueryResult(@NotNull final QueryManager 
queryManager, @NotNull final List<Node> resultList,
+            boolean simulateUnknownSize) {
+        addQueryResultHandler(queryManager, query -> {
+            MockQueryResult result = new MockQueryResult(resultList);
+            result.setSimulateUnknownSize(simulateUnknownSize);
+            return result;
         });
     }
 
@@ -122,7 +144,21 @@ public final class MockJcr {
      */
     public static void setQueryResult(@NotNull final Session session, @NotNull 
final String statement,
             @NotNull final String language, @NotNull final List<Node> 
resultList) {
-        setQueryResult(getQueryManager(session), statement, language, 
resultList);
+        setQueryResult(session, statement, language, resultList, false);
+    }
+
+    /**
+     * Sets the expected result list for all queries with the given statement 
executed with the given query manager.
+     * @param session JCR session
+     * @param statement Query statement
+     * @param language Query language
+     * @param resultList Result list
+     * @param simulateUnknownSize true to simulate the result iterator having 
an unknown size
+     */
+    public static void setQueryResult(@NotNull final Session session, @NotNull 
final String statement,
+            @NotNull final String language, @NotNull final List<Node> 
resultList,
+            boolean simulateUnknownSize) {
+        setQueryResult(getQueryManager(session), statement, language, 
resultList, simulateUnknownSize);
     }
 
     /**
@@ -134,16 +170,28 @@ public final class MockJcr {
      */
     public static void setQueryResult(@NotNull final QueryManager 
queryManager, @NotNull final String statement,
             @NotNull final String language, @NotNull final List<Node> 
resultList) {
-        addQueryResultHandler(queryManager, new MockQueryResultHandler() {
-            @Override
-            public MockQueryResult executeQuery(MockQuery query) {
-                if (StringUtils.equals(query.getStatement(), statement)
-                        && StringUtils.equals(query.getLanguage(), language)) {
-                    return new MockQueryResult(resultList);
-                }
-                else {
-                    return null;
-                }
+        setQueryResult(queryManager, statement, language, resultList, false);
+    }
+    /**
+     * Sets the expected result list for all queries with the given statement 
executed with the given query manager.
+     * @param queryManager Mocked query manager
+     * @param statement Query statement
+     * @param language Query language
+     * @param resultList Result list
+     * @param simulateUnknownSize true to simulate the result iterator having 
an unknown size
+     */
+    public static void setQueryResult(@NotNull final QueryManager 
queryManager, @NotNull final String statement,
+            @NotNull final String language, @NotNull final List<Node> 
resultList,
+            boolean simulateUnknownSize) {
+        addQueryResultHandler(queryManager, query -> {
+            if (StringUtils.equals(query.getStatement(), statement)
+                    && StringUtils.equals(query.getLanguage(), language)) {
+                MockQueryResult mockQueryResult = new 
MockQueryResult(resultList);
+                mockQueryResult.setSimulateUnknownSize(simulateUnknownSize);
+                return mockQueryResult;
+            }
+            else {
+                return null;
             }
         });
     }
diff --git 
a/src/main/java/org/apache/sling/testing/mock/jcr/MockQueryResult.java 
b/src/main/java/org/apache/sling/testing/mock/jcr/MockQueryResult.java
index 4306c4b..f0099ae 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/MockQueryResult.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockQueryResult.java
@@ -41,6 +41,7 @@ public final class MockQueryResult implements QueryResult {
 
     private final List<Node> nodes;
     private final List<String> columnNames;
+    private boolean simulateUnknownSize;
 
     public MockQueryResult(List<Node> nodes) {
         this(nodes, Collections.emptyList());
@@ -51,6 +52,10 @@ public final class MockQueryResult implements QueryResult {
         this.nodes = nodes;
     }
 
+    public void setSimulateUnknownSize(boolean simulateUnknownSize) {
+        this.simulateUnknownSize = simulateUnknownSize;
+    }
+
     @Override
     public String[] getColumnNames() throws RepositoryException {
         return columnNames.toArray(new String[columnNames.size()]);
@@ -65,7 +70,11 @@ public final class MockQueryResult implements QueryResult {
 
     @Override
     public NodeIterator getNodes() throws RepositoryException {
-        return new NodeIteratorAdapter(nodes);
+        if (simulateUnknownSize) {
+            return new NodeIteratorAdapter(nodes.iterator(), -1);
+        } else {
+            return new NodeIteratorAdapter(nodes);
+        }
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/package-info.java 
b/src/main/java/org/apache/sling/testing/mock/jcr/package-info.java
index 76b9bb0..d4d3b89 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected JCR APIs.
  */
[email protected]("1.0.2")
[email protected]("1.1.0")
 package org.apache.sling.testing.mock.jcr;
diff --git 
a/src/test/java/org/apache/sling/testing/mock/jcr/MockQueryManagerTest.java 
b/src/test/java/org/apache/sling/testing/mock/jcr/MockQueryManagerTest.java
index 3bc6a31..bebb827 100644
--- a/src/test/java/org/apache/sling/testing/mock/jcr/MockQueryManagerTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockQueryManagerTest.java
@@ -78,11 +78,39 @@ public class MockQueryManagerTest {
         queryManager.createQuery("dummy", "wurst");
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testQueryResults_AllQuerys() throws RepositoryException {
         MockJcr.setQueryResult(queryManager, sampleNodes);
 
+        QueryResult result = assertQueryResults_AllQuerys();
+        assertEquals(sampleNodes.size(), result.getNodes().getSize());
+    }
+    @Test
+    public void testQueryResultsForSession_AllQuerys() throws 
RepositoryException {
+        MockJcr.setQueryResult(session, sampleNodes);
+
+        QueryResult result = assertQueryResults_AllQuerys();
+        assertEquals(sampleNodes.size(), result.getNodes().getSize());
+    }
+
+    // SLING-11807
+    @Test
+    public void testQueryResults_AllQuerys_WithUnknownSize() throws 
RepositoryException {
+        MockJcr.setQueryResult(queryManager, sampleNodes, true);
+
+        QueryResult result = assertQueryResults_AllQuerys();
+        assertEquals(-1, result.getNodes().getSize());
+    }
+    @Test
+    public void testQueryResultsForSession_AllQuerys_WithUnknownSize() throws 
RepositoryException {
+        MockJcr.setQueryResult(session, sampleNodes, true);
+
+        QueryResult result = assertQueryResults_AllQuerys();
+        assertEquals(-1, result.getNodes().getSize());
+    }
+
+    @SuppressWarnings("unchecked")
+    protected QueryResult assertQueryResults_AllQuerys() throws 
InvalidQueryException, RepositoryException {
         Query query = queryManager.createQuery("query1", Query.JCR_SQL2);
         QueryResult result = query.execute();
         assertEquals(sampleNodes, ImmutableList.copyOf(result.getNodes()));
@@ -90,20 +118,51 @@ public class MockQueryManagerTest {
         query = queryManager.createQuery("query2", Query.JCR_SQL2);
         result = query.execute();
         assertEquals(sampleNodes, ImmutableList.copyOf(result.getNodes()));
+        return result;
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testQueryResults_SpecificQuery() throws RepositoryException {
         MockJcr.setQueryResult(queryManager, "query1", Query.JCR_SQL2, 
sampleNodes);
 
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(sampleNodes.size(), result.getNodes().getSize());
+    }
+    @Test
+    public void testQueryResultsForSession_SpecificQuery() throws 
RepositoryException {
+        MockJcr.setQueryResult(session, "query1", Query.JCR_SQL2, sampleNodes);
+
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(sampleNodes.size(), result.getNodes().getSize());
+    }
+
+    // SLING-11807
+    @Test
+    public void testQueryResults_SpecificQuery_WithUnknownSize() throws 
RepositoryException {
+        MockJcr.setQueryResult(queryManager, "query1", Query.JCR_SQL2, 
sampleNodes, true);
+
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(-1, result.getNodes().getSize());
+    }
+    @Test
+    public void testQueryResultsForSession_SpecificQuery_WithUnknownSize() 
throws RepositoryException {
+        MockJcr.setQueryResult(session, "query1", Query.JCR_SQL2, sampleNodes, 
true);
+
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(-1, result.getNodes().getSize());
+    }
+
+    @SuppressWarnings("unchecked")
+    protected QueryResult assertQueryResults_SpecificQuery() throws 
InvalidQueryException, RepositoryException {
         Query query = queryManager.createQuery("query1", Query.JCR_SQL2);
-        QueryResult result = query.execute();
-        assertEquals(sampleNodes, ImmutableList.copyOf(result.getNodes()));
+        QueryResult result1 = query.execute();
+        assertEquals(sampleNodes, ImmutableList.copyOf(result1.getNodes()));
 
         query = queryManager.createQuery("query2", Query.JCR_SQL2);
-        result = query.execute();
-        assertFalse(result.getNodes().hasNext());
+        QueryResult result2 = query.execute();
+        assertFalse(result2.getNodes().hasNext());
+
+        return result1;
     }
 
     @SuppressWarnings("unchecked")
@@ -119,13 +178,27 @@ public class MockQueryManagerTest {
             }
         });
 
-        Query query = queryManager.createQuery("query1", Query.JCR_SQL2);
-        QueryResult result = query.execute();
-        assertEquals(sampleNodes, ImmutableList.copyOf(result.getNodes()));
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(sampleNodes.size(), result.getNodes().getSize());
+    }
 
-        query = queryManager.createQuery("query2", Query.JCR_SQL2);
-        result = query.execute();
-        assertFalse(result.getNodes().hasNext());
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testQueryResults_ResultHandler_WithUnknownSize() throws 
RepositoryException {
+        MockJcr.addQueryResultHandler(queryManager, new 
MockQueryResultHandler() {
+            @Override
+            public MockQueryResult executeQuery(MockQuery query) {
+                if (StringUtils.equals(query.getStatement(), "query1")) {
+                    MockQueryResult mockQueryResult = new 
MockQueryResult(sampleNodes);
+                    mockQueryResult.setSimulateUnknownSize(true);
+                    return mockQueryResult;
+                }
+                return null;
+            }
+        });
+
+        QueryResult result = assertQueryResults_SpecificQuery();
+        assertEquals(-1, result.getNodes().getSize());
     }
 
     @SuppressWarnings("unchecked")

Reply via email to