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-resourceresolver-mock.git
The following commit(s) were added to refs/heads/master by this push:
new f88867e SLING-12867 Update to Sling API 3 (#22)
f88867e is described below
commit f88867ef43788cbe0b7b0e85ed6151b9b2c8d00c
Author: Eric Norman <[email protected]>
AuthorDate: Thu Aug 21 13:22:31 2025 -0700
SLING-12867 Update to Sling API 3 (#22)
---
pom.xml | 20 ++++-
.../resourceresolver/MockResourceResolver.java | 72 ++++++++++++-----
.../testing/resourceresolver/package-info.java | 2 +-
.../resourceresolver/FindQueryResourcesTest.java | 10 +--
.../resourceresolver/MockResourceResolverTest.java | 90 ++++++++++++++++++++++
5 files changed, 163 insertions(+), 31 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2d4076a..ea0c0fa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
</parent>
<artifactId>org.apache.sling.testing.resourceresolver-mock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<name>Apache Sling Testing Resource Resolver Mock</name>
<description>Mock for the resource resolver / factory for easier
testing.</description>
@@ -42,7 +42,7 @@
<properties>
<project.build.outputTimestamp>2024-08-21T07:40:06Z</project.build.outputTimestamp>
- <sling.java.version>11</sling.java.version>
+ <sling.java.version>17</sling.java.version>
</properties>
<dependencyManagement>
@@ -50,7 +50,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.25.4</version>
+ <version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
@@ -100,6 +100,18 @@
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>jakarta.servlet</groupId>
+ <artifactId>jakarta.servlet-api</artifactId>
+ <version>6.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.wrappers</artifactId>
+ <version>1.1.10</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
@@ -163,7 +175,7 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
- <version>3.13.0</version>
+ <version>3.18.0</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git
a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
index f0f15fe..4af6797 100644
---
a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
+++
b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
@@ -18,8 +18,6 @@
*/
package org.apache.sling.testing.resourceresolver;
-import javax.servlet.http.HttpServletRequest;
-
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Collections;
@@ -36,6 +34,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.regex.Pattern;
+import jakarta.servlet.http.HttpServletRequest;
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.SlingException;
import org.apache.sling.api.adapter.SlingAdaptable;
@@ -46,6 +45,7 @@ import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.service.event.Event;
@@ -55,10 +55,9 @@ public class MockResourceResolver extends SlingAdaptable
implements ResourceReso
private final Map<String, Map<String, Object>> resources;
- private final Map<String, Map<String, Object>> temporaryResources =
- new LinkedHashMap<String, Map<String, Object>>();
+ private final Map<String, Map<String, Object>> temporaryResources = new
LinkedHashMap<>();
- private final Set<String> deletedResources = new HashSet<String>();
+ private final Set<String> deletedResources = new HashSet<>();
private final MockResourceResolverFactoryOptions options;
@@ -86,17 +85,30 @@ public class MockResourceResolver extends SlingAdaptable
implements ResourceReso
this.attributes = attributes;
}
+ /**
+ * @deprecated use {@link
#resolve(jakarta.servlet.http.HttpServletRequest, String)} instead
+ */
+ @Deprecated(since = "2.5.0")
+ @Override
+ public @NotNull Resource resolve(
+ final @NotNull javax.servlet.http.HttpServletRequest request,
final @NotNull String absPath) {
+ HttpServletRequest jakartaRequest =
JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+ return resolve(jakartaRequest, absPath);
+ }
+
@Override
- @SuppressWarnings("unused")
- public @NotNull Resource resolve(final @NotNull HttpServletRequest
request, final @NotNull String absPath) {
+ public @NotNull Resource resolve(@NotNull HttpServletRequest request,
@NotNull String absPath) {
String path = absPath;
- if (path == null) {
+ if (path == null) { // NOSONAR - ResourceResolver javadocs and
annotation are in conflict so allow this
path = "/";
}
- // split off query string or fragment that may be appendend to the URL
+ // split off query string or fragment that may be appended to the URL
String urlRemainder = null;
- int urlRemainderPos = Math.min(path.indexOf('?'), path.indexOf('#'));
+ int urlRemainderPos = path.indexOf('#');
+ if (urlRemainderPos < 0) {
+ urlRemainderPos = path.indexOf('?');
+ }
if (urlRemainderPos >= 0) {
urlRemainder = path.substring(urlRemainderPos);
path = path.substring(0, urlRemainderPos);
@@ -118,24 +130,38 @@ public class MockResourceResolver extends SlingAdaptable
implements ResourceReso
}
@Override
- @SuppressWarnings("null")
+ @SuppressWarnings("java:S2637")
public @NotNull Resource resolve(final @NotNull String absPath) {
- return resolve(null, absPath);
+ return resolve((HttpServletRequest) null, absPath);
}
@Override
- @SuppressWarnings("null")
+ @SuppressWarnings("java:S2637")
public @NotNull String map(final @NotNull String resourcePath) {
- return map(null, resourcePath);
+ return map((HttpServletRequest) null, resourcePath);
+ }
+
+ /**
+ * @deprecated use {@link #map(jakarta.servlet.http.HttpServletRequest,
String)} instead
+ */
+ @Deprecated(since = "2.5.0")
+ @Override
+ public String map(
+ final @NotNull javax.servlet.http.HttpServletRequest request,
final @NotNull String resourcePath) {
+ HttpServletRequest jakartaRequest =
JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+ return map(jakartaRequest, resourcePath);
}
@Override
- public String map(final @NotNull HttpServletRequest request, final
@NotNull String resourcePath) {
+ public @NotNull String map(@NotNull HttpServletRequest request, @NotNull
String resourcePath) {
String path = resourcePath;
- // split off query string or fragment that may be appendend to the URL
+ // split off query string or fragment that may be appended to the URL
String urlRemainder = null;
- int urlRemainderPos = Math.min(path.indexOf('?'), path.indexOf('#'));
+ int urlRemainderPos = path.indexOf('#');
+ if (urlRemainderPos < 0) {
+ urlRemainderPos = path.indexOf('?');
+ }
if (urlRemainderPos >= 0) {
urlRemainder = path.substring(urlRemainderPos);
path = path.substring(0, urlRemainderPos);
@@ -281,9 +307,9 @@ public class MockResourceResolver extends SlingAdaptable
implements ResourceReso
private void clearPropertyMap() {
if (propertyMap != null) {
for (Entry<String, Object> entry : propertyMap.entrySet()) {
- if (entry.getValue() instanceof Closeable) {
+ if (entry.getValue() instanceof Closeable c) {
try {
- ((Closeable) entry.getValue()).close();
+ c.close();
} catch (Exception e) {
// ignore
}
@@ -590,9 +616,13 @@ public class MockResourceResolver extends SlingAdaptable
implements ResourceReso
// --- unsupported operations ---
+ /**
+ * @deprecated as of ResourceResolver 2.0.4, use {@link
#resolve(HttpServletRequest, String)}
+ * instead.
+ */
@Override
- @Deprecated
- public @NotNull Resource resolve(final @NotNull HttpServletRequest
request) {
+ @Deprecated(since = "1.1")
+ public @NotNull Resource resolve(final @NotNull
javax.servlet.http.HttpServletRequest request) {
throw new UnsupportedOperationException();
}
diff --git
a/src/main/java/org/apache/sling/testing/resourceresolver/package-info.java
b/src/main/java/org/apache/sling/testing/resourceresolver/package-info.java
index cc055ba..db60ed0 100644
--- a/src/main/java/org/apache/sling/testing/resourceresolver/package-info.java
+++ b/src/main/java/org/apache/sling/testing/resourceresolver/package-info.java
@@ -19,5 +19,5 @@
/**
* Apache Sling Testing Resource Resolver Mock
*/
[email protected]("2.4.0")
[email protected]("2.5.0")
package org.apache.sling.testing.resourceresolver;
diff --git
a/src/test/java/org/apache/sling/testing/resourceresolver/FindQueryResourcesTest.java
b/src/test/java/org/apache/sling/testing/resourceresolver/FindQueryResourcesTest.java
index 30f6b0d..506ebcc 100644
---
a/src/test/java/org/apache/sling/testing/resourceresolver/FindQueryResourcesTest.java
+++
b/src/test/java/org/apache/sling/testing/resourceresolver/FindQueryResourcesTest.java
@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.Strings;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -111,8 +111,8 @@ public class FindQueryResourcesTest {
List<Resource> expected2 = List.of(resource2);
ResourceResolver resourceResolver =
createResourceResolver_addFindResourceHandlers(
- (query, language) -> StringUtils.equals(query, "q1") ?
expected1.iterator() : null,
- (query, language) -> StringUtils.equals(query, "q2") ?
expected2.iterator() : null);
+ (query, language) -> Strings.CS.equals(query, "q1") ?
expected1.iterator() : null,
+ (query, language) -> Strings.CS.equals(query, "q2") ?
expected2.iterator() : null);
assertResources(expected1, resourceResolver.findResources("q1",
JCR_SQL2));
assertResources(expected2, resourceResolver.findResources("q2",
JCR_SQL2));
@@ -140,8 +140,8 @@ public class FindQueryResourcesTest {
List<Map<String, Object>> expected2 = List.of(resource2.getValueMap());
ResourceResolver resourceResolver =
createResourceResolver_addQueryResourceHandlers(
- (query, language) -> StringUtils.equals(query, "q1") ?
expected1.iterator() : null,
- (query, language) -> StringUtils.equals(query, "q2") ?
expected2.iterator() : null);
+ (query, language) -> Strings.CS.equals(query, "q1") ?
expected1.iterator() : null,
+ (query, language) -> Strings.CS.equals(query, "q2") ?
expected2.iterator() : null);
assertEquals(expected1,
IteratorUtils.toList(resourceResolver.queryResources("q1", JCR_SQL2)));
assertEquals(expected2,
IteratorUtils.toList(resourceResolver.queryResources("q2", JCR_SQL2)));
diff --git
a/src/test/java/org/apache/sling/testing/resourceresolver/MockResourceResolverTest.java
b/src/test/java/org/apache/sling/testing/resourceresolver/MockResourceResolverTest.java
new file mode 100644
index 0000000..1e15e31
--- /dev/null
+++
b/src/test/java/org/apache/sling/testing/resourceresolver/MockResourceResolverTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.resourceresolver;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ *
+ */
+public class MockResourceResolverTest {
+
+ private ResourceResolver resourceResolver;
+
+ @Before
+ public void setUp() throws LoginException {
+ MockResourceResolverFactory factory = new
MockResourceResolverFactory();
+ resourceResolver = factory.getResourceResolver(null);
+ }
+
+ /**
+ * Test method for {@link
org.apache.sling.testing.resourceresolver.MockResourceResolver#resolve(javax.servlet.http.HttpServletRequest,
java.lang.String)}.
+ * @deprecated Use {@link #testResolveJakartaHttpServletRequestString1()}
instead.
+ */
+ @Deprecated(since = "2.0.0")
+ @Test
+ public void testResolveJavaxHttpServletRequestString() {
+ javax.servlet.http.HttpServletRequest javaxRequest =
Mockito.mock(javax.servlet.http.HttpServletRequest.class);
+ Resource r = resourceResolver.resolve(javaxRequest, "/path?k1=v1");
+ assertNotNull(r);
+ assertEquals("/path?k1=v1", r.getPath());
+ }
+
+ /**
+ * Test method for {@link
org.apache.sling.testing.resourceresolver.MockResourceResolver#resolve(jakarta.servlet.http.HttpServletRequest,
java.lang.String)}.
+ */
+ @Test
+ public void testResolveJakartaHttpServletRequestString() {
+ HttpServletRequest jakartaRequest =
Mockito.mock(HttpServletRequest.class);
+ Resource r = resourceResolver.resolve(jakartaRequest, "/path#k1=v1");
+ assertNotNull(r);
+ assertEquals("/path#k1=v1", r.getPath());
+ }
+
+ /**
+ * Test method for {@link
org.apache.sling.testing.resourceresolver.MockResourceResolver#map(javax.servlet.http.HttpServletRequest,
java.lang.String)}.
+ * @deprecated Use {@link #testMapJakartaHttpServletRequestString()}
instead.
+ */
+ @Deprecated(since = "2.0.0")
+ @Test
+ public void testMapJavaxHttpServletRequestString() {
+ javax.servlet.http.HttpServletRequest javaxRequest =
Mockito.mock(javax.servlet.http.HttpServletRequest.class);
+ String map = resourceResolver.map(javaxRequest, "/path#k1=v1");
+ assertEquals("/path#k1=v1", map);
+ }
+
+ /**
+ * Test method for {@link
org.apache.sling.testing.resourceresolver.MockResourceResolver#map(jakarta.servlet.http.HttpServletRequest,
java.lang.String)}.
+ */
+ @Test
+ public void testMapJakartaHttpServletRequestString() {
+ HttpServletRequest jakartaRequest =
Mockito.mock(HttpServletRequest.class);
+ String map = resourceResolver.map(jakartaRequest, "/path?k1=v1");
+ assertEquals("/path?k1=v1", map);
+ }
+}