You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2014/11/20 11:18:09 UTC

svn commit: r1640710 [2/2] - in /sling/trunk/bundles/extensions/models: api/src/main/java/org/apache/sling/models/annotations/injectorspecific/ api/src/main/java/org/apache/sling/models/spi/injectorspecific/ impl/src/main/java/org/apache/sling/models/i...

Modified: sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java?rev=1640710&r1=1640709&r2=1640710&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java Thu Nov 20 10:18:08 2014
@@ -51,6 +51,7 @@ import org.mockito.invocation.Invocation
 import org.mockito.runners.MockitoJUnitRunner;
 import org.mockito.stubbing.Answer;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.service.component.ComponentContext;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -71,8 +72,12 @@ public class ResourceModelClassesTest {
 
         factory = new ModelAdapterFactory();
         factory.activate(componentCtx);
-        factory.bindInjector(new ValueMapInjector(), new ServicePropertiesMap(2, 2));
+        ValueMapInjector valueMapInjector = new ValueMapInjector();
+        factory.bindInjector(valueMapInjector, new ServicePropertiesMap(2, 2));
         factory.bindInjector(new ChildResourceInjector(), new ServicePropertiesMap(1, 1));
+        
+        factory.bindInjectAnnotationProcessorFactory(valueMapInjector,
+                Collections.<String, Object> singletonMap(Constants.SERVICE_ID, 2L));
     }
 
     @Test
@@ -205,10 +210,9 @@ public class ResourceModelClassesTest {
     }
 
     @Test
-    public void testRequiredPropertyModelOptionalStrategyAvailable() {
+    public void testRequiredPropertyMissingModelOptionalStrategy() {
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("first", "first-value");
-        map.put("third", "third-value");
         ValueMap vm = spy(new ValueMapDecorator(map));
 
         Resource res = mock(Resource.class);
@@ -217,14 +221,16 @@ public class ResourceModelClassesTest {
         ResourceModelWithRequiredFieldOptionalStrategy model = factory.getAdapter(res, ResourceModelWithRequiredFieldOptionalStrategy.class);
         assertNull(model);
 
-        verify(vm).get("optional", String.class);
-        verify(vm).get("required", String.class);
+        verify(vm).get("optional1", String.class);
+        verify(vm).get("required1", String.class);
     }
 
     @Test
-    public void testRequiredPropertyModelOptionalStrategyNotAvailable() {
+    public void testRequiredPropertyModelOptionalStrategy() {
         Map<String, Object> map = new HashMap<String, Object>();
-        map.put("required", "first-value");
+        map.put("required1", "required value");
+        map.put("required2", "required value");
+        map.put("required3", "required value");
         ValueMap vm = spy(new ValueMapDecorator(map));
 
         Resource res = mock(Resource.class);
@@ -232,9 +238,11 @@ public class ResourceModelClassesTest {
 
         ResourceModelWithRequiredFieldOptionalStrategy model = factory.getAdapter(res, ResourceModelWithRequiredFieldOptionalStrategy.class);
         assertNotNull(model);
-
-        verify(vm).get("optional", String.class);
-        verify(vm).get("required", String.class);
+        assertEquals("required value", model.getRequired1());
+        assertEquals("required value", model.getRequired2());
+        
+        verify(vm).get("optional1", String.class);
+        verify(vm).get("required1", String.class);
     }
 
     @Test

Modified: sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/injectors/SelfInjectorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/injectors/SelfInjectorTest.java?rev=1640710&r1=1640709&r2=1640710&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/injectors/SelfInjectorTest.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/impl/injectors/SelfInjectorTest.java Thu Nov 20 10:18:08 2014
@@ -28,6 +28,8 @@ import javax.servlet.http.HttpServletReq
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.injectorspecific.Self;
 import org.apache.sling.models.impl.model.ConstructorParameter;
 import org.apache.sling.models.spi.injectorspecific.StaticInjectAnnotationProcessorFactory;
@@ -48,15 +50,19 @@ public class SelfInjectorTest {
     @Mock
     private AnnotatedElement annotatedElement;
     
+    @Mock
+    private Model modelAnnotation;
+    
     private ConstructorParameter firstConstructorParameter;
     private ConstructorParameter secondConstructorParameter;
     
     @Before
     public void setup() {
+        when(modelAnnotation.defaultInjectionStrategy()).thenReturn(DefaultInjectionStrategy.REQUIRED);
         firstConstructorParameter = new ConstructorParameter(new Annotation[0], Object.class, Object.class, true, 0,
-                new StaticInjectAnnotationProcessorFactory[0]);
+                new StaticInjectAnnotationProcessorFactory[0], null);
         secondConstructorParameter = new ConstructorParameter(new Annotation[0], Object.class, Object.class, true, 1,
-                new StaticInjectAnnotationProcessorFactory[0]);
+                new StaticInjectAnnotationProcessorFactory[0], null);
     }
 
     @Test

Modified: sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourceModelWithRequiredFieldOptionalStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourceModelWithRequiredFieldOptionalStrategy.java?rev=1640710&r1=1640709&r2=1640710&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourceModelWithRequiredFieldOptionalStrategy.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/test/java/org/apache/sling/models/testmodels/classes/ResourceModelWithRequiredFieldOptionalStrategy.java Thu Nov 20 10:18:08 2014
@@ -22,23 +22,44 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Required;
+import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy;
+import org.apache.sling.models.annotations.injectorspecific.ResourcePath;
+import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
 
 @Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 public class ResourceModelWithRequiredFieldOptionalStrategy {
 
+    // although this is marked with optional=false, this is still optional, because injectionStrategy has a higher priority (even if it is only the default)
+    // compare also with https://issues.apache.org/jira/browse/SLING-4155
+    @ValueMapValue(optional=false)
+    private String optional5;
+    
     @Inject
-    private String optional;
+    private String optional1;
 
     @Inject
     @Required
-    private String required;
+    private String required1;
+    
+    @ValueMapValue
+    private String optional2;
+    
+    @ValueMapValue(optional=true)
+    private String optional3;
+    
+    @ValueMapValue(injectionStrategy=InjectionStrategy.OPTIONAL)
+    private String optional4;
+    
+    @ValueMapValue(injectionStrategy=InjectionStrategy.REQUIRED)
+    private String required2;
 
-    public String getRequired() {
-        return required;
+    public String getRequired1() {
+        return required1;
     }
 
-    public String getOptional() {
-        return optional;
+    public String getRequired2() {
+        return required2;
     }
+    
 
 }