[dependency-shot] r401 committed - Make the annotation mocker threadsafe

0 views
Skip to first unread message

depende...@googlecode.com

unread,
Mar 25, 2011, 2:22:45 PM3/25/11
to depende...@googlegroups.com
Revision: 401
Author: mathieuancelin
Date: Fri Mar 25 11:22:20 2011
Log: Make the annotation mocker threadsafe
http://code.google.com/p/dependency-shot/source/detail?r=401

Modified:

/trunk/dependency-shot-core/src/main/java/cx/ath/mancel01/dependencyshot/util/AnnotationMocker.java

/trunk/dependency-shot-core/src/test/java/cx/ath/mancel01/dependencyshot/test/annotation/AnnotationMockerTest.java

=======================================
---
/trunk/dependency-shot-core/src/main/java/cx/ath/mancel01/dependencyshot/util/AnnotationMocker.java
Fri Mar 25 11:11:37 2011
+++
/trunk/dependency-shot-core/src/main/java/cx/ath/mancel01/dependencyshot/util/AnnotationMocker.java
Fri Mar 25 11:22:20 2011
@@ -24,12 +24,17 @@
import java.util.Map;

/**
+ * Annotation mock to create fake runtime annotations.
*
* @author mathieuancelin
*/
public class AnnotationMocker {

- private static AnnotationMockImpl mock;
+ private static ThreadLocal<AnnotationMockImpl> mock =
+ new ThreadLocal<AnnotationMockImpl>();
+
+ private AnnotationMocker() {
+ }

public static <Z extends Annotation> AnnotationMockSet<Z>
forAnnotation(Class<Z> annotation) {
return AnnotationMockImpl.newMock(annotation);
@@ -40,7 +45,7 @@

@Override
public void with(T value) {
- mock.withObject(value);
+ mock.get().withObject(value);
}
};
}
@@ -73,16 +78,10 @@
}
return this;
}
-
- @Override
- public AnnotationMockWith<T> set(Method method) {
- this.method = method;
- return this;
- }

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
- mock = this;
+ mock.set(this);
this.method = method;
if (method.getName().equals("toString")) {
StringBuilder builder = new StringBuilder();
@@ -101,26 +100,11 @@
return values.get(method.getName());
} else {
try {
- Object value =
anno.getMethod(method.getName()).getDefaultValue();
- if (value != null) {
- return value;
- }
- } catch (Exception e) {
-
- }
- return null;
- //throw new RuntimeException("Method " +
method.getName() + "isn't set ...");
+ return
anno.getMethod(method.getName()).getDefaultValue();
+ } catch (Exception e) { return null; }
}
}
}
-
- @Override
- public T make() {
- return (T) Proxy.newProxyInstance(
- getClass().getClassLoader(),
- new Class[]{anno},
- this);
- }

@Override
public T mock() {
@@ -136,6 +120,7 @@
throw new RuntimeException("Field is not set ...");
}
method = null;
+ mock.remove();
return this;
}

@@ -259,24 +244,21 @@
return withObject(e);
}
}
+
+ public static interface GenericAnnotationMockWith<T> {
+
+ void with(T value);
+ }

public static interface AnnotationMock<T> {

- T make();
-
T mock();
}

public static interface AnnotationMockSet<T> extends AnnotationMock<T>
{

- AnnotationMockWith<T> set(Method method);
-
AnnotationMockWith<T> set(String method);
}
-
- public static interface GenericAnnotationMockWith<T> {
- void with(T value);
- }

public static interface AnnotationMockWith<T> extends
AnnotationMock<T> {

=======================================
---
/trunk/dependency-shot-core/src/test/java/cx/ath/mancel01/dependencyshot/test/annotation/AnnotationMockerTest.java
Fri Mar 25 11:12:13 2011
+++
/trunk/dependency-shot-core/src/test/java/cx/ath/mancel01/dependencyshot/test/annotation/AnnotationMockerTest.java
Fri Mar 25 11:22:20 2011
@@ -29,10 +29,6 @@
import org.junit.Assert;
import org.junit.Test;

-/**
- *
- * @author mathieuancelin
- */
public class AnnotationMockerTest {
static final String hello = "Hello";
static final String kevin = "Kevin";
@@ -48,13 +44,13 @@

Named named = AnnotationMocker.forAnnotation(Named.class)
.set("value").with(hello)
- .make();
+ .mock();
Named mockNamed =
AnnotationMocker.forAnnotation(Named.class).mock();
set(mockNamed.value()).with(kevin);

MyNamed myNamed1 =
AnnotationMocker.forAnnotation(MyNamed.class).mock();
set(myNamed1.ok()).with(Boolean.FALSE);
- MyNamed myNamed2 =
AnnotationMocker.forAnnotation(MyNamed.class).make();
+ MyNamed myNamed2 =
AnnotationMocker.forAnnotation(MyNamed.class).mock();

WebService ws = AnnotationMocker.forAnnotation(WebService.class)
.set("name").with(hello)
@@ -63,7 +59,7 @@
.set("portName").with(port)
.set("wsdlLocation").with(wsdl)
.set("endpointInterface").with(itf)
- .make();
+ .mock();

Assert.assertEquals(hello, ws.name());
Assert.assertEquals(ns, ws.targetNamespace());

Reply all
Reply to author
Forward
0 new messages