diff options
author | aclement <aclement> | 2008-01-16 23:58:16 +0000 |
---|---|---|
committer | aclement <aclement> | 2008-01-16 23:58:16 +0000 |
commit | 688079371919fa00ea93157e3cb6521126f398df (patch) | |
tree | 5c09839abf01b003a5289c34e26ac681257b9cce /tests | |
parent | 9ad3c30edde027b2f1bca1bd39decf04e96b8c23 (diff) | |
download | aspectj-688079371919fa00ea93157e3cb6521126f398df.tar.gz aspectj-688079371919fa00ea93157e3cb6521126f398df.zip |
AspectJ6: test suites
Diffstat (limited to 'tests')
3 files changed, 237 insertions, 0 deletions
diff --git a/tests/src/org/aspectj/systemtest/ajc160/AllTestsAspectJ160.java b/tests/src/org/aspectj/systemtest/ajc160/AllTestsAspectJ160.java new file mode 100644 index 000000000..9f2ce8cd8 --- /dev/null +++ b/tests/src/org/aspectj/systemtest/ajc160/AllTestsAspectJ160.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andy Clement - initial API and implementation + *******************************************************************************/ +package org.aspectj.systemtest.ajc160; + + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class AllTestsAspectJ160 { + + public static Test suite() { + TestSuite suite = new TestSuite("AspectJ 1.6.0 tests"); + //$JUnit-BEGIN$ + suite.addTest(SanityTests.suite()); + //$JUnit-END$ + return suite; + } +} diff --git a/tests/src/org/aspectj/systemtest/ajc160/SanityTests.java b/tests/src/org/aspectj/systemtest/ajc160/SanityTests.java new file mode 100644 index 000000000..bda998979 --- /dev/null +++ b/tests/src/org/aspectj/systemtest/ajc160/SanityTests.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2006 IBM + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Andy Clement - initial API and implementation + *******************************************************************************/ +package org.aspectj.systemtest.ajc160; + +import java.io.File; + +import junit.framework.Test; + +import org.aspectj.apache.bcel.classfile.Attribute; +import org.aspectj.apache.bcel.classfile.Code; +import org.aspectj.apache.bcel.classfile.JavaClass; +import org.aspectj.apache.bcel.classfile.Method; +import org.aspectj.apache.bcel.util.ClassPath; +import org.aspectj.apache.bcel.util.SyntheticRepository; +import org.aspectj.testing.XMLBasedAjcTestCase; + +/* + * Some very trivial tests that help verify things are OK. + * Followed by some Java6 specific checks to ensure the class files are well formed. + * A Java6 JDK is not required to run these tests as they introspect the .class files + * rather than executing them. + */ +public class SanityTests extends org.aspectj.testing.XMLBasedAjcTestCase { + + // Incredibly trivial test programs that check the compiler works at all (these are easy-ish to debug) + public void testSimpleJava_A() { runTest("simple - a");} + public void testSimpleJava_B() { runTest("simple - b");} + public void testSimpleCode_C() { runTest("simple - c");} + public void testSimpleCode_D() { runTest("simple - d");} + public void testSimpleCode_E() { runTest("simple - e");} + public void testSimpleCode_F() { runTest("simple - f");} + public void testSimpleCode_G() { runTest("simple - g");} + + public void testSimpleCode_H() { runTest("simple - h");} + public void testSimpleCode_I() { runTest("simple - i");} + + // Check the version number in the classfiles is correct when Java6 options specified + public void testVersionCorrect1() throws ClassNotFoundException { + runTest("simple - j"); + checkVersion("A",50,0); + } + public void testVersionCorrect2() throws ClassNotFoundException { + runTest("simple - k"); + checkVersion("A",50,0); + } + public void testVersionCorrect3() throws ClassNotFoundException { + runTest("simple - l"); + checkVersion("A",50,0); + } + public void testVersionCorrect4() throws ClassNotFoundException {// check it is 49.0 when -1.5 is specified + runTest("simple - m"); + checkVersion("A",49,0); + } + + // Check the stackmap stuff appears for methods in a Java6 file +// public void testStackMapAttributesAppear() throws ClassNotFoundException { +// runTest("simple - n"); +// checkStackMapExistence("A","<init>_<clinit>"); +// checkStackMapExistence("X","<init>_<clinit>_ajc$pointcut$$complicatedPointcut$1fe"); +// } + + /* For the specified class, check that each method has a stackmap attribute */ + private void checkStackMapExistence(String classname,String toIgnore) throws ClassNotFoundException { + toIgnore="_"+(toIgnore==null?"":toIgnore)+"_"; + JavaClass jc = getClassFrom(ajc.getSandboxDirectory(),classname); + Method[] methods = jc.getMethods(); + for (int i = 0; i < methods.length; i++) { + Method method = methods[i]; + if (toIgnore.contains("_"+method.getName()+"_")) continue; + boolean hasStackMapAttribute = findAttribute(method.getAttributes(),"StackMapTable"); + if (!hasStackMapAttribute) fail("Could not find StackMap attribute for method "+method.getName()); + } + } + + private boolean findAttribute(Attribute[] attrs,String attributeName) { + if (attrs==null) return false; + for (int i = 0; i < attrs.length; i++) { + Attribute attribute = attrs[i]; + if (attribute.getName().equals(attributeName)) return true; + //System.out.println(attribute.getName()); + if (attribute.getName().equals("Code")) { + Code c = (Code)attribute; + Attribute[] codeAttributes = c.getAttributes(); + for (int j = 0; j < codeAttributes.length; j++) { + Attribute codeAttribute = codeAttributes[j]; + if (codeAttribute.getName().equals(attributeName)) return true; + //System.out.println(codeAttribute.getName()); + } + } + } + return false; + } + + private void checkVersion(String classname,int major,int minor) throws ClassNotFoundException { + JavaClass jc = getClassFrom(ajc.getSandboxDirectory(),classname); + if (jc.getMajor()!=major) fail("Expected major version to be "+major+" but was "+jc.getMajor()); + if (jc.getMinor()!=minor) fail("Expected minor version to be "+minor+" but was "+jc.getMinor()); + } + + // Check the stackmap stuff is removed when a method gets woven (for now...) +// public void testStackMapAttributesDeletedInWovenCode() { +// fail("Not implemented"); +// } + + + ///////////////////////////////////////// + public SyntheticRepository createRepos(File cpentry) { + ClassPath cp = new ClassPath(cpentry+File.pathSeparator+System.getProperty("java.class.path")); + return SyntheticRepository.getInstance(cp); + } + + protected JavaClass getClassFrom(File where,String clazzname) throws ClassNotFoundException { + SyntheticRepository repos = createRepos(where); + return repos.loadClass(clazzname); + } + + ///////////////////////////////////////// + public static Test suite() { + return XMLBasedAjcTestCase.loadSuite(SanityTests.class); + } + + protected File getSpecFile() { + return new File("../tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml"); + } + + +} diff --git a/tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml b/tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml new file mode 100644 index 000000000..3d5654361 --- /dev/null +++ b/tests/src/org/aspectj/systemtest/ajc160/sanity-tests.xml @@ -0,0 +1,76 @@ +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"[]> + +<!-- AspectJ v1.6.0 Tests --> +<suite> + + <!-- empty class --> + <ajc-test dir="bugs160/simplejava" title="simple - a"> + <compile files="SimpleA.java" options="-1.5"/> + </ajc-test> + + <!-- class with one method --> + <ajc-test dir="bugs160/simplejava" title="simple - b"> + <compile files="SimpleB.java" options="-1.5"/> + <run class="SimpleB"/> + </ajc-test> + + <!-- empty aspect --> + <ajc-test dir="bugs160/simplejava" title="simple - c"> + <compile files="SimpleC.java" options="-1.5"/> + </ajc-test> + + <!-- simple before --> + <ajc-test dir="bugs160/simplejava" title="simple - d"> + <compile files="SimpleD.java" options="-1.5"/> + </ajc-test> + + <!-- simple itd field --> + <ajc-test dir="bugs160/simplejava" title="simple - e"> + <compile files="SimpleE.java" options="-1.5"/> + </ajc-test> + + <!-- aspect with main calling a static method --> + <ajc-test dir="bugs160/simplejava" title="simple - f"> + <compile files="SimpleF.java" options="-1.5"/> + </ajc-test> + + <!-- pertarget --> + <ajc-test dir="bugs160/simplejava" title="simple - g"> + <compile files="SimpleG.java" /> + </ajc-test> + + <!-- generic ctor itds --> + <ajc-test dir="bugs160/simplejava" title="simple - h"> + <compile files="SimpleH.java" options="-1.5"/> + </ajc-test> + + <!-- overriding generic itd methods --> + <ajc-test dir="bugs160/simplejava" title="simple - i"> + <compile files="SimpleI.java" options="-1.5"/> + </ajc-test> + + <!-- check class file version is 50.0 --> + <ajc-test dir="bugs160/simplejava" title="simple - j"> + <compile files="SimpleJ.java" options="-1.6"/> + </ajc-test> + + <!-- check class file version is 50.0 --> + <ajc-test dir="bugs160/simplejava" title="simple - k"> + <compile files="SimpleJ.java" options="-source 1.6"/> + </ajc-test> + + <!-- check class file version is 50.0 --> + <ajc-test dir="bugs160/simplejava" title="simple - l"> + <compile files="SimpleJ.java" options="-source 1.6 -target 1.6"/> + </ajc-test> + + <!-- check class file version is 49.0 --> + <ajc-test dir="bugs160/simplejava" title="simple - m"> + <compile files="SimpleJ.java" options="-1.5"/> + </ajc-test> + + + <ajc-test dir="bugs160/simplejava" title="simple - n"> + <compile files="SimpleN.java" options="-1.6"/> + </ajc-test> +</suite> |