This is an automated email from the ASF dual-hosted git repository. sseifert pushed a commit to branch release/1.x in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit 44f2981b262f1719acc9fb8e7cfba4d5864f73ac Author: sseifert <sseif...@pro-vision.de> AuthorDate: Mon Nov 6 17:14:09 2017 +0100 import branch for 1.x from svn --- pom.xml | 125 ++++++-------- .../testing/mock/sling/MockAdapterManagerImpl.java | 181 +++++++++------------ .../mock/sling/MockDynamicClassLoaderManager.java | 33 ---- .../testing/mock/sling/MockJcrSlingRepository.java | 14 +- .../apache/sling/testing/mock/sling/MockSling.java | 67 ++++++++ .../sling/ResourceResolverFactoryInitializer.java | 89 ++++++---- .../testing/mock/sling/ResourceResolverType.java | 14 ++ .../sling/ThreadsafeMockAdapterManagerWrapper.java | 2 +- .../testing/mock/sling/builder/package-info.java | 2 +- .../context/ContextResourceResolverFactory.java | 7 + .../sling/context/ModelAdapterFactoryUtil.java | 32 ++-- .../mock/sling/context/SlingContextImpl.java | 44 ++--- .../testing/mock/sling/context/UniqueRoot.java | 11 +- .../testing/mock/sling/context/package-info.java | 2 +- .../testing/mock/sling/junit/SlingContext.java | 3 +- .../mock/sling/junit/SlingContextBuilder.java | 3 +- .../mock/sling/junit/SlingContextCallback.java | 3 +- .../testing/mock/sling/junit/package-info.java | 2 +- .../testing/mock/sling/loader/ContentLoader.java | 2 +- .../testing/mock/sling/loader/package-info.java | 2 +- .../sling/testing/mock/sling/package-info.java | 2 +- .../mock/sling/services/MockMimeTypeService.java | 6 +- .../testing/mock/sling/services/package-info.java | 2 +- .../sling/servlet/MockSlingHttpServletRequest.java | 23 ++- .../testing/mock/sling/servlet/package-info.java | 2 +- .../sling/testing/mock/sling/spi/package-info.java | 2 +- .../mock/sling/NodeTypeDefinitionScannerTest.java | 1 + .../context/AbstractSlingContextImplTest.java | 9 +- .../sling/context/NoResourceResolverTypeTest.java | 18 +- .../testing/mock/sling/junit/SlingContextTest.java | 81 +-------- .../sling/resource/AbstractJcrNamespaceTest.java | 5 +- .../resource/AbstractJcrResourceResolverTest.java | 6 +- .../AbstractSlingCrudResourceResolverTest.java | 18 +- 33 files changed, 392 insertions(+), 421 deletions(-) diff --git a/pom.xml b/pom.xml index f028e74..2f4503f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,12 +23,12 @@ <parent> <groupId>org.apache.sling</groupId> <artifactId>sling</artifactId> - <version>30</version> + <version>26</version> <relativePath /> </parent> <artifactId>org.apache.sling.testing.sling-mock</artifactId> - <version>2.2.15-SNAPSHOT</version> + <version>1.9.11-SNAPSHOT</version> <packaging>bundle</packaging> <name>Apache Sling Testing Sling Mock</name> @@ -45,7 +45,7 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.testing.osgi-mock</artifactId> - <version>2.3.4</version> + <version>1.9.8</version> <scope>compile</scope> </dependency> <dependency> @@ -63,70 +63,63 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.servlet-helpers</artifactId> - <version>1.1.2</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.commons.osgi</artifactId> - <version>2.4.0</version> + <version>1.0.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.models.api</artifactId> - <version>1.2.2</version> + <version>1.1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.models.impl</artifactId> - <version>1.2.2</version> + <version>1.1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> - <version>2.11.0</version> + <version>2.4.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.resourceresolver</artifactId> - <version>1.4.8</version> + <version>1.1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.api</artifactId> - <version>2.3.0</version> + <version>2.2.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.resource</artifactId> - <version>2.7.4</version> + <version>2.3.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.scripting.api</artifactId> - <version>2.1.8</version> + <version>2.1.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.scripting.core</artifactId> - <version>2.0.36</version> + <version>2.0.26</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.commons.mime</artifactId> - <version>2.1.8</version> + <version>2.1.4</version> <scope>compile</scope> </dependency> <dependency> @@ -143,26 +136,26 @@ </dependency> <dependency> <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.commons.classloader</artifactId> - <version>1.3.2</version> + <artifactId>org.apache.sling.commons.osgi</artifactId> + <version>2.2.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.settings</artifactId> - <version>1.3.8</version> + <artifactId>org.apache.sling.commons.classloader</artifactId> + <version>1.3.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.i18n</artifactId> - <version>2.4.4</version> + <artifactId>org.apache.sling.settings</artifactId> + <version>1.2.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.adapter</artifactId> - <version>2.1.6</version> + <artifactId>org.apache.sling.i18n</artifactId> + <version>2.2.4</version> <scope>compile</scope> </dependency> <dependency> @@ -171,17 +164,11 @@ <version>1.0.2</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.apache.jackrabbit</groupId> - <artifactId>jackrabbit-api</artifactId> - <version>2.11.3</version> - <scope>compile</scope> - </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> - <version>3.2.2</version> + <version>3.2.1</version> <scope>compile</scope> </dependency> <dependency> @@ -206,19 +193,21 @@ <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> + <version>3.0.1</version> <scope>compile</scope> </dependency> <dependency> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-atinject_1.0_spec</artifactId> - <version>1.0</version> - <scope>compile</scope> + <groupId>javax.inject</groupId> + <artifactId>javax.inject</artifactId> + <version>1</version> + <scope>compile</scope> </dependency> <dependency> <groupId>javax.jcr</groupId> <artifactId>jcr</artifactId> + <version>2.0</version> <scope>compile</scope> </dependency> @@ -236,7 +225,7 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.testing.logging-mock</artifactId> - <version>2.0.0</version> + <version>1.0.0</version> <scope>test</scope> </dependency> @@ -247,62 +236,50 @@ <!-- Publish test artifact --> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> </plugin> <plugin> - <groupId>org.apache.felix</groupId> - <artifactId>maven-bundle-plugin</artifactId> - <extensions>true</extensions> + <groupId>org.apache.felix</groupId> + <artifactId>maven-scr-plugin</artifactId> </plugin> </plugins> </build> + <!-- Profiles to run unit tests against different JCR Resource versions --> <profiles> <profile> - <id>latest-resource-bundles</id> + <id>jcr.resource-2.5.4</id> <dependencies> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> - <version>2.16.2</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>org.apache.sling</groupId> - <artifactId>org.apache.sling.resourceresolver</artifactId> - <version>1.5.22</version> + <version>2.9.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.resource</artifactId> - <version>3.0.0</version> + <version>2.5.4</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.apache.jackrabbit</groupId> - <artifactId>jackrabbit-api</artifactId> - <version>2.13.4</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.jackrabbit</groupId> - <artifactId>oak-jcr</artifactId> - <version>1.5.15</version> - <scope>provided</scope> - </dependency> </dependencies> </profile> </profiles> - + </project> diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java index b3f3825..889022b 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java @@ -22,50 +22,41 @@ import static org.apache.sling.api.adapter.AdapterFactory.ADAPTABLE_CLASSES; import static org.apache.sling.api.adapter.AdapterFactory.ADAPTER_CLASSES; import java.util.ArrayList; -import java.util.Arrays; import java.util.Dictionary; import java.util.HashMap; import java.util.Hashtable; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.apache.sling.adapter.Adaption; -import org.apache.sling.adapter.internal.AdapterFactoryDescriptor; -import org.apache.sling.adapter.internal.AdapterFactoryDescriptorMap; -import org.apache.sling.adapter.internal.AdaptionImpl; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.apache.felix.scr.annotations.ReferencePolicy; +import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.SlingConstants; import org.apache.sling.api.adapter.AdapterFactory; import org.apache.sling.api.adapter.AdapterManager; import org.apache.sling.commons.osgi.PropertiesUtil; -import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.component.annotations.ReferenceCardinality; -import org.osgi.service.component.annotations.ReferencePolicy; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.6, + * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.0, * with all calls to SyntheticResource.setAdapterManager/unsetAdapterManager disabled, because this would * break the {@link ThreadsafeMockAdapterManagerWrapper} concept. - * Additionally the reference to PackageAdmin is disabled. */ -@Component(immediate=true, service=AdapterManager.class, - property={Constants.SERVICE_DESCRIPTION + "=Sling Adapter Manager", - Constants.SERVICE_VENDOR + "=The Apache Software Foundation"}, - reference = @Reference(name="AdapterFactory", service=AdapterFactory.class, - cardinality=ReferenceCardinality.MULTIPLE, policy=ReferencePolicy.DYNAMIC, - bind="bindAdapterFactory", unbind="unbindAdapterFactory") -) +@Component(immediate=true) +@Service +@Reference(name="AdapterFactory", referenceInterface=AdapterFactory.class, +cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC) public class MockAdapterManagerImpl implements AdapterManager { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -108,15 +99,9 @@ public class MockAdapterManagerImpl implements AdapterManager { /** * The service tracker for the event admin */ - @Reference(cardinality=ReferenceCardinality.OPTIONAL, policy=ReferencePolicy.DYNAMIC) + @Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY, policy=ReferencePolicy.DYNAMIC) private volatile EventAdmin eventAdmin; - // DISABLED IN THIS COPY OF CLASS - /* - @Reference - private PackageAdmin packageAdmin; - */ - // ---------- AdapterManager interface ------------------------------------- /** @@ -214,7 +199,7 @@ public class MockAdapterManagerImpl implements AdapterManager { } /** - * Unbind a adapter factory. + * Unbind an adapter factory. * @param reference Service reference */ protected void unbindAdapterFactory(final ServiceReference reference) { @@ -257,21 +242,6 @@ public class MockAdapterManagerImpl implements AdapterManager { return; } - // DISABLED IN THIS COPY OF CLASS - /* - for (String clazz : adaptables) { - if (!checkPackage(packageAdmin, clazz)) { - log.warn("Adaptable class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID)); - } - } - - for (String clazz : adapters) { - if (!checkPackage(packageAdmin, clazz)) { - log.warn("Adapter class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID)); - } - } - */ - final AdapterFactoryDescriptor factoryDesc = new AdapterFactoryDescriptor(context, reference, adapters); @@ -292,51 +262,16 @@ public class MockAdapterManagerImpl implements AdapterManager { // clear the factory cache to force rebuild on next access this.factoryCache.clear(); - // register adaption - final Dictionary<String, Object> props = new Hashtable<String, Object>(); - props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables); - props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters); - - ServiceRegistration adaptionRegistration = this.context.getBundleContext().registerService( - Adaption.class.getName(), AdaptionImpl.INSTANCE, props); - if (log.isDebugEnabled()) { - log.debug("Registered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(), - SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables), - SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) }); - } - factoryDesc.setAdaption(adaptionRegistration); - // send event final EventAdmin localEA = this.eventAdmin; if ( localEA != null ) { + final Dictionary<String, Object> props = new Hashtable<String, Object>(); + props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables); + props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters); localEA.postEvent(new Event(SlingConstants.TOPIC_ADAPTER_FACTORY_ADDED, props)); } } - - static String getPackageName(String clazz) { - final int lastDot = clazz.lastIndexOf('.'); - return lastDot <= 0 ? "" : clazz.substring(0, lastDot); - } - - /** - * Check that the package containing the class is exported or is a java.* - * class. - * - * @param packageAdmin the PackageAdmin service - * @param clazz the class name - * @return true if the package is exported - */ - // DISABLED IN THIS COPY OF CLASS - /* - static boolean checkPackage(PackageAdmin packageAdmin, String clazz) { - final String packageName = getPackageName(clazz); - if (packageName.startsWith("java.")) { - return true; - } - return packageAdmin.getExportedPackage(packageName) != null; - } - */ /** * Unregisters the {@link AdapterFactory} referred to by the service @@ -356,25 +291,13 @@ public class MockAdapterManagerImpl implements AdapterManager { boolean factoriesModified = false; AdapterFactoryDescriptorMap adfMap = null; - - AdapterFactoryDescriptor removedDescriptor = null; for (final String adaptable : adaptables) { synchronized ( this.descriptors ) { adfMap = this.descriptors.get(adaptable); } if (adfMap != null) { synchronized ( adfMap ) { - AdapterFactoryDescriptor factoryDesc = adfMap.remove(reference); - if (factoryDesc != null) { - factoriesModified = true; - // A single ServiceReference should correspond to a single Adaption service being registered - // Since the code paths above does not fully guarantee it though, let's keep this check in place - if (removedDescriptor != null && removedDescriptor != factoryDesc) { - log.error("When unregistering reference {} got duplicate service descriptors {} and {}. Unregistration of {} services may be incomplete.", - new Object[] { reference, removedDescriptor, factoryDesc, Adaption.class.getName()} ); - } - removedDescriptor = factoryDesc; - } + factoriesModified |= (adfMap.remove(reference) != null); } } } @@ -385,16 +308,6 @@ public class MockAdapterManagerImpl implements AdapterManager { this.factoryCache.clear(); } - // unregister adaption - if (removedDescriptor != null) { - removedDescriptor.getAdaption().unregister(); - if (log.isDebugEnabled()) { - log.debug("Unregistered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(), - SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables), - SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) }); - } - } - // send event final EventAdmin localEA = this.eventAdmin; if ( localEA != null ) { @@ -515,4 +428,64 @@ public class MockAdapterManagerImpl implements AdapterManager { } } } + + + /** + * The <code>AdapterFactoryDescriptor</code> is an entry in the + * {@link AdapterFactoryDescriptorMap} conveying the list of adapter (target) + * types and the respective {@link AdapterFactory}. + */ + private static class AdapterFactoryDescriptor { + + private volatile AdapterFactory factory; + + private final String[] adapters; + + private final ServiceReference reference; + + private final ComponentContext context; + + public AdapterFactoryDescriptor( + final ComponentContext context, + final ServiceReference reference, + final String[] adapters) { + this.reference = reference; + this.context = context; + this.adapters = adapters; + } + + public AdapterFactory getFactory() { + if ( factory == null ) { + factory = (AdapterFactory) context.locateService( + "AdapterFactory", reference); + } + return factory; + } + + public String[] getAdapters() { + return adapters; + } + } + + /** + * The <code>AdapterFactoryDescriptorMap</code> is a sorted map of + * {@link AdapterFactoryDescriptor} instances indexed (and ordered) by their + * {@link ServiceReference}. This map is used to organize the + * registered {@link org.apache.sling.api.adapter.AdapterFactory} services for + * a given adaptable type. + * <p> + * Each entry in the map is a {@link AdapterFactoryDescriptor} thus enabling the + * registration of multiple factories for the same (adaptable, adapter) type + * tuple. Of course only the first entry (this is the reason for having a sorted + * map) for such a given tuple is actually being used. If that first instance is + * removed the eventual second instance may actually be used instead. + */ + private static class AdapterFactoryDescriptorMap extends + TreeMap<ServiceReference, AdapterFactoryDescriptor> { + + private static final long serialVersionUID = 2L; + + } + + } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java b/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java deleted file mode 100644 index 2ec7f15..0000000 --- a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.mock.sling; - -import org.apache.sling.commons.classloader.DynamicClassLoaderManager; - -/** - * Mock implementation of {@link DynamicClassLoaderManager}. - */ -class MockDynamicClassLoaderManager implements DynamicClassLoaderManager { - - @Override - public ClassLoader getDynamicClassLoader() { - return MockDynamicClassLoaderManager.class.getClassLoader(); - } - -} diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java index e3073cd..48fd567 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java @@ -26,16 +26,18 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Service; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.jcr.MockJcr; import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Component; /** * Mock {@link SlingRepository} implementation. */ -@Component(service = SlingRepository.class) +@Component +@Service(SlingRepository.class) public final class MockJcrSlingRepository implements SlingRepository { private Repository repository; @@ -114,10 +116,4 @@ public final class MockJcrSlingRepository implements SlingRepository { return this.repository.login(); } - @Override - public Session impersonateFromService(String subServiceName, Credentials credentials, String workspaceName) - throws LoginException, RepositoryException { - return this.repository.login(credentials); - } - } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java index fdc222e..b53faae 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java @@ -26,6 +26,7 @@ import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.api.scripting.SlingScriptHelper; import org.apache.sling.jcr.api.SlingRepository; +import org.apache.sling.testing.mock.osgi.MockOsgi; import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest; import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse; import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter; @@ -53,6 +54,18 @@ public final class MockSling { /** * Creates new sling resource resolver factory instance. + * @param type Type of underlying repository. + * @return Resource resolver factory instance + * @deprecated Please use {@link #newResourceResolverFactory(ResourceResolverType, BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public static ResourceResolverFactory newResourceResolverFactory(final ResourceResolverType type) { + return newResourceResolverFactory(type, MockOsgi.newBundleContext()); + } + + /** + * Creates new sling resource resolver factory instance. * @param bundleContext Bundle context * @return Resource resolver factory instance */ @@ -106,6 +119,47 @@ public final class MockSling { } /** + * Creates new sling resource resolver factory instance using + * {@link #DEFAULT_RESOURCERESOLVER_TYPE}. + * @return Resource resolver factory instance + * @deprecated Please use {@link #newResourceResolverFactory(BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public static ResourceResolverFactory newResourceResolverFactory() { + return newResourceResolverFactory(DEFAULT_RESOURCERESOLVER_TYPE); + } + + /** + * Creates new sling resource resolver instance. + * @param type Type of underlying repository. + * @return Resource resolver instance + * @deprecated Please use {@link #newResourceResolver(ResourceResolverType, BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public static ResourceResolver newResourceResolver(final ResourceResolverType type) { + ResourceResolverFactory factory = newResourceResolverFactory(type); + try { + return factory.getAdministrativeResourceResolver(null); + } catch (LoginException ex) { + throw new RuntimeException("Mock resource resolver factory implementation seems to require login.", ex); + } + } + + /** + * Creates new sling resource resolver instance using + * {@link #DEFAULT_RESOURCERESOLVER_TYPE}. + * @return Resource resolver instance + * @deprecated Please use {@link #newResourceResolver(BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public static ResourceResolver newResourceResolver() { + return newResourceResolver(DEFAULT_RESOURCERESOLVER_TYPE); + } + + /** * Creates new sling resource resolver instance. * @param type Type of underlying repository. * @param bundleContext Bundle context @@ -145,6 +199,19 @@ public final class MockSling { /** * Creates a new sling script helper instance using * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver. + * @return Sling script helper instance + * @deprecated Please use {@link #newSlingScriptHelper(BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public static SlingScriptHelper newSlingScriptHelper() { + BundleContext bundleContext = MockOsgi.newBundleContext(); + return newSlingScriptHelper(bundleContext); + } + + /** + * Creates a new sling script helper instance using + * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver. * @param bundleContext Bundle context * @return Sling script helper instance */ diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java index 5b64c58..dd8b69e 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java @@ -23,16 +23,18 @@ import java.util.Hashtable; import javax.jcr.RepositoryException; import javax.jcr.Session; +import javax.jcr.query.Query; +import org.apache.sling.api.resource.QueriableResourceProvider; +import org.apache.sling.api.resource.ResourceProvider; +import org.apache.sling.api.resource.ResourceProviderFactory; import org.apache.sling.api.resource.ResourceResolverFactory; -import org.apache.sling.commons.classloader.DynamicClassLoaderManager; import org.apache.sling.jcr.api.SlingRepository; -import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider; +import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory; import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker; import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator; import org.apache.sling.serviceusermapping.ServiceUserMapper; import org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl; -import org.apache.sling.spi.resource.provider.ResourceProvider; import org.apache.sling.testing.mock.osgi.MockEventAdmin; import org.apache.sling.testing.mock.osgi.MockOsgi; import org.osgi.framework.BundleContext; @@ -63,16 +65,16 @@ class ResourceResolverFactoryInitializer { // register JCR node types found in classpath registerJcrNodeTypes(slingRepository, nodeTypeMode); - // initialize JCR resource provider - ensureJcrResourceProviderDependencies(bundleContext); - initializeJcrResourceProvider(bundleContext); + // initialize JCR resource provider factory + ensureJcrResourceProviderFactoryDependencies(bundleContext); + initializeJcrResourceProviderFactory(bundleContext); } // initialize resource resolver factory activator ensureResourceResolverFactoryActivatorDependencies(bundleContext); initializeResourceResolverFactoryActivator(bundleContext); - ServiceReference<ResourceResolverFactory> factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class); + ServiceReference factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class.getName()); if (factoryRef == null) { throw new IllegalStateException("Unable to get ResourceResolverFactory."); } @@ -80,34 +82,29 @@ class ResourceResolverFactoryInitializer { } /** - * Ensure dependencies for JcrResourceProvider are present. + * Ensure dependencies for JcrResourceProviderFactory are present. * @param bundleContext Bundle context */ - @SuppressWarnings("unchecked") - private static void ensureJcrResourceProviderDependencies(BundleContext bundleContext) { - if (bundleContext.getServiceReference(DynamicClassLoaderManager.class) == null) { - bundleContext.registerService(DynamicClassLoaderManager.class, new MockDynamicClassLoaderManager(), null); - } - - try { - Class pathMapperClass = Class.forName("org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper"); - registerServiceIfNotPresent(bundleContext, pathMapperClass, pathMapperClass.newInstance()); - } - catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) { - // ignore - service was removed in org.apache.sling.jcr.resource 3.0.0 - } + private static void ensureJcrResourceProviderFactoryDependencies(BundleContext bundleContext) { + // setup PathMapper which is a mandatory service for JcrProviderFactory (since org.apache.sling.jcr.resource 2.5.4) + // use reflection to not depend on it if running with older version of org.apache.sling.jcr.resource + registerServiceIfFoundInClasspath(bundleContext, "org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper"); } /** - * Initialize JCR resource provider. + * Initialize JCR resource provider factory. * @param bundleContext Bundle context */ - private static void initializeJcrResourceProvider(BundleContext bundleContext) { + @SuppressWarnings("deprecation") + private static void initializeJcrResourceProviderFactory(BundleContext bundleContext) { Dictionary<String, Object> config = new Hashtable<String, Object>(); - JcrResourceProvider provider = new JcrResourceProvider(); - MockOsgi.injectServices(provider, bundleContext); - MockOsgi.activate(provider, bundleContext, config); - bundleContext.registerService(ResourceProvider.class, provider, config); + config.put(ResourceProvider.ROOTS, new String[] { "/" }); + config.put(QueriableResourceProvider.LANGUAGES, new String[] { Query.XPATH, Query.SQL, Query.JCR_SQL2 }); + + JcrResourceProviderFactory factory = new JcrResourceProviderFactory(); + MockOsgi.injectServices(factory, bundleContext); + MockOsgi.activate(factory, bundleContext, config); + bundleContext.registerService(ResourceProviderFactory.class.getName(), factory, config); } /** @@ -129,9 +126,8 @@ class ResourceResolverFactoryInitializer { */ private static void initializeResourceResolverFactoryActivator(BundleContext bundleContext) { Dictionary<String, Object> config = new Hashtable<String, Object>(); - // do not required a specific resource provider (otherwise "NONE" will not work) - config.put("resource.resolver.required.providers", ""); - config.put("resource.resolver.required.providernames", ""); + config.put("resource.resolver.required.providers", new String[0]); + ResourceResolverFactoryActivator activator = new ResourceResolverFactoryActivator(); MockOsgi.injectServices(activator, bundleContext); MockOsgi.activate(activator, bundleContext, config); @@ -145,11 +141,10 @@ class ResourceResolverFactoryInitializer { * @param serviceClass Service class * @param instance Service instance */ - private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, - T instance) { + private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, + Object instance) { registerServiceIfNotPresent(bundleContext, serviceClass, instance, new Hashtable<String, Object>()); } - /** * Registers a service if the service class is found in classpath, * and if no service with this class is already registered. @@ -158,12 +153,34 @@ class ResourceResolverFactoryInitializer { * @param instance Service instance * @param config OSGi config */ - private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, - T instance, Dictionary<String, Object> config) { + private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, + Object instance, Dictionary<String, Object> config) { if (bundleContext.getServiceReference(serviceClass.getName()) == null) { MockOsgi.injectServices(instance, bundleContext); MockOsgi.activate(instance, bundleContext, config); - bundleContext.registerService(serviceClass, instance, config); + bundleContext.registerService(serviceClass.getName(), instance, config); + } + } + + /** + * Registers a service if the service class is found in classpath, + * and if no service with this class is already registered. + * @param className Service class name + */ + private static void registerServiceIfFoundInClasspath(BundleContext bundleContext, String className) { + try { + Class<?> serviceClass = Class.forName(className); + Object instance = serviceClass.newInstance(); + registerServiceIfNotPresent(bundleContext, serviceClass, instance); + } + catch (ClassNotFoundException ex) { + // skip service registration + } + catch (InstantiationException e) { + // skip service registration + } + catch (IllegalAccessException e) { + // skip service registration } } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java index f0d2b1d..e9d9b33 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java @@ -54,6 +54,20 @@ public enum ResourceResolverType { JCR_MOCK(MockJcrResourceResolverAdapter.class.getName(), null, NodeTypeMode.NAMESPACES_ONLY), /** + * Uses a real JCR Jackrabbit repository. + * <ul> + * <li>Uses the real Sling Resource Resolver and JCR Resource mapping + * implementation.</li> + * <li>The JCR repository is started on first access, this may take some + * seconds.</li> + * <li>Beware: The repository is not cleared for each unit test, so make + * sure us use a unique node path for each unit test.</li> + * </ul> + */ + JCR_JACKRABBIT("org.apache.sling.testing.mock.sling.jackrabbit.JackrabbitMockResourceResolverAdapter", + "org.apache.sling:org.apache.sling.testing.sling-mock-jackrabbit", NodeTypeMode.NODETYPES_REQUIRED), + + /** * Uses a real JCR Jackrabbit Oak repository. * <ul> * <li>Uses the real Sling Resource Resolver and JCR Resource mapping diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java index 428bd4c..d9c21e9 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java @@ -87,7 +87,7 @@ class ThreadsafeMockAdapterManagerWrapper implements AdapterManager { if (bundleContext == null) { setBundleContext(MockOsgi.newBundleContext()); } - ServiceReference<AdapterManager> serviceReference = bundleContext.getServiceReference(AdapterManager.class); + ServiceReference serviceReference = bundleContext.getServiceReference(AdapterManager.class.getName()); if (serviceReference != null) { return (AdapterManager)bundleContext.getService(serviceReference); } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java index e8a9066..3c94555 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java @@ -19,5 +19,5 @@ /** * Content builder for creating test content. */ -@org.osgi.annotation.versioning.Version("1.1") +@aQute.bnd.annotation.Version("1.1") package org.apache.sling.testing.mock.sling.builder; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java index 65cf6d2..2448e07 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java @@ -48,6 +48,9 @@ final class ContextResourceResolverFactory { case JCR_MOCK: initializeJcrMock(factory); break; + case JCR_JACKRABBIT: + initializeJcrJackrabbit(factory); + break; case JCR_OAK: initializeJcrOak(factory); break; @@ -71,6 +74,10 @@ final class ContextResourceResolverFactory { // nothing to do } + private static void initializeJcrJackrabbit(ResourceResolverFactory factory) { + // register sling node types? + } + private static void initializeJcrOak(ResourceResolverFactory factory) { // register sling node types? } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java index 7ff2195..b47399c 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collection; import java.util.Dictionary; @@ -189,6 +188,7 @@ final class ModelAdapterFactoryUtil { } + @SuppressWarnings("unused") private static class RegisterModelsBundle implements Bundle { private static final String MAGIC_STRING = "MOCKS-YOU-KNOW-WHAT-TO-SCAN"; @@ -218,14 +218,14 @@ final class ModelAdapterFactoryUtil { } @Override - public Dictionary<String,String> getHeaders() { + public Dictionary getHeaders() { Dictionary<String, String> headers = new Hashtable<String, String>(); headers.put(PACKAGE_HEADER, MAGIC_STRING); return headers; } @Override - public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) { + public Enumeration findEntries(String path, String filePattern, boolean recurse) { Vector<URL> urls = new Vector<URL>(); // NOPMD if (packageNames != null) { urls.addAll(getModelClassUrlsForPackages(packageNames)); @@ -237,7 +237,7 @@ final class ModelAdapterFactoryUtil { } @Override - public Class<?> loadClass(String name) throws ClassNotFoundException { + public Class loadClass(String name) throws ClassNotFoundException { return getClass().getClassLoader().loadClass(name); } @@ -292,12 +292,12 @@ final class ModelAdapterFactoryUtil { } @Override - public ServiceReference<?>[] getRegisteredServices() { // NOPMD + public ServiceReference[] getRegisteredServices() { // NOPMD return null; } @Override - public ServiceReference<?>[] getServicesInUse() { // NOPMD + public ServiceReference[] getServicesInUse() { // NOPMD return null; } @@ -312,7 +312,7 @@ final class ModelAdapterFactoryUtil { } @Override - public Dictionary<String,String> getHeaders(String locale) { + public Dictionary getHeaders(String locale) { return null; } @@ -322,12 +322,12 @@ final class ModelAdapterFactoryUtil { } @Override - public Enumeration<URL> getResources(String name) throws IOException { + public Enumeration getResources(String name) throws IOException { return null; } @Override - public Enumeration<String> getEntryPaths(String path) { + public Enumeration getEntryPaths(String path) { return null; } @@ -341,31 +341,31 @@ final class ModelAdapterFactoryUtil { return 0; } - @Override - public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) { + // this is part of org.osgi 4.2.0 + public Map getSignerCertificates(int signersType) { return null; } - @Override + // this is part of org.osgi 4.2.0 public Version getVersion() { return null; } - @Override + // this is part of osgi 5/6 public int compareTo(Bundle o) { return 0; } - @Override + // this is part of osgi 5/6 public <A> A adapt(Class<A> type) { return null; } - @Override + // this is part of osgi 5/6 public File getDataFile(String filename) { return null; } - + } } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java index 6d4fa7c..e10a24c 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java @@ -50,14 +50,14 @@ import org.apache.sling.testing.mock.sling.services.MockSlingSettingService; import org.apache.sling.testing.mock.sling.servlet.MockRequestPathInfo; import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest; import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse; -import org.osgi.annotation.versioning.ConsumerType; -import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import aQute.bnd.annotation.ConsumerType; + /** * Defines Sling context objects with lazy initialization. Should not be used * directly but via the {@link org.apache.sling.testing.mock.sling.junit.SlingContext} JUnit @@ -108,12 +108,7 @@ public class SlingContextImpl extends OsgiContextImpl { MockOsgi.setConfigForPid(bundleContext(), RESOURCERESOLVERFACTORYACTIVATOR_PID, this.resourceResolverFactoryActivatorProps); } - // automatically register resource resolver factory when ResourceResolverType != NONE, - // so the ResourceResolverFactory is available as OSGi service immediately - if (resourceResolverType != ResourceResolverType.NONE) { - resourceResolverFactory(); - } - + this.resourceResolverFactory = newResourceResolverFactory(); registerDefaultServices(); } @@ -124,13 +119,6 @@ public class SlingContextImpl extends OsgiContextImpl { protected ResourceResolverFactory newResourceResolverFactory() { return ContextResourceResolverFactory.get(this.resourceResolverType, bundleContext()); } - - private ResourceResolverFactory resourceResolverFactory() { - if (this.resourceResolverFactory == null) { - this.resourceResolverFactory = newResourceResolverFactory(); - } - return this.resourceResolverFactory; - } /** * Default services that should be available for every unit test @@ -173,7 +161,14 @@ public class SlingContextImpl extends OsgiContextImpl { try { Class<?> clazz = Class.forName(className); registerInjectActivateService(clazz.newInstance()); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + } + catch (ClassNotFoundException ex) { + // ignore - probably not the latest sling models impl version + } + catch (InstantiationException e) { + // ignore - probably not the latest sling models impl version + } + catch (IllegalAccessException e) { // ignore - probably not the latest sling models impl version } } @@ -217,7 +212,6 @@ public class SlingContextImpl extends OsgiContextImpl { this.contentBuilder = null; this.resourceBuilder = null; this.uniqueRoot = null; - this.resourceResolverFactory = null; super.tearDown(); } @@ -228,16 +222,14 @@ public class SlingContextImpl extends OsgiContextImpl { public final ResourceResolverType resourceResolverType() { return this.resourceResolverType; } - + /** - * Returns the singleton resource resolver bound to this context. - * It is automatically closed after the test. * @return Resource resolver */ public final ResourceResolver resourceResolver() { if (this.resourceResolver == null) { try { - this.resourceResolver = this.resourceResolverFactory().getAdministrativeResourceResolver(null); + this.resourceResolver = this.resourceResolverFactory.getAdministrativeResourceResolver(null); } catch (LoginException ex) { throw new RuntimeException("Creating resource resolver failed.", ex); } @@ -317,9 +309,6 @@ public class SlingContextImpl extends OsgiContextImpl { } /** - * Creates a {@link ContentBuilder} object for easily creating test content. - * This API was part of Sling Mocks since version 1.x. - * You can use alternatively the {@link #build()} method and use the {@link ResourceBuilder} API. * @return Content builder for building test content */ public ContentBuilder create() { @@ -416,9 +405,9 @@ public class SlingContextImpl extends OsgiContextImpl { */ public final void runMode(String... runModes) { Set<String> newRunModes = ImmutableSet.<String> builder().add(runModes).build(); - ServiceReference<SlingSettingsService> ref = bundleContext().getServiceReference(SlingSettingsService.class); + ServiceReference ref = bundleContext().getServiceReference(SlingSettingsService.class.getName()); if (ref != null) { - MockSlingSettingService slingSettings = (MockSlingSettingService)bundleContext().getService(ref); + MockSlingSettingService slingSettings = (MockSlingSettingService) bundleContext().getService(ref); slingSettings.setRunModes(newRunModes); } } @@ -478,9 +467,6 @@ public class SlingContextImpl extends OsgiContextImpl { .put(AdapterFactory.ADAPTER_CLASSES, new String[] { adapterClass.getName() }) - // make sure this overlay has higher ranking than other adapter factories - // normally we should use Integer.MAX_VALUE for this - but due to SLING-7194 prefers lowest-ranking services first - .put(Constants.SERVICE_RANKING, Integer.MIN_VALUE) .build()); } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java index f5f68d3..cc00d75 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java @@ -18,18 +18,21 @@ */ package org.apache.sling.testing.mock.sling.context; +import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER; + import java.util.UUID; import org.apache.jackrabbit.JcrConstants; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceUtil; -import org.osgi.annotation.versioning.ConsumerType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableMap; +import aQute.bnd.annotation.ConsumerType; + /** * Manages unique root paths in JCR repository. * This is important for resource resolver types like JCR_JACKRABBIT @@ -79,7 +82,7 @@ public class UniqueRoot { */ public final String content() { if (contentRoot == null) { - contentRoot = getOrCreateResource("/content/" + uniquePathPart, "sling:OrderedFolder"); + contentRoot = getOrCreateResource("/content/" + uniquePathPart, NT_SLING_ORDERED_FOLDER); } return contentRoot.getPath(); } @@ -91,7 +94,7 @@ public class UniqueRoot { */ public final String apps() { if (appsRoot == null) { - appsRoot = getOrCreateResource("/apps/" + uniquePathPart, "sling:OrderedFolder"); + appsRoot = getOrCreateResource("/apps/" + uniquePathPart, NT_SLING_ORDERED_FOLDER); } return appsRoot.getPath(); } @@ -103,7 +106,7 @@ public class UniqueRoot { */ public final String libs() { if (libsRoot == null) { - libsRoot = getOrCreateResource("/libs/" + uniquePathPart, "sling:OrderedFolder"); + libsRoot = getOrCreateResource("/libs/" + uniquePathPart, NT_SLING_ORDERED_FOLDER); } return libsRoot.getPath(); } diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java index 36a2859..cf0963d 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java @@ -19,5 +19,5 @@ /** * Sling context implementation for unit tests. */ -@org.osgi.annotation.versioning.Version("3.5") +@aQute.bnd.annotation.Version("3.5") package org.apache.sling.testing.mock.sling.context; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java index bcd5da5..52aa2ff 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java @@ -29,7 +29,8 @@ import org.junit.rules.ExternalResource; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; -import org.osgi.annotation.versioning.ProviderType; + +import aQute.bnd.annotation.ProviderType; /** * JUnit rule for setting up and tearing down Sling context objects for unit tests. diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java index b9ca1c4..37780dd 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java @@ -25,7 +25,8 @@ import org.apache.sling.testing.mock.osgi.context.ContextPlugin; import org.apache.sling.testing.mock.osgi.context.ContextPlugins; import org.apache.sling.testing.mock.osgi.context.OsgiContextImpl; import org.apache.sling.testing.mock.sling.ResourceResolverType; -import org.osgi.annotation.versioning.ProviderType; + +import aQute.bnd.annotation.ProviderType; /** * Builder class for creating {@link SlingContext} instances with different sets of parameters. diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java index 79343c3..d4fc9c4 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java @@ -19,7 +19,8 @@ package org.apache.sling.testing.mock.sling.junit; import org.apache.sling.testing.mock.osgi.context.ContextCallback; -import org.osgi.annotation.versioning.ConsumerType; + +import aQute.bnd.annotation.ConsumerType; /** * Callback interface for application-specific setup and teardown operations to diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java index a998c8f..dd040c1 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java @@ -19,5 +19,5 @@ /** * Rule for providing easy access to Sling context in JUnit tests. */ -@org.osgi.annotation.versioning.Version("4.1") +@aQute.bnd.annotation.Version("4.1") package org.apache.sling.testing.mock.sling.junit; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java index f62a1f1..751ab55 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java @@ -458,7 +458,7 @@ public final class ContentLoader { for (String name : names) { String fileExtension = StringUtils.substringAfterLast(name, "."); if (bundleContext != null && StringUtils.isNotEmpty(fileExtension)) { - ServiceReference<MimeTypeService> ref = bundleContext.getServiceReference(MimeTypeService.class); + ServiceReference ref = bundleContext.getServiceReference(MimeTypeService.class.getName()); if (ref != null) { MimeTypeService mimeTypeService = (MimeTypeService)bundleContext.getService(ref); mimeType = mimeTypeService.getMimeType(fileExtension); diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java index 92b8da5..0851487 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java @@ -19,5 +19,5 @@ /** * Helpers for importing test content into the mocked repositories / resource hierarchies. */ -@org.osgi.annotation.versioning.Version("1.1") +@aQute.bnd.annotation.Version("1.1") package org.apache.sling.testing.mock.sling.loader; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java index c0dc58f..85ce5c4 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java @@ -19,5 +19,5 @@ /** * Mock implementation of selected Sling APIs. */ -@org.osgi.annotation.versioning.Version("3.0") +@aQute.bnd.annotation.Version("1.5") package org.apache.sling.testing.mock.sling; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java index a13ffa3..fbc6fb7 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java @@ -21,16 +21,18 @@ package org.apache.sling.testing.mock.sling.services; import java.io.IOException; import java.io.InputStream; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Service; import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.commons.mime.internal.MimeTypeServiceImpl; import org.apache.sling.testing.mock.osgi.MockOsgi; import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Component; /** * Mock {@link MimeTypeService} implementation. */ -@Component(service = MimeTypeService.class) +@Component(inherit = false) +@Service(MimeTypeService.class) public final class MockMimeTypeService extends MimeTypeServiceImpl { private boolean initialized; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java index 37315a7..e919159 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java @@ -19,5 +19,5 @@ /** * Mocks for selected Sling services. */ -@org.osgi.annotation.versioning.Version("2.0.1") +@aQute.bnd.annotation.Version("2.0") package org.apache.sling.testing.mock.sling.services; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java index 798ad02..a5afbe2 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java @@ -23,6 +23,7 @@ import java.util.ResourceBundle; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.i18n.ResourceBundleProvider; +import org.apache.sling.testing.mock.osgi.MockOsgi; import org.apache.sling.testing.mock.sling.MockSling; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -36,6 +37,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers /** * Instantiate with default resource resolver + * @deprecated Please use {@link #MockSlingHttpServletRequest(BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public MockSlingHttpServletRequest() { + this(MockOsgi.newBundleContext()); + } + + /** + * Instantiate with default resource resolver * @param bundleContext Bundle context */ public MockSlingHttpServletRequest(BundleContext bundleContext) { @@ -44,6 +55,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers /** * @param resourceResolver Resource resolver + * @deprecated Please use {@link #MockSlingHttpServletRequest(ResourceResolver, BundleContext)} + * and shutdown the bundle context after usage. + */ + @Deprecated + public MockSlingHttpServletRequest(ResourceResolver resourceResolver) { + this(resourceResolver, MockOsgi.newBundleContext()); + } + + /** + * @param resourceResolver Resource resolver * @param bundleContext Bundle context */ public MockSlingHttpServletRequest(ResourceResolver resourceResolver, BundleContext bundleContext) { @@ -63,7 +84,7 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers public ResourceBundle getResourceBundle(String baseName, Locale locale) { // check of ResourceBundleProvider is registered in mock OSGI context ResourceBundle resourceBundle = null; - ServiceReference<ResourceBundleProvider> serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class); + ServiceReference serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class.getName()); if (serviceReference != null) { ResourceBundleProvider provider = (ResourceBundleProvider)bundleContext.getService(serviceReference); resourceBundle = provider.getResourceBundle(baseName, locale); diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java index 4d35479..0408710 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java @@ -19,5 +19,5 @@ /** * Mock implementation of selected Servlet-related Sling APIs. */ -@org.osgi.annotation.versioning.Version("3.0") +@aQute.bnd.annotation.Version("2.0") package org.apache.sling.testing.mock.sling.servlet; diff --git a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java index 99975db..0316d03 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java @@ -19,5 +19,5 @@ /** * SPI for hooking in alternative resource type adapter implementations. */ -@org.osgi.annotation.versioning.Version("1.0") +@aQute.bnd.annotation.Version("1.0") package org.apache.sling.testing.mock.sling.spi; diff --git a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java index 032129b..1b1f888 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue; import java.util.List; +import org.apache.sling.testing.mock.sling.NodeTypeDefinitionScanner; import org.junit.Test; diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java index 4c2d13b..6299dfb 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java @@ -48,9 +48,6 @@ public abstract class AbstractSlingContextImplTest { @Before public void setUp() throws Exception { - // make sure ResourceResolverFactory is available immediately and not lazily - assertEquals(1, context.getServices(ResourceResolverFactory.class, null).length); - context.addModelsForPackage("org.apache.sling.testing.mock.sling.context.models"); ContentLoader contentLoader = this.context.load(); @@ -141,4 +138,10 @@ public abstract class AbstractSlingContextImplTest { assertTrue(newRunModes.contains("mode2")); } + @Test + public void testResourceResolverFactory() { + ResourceResolverFactory[] factories = context.getServices(ResourceResolverFactory.class, null); + assertEquals(1, factories.length); + } + } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java index 5af4d3e..23369ea 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java @@ -18,37 +18,23 @@ */ package org.apache.sling.testing.mock.sling.context; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNull; import org.apache.sling.api.resource.Resource; -import org.apache.sling.api.resource.SyntheticResource; -import org.apache.sling.spi.resource.provider.ResourceProvider; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.apache.sling.testing.mock.sling.junit.SlingContext; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -@RunWith(MockitoJUnitRunner.class) public class NoResourceResolverTypeTest { @Rule public SlingContext context = new SlingContext(ResourceResolverType.NONE); - @Mock - private ResourceProvider<?> resourceProvider; - @Test public void testRoot() { - // resgister dummy resource provider because otherwise ResourceResolverFactory get's not activated - // with lates sling resource resolver implementation - context.registerService(ResourceProvider.class, resourceProvider, - ResourceProvider.PROPERTY_ROOT, "/"); - Resource root = context.resourceResolver().getResource("/"); - assertTrue(root instanceof SyntheticResource); + assertNull(root); } } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java index 8caef09..ead89a6 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java @@ -24,10 +24,9 @@ import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import org.apache.sling.api.adapter.AdapterFactory; -import org.apache.sling.api.adapter.SlingAdaptable; 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.testing.mock.sling.ResourceResolverType; import org.junit.Before; import org.junit.Rule; @@ -47,16 +46,18 @@ public class SlingContextTest { private final SlingContextCallback contextAfterTeardown = mock(SlingContextCallback.class); // Run all unit tests for each resource resolver types listed here + @SuppressWarnings("unchecked") @Rule public SlingContext context = new SlingContextBuilder(ResourceResolverType.JCR_MOCK) .beforeSetUp(contextBeforeSetup) .afterSetUp(contextAfterSetup) .beforeTearDown(contextBeforeTeardown) .afterTearDown(contextAfterTeardown) - .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of( - "resource.resolver.searchpath", new String[] {"/apps","/libs","/testpath"}, - "resource.resolver.mapping", new String[] {"/:/", "/content/test/</"} - )) + .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of("resource.resolver.searchpath", new String[] { + "/apps", + "/libs", + "/testpath", + })) .build(); @Before @@ -109,33 +110,6 @@ public class SlingContextTest { } @Test - public void testRegisterAdapterOverlayStatic() { - prepareInitialAdapterFactory(); - - // register overlay adapter with static adaption - context.registerAdapter(TestAdaptable.class, String.class, "static-adaption"); - - // test overlay adapter with static adaption - assertEquals("static-adaption", new TestAdaptable("testMessage2").adaptTo(String.class)); - } - - @Test - public void testRegisterAdapterOverlayDynamic() { - prepareInitialAdapterFactory(); - - // register overlay adapter with dynamic adaption - context.registerAdapter(TestAdaptable.class, String.class, new Function<TestAdaptable, String>() { - @Override - public String apply(TestAdaptable input) { - return input.getMessage() + "-dynamic"; - } - }); - - // test overlay adapter with dynamic adaption - assertEquals("testMessage3-dynamic", new TestAdaptable("testMessage3").adaptTo(String.class)); - } - - @Test public void testResourceBuilder() { context.build().resource("/test1", "prop1", "value1") @@ -145,48 +119,9 @@ public class SlingContextTest { Resource test1 = context.resourceResolver().getResource("/test1"); assertNotNull(test1); - assertEquals("value1", test1.getValueMap().get("prop1", String.class)); + assertEquals("value1", ResourceUtil.getValueMap(test1).get("prop1", String.class)); assertNotNull(test1.getChild("a")); assertNotNull(test1.getChild("b")); } - - @Test - public void testUrlMapping() { - assertEquals("/foo", context.resourceResolver().map("/content/test/foo")); - } - - - private void prepareInitialAdapterFactory() { - // register "traditional" adapter factory without specific service ranking - AdapterFactory adapterFactory = new AdapterFactory() { - @SuppressWarnings("unchecked") - @Override - public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) { - return (AdapterType)(((TestAdaptable)adaptable).getMessage() + "-initial"); - } - }; - context.registerService(AdapterFactory.class, adapterFactory, ImmutableMap.<String, Object>builder() - .put(AdapterFactory.ADAPTABLE_CLASSES, new String[] { TestAdaptable.class.getName() }) - .put(AdapterFactory.ADAPTER_CLASSES, new String[] { String.class.getName() }) - .build()); - - // test initial adapter factory - assertEquals("testMessage1-initial", new TestAdaptable("testMessage1").adaptTo(String.class)); - } - - - private static class TestAdaptable extends SlingAdaptable { - private final String message; - - public TestAdaptable(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - } - } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java index 3fedcca..427e338 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java @@ -18,6 +18,7 @@ */ package org.apache.sling.testing.mock.sling.resource; +import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY; import static org.junit.Assert.assertEquals; import javax.jcr.RepositoryException; @@ -56,7 +57,7 @@ public abstract class AbstractJcrNamespaceTest { Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo"); ValueMap props = ResourceUtil.getValueMap(resource); - assertEquals("fooType", props.get("sling:resourceType")); + assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY)); assertEquals("fooType", resource.getResourceType()); MockOsgi.shutdown(bundleContext); @@ -72,7 +73,7 @@ public abstract class AbstractJcrNamespaceTest { Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo"); ValueMap props = ResourceUtil.getValueMap(resource); - assertEquals("fooType", props.get("sling:resourceType")); + assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY)); assertEquals("fooType", resource.getResourceType()); } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java index 8b6251a..2726da9 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java @@ -18,6 +18,8 @@ */ package org.apache.sling.testing.mock.sling.resource; +import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER; +import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -151,7 +153,7 @@ public abstract class AbstractJcrResourceResolverTest { Resource parent = context.resourceResolver().getResource(getTestRootNode().getPath()); Resource child = context.resourceResolver().create(parent, "nodeTypeResource", ImmutableMap.<String, Object> builder() - .put("sling:resourceType", JcrConstants.NT_UNSTRUCTURED).build()); + .put(SLING_RESOURCE_TYPE_PROPERTY, JcrConstants.NT_UNSTRUCTURED).build()); assertNotNull(child); assertEquals(JcrConstants.NT_UNSTRUCTURED, child.getResourceType()); assertEquals(JcrConstants.NT_UNSTRUCTURED, child.adaptTo(Node.class).getPrimaryNodeType().getName()); @@ -164,7 +166,7 @@ public abstract class AbstractJcrResourceResolverTest { Resource child = ResourceUtil.getOrCreateResource(context.resourceResolver(), parent.getPath() + "/intermediate/child", "sling/resource/type", JcrConstants.NT_UNSTRUCTURED, true); assertNotNull(child); - assertEquals("sling:OrderedFolder", parent.getResourceType()); + assertEquals(NT_SLING_ORDERED_FOLDER, parent.getResourceType()); assertEquals("sling/resource/type", child.getResourceType()); } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java index 7b0d5e7..a98c26e 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java @@ -169,16 +169,26 @@ public abstract class AbstractSlingCrudResourceResolverTest { public void testDateProperty() throws IOException { Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1"); ValueMap props = ResourceUtil.getValueMap(resource1); - assertEquals(DATE_VALUE, props.get("dateProp", Date.class)); + // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846) + if (getResourceResolverType() != ResourceResolverType.JCR_MOCK + && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT + && getResourceResolverType() != ResourceResolverType.JCR_OAK ) { + assertEquals(DATE_VALUE, props.get("dateProp", Date.class)); + } } @Test public void testDatePropertyToCalendar() throws IOException { Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1"); ValueMap props = ResourceUtil.getValueMap(resource1); - Calendar calendarValue = props.get("dateProp", Calendar.class); - assertNotNull(calendarValue); - assertEquals(DATE_VALUE, calendarValue.getTime()); + // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846) + if (getResourceResolverType() != ResourceResolverType.JCR_MOCK + && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT + && getResourceResolverType() != ResourceResolverType.JCR_OAK ) { + Calendar calendarValue = props.get("dateProp", Calendar.class); + assertNotNull(calendarValue); + assertEquals(DATE_VALUE, calendarValue.getTime()); + } } @Test -- To stop receiving notification emails like this one, please contact "commits@sling.apache.org" <commits@sling.apache.org>.