POLYGENE-251 - Testcase for Generic Concerns and Generic SideEffects.

Signed-off-by: niclas <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/339784cf
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/339784cf
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/339784cf

Branch: refs/heads/master
Commit: 339784cf4efdb60431de1831cf6b43835056670a
Parents: 49555b4
Author: niclas <[email protected]>
Authored: Mon May 15 20:58:54 2017 +0800
Committer: niclas <[email protected]>
Committed: Mon May 15 20:59:06 2017 +0800

----------------------------------------------------------------------
 .../api/composite/DefaultMethodsFilter.java     | 17 ++++
 .../composite/InterfaceDefaultMethodsMixin.java | 17 +---
 .../composite/InterfaceDefaultMethodsTest.java  | 82 +++++++++++++++++++-
 3 files changed, 100 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/339784cf/core/api/src/main/java/org/apache/polygene/api/composite/DefaultMethodsFilter.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/composite/DefaultMethodsFilter.java
 
b/core/api/src/main/java/org/apache/polygene/api/composite/DefaultMethodsFilter.java
new file mode 100644
index 0000000..e7c0b2e
--- /dev/null
+++ 
b/core/api/src/main/java/org/apache/polygene/api/composite/DefaultMethodsFilter.java
@@ -0,0 +1,17 @@
+package org.apache.polygene.api.composite;
+
+import java.lang.reflect.Method;
+import org.apache.polygene.api.common.AppliesToFilter;
+
+/**
+ * Filter Default Interface Methods to apply a generic fragment.
+ */
+public class DefaultMethodsFilter
+    implements AppliesToFilter
+{
+    @Override
+    public boolean appliesTo( Method method, Class<?> mixin, Class<?> 
compositeType, Class<?> modifierClass )
+    {
+        return method.isDefault();
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/339784cf/core/runtime/src/main/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsMixin.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsMixin.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsMixin.java
index b150a86..cb2875f 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsMixin.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsMixin.java
@@ -26,11 +26,11 @@ import java.lang.reflect.Method;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import org.apache.polygene.api.common.AppliesTo;
-import org.apache.polygene.api.common.AppliesToFilter;
 import org.apache.polygene.api.composite.Composite;
+import org.apache.polygene.api.composite.DefaultMethodsFilter;
 import org.apache.polygene.api.injection.scope.This;
 
-@AppliesTo( { InterfaceDefaultMethodsMixin.DefaultMethodsFilter.class } )
+@AppliesTo( { DefaultMethodsFilter.class } )
 public class InterfaceDefaultMethodsMixin
     implements InvocationHandler
 {
@@ -54,19 +54,6 @@ public class InterfaceDefaultMethodsMixin
         return method.invoke( me, args );
     }
 
-    /**
-     * Filter Default Interface Methods to apply generic Mixin.
-     */
-    public static class DefaultMethodsFilter
-        implements AppliesToFilter
-    {
-        @Override
-        public boolean appliesTo( Method method, Class<?> mixin, Class<?> 
compositeType, Class<?> modifierClass )
-        {
-            return method.isDefault();
-        }
-    }
-
     private MethodCallHandler forMethod( Method method )
     {
         return methodHandleCache.computeIfAbsent( method, 
this::createMethodCallHandler );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/339784cf/core/runtime/src/test/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsTest.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/test/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsTest.java
 
b/core/runtime/src/test/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsTest.java
index 5a57a82..806f981 100644
--- 
a/core/runtime/src/test/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsTest.java
+++ 
b/core/runtime/src/test/java/org/apache/polygene/runtime/composite/InterfaceDefaultMethodsTest.java
@@ -17,7 +17,11 @@
  */
 package org.apache.polygene.runtime.composite;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import org.apache.polygene.api.common.AppliesTo;
 import org.apache.polygene.api.common.UseDefaults;
+import org.apache.polygene.api.composite.DefaultMethodsFilter;
 import org.apache.polygene.api.concern.ConcernOf;
 import org.apache.polygene.api.concern.Concerns;
 import org.apache.polygene.api.constraint.ConstraintViolationException;
@@ -102,6 +106,36 @@ public class InterfaceDefaultMethodsTest extends 
AbstractPolygeneTest
         }
     }
 
+    @Concerns( DefaultMethodsGenericConcern.class )
+    public interface DefaultMethodsGenericConcerns extends DefaultMethods
+    {
+        @Override
+        default String sayHello( String name )
+        {
+            return greeting().get() + ", " + name + '!';
+        }
+
+        default String sayGoodBye( String name )
+        {
+            return "Good Bye, " + name + '!';
+        }
+    }
+
+    @AppliesTo( DefaultMethodsFilter.class )
+    public static class DefaultMethodsGenericConcern extends 
ConcernOf<InvocationHandler>
+        implements InvocationHandler
+    {
+        static int count = 0;
+
+        @Override
+        public Object invoke( Object o, Method method, Object[] objects )
+            throws Throwable
+        {
+            count++;
+            return next.invoke( o, method, objects );
+        }
+    }
+
     @SideEffects( DefaultMethodsSideEffect.class )
     public interface DefaultMethodsSideEffects extends DefaultMethods
     {
@@ -125,6 +159,31 @@ public class InterfaceDefaultMethodsTest extends 
AbstractPolygeneTest
         }
     }
 
