You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:23:38 UTC
[sling-org-apache-sling-testing-sling-mock] 22/37: SLING-5086
sling-mock: Add SlingContext.registerAdapter convenience method
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-1.6.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit d74181d3bbeebf153926ab23a0f16f29633ecce8
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Oct 1 22:00:32 2015 +0000
SLING-5086 sling-mock: Add SlingContext.registerAdapter convenience method
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1706325 13f79535-47bb-0310-9956-ffa450edef68
---
.../mock/sling/context/SlingContextImpl.java | 46 ++++++++++++++++++++++
.../testing/mock/sling/junit/SlingContextTest.java | 23 +++++++++++
2 files changed, 69 insertions(+)
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 76439f0..0fe023f 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
@@ -23,6 +23,7 @@ import java.util.Set;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -56,6 +57,8 @@ import org.osgi.framework.ServiceReference;
import aQute.bnd.annotation.ConsumerType;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
/**
@@ -326,5 +329,48 @@ public class SlingContextImpl extends OsgiContextImpl {
}
return uniqueRoot;
}
+
+ /**
+ * Create a Sling AdapterFactory on the fly which can adapt from <code>adaptableClass</code>
+ * to <code>adapterClass</code> and just returns the given value as result.
+ * @param adaptableClass Class to adapt from
+ * @param adapterClass Class to adapt to
+ * @param adapter Object which is always returned for this adaption.
+ */
+ public <T1, T2> void registerAdapter(final Class<T1> adaptableClass, final Class<T2> adapterClass,
+ final T2 adapter) {
+ registerAdapter(adaptableClass, adapterClass, new Function<T1, T2>() {
+ @Override
+ public T2 apply(T1 input) {
+ return adapter;
+ }
+ });
+ }
+
+ /**
+ * Create a Sling AdapterFactory on the fly which can adapt from <code>adaptableClass</code>
+ * to <code>adapterClass</code> and delegates the adapter mapping to the given <code>adaptHandler</code> function.
+ * @param adaptableClass Class to adapt from
+ * @param adapterClass Class to adapt to
+ * @param adaptHandler Function to handle the adaption
+ */
+ public <T1, T2> void registerAdapter(final Class<T1> adaptableClass, final Class<T2> adapterClass,
+ final Function<T1,T2> adaptHandler) {
+ AdapterFactory adapterFactory = new AdapterFactory() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
+ return (AdapterType)adaptHandler.apply((T1)adaptable);
+ }
+ };
+ registerService(AdapterFactory.class, adapterFactory, ImmutableMap.<String, Object>builder()
+ .put(AdapterFactory.ADAPTABLE_CLASSES, new String[] {
+ adaptableClass.getName()
+ })
+ .put(AdapterFactory.ADAPTER_CLASSES, new String[] {
+ adapterClass.getName()
+ })
+ .build());
+ }
}
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 8af0b55..b785f28 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
@@ -18,13 +18,16 @@
*/
package org.apache.sling.testing.mock.sling.junit;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import java.io.IOException;
import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
import org.junit.Before;
import org.junit.Rule;
@@ -32,6 +35,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
+import com.google.common.base.Function;
+
@RunWith(MockitoJUnitRunner.class)
public class SlingContextTest {
@@ -53,4 +58,22 @@ public class SlingContextTest {
assertNotNull(context.request());
}
+ @Test
+ public void testRegisterAdapter() {
+
+ // prepare some adapter factories
+ context.registerAdapter(ResourceResolver.class, Integer.class, 5);
+ context.registerAdapter(ResourceResolver.class, String.class, new Function<ResourceResolver,String>() {
+ @Override
+ public String apply(ResourceResolver input) {
+ return ">" + input.toString();
+ }
+ });
+
+ // test adaption
+ assertEquals(Integer.valueOf(5), context.resourceResolver().adaptTo(Integer.class));
+ assertEquals(">" + context.resourceResolver().toString(), context.resourceResolver().adaptTo(String.class));
+ assertNull(context.resourceResolver().adaptTo(Double.class));
+ }
+
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.