Author: swd847
Date: 2010-01-27 23:56:14 -0500 (Wed, 27 Jan 2010)
New Revision: 5652
Added:
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/AnnotatedTypesTest.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/Chair.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/ComfyChair.java
Modified:
core/trunk/impl/src/main/java/org/jboss/weld/util/AnnotatedTypes.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedType.java
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedTypeBuilder.java
Log:
added tests and minor bug fixes to AnnotatedTypes
Modified: core/trunk/impl/src/main/java/org/jboss/weld/util/AnnotatedTypes.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/util/AnnotatedTypes.java 2010-01-28
03:51:14 UTC (rev 5651)
+++ core/trunk/impl/src/main/java/org/jboss/weld/util/AnnotatedTypes.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -207,7 +207,7 @@
builder.append(clazz.getName());
builder.append(createAnnotationCollectionId(annotations));
- builder.append("{ ");
+ builder.append("{");
// now deal with the fields
List<AnnotatedField<? super X>> sortedFields = new
ArrayList<AnnotatedField<? super X>>();
@@ -256,7 +256,7 @@
{
for (AnnotatedParameter<X> parameter : callable.getParameters())
{
- if (parameter.getAnnotations().isEmpty())
+ if (!parameter.getAnnotations().isEmpty())
{
return true;
}
@@ -448,7 +448,7 @@
public static boolean compareAnnotatedField(AnnotatedField<?> f1,
AnnotatedField<?> f2)
{
- if (f1.getJavaMember().equals(f2.getJavaMember()))
+ if (!f1.getJavaMember().equals(f2.getJavaMember()))
{
return false;
}
@@ -457,7 +457,7 @@
public static boolean compareAnnotatedCallable(AnnotatedCallable<?> m1,
AnnotatedCallable<?> m2)
{
- if (m1.getJavaMember().equals(m2.getJavaMember()))
+ if (!m1.getJavaMember().equals(m2.getJavaMember()))
{
return false;
}
@@ -473,7 +473,7 @@
*/
public static boolean compareAnnotatedTypes(AnnotatedType<?> t1,
AnnotatedType<?> t2)
{
- if (t1.getJavaClass().equals(t2.getJavaClass()))
+ if (!t1.getJavaClass().equals(t2.getJavaClass()))
{
return false;
}
@@ -481,6 +481,11 @@
{
return false;
}
+
+ if (t1.getFields().size() != t2.getFields().size())
+ {
+ return false;
+ }
Map<Field, AnnotatedField<?>> fields = new HashMap<Field,
AnnotatedField<?>>();
for (AnnotatedField<?> f : t2.getFields())
{
@@ -501,6 +506,10 @@
}
}
+ if (t1.getMethods().size() != t2.getMethods().size())
+ {
+ return false;
+ }
Map<Method, AnnotatedMethod<?>> methods = new HashMap<Method,
AnnotatedMethod<?>>();
for (AnnotatedMethod<?> f : t2.getMethods())
{
@@ -520,7 +529,10 @@
return false;
}
}
-
+ if (t1.getConstructors().size() != t2.getConstructors().size())
+ {
+ return false;
+ }
Map<Constructor<?>, AnnotatedConstructor<?>> constructors = new
HashMap<Constructor<?>, AnnotatedConstructor<?>>();
for (AnnotatedConstructor<?> f : t2.getConstructors())
{
Added:
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/AnnotatedTypesTest.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/AnnotatedTypesTest.java
(rev 0)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/AnnotatedTypesTest.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -0,0 +1,152 @@
+package org.jboss.weld.tests.unit.util;
+
+import java.util.Iterator;
+
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.util.AnnotationLiteral;
+
+import org.jboss.weld.introspector.WeldClass;
+import org.jboss.weld.introspector.jlr.WeldClassImpl;
+import org.jboss.weld.metadata.TypeStore;
+import org.jboss.weld.resources.ClassTransformer;
+import org.jboss.weld.tests.util.annotated.TestAnnotatedTypeBuilder;
+import org.jboss.weld.util.AnnotatedTypes;
+import org.testng.annotations.Test;
+
+/**
+ * Test comparison and id creation for AnnotatedTypes
+ * @author Stuart Douglas <stuart(a)baileyroberts.com.au>
+ *
+ */
+public class AnnotatedTypesTest
+{
+ /**
+ * tests the AnnotatedTypes.compareAnnotatedTypes
+ */
+ @Test
+ public void testComparison() throws SecurityException, NoSuchFieldException,
NoSuchMethodException
+ {
+ //check that two weld classes on the same underlying are equal
+ TypeStore ts = new TypeStore();
+ ClassTransformer ct =new ClassTransformer(ts);
+ WeldClass<Chair> chair1 = WeldClassImpl.of(Chair.class,ct);
+ WeldClass<Chair> chair2 = WeldClassImpl.of(Chair.class,ct);
+ assert AnnotatedTypes.compareAnnotatedTypes(chair1, chair2);
+
+ //check that a different implementation of annotated type is equal to the weld
implementation
+ TestAnnotatedTypeBuilder<Chair> builder = new
TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToClass(new DefaultLiteral());
+ builder.addToField(Chair.class.getField("legs"), new ProducesLiteral());
+ builder.addToMethod(Chair.class.getMethod("sit"), new
ProducesLiteral());
+ AnnotatedType<Chair> chair3 = builder.create();
+ assert AnnotatedTypes.compareAnnotatedTypes(chair1, chair3);
+
+ //check that the implementation returns false if a field annotation changes
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToClass(new DefaultLiteral());
+ builder.addToField(Chair.class.getField("legs"), new DefaultLiteral());
+ builder.addToMethod(Chair.class.getMethod("sit"), new ProducesLiteral());
+ chair3 = builder.create();
+ assert !AnnotatedTypes.compareAnnotatedTypes(chair1, chair3);
+
+ //check that the implementation returns false if a class level annotation changes
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToClass(new ProducesLiteral());
+ builder.addToField(Chair.class.getField("legs"), new DefaultLiteral());
+ builder.addToMethod(Chair.class.getMethod("sit"), new ProducesLiteral());
+ chair3 = builder.create();
+ assert !AnnotatedTypes.compareAnnotatedTypes(chair1, chair3);
+
+ }
+
+ @Test
+ public void testFieldId() throws SecurityException, NoSuchFieldException
+ {
+ TestAnnotatedTypeBuilder<Chair> builder = new
TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToField(Chair.class.getField("legs"), new ProducesLiteral());
+ AnnotatedType<Chair> chair3 = builder.create();
+ AnnotatedField<? super Chair> field = chair3.getFields().iterator().next();
+ String id = AnnotatedTypes.createFieldId(field);
+ assert
"org.jboss.weld.tests.unit.util.Chair.legs[(a)javax.enterprise.inject.Produces()]".equals(id):
"wrong id for field :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ chair3 = builder.create();
+ field = chair3.getFields().iterator().next();
+ id = AnnotatedTypes.createFieldId(field);
+ assert "org.jboss.weld.tests.unit.util.Chair.legs".equals(id) :
"wrong id for field :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToField(Chair.class.getField("legs"), new
ComfyChairLiteral());
+ chair3 = builder.create();
+ field = chair3.getFields().iterator().next();
+ id = AnnotatedTypes.createFieldId(field);
+ assert
"org.jboss.weld.tests.unit.util.Chair.legs[(a)org.jboss.weld.tests.unit.util.ComfyChair(softness=1)]".equals(id)
: "wrong id for field :" + id;
+ }
+
+ @Test
+ public void testMethodId() throws SecurityException, NoSuchMethodException
+ {
+ TestAnnotatedTypeBuilder<Chair> builder = new
TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToMethod(Chair.class.getMethod("sit"), new
ProducesLiteral());
+ AnnotatedType<Chair> chair3 = builder.create();
+ Iterator<AnnotatedMethod<? super Chair>> it =
chair3.getMethods().iterator();
+ AnnotatedMethod<? super Chair> method = it.next();
+ while(!method.getJavaMember().getName().equals("sit"))method =
it.next();
+ String id = AnnotatedTypes.createCallableId(method);
+ assert
"org.jboss.weld.tests.unit.util.Chair.sit[(a)javax.enterprise.inject.Produces()]()".equals(id):
"wrong id for method :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ chair3 = builder.create();
+ it = chair3.getMethods().iterator();
+ method = it.next();
+ while(!method.getJavaMember().getName().equals("sit"))method =
it.next();
+ id = AnnotatedTypes.createCallableId(method);
+ assert "org.jboss.weld.tests.unit.util.Chair.sit()".equals(id) :
"wrong id for method :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToMethod(Chair.class.getMethod("sit"), new
ComfyChairLiteral());
+ chair3 = builder.create();
+ it = chair3.getMethods().iterator();
+ method = it.next();
+ while(!method.getJavaMember().getName().equals("sit"))method =
it.next();
+ id = AnnotatedTypes.createCallableId(method);
+ assert
"org.jboss.weld.tests.unit.util.Chair.sit[(a)org.jboss.weld.tests.unit.util.ComfyChair(softness=1)]()".equals(id)
: "wrong id for method :" + id;
+ }
+
+ @Test
+ public void testTypeId() throws SecurityException, NoSuchMethodException
+ {
+ TestAnnotatedTypeBuilder<Chair> builder = new
TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToMethod(Chair.class.getMethod("sit"), new
ProducesLiteral());
+ AnnotatedType<Chair> chair3 = builder.create();
+ String id = AnnotatedTypes.createTypeId(chair3);
+ assert
"org.jboss.weld.tests.unit.util.Chair{org.jboss.weld.tests.unit.util.Chair.sit[(a)javax.enterprise.inject.Produces()]();}".equals(id):
"wrong id for type :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ chair3 = builder.create();
+ id = AnnotatedTypes.createTypeId(chair3);
+ assert "org.jboss.weld.tests.unit.util.Chair{}".equals(id) : "wrong
id for type :" + id;
+
+ builder = new TestAnnotatedTypeBuilder<Chair>(Chair.class);
+ builder.addToMethod(Chair.class.getMethod("sit"), new
ComfyChairLiteral());
+ chair3 = builder.create();
+ id = AnnotatedTypes.createTypeId(chair3);
+ assert
"org.jboss.weld.tests.unit.util.Chair{org.jboss.weld.tests.unit.util.Chair.sit[(a)org.jboss.weld.tests.unit.util.ComfyChair(softness=1)]();}".equals(id)
: "wrong id for type :" + id;
+ }
+
+ private static class DefaultLiteral extends AnnotationLiteral<Default>
implements Default {}
+ private static class ProducesLiteral extends AnnotationLiteral<Produces>
implements Produces {}
+ private static class ComfyChairLiteral extends AnnotationLiteral<ComfyChair>
implements ComfyChair
+ {
+ public int softness()
+ {
+ return 1;
+ }
+
+ }
+
+}
Added: core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/Chair.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/Chair.java
(rev 0)
+++ core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/Chair.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -0,0 +1,17 @@
+package org.jboss.weld.tests.unit.util;
+
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.Produces;
+
+@Default
+public class Chair
+{
+ @Produces
+ public int legs;
+
+ @Produces
+ public String sit()
+ {
+ return "sitting";
+ }
+}
Added: core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/ComfyChair.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/ComfyChair.java
(rev 0)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/unit/util/ComfyChair.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -0,0 +1,6 @@
+package org.jboss.weld.tests.unit.util;
+
+public @interface ComfyChair
+{
+ int softness();
+}
Modified:
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedType.java
===================================================================
---
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedType.java 2010-01-28
03:51:14 UTC (rev 5651)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedType.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -34,19 +34,19 @@
super(clazz, typeAnnotations);
this.javaClass = clazz;
this.constructors = new HashSet<AnnotatedConstructor<X>>();
- for (Constructor<?> c : clazz.getConstructors())
+ for (Constructor<?> c : clazz.getDeclaredConstructors())
{
TestAnnotatedConstructor<X> nc = new
TestAnnotatedConstructor<X>(this, c, constructorAnnotations.get(c),
constructorParameterAnnotations.get(c));
constructors.add(nc);
}
this.methods = new HashSet<AnnotatedMethod<? super X>>();
- for (Method m : clazz.getMethods())
+ for (Method m : clazz.getDeclaredMethods())
{
TestAnnotatedMethod<X> met = new TestAnnotatedMethod<X>(this, m,
methodAnnotations.get(m), methodParameterAnnotations.get(m));
methods.add(met);
}
this.fields = new HashSet<AnnotatedField<? super X>>();
- for (Field f : clazz.getFields())
+ for (Field f : clazz.getDeclaredFields())
{
TestAnnotatedField<X> b = new TestAnnotatedField<X>(this, f,
fieldAnnotations.get(f));
fields.add(b);
Modified:
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedTypeBuilder.java
===================================================================
---
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedTypeBuilder.java 2010-01-28
03:51:14 UTC (rev 5651)
+++
core/trunk/tests/src/test/java/org/jboss/weld/tests/util/annotated/TestAnnotatedTypeBuilder.java 2010-01-28
04:56:14 UTC (rev 5652)
@@ -34,6 +34,7 @@
public TestAnnotatedTypeBuilder(Class<X> underlying)
{
this.underlying = underlying;
+
}
public TestAnnotatedTypeBuilder<X> addToClass(Annotation a)