From f5104819f3199b747ce9a67951457dea1aee3e01 Mon Sep 17 00:00:00 2001 From: acolyer Date: Thu, 15 Dec 2005 14:27:21 +0000 Subject: [PATCH] making the tests more resilient to legitimate cross-vm differences --- .../annotationGen/DeclareAnnotationTest.aj | 36 ++++++++-- tests/java5/ataspectj/annotationGen/Deow.aj | 16 ++++- .../java5/ataspectj/annotationGen/ITDTest.aj | 66 +++++++++++++------ tests/java5/reflection/ReflectBilling.java | 52 +++++++++++++-- .../org/aspectj/systemtest/ajc150/ajc150.xml | 6 +- 5 files changed, 138 insertions(+), 38 deletions(-) diff --git a/tests/java5/ataspectj/annotationGen/DeclareAnnotationTest.aj b/tests/java5/ataspectj/annotationGen/DeclareAnnotationTest.aj index 0c3e4608d..520c5eb96 100644 --- a/tests/java5/ataspectj/annotationGen/DeclareAnnotationTest.aj +++ b/tests/java5/ataspectj/annotationGen/DeclareAnnotationTest.aj @@ -16,11 +16,37 @@ public aspect DeclareAnnotationTest { AjType myType = AjTypeSystem.getAjType(DeclareAnnotationTest.class); DeclareAnnotation[] decAs = myType.getDeclareAnnotations(); if (decAs.length != 4) throw new RuntimeException("Expecting 4 members, got " + decAs.length); - // should be in declaration order... - checkAtType(decAs[0]); - checkAtMethod(decAs[1]); - checkAtField(decAs[2]); - checkAtConstructor(decAs[3]); + + int atTypeIndex = -1; + int atMethodIndex = -1; + int atFieldIndex = -1; + int atConstructorIndex = -1; + + int index = 0; + for (DeclareAnnotation da : decAs) { + + switch (da.getKind()) { + case Field: + atFieldIndex = index++; + break; + case Method: + atMethodIndex = index++; + break; + case Constructor: + atConstructorIndex = index++; + break; + case Type: + atTypeIndex = index++; + break; + default: throw new RuntimeException ("unknown type"); + } + } + + + checkAtType(decAs[atTypeIndex]); + checkAtMethod(decAs[atMethodIndex]); + checkAtField(decAs[atFieldIndex]); + checkAtConstructor(decAs[atConstructorIndex]); } diff --git a/tests/java5/ataspectj/annotationGen/Deow.aj b/tests/java5/ataspectj/annotationGen/Deow.aj index b07e88355..063ac4200 100644 --- a/tests/java5/ataspectj/annotationGen/Deow.aj +++ b/tests/java5/ataspectj/annotationGen/Deow.aj @@ -9,8 +9,20 @@ public aspect Deow { AjType myType = AjTypeSystem.getAjType(Deow.class); DeclareErrorOrWarning[] deows = myType.getDeclareErrorOrWarnings(); if (deows.length != 2) throw new RuntimeException("Excepting 2 deows, got: " + deows.length); - if (deows[0].isError()) throw new RuntimeException("Expecting a warning"); - if (!deows[1].isError()) throw new RuntimeException("Expecting an error"); + int errorCount = 0; + int warningCount = 0; + if (deows[0].isError()) { + errorCount++; + } else { + warningCount++; + } + if (deows[1].isError()) { + errorCount++; + } else { + warningCount++; + } + if (errorCount != 1) { throw new RuntimeException("Expecting 1 declare error but found " + errorCount); } + if (warningCount != 1) { throw new RuntimeException("Expecting 1 declare warning but found " + warningCount); } if (!deows[0].getMessage().equals("dont call system methods")) throw new RuntimeException("Bad message"); if (!deows[1].getMessage().equals("dont call system methods")) throw new RuntimeException("Bad message"); if (!deows[0].getPointcutExpression().toString().equals("call(* java.lang.System.*(..))")) throw new RuntimeException("Bad pc: " + deows[0].getPointcutExpression()); diff --git a/tests/java5/ataspectj/annotationGen/ITDTest.aj b/tests/java5/ataspectj/annotationGen/ITDTest.aj index 26cdc4c2f..dc8089f70 100644 --- a/tests/java5/ataspectj/annotationGen/ITDTest.aj +++ b/tests/java5/ataspectj/annotationGen/ITDTest.aj @@ -35,17 +35,27 @@ public aspect ITDTest { private static void checkITDMs(AjType itdTest) throws ClassNotFoundException { InterTypeMethodDeclaration[] itdms = itdTest.getDeclaredITDMethods(); assertEquals("expecting 3 declared methods, got: ",3,itdms.length); - assertEquals("expecting method name a, got: ","a",itdms[0].getName()); - assertEquals("expecting method name b, got: ","b",itdms[1].getName()); - assertEquals("expecting method name c, got: ","c",itdms[2].getName()); - assertEquals("expecting AjType",AjTypeSystem.getAjType(A.class),itdms[0].getTargetType()); - assertEquals("expecting public method, got:",true,Modifier.isPublic(itdms[0].getModifiers())); - assertEquals("expecting private method, got:",true,Modifier.isPrivate(itdms[1].getModifiers())); - assertEquals("expecting non-public method, got:",false,Modifier.isPublic(itdms[2].getModifiers())); - assertEquals("one param, got: ",1,itdms[0].getParameterTypes().length); - assertEquals("expecting String, got: ",String.class,itdms[0].getParameterTypes()[0].getJavaClass()); - assertEquals("nothing thrown, but: ",0,itdms[1].getExceptionTypes().length); - assertEquals("expecting int, got: ",int.class,itdms[2].getReturnType().getJavaClass()); + InterTypeMethodDeclaration a = null,b = null,c = null; + for (int i = 0; i < itdms.length; i++) { + if (itdms[i].getName().equals("a")) { + a = itdms[i]; + } else if (itdms[i].getName().equals("b")) { + b = itdms[i]; + } else if (itdms[i].getName().equals("c")) { + c = itdms[i]; + } + } + assertNotNull("expecting method name a",a); + assertNotNull("expecting method name b",b); + assertNotNull("expecting method name c",c); + assertEquals("expecting AjType",AjTypeSystem.getAjType(A.class),a.getTargetType()); + assertEquals("expecting public method, got:",true,Modifier.isPublic(a.getModifiers())); + assertEquals("expecting private method, got:",true,Modifier.isPrivate(b.getModifiers())); + assertEquals("expecting non-public method, got:",false,Modifier.isPublic(c.getModifiers())); + assertEquals("one param, got: ",1,a.getParameterTypes().length); + assertEquals("expecting String, got: ",String.class,a.getParameterTypes()[0].getJavaClass()); + assertEquals("nothing thrown, but: ",0,b.getExceptionTypes().length); + assertEquals("expecting int, got: ",int.class,c.getReturnType().getJavaClass()); itdms = itdTest.getITDMethods(); assertEquals("expecting 1 method, got: ",1,itdms.length); assertEquals("expecting method name a, got: ","a",itdms[0].getName()); @@ -62,23 +72,33 @@ public aspect ITDTest { private static void checkITDFs(AjType itdTest) throws ClassNotFoundException { InterTypeFieldDeclaration[] itdfs = itdTest.getDeclaredITDFields(); assertEquals("expecting 3 declared fields, got: ",3, itdfs.length); - assertEquals("expecting field name f, got: ","f",itdfs[0].getName()); - assertEquals("expecting field name g, got: ","g",itdfs[1].getName()); - assertEquals("expecting field name h, got: ","h",itdfs[2].getName()); - assertEquals("expecting AjType",AjTypeSystem.getAjType(A.class),itdfs[0].getTargetType()); - assertEquals("expecting public field, got:",true,Modifier.isPublic(itdfs[0].getModifiers())); - assertEquals("expecting private field, got:",true,Modifier.isPrivate(itdfs[1].getModifiers())); - assertEquals("expecting non-public field, got:",false,Modifier.isPublic(itdfs[2].getModifiers())); - assertEquals("expecting int, got: ",int.class,itdfs[2].getType().getJavaClass()); + InterTypeFieldDeclaration f = null,g = null,h = null; + for (int i = 0; i < itdfs.length; i++) { + if (itdfs[i].getName().equals("f")) { + f = itdfs[i]; + } else if (itdfs[i].getName().equals("g")) { + g = itdfs[i]; + } else if (itdfs[i].getName().equals("h")) { + h = itdfs[i]; + } + } + assertNotNull("expecting field name f",f); + assertNotNull("expecting field name g",g); + assertNotNull("expecting field name h",h); + assertEquals("expecting AjType",AjTypeSystem.getAjType(A.class),f.getTargetType()); + assertEquals("expecting public field, got:",true,Modifier.isPublic(f.getModifiers())); + assertEquals("expecting private field, got:",true,Modifier.isPrivate(g.getModifiers())); + assertEquals("expecting non-public field, got:",false,Modifier.isPublic(h.getModifiers())); + assertEquals("expecting int, got: ",int.class,h.getType().getJavaClass()); itdfs = itdTest.getITDFields(); assertEquals("expecting 1 field, got: ",1, itdfs.length); assertEquals("expecting field name f, got: ","f",itdfs[0].getName()); try { - InterTypeFieldDeclaration f = itdTest.getDeclaredITDField("f",AjTypeSystem.getAjType(A.class)); + f = itdTest.getDeclaredITDField("f",AjTypeSystem.getAjType(A.class)); assertEquals("expecting f, got: ","f",f.getName()); } catch(NoSuchFieldException ex) { throw new RuntimeException("didn't find expected itdf"); } try { - InterTypeFieldDeclaration g = itdTest.getITDField("g",AjTypeSystem.getAjType(A.class)); + g = itdTest.getITDField("g",AjTypeSystem.getAjType(A.class)); throw new RuntimeException("Expected NoSuchFieldException not thrown"); } catch (NoSuchFieldException ex) { } } @@ -154,6 +174,10 @@ public aspect ITDTest { private static void assertEquals(String msg, Object expected, Object actual) { if (!expected.equals(actual)) throw new RuntimeException(msg + " " + actual.toString()); } + + private static void assertNotNull(String msg, Object obj) { + if (obj == null) throw new RuntimeException(msg); + } } diff --git a/tests/java5/reflection/ReflectBilling.java b/tests/java5/reflection/ReflectBilling.java index c93292cb1..1079417fb 100644 --- a/tests/java5/reflection/ReflectBilling.java +++ b/tests/java5/reflection/ReflectBilling.java @@ -1,3 +1,7 @@ +import java.util.Comparator; +import java.util.Set; +import java.util.TreeSet; + import org.aspectj.lang.reflect.*; public class ReflectBilling { @@ -5,14 +9,48 @@ public class ReflectBilling { public static void main(String[] args) { AjType billingType = AjTypeSystem.getAjType(Billing.class); InterTypeMethodDeclaration[] itdms = billingType.getDeclaredITDMethods(); - for(InterTypeMethodDeclaration itdm : itdms) { - System.out.println(itdm); - } + + Set s = new TreeSet(new Comparator() { + public int compare(InterTypeMethodDeclaration m1, InterTypeMethodDeclaration m2) { + if (m1 == m2) return 0; + int vis = (m1.getModifiers() - m2.getModifiers()); + if (vis != 0) return vis; + int name = (m1.getName().compareTo(m2.getName())); + if (name != 0) return name; + try { + return ( + m1.getTargetType().getJavaClass().getName().compareTo( + m2.getTargetType().getJavaClass().getName()) + ); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + }); + for (InterTypeMethodDeclaration itdm : itdms) { s.add(itdm); } + for (Object o : s) { System.out.println(o); } + InterTypeFieldDeclaration[] itdfs = billingType.getDeclaredITDFields(); - for(InterTypeFieldDeclaration itdf : itdfs) { - System.out.println(itdf); - } - } + + Set s2 = new TreeSet(new Comparator() { + public int compare(InterTypeFieldDeclaration m1, InterTypeFieldDeclaration m2) { + if (m1 == m2) return 0; + int vis = (m1.getModifiers() - m2.getModifiers()); + if (vis != 0) return vis; + int name = (m1.getName().compareTo(m2.getName())); + if (name != 0) return name; + try { + return ( + m1.getTargetType().getJavaClass().getName().compareTo( + m2.getTargetType().getJavaClass().getName()) + ); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } + } + }); + for (InterTypeFieldDeclaration itdf : itdfs) { s2.add(itdf); } + for (Object o : s2) { System.out.println(o); } } } \ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml index 7f8b62841..fb69bba97 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml @@ -318,10 +318,10 @@ - - - + + + -- 2.39.5