hello zsolt.

it should be possible with a code snippet like this:

context.registerService(AdapterFactory.class, anonymousFactoryInstance, 
ImmutableMap.<String, Object>builder()
    .put(AdapterFactory.ADAPTABLE_CLASSES, new String[] {
      SlingHttpServletRequest.class.getName()
    })
    .put(AdapterFactory.ADAPTER_CLASSES, new String[] {
      XSSAPI.class.getName()
    })
   .build());

ImmutableMap is a shortcut from guava, of course you can use a simple hash map 
as well.
with this you pass in the osgi metadata that is normally read from the SCR 
annotations.

stefan

>-----Original Message-----
>From: Zsolt Grigore [mailto:grigo.billbo...@gmail.com]
>Sent: Monday, May 11, 2015 5:29 PM
>To: users@sling.apache.org
>Subject: Sling Mocks Register Anonymus Adapter Factory
>
>Dear All,
>
>Sorry if this has been already asked, I haven't found any clue how to solve
>that.
>Considering the following JUnit test class:
>
>public class TestComponentTest {
>private ProvidedClass mockProvided = mock(ProvidedClass.class);
>
>@Rule
>public SlingContext context = new SlingContext();
> @Before
>public void setUp() {
>context.addModelsForPackage("com.asd.models");
> context.registerService(new AdapterFactory() {
>@Override
>public <AdapterType> AdapterType getAdapter(Object adapter,
>Class<AdapterType> type) {
>if (adapter instanceof ResourceResolver &&
>type.equals(ProvidedClass.class)) {
>return (AdapterType)mockProvided;
>}
>return null;
>}
>});
>}
> @Test
>public void testAMethod() throws Exception {
>when(mockProvided.someMethod("foo")).thenReturn("bar");
>/*
>...
>*/
>assertEquals(instance.aMethod(), "bar");
>}
>}
>
>Having the adapterfactory implemented as anonymus, is there any possibility
>to register and use that inside SlingContext? Eg by getting a reference to
>the Adapter Manager somehow to call it's registerFactory?
>
>I've tried multiple ways[1][2]  but inside the "instance" the current
>resource never adapts to the desired ProvidedClass possibly because of the
>lack of SCR metadata. The original AdapterFactory is provided by the
>framework I use so I can't register it the way the docs suggests.
>
>Thanks
>Zsolt
>
>[1]
>http://sling.apache.org/documentation/development/sling-mock.html#adapter-
>factories
>[2] http://sling.apache.org/documentation/development/osgi-mock.html#usage

Reply via email to