You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2014/01/03 20:53:40 UTC

svn commit: r1555237 - in /commons/proper/proxy/branches/version-2.0-work: core/src/main/java/org/apache/commons/proxy2/stub/ test/src/test/java/org/apache/commons/proxy2/stub/

Author: mbenson
Date: Fri Jan  3 19:53:40 2014
New Revision: 1555237

URL: http://svn.apache.org/r1555237
Log:
restrict access to TrainingContext; rework method names; permit interrupt-then-resume stubbing

Modified:
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java
    commons/proper/proxy/branches/version-2.0-work/test/src/test/java/org/apache/commons/proxy2/stub/AbstractStubTestCase.java

Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java?rev=1555237&r1=1555236&r2=1555237&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/BaseTrainer.java Fri Jan  3 19:53:40 2014
@@ -110,7 +110,7 @@ public abstract class BaseTrainer<S exte
 
     protected TrainingContext trainingContext()
     {
-        return TrainingContext.getCurrent();
+        return TrainingContext.current();
     }
 
     public <R> WhenObject<R> when(R expression)

Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java?rev=1555237&r1=1555236&r2=1555237&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubBuilder.java Fri Jan  3 19:53:40 2014
@@ -84,16 +84,16 @@ public class StubBuilder<T> implements B
 
     public <O> StubBuilder<T> train(BaseTrainer<?, O> trainer)
     {
+        final TrainingContext trainingContext = TrainingContext.join(proxyFactory);
         try
         {
-            TrainingContext trainingContext = TrainingContext.set(proxyFactory);
             final O trainee = trainingContext.push(trainer.traineeType, switchInterceptor);
             trainer.train(trainee);
             proxyTypes.add(trainer.traineeType);
         }
         finally
         {
-            TrainingContext.clear();
+            trainingContext.part();
         }
         return this;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java?rev=1555237&r1=1555236&r2=1555237&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java Fri Jan  3 19:53:40 2014
@@ -50,15 +50,15 @@ public class StubInterceptorBuilder
 
     public <T> StubInterceptorBuilder train(Trainer<T> trainer)
     {
+        final TrainingContext trainingContext = TrainingContext.join(proxyFactory);
         try
         {
-            final TrainingContext trainingContext = TrainingContext.set(proxyFactory);
             final T stub = trainingContext.push(trainer.traineeType, interceptor);
             trainer.train(stub);
         }
         finally
         {
-            TrainingContext.clear();
+            trainingContext.part();
         }
         return this;
     }

Modified: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java?rev=1555237&r1=1555236&r2=1555237&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java Fri Jan  3 19:53:40 2014
@@ -12,7 +12,7 @@ import java.lang.reflect.Array;
 import java.lang.reflect.Method;
 import java.util.*;
 
-public class TrainingContext
+class TrainingContext
 {
 //----------------------------------------------------------------------------------------------------------------------
 // Fields
@@ -24,23 +24,20 @@ public class TrainingContext
 
     private Deque<TrainingContextFrame<?>> frameDeque = new LinkedList<TrainingContextFrame<?>>();
 
+    private final TrainingContext resume;
+
 //----------------------------------------------------------------------------------------------------------------------
 // Static Methods
 //----------------------------------------------------------------------------------------------------------------------
 
-    public static void clear()
-    {
-        TRAINING_CONTEXT.remove();
-    }
-
-    public static TrainingContext getCurrent()
+    static TrainingContext current()
     {
         return TRAINING_CONTEXT.get();
     }
 
-    public static TrainingContext set(ProxyFactory proxyFactory)
+    static TrainingContext join(ProxyFactory proxyFactory)
     {
-        TrainingContext context = new TrainingContext(proxyFactory);
+        final TrainingContext context = new TrainingContext(proxyFactory);
         TRAINING_CONTEXT.set(context);
         return context;
     }
@@ -49,15 +46,28 @@ public class TrainingContext
 // Constructors
 //----------------------------------------------------------------------------------------------------------------------
 
-    public TrainingContext(ProxyFactory proxyFactory)
+    private TrainingContext(ProxyFactory proxyFactory)
     {
         this.proxyFactory = proxyFactory;
+        this.resume = current();
     }
 
 //----------------------------------------------------------------------------------------------------------------------
 // Other Methods
 //----------------------------------------------------------------------------------------------------------------------
 
+    void part()
+    {
+        if (resume == null)
+        {
+            TRAINING_CONTEXT.remove();
+        }
+        else
+        {
+            TRAINING_CONTEXT.set(resume);
+        }
+    }
+
     private TrainingContextFrame<?> peek()
     {
         return frameDeque.peek();
@@ -90,12 +100,12 @@ public class TrainingContext
         return proxyFactory.createInvokerProxy(invoker, type);
     }
 
-    public void record(ArgumentMatcher<?> argumentMatcher)
+    void record(ArgumentMatcher<?> argumentMatcher)
     {
         peek().argumentMatchers.add(argumentMatcher);
     }
 
-    public void then(Interceptor interceptor)
+    void then(Interceptor interceptor)
     {
         peek().then(interceptor);
     }
@@ -222,7 +232,7 @@ public class TrainingContext
         @Override
         public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable
         {
-            final TrainingContextFrame<?> frame = getCurrent().peek();
+            final TrainingContextFrame<?> frame = current().peek();
             if (!frame.getId().equals(id))
             {
                 throw new IllegalStateException("Wrong stub!");

Modified: commons/proper/proxy/branches/version-2.0-work/test/src/test/java/org/apache/commons/proxy2/stub/AbstractStubTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/test/src/test/java/org/apache/commons/proxy2/stub/AbstractStubTestCase.java?rev=1555237&r1=1555236&r2=1555237&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/test/src/test/java/org/apache/commons/proxy2/stub/AbstractStubTestCase.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/test/src/test/java/org/apache/commons/proxy2/stub/AbstractStubTestCase.java Fri Jan  3 19:53:40 2014
@@ -413,4 +413,29 @@ public abstract class AbstractStubTestCa
         });
         assertArrayEquals(new String[] { "One", "Two" }, proxy.stringArray());
     }
+
+    /*
+     * This test replicates #thenStub() functionality in a more "ignorant" (ergo versatile) manner.
+     */
+    @Test
+    public void testInterruptResume()
+    {
+        final StubInterface proxy = createProxy(new Trainer<StubInterface>()
+        {
+            @Override
+            protected void train(StubInterface trainee)
+            {
+                when(trainee.stub()).thenReturn(createProxy(new Trainer<StubInterface>()
+                {
+                    @Override
+                    protected void train(StubInterface trainee)
+                    {
+                        when(trainee.one("Hello")).thenReturn("World");
+                    }
+                }));
+            }
+        });
+        assertNotNull(proxy.stub());
+        assertEquals("World", proxy.stub().one("Hello"));
+    }
 }