Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,12 @@
<version>3.5.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.osgi-mock.junit5</artifactId>
<version>3.5.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,32 +34,32 @@
import org.apache.sling.models.testutil.ModelAdapterFactoryUtil;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.sling.testing.mock.osgi.junit5.OsgiContextExtension;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.when;

/**
*
*/
@RunWith(MockitoJUnitRunner.class)
public class ModelAdapterFactoryTest {
@ExtendWith({OsgiContextExtension.class, MockitoExtension.class})
class ModelAdapterFactoryTest {

@Rule
public final OsgiContext context = new OsgiContext();
final OsgiContext context = new OsgiContext();

@Mock
private AdapterManager adapterManager;
Expand Down Expand Up @@ -87,20 +87,20 @@ public class ModelAdapterFactoryTest {
private ModelAdapterFactory factory;

@SuppressWarnings("deprecation")
@Before
public void setUp() {
when(resourceResolver.getSearchPath()).thenReturn(new String[] {"/apps/", "/libs/"});
@BeforeEach
void setUp() {
lenient().when(resourceResolver.getSearchPath()).thenReturn(new String[] {"/apps/", "/libs/"});

context.registerService(BindingsValuesProvidersByContext.class, bindingsValuesProvidersByContext);
context.registerService(AdapterManager.class, adapterManager);
factory = context.registerInjectActivateService(ModelAdapterFactory.class);

ModelAdapterFactoryUtil.addModelsForPackage(context.bundleContext(), JakartaModel1.class, JavaxModel2.class);

Mockito.when(resource.getResourceType()).thenReturn("nt:unstructured");
Mockito.when(resource.getResourceResolver()).thenReturn(resourceResolver);
Mockito.when(jakartaRequest.getResource()).thenReturn(resource);
Mockito.when(javaxRequest.getResource()).thenReturn(resource);
lenient().when(resource.getResourceType()).thenReturn("nt:unstructured");
lenient().when(resource.getResourceResolver()).thenReturn(resourceResolver);
lenient().when(jakartaRequest.getResource()).thenReturn(resource);
lenient().when(javaxRequest.getResource()).thenReturn(resource);
}

protected void registerModel(final Class<?> adaptableType, final Class<?> clazz) {
Expand All @@ -114,15 +114,15 @@ protected void registerModel(final Class<?> adaptableType, final Class<?> clazz)
*/
@Deprecated(since = "2.0.0")
@Test
public void testCreateModelFromWrappedRequestSlingHttpServletRequestResourceClassOfT() {
void testCreateModelFromWrappedRequestSlingHttpServletRequestResourceClassOfT() {
assertNotNull(factory.createModelFromWrappedRequest(javaxRequest, resource, JavaxModel2.class));
}

/**
* Test method for {@link org.apache.sling.models.impl.ModelAdapterFactory#createModelFromWrappedRequest(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.api.resource.Resource, java.lang.Class)}.
*/
@Test
public void testCreateModelFromWrappedRequestSlingJakartaHttpServletRequestResourceClassOfT() {
void testCreateModelFromWrappedRequestSlingJakartaHttpServletRequestResourceClassOfT() {
assertNotNull(factory.createModelFromWrappedRequest(jakartaRequest, resource, JakartaModel1.class));
}

Expand All @@ -132,7 +132,7 @@ public void testCreateModelFromWrappedRequestSlingJakartaHttpServletRequestResou
*/
@Deprecated(since = "2.0.0")
@Test
public void testIsModelClassObjectClassOfQ() {
void testIsModelClassObjectClassOfQ() {
assertTrue(factory.isModelClass(jakartaRequest, JakartaModel1.class));
assertTrue(factory.isModelClass(jakartaRequest, JavaxModel2.class));
assertFalse(factory.isModelClass(jakartaRequest, Object.class));
Expand All @@ -143,7 +143,7 @@ public void testIsModelClassObjectClassOfQ() {
*/
@SuppressWarnings("deprecation")
@Test
public void testIsModelClassClassOfQ() {
void testIsModelClassClassOfQ() {
assertTrue(factory.isModelClass(JakartaModel1.class));
assertTrue(factory.isModelClass(JavaxModel2.class));
assertFalse(factory.isModelClass(Object.class));
Expand All @@ -155,7 +155,7 @@ public void testIsModelClassClassOfQ() {
*/
@Deprecated(since = "2.0.0")
@Test
public void testIsModelAvailableForRequestSlingHttpServletRequest() {
void testIsModelAvailableForRequestSlingHttpServletRequest() {
assertFalse(factory.isModelAvailableForRequest(javaxRequest));

registerModel(org.apache.sling.api.SlingHttpServletRequest.class, JavaxModel2.class);
Expand All @@ -167,7 +167,7 @@ public void testIsModelAvailableForRequestSlingHttpServletRequest() {
* Test method for {@link org.apache.sling.models.impl.ModelAdapterFactory#isModelAvailableForRequest(org.apache.sling.api.SlingJakartaHttpServletRequest)}.
*/
@Test
public void testIsModelAvailableForRequestSlingJakartaHttpServletRequest() {
void testIsModelAvailableForRequestSlingJakartaHttpServletRequest() {
assertFalse(factory.isModelAvailableForRequest(jakartaRequest));

registerModel(SlingJakartaHttpServletRequest.class, JakartaModel1.class);
Expand All @@ -179,7 +179,7 @@ public void testIsModelAvailableForRequestSlingJakartaHttpServletRequest() {
* Test method for {@link org.apache.sling.models.impl.ModelAdapterFactory#getModelFromResource(org.apache.sling.api.resource.Resource)}.
*/
@Test
public void testGetModelFromResource() {
void testGetModelFromResource() {
assertThrows(ModelClassException.class, () -> factory.getModelFromResource(resource));

registerModel(Resource.class, JakartaModel1.class);
Expand All @@ -195,7 +195,7 @@ public void testGetModelFromResource() {
@SuppressWarnings("deprecation")
@Deprecated(since = "2.0.0")
@Test
public void testGetModelFromRequestSlingHttpServletRequest() {
void testGetModelFromRequestSlingHttpServletRequest() {
assertThrows(ModelClassException.class, () -> factory.getModelFromRequest(javaxRequest));

registerModel(org.apache.sling.api.SlingHttpServletRequest.class, JavaxModel2.class);
Expand All @@ -208,7 +208,7 @@ public void testGetModelFromRequestSlingHttpServletRequest() {
* Test method for {@link org.apache.sling.models.impl.ModelAdapterFactory#getModelFromRequest(org.apache.sling.api.SlingJakartaHttpServletRequest)}.
*/
@Test
public void testGetModelFromRequestSlingJakartaHttpServletRequest() {
void testGetModelFromRequestSlingJakartaHttpServletRequest() {
assertThrows(ModelClassException.class, () -> factory.getModelFromRequest(jakartaRequest));

registerModel(SlingJakartaHttpServletRequest.class, JakartaModel1.class);
Expand All @@ -224,17 +224,17 @@ public void testGetModelFromRequestSlingJakartaHttpServletRequest() {
@Deprecated(since = "2.0.0")
@SuppressWarnings({"unchecked", "deprecation"})
@Test
public void testExportModelForRequestSlingHttpServletRequestStringClassOfTMapOfStringString()
void testExportModelForRequestSlingHttpServletRequestStringClassOfTMapOfStringString()
throws ExportException, MissingExporterException {
Map<String, String> options = Map.of();
assertThrows(
ModelClassException.class,
() -> factory.exportModelForRequest(javaxRequest, "exporter1", JavaxModel2.class, options));

ModelExporter mockExporter = context.registerService(ModelExporter.class, Mockito.mock(ModelExporter.class));
Mockito.when(mockExporter.getName()).thenReturn("exporter1");
Mockito.when(mockExporter.isSupported(JavaxModel2.class)).thenReturn(true);
Mockito.when(mockExporter.export(any(), any(Class.class), anyMap())).thenAnswer(invocation -> {
when(mockExporter.getName()).thenReturn("exporter1");
when(mockExporter.isSupported(JavaxModel2.class)).thenReturn(true);
when(mockExporter.export(any(), any(Class.class), anyMap())).thenAnswer(invocation -> {
return invocation.getArgument(0, JavaxModel2.class);
});

Expand All @@ -250,17 +250,17 @@ public void testExportModelForRequestSlingHttpServletRequestStringClassOfTMapOfS
*/
@SuppressWarnings("unchecked")
@Test
public void testExportModelForRequestSlingJakartaHttpServletRequestStringClassOfTMapOfStringString()
void testExportModelForRequestSlingJakartaHttpServletRequestStringClassOfTMapOfStringString()
throws ExportException, MissingExporterException {
Map<String, String> options = Map.of();
assertThrows(
ModelClassException.class,
() -> factory.exportModelForRequest(jakartaRequest, "exporter1", JakartaModel1.class, options));

ModelExporter mockExporter = context.registerService(ModelExporter.class, Mockito.mock(ModelExporter.class));
Mockito.when(mockExporter.getName()).thenReturn("exporter1");
Mockito.when(mockExporter.isSupported(JakartaModel1.class)).thenReturn(true);
Mockito.when(mockExporter.export(any(), any(Class.class), anyMap())).thenAnswer(invocation -> {
when(mockExporter.getName()).thenReturn("exporter1");
when(mockExporter.isSupported(JakartaModel1.class)).thenReturn(true);
when(mockExporter.export(any(), any(Class.class), anyMap())).thenAnswer(invocation -> {
return invocation.getArgument(0, JakartaModel1.class);
});

Expand All @@ -277,7 +277,7 @@ public void testExportModelForRequestSlingJakartaHttpServletRequestStringClassOf
*/
@Deprecated(since = "2.0.0")
@Test
public void testGetModelFromWrappedRequestSlingHttpServletRequestResourceClassOfT() {
void testGetModelFromWrappedRequestSlingHttpServletRequestResourceClassOfT() {
JavaxModel2 modelFromWrappedRequest =
factory.getModelFromWrappedRequest(javaxRequest, resource, JavaxModel2.class);
assertNull(modelFromWrappedRequest);
Expand All @@ -296,7 +296,7 @@ public void testGetModelFromWrappedRequestSlingHttpServletRequestResourceClassOf
* Test method for {@link org.apache.sling.models.impl.ModelAdapterFactory#getModelFromWrappedRequest(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.api.resource.Resource, java.lang.Class)}.
*/
@Test
public void testGetModelFromWrappedRequestSlingJakartaHttpServletRequestResourceClassOfT() {
void testGetModelFromWrappedRequestSlingJakartaHttpServletRequestResourceClassOfT() {
assertNotNull(factory.createModelFromWrappedRequest(jakartaRequest, resource, JakartaModel1.class));

JakartaModel1 target = new JakartaModel1();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@
import org.apache.sling.models.testutil.ModelAdapterFactoryUtil;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.apache.sling.testing.mock.osgi.junit5.OsgiContextExtension;
import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.Assert.assertEquals;
import static org.osgi.framework.Constants.SERVICE_RANKING;
Expand All @@ -42,11 +42,10 @@
* Tests in which order the implementation pickers are handled depending on service ranking.
* For historic/backwards compatibility reasons, higher ranking value means lower priority (inverse to DS behavior).
*/
@RunWith(MockitoJUnitRunner.class)
public class ModelAdapterFactory_ImplementationPickerOrderTest {
@ExtendWith({OsgiContextExtension.class, MockitoExtension.class})
class ModelAdapterFactory_ImplementationPickerOrderTest {

@Rule
public final OsgiContext context = new OsgiContext();
final OsgiContext context = new OsgiContext();

@Mock
private AdapterManager adapterManager;
Expand All @@ -59,8 +58,8 @@ public class ModelAdapterFactory_ImplementationPickerOrderTest {

private ModelAdapterFactory factory;

@Before
public void setUp() {
@BeforeEach
void setUp() {
context.registerService(BindingsValuesProvidersByContext.class, bindingsValuesProvidersByContext);
context.registerService(AdapterManager.class, adapterManager);
factory = context.registerInjectActivateService(ModelAdapterFactory.class);
Expand All @@ -69,7 +68,7 @@ public void setUp() {
}

@Test
public void testFirstImplementationPicker() {
void testFirstImplementationPicker() {
context.registerService(
ImplementationPicker.class, new FirstImplementationPicker(), SERVICE_RANKING, Integer.MAX_VALUE);

Expand All @@ -78,7 +77,7 @@ public void testFirstImplementationPicker() {
}

@Test
public void testMultipleImplementationPickers() {
void testMultipleImplementationPickers() {
// LastImplementationPicker has higher priority
context.registerService(
ImplementationPicker.class, new FirstImplementationPicker(), SERVICE_RANKING, Integer.MAX_VALUE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,26 @@
import org.apache.sling.models.spi.Injector;
import org.apache.sling.models.testutil.ModelAdapterFactoryUtil;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.sling.testing.mock.osgi.junit5.OsgiContext;
import org.apache.sling.testing.mock.osgi.junit5.OsgiContextExtension;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.lenient;
import static org.osgi.framework.Constants.SERVICE_RANKING;

/**
* Tests in which order the injectors are handled depending on service ranking.
* For historic/backwards compatibility reasons, higher ranking value means lower priority (inverse to DS behavior).
*/
@RunWith(MockitoJUnitRunner.class)
public class ModelAdapterFactory_InjectorOrderTest {
@ExtendWith({OsgiContextExtension.class, MockitoExtension.class})
class ModelAdapterFactory_InjectorOrderTest {

@Rule
public final OsgiContext context = new OsgiContext();
final OsgiContext context = new OsgiContext();

@Mock
private AdapterManager adapterManager;
Expand All @@ -70,37 +69,37 @@ public class ModelAdapterFactory_InjectorOrderTest {
private ModelAdapterFactory factory;

@SuppressWarnings("null")
@Before
public void setUp() {
@BeforeEach
void setUp() {
context.registerService(BindingsValuesProvidersByContext.class, bindingsValuesProvidersByContext);
context.registerService(AdapterManager.class, adapterManager);
factory = context.registerInjectActivateService(ModelAdapterFactory.class);

ModelAdapterFactoryUtil.addModelsForPackage(context.bundleContext(), TestModel.class);

when(request.getResource()).thenReturn(resource);
when(resource.adaptTo(ValueMap.class)).thenReturn(new ValueMapDecorator(Map.of("prop1", 1)));
when(request.getAttribute("prop1")).thenReturn(2);
lenient().when(request.getResource()).thenReturn(resource);
lenient().when(resource.adaptTo(ValueMap.class)).thenReturn(new ValueMapDecorator(Map.of("prop1", 1)));
lenient().when(request.getAttribute("prop1")).thenReturn(2);
}

@Test
public void testSingleInjector_ValueMap() {
void testSingleInjector_ValueMap() {
context.registerService(Injector.class, new ValueMapInjector(), SERVICE_RANKING, 2000);

TestModel model = factory.createModel(request, TestModel.class);
assertEquals((Integer) 1, model.getProp1());
}

@Test
public void testSingleInjector_RequestAttribute() {
void testSingleInjector_RequestAttribute() {
context.registerService(Injector.class, new RequestAttributeInjector(), SERVICE_RANKING, 4000);

TestModel model = factory.createModel(request, TestModel.class);
assertEquals((Integer) 2, model.getProp1());
}

@Test
public void testMultipleInjectors() {
void testMultipleInjectors() {
// ValueMapInjector has higher priority
context.registerService(Injector.class, new RequestAttributeInjector(), SERVICE_RANKING, 4000);
context.registerService(Injector.class, new ValueMapInjector(), SERVICE_RANKING, 2000);
Expand Down
Loading