+    @SideEffects( DefaultMethodsGenericSideEffect.class )
+    public interface DefaultMethodsGenericSideEffects extends DefaultMethods
+    {
+        @Override
+        default String sayHello( String name )
+        {
+            return greeting().get() + ", " + name + '!';
+        }
+    }
+
+    @AppliesTo( DefaultMethodsFilter.class )
+    public static class DefaultMethodsGenericSideEffect extends 
SideEffectOf<InvocationHandler>
+        implements InvocationHandler
+    {
+        static int count = 0;
+
+        @Override
+        public Object invoke( Object o, Method method, Object[] objects )
+            throws Throwable
+        {
+            count++;
+            return null;
+        }
+    }
+
     @Override
     public void assemble( final ModuleAssembly module )
         throws AssemblyException
@@ -134,7 +193,9 @@ public class InterfaceDefaultMethodsTest extends 
AbstractPolygeneTest
                            MixinDefaultMethods.class,
                            DefaultMethodsConstraints.class,
                            DefaultMethodsConcerns.class,
-                           DefaultMethodsSideEffects.class
+                           DefaultMethodsSideEffects.class,
+                           DefaultMethodsGenericConcerns.class,
+                           DefaultMethodsGenericSideEffects.class
                          );
     }
 
@@ -182,6 +243,15 @@ public class InterfaceDefaultMethodsTest extends 
AbstractPolygeneTest
     }
 
     @Test
+    public void defaultMethodsGenericConcerns()
+    {
+        DefaultMethodsGenericConcerns composite = 
transientBuilderFactory.newTransient( DefaultMethodsGenericConcerns.class );
+        assertThat( composite.sayHello( "John" ), equalTo( "Hello, John!" ) );
+        assertThat( composite.sayGoodBye( "John" ), equalTo( "Good Bye, John!" 
) );
+        assertThat( DefaultMethodsGenericConcern.count, equalTo( 2 ) );
+    }
+
+    @Test
     public void defaultMethodsSideEffects()
     {
         DefaultMethodsSideEffects composite = 
transientBuilderFactory.newTransient( DefaultMethodsSideEffects.class );
@@ -190,4 +260,14 @@ public class InterfaceDefaultMethodsTest extends 
AbstractPolygeneTest
         assertThat( composite.sayHello( "John" ), equalTo( "Hello, John!" ) );
         assertThat( DefaultMethodsSideEffect.count, equalTo( 3 ) );
     }
+
+    @Test
+    public void defaultMethodsGenericSideEffects()
+    {
+        DefaultMethodsGenericSideEffects composite = 
transientBuilderFactory.newTransient( DefaultMethodsGenericSideEffects.class );
+        assertThat( composite.sayHello( "John" ), equalTo( "Hello, John!" ) );
+        assertThat( composite.sayHello( "John" ), equalTo( "Hello, John!" ) );
+        assertThat( composite.sayHello( "John" ), equalTo( "Hello, John!" ) );
+        assertThat( DefaultMethodsGenericSideEffect.count, equalTo( 3 ) );
+    }
 }

Reply via email to