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")