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"));
+ }
}