From f282ad80a29cec905333caf13382a8aa9887df2b Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Mon, 25 Jul 2016 07:35:29 -0700 Subject: [PATCH] create copy of 1.6 sanity tests for use at 1.9 --- .../systemtest/ajc190/AllTestsAspectJ190.java | 5 +- .../systemtest/ajc190/SanityTests19.java | 161 ++++++++++++++++++ .../systemtest/ajc190/sanity-tests.xml | 75 ++++++++ 3 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 tests/src/org/aspectj/systemtest/ajc190/SanityTests19.java create mode 100644 tests/src/org/aspectj/systemtest/ajc190/sanity-tests.xml diff --git a/tests/src/org/aspectj/systemtest/ajc190/AllTestsAspectJ190.java b/tests/src/org/aspectj/systemtest/ajc190/AllTestsAspectJ190.java index 36b767f1c..70dc872b5 100644 --- a/tests/src/org/aspectj/systemtest/ajc190/AllTestsAspectJ190.java +++ b/tests/src/org/aspectj/systemtest/ajc190/AllTestsAspectJ190.java @@ -12,15 +12,14 @@ package org.aspectj.systemtest.ajc190; import junit.framework.Test; import junit.framework.TestSuite; -import org.aspectj.systemtest.apt.AptTests; public class AllTestsAspectJ190 { public static Test suite() { - TestSuite suite = new TestSuite("AspectJ 1.8.5 tests"); + TestSuite suite = new TestSuite("AspectJ 1.9.0 tests"); // $JUnit-BEGIN$ suite.addTest(Ajc190Tests.suite()); - suite.addTest(AptTests.suite()); + suite.addTest(SanityTests19.suite()); // $JUnit-END$ return suite; } diff --git a/tests/src/org/aspectj/systemtest/ajc190/SanityTests19.java b/tests/src/org/aspectj/systemtest/ajc190/SanityTests19.java new file mode 100644 index 000000000..35696931a --- /dev/null +++ b/tests/src/org/aspectj/systemtest/ajc190/SanityTests19.java @@ -0,0 +1,161 @@ +/******************************************************************************* + * 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.ajc190; + +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.testing.XMLBasedAjcTestCase; + +/* + * Some very trivial tests that help verify things are OK. + * These are a copy of the earlier Sanity Tests created for 1.6 but these supply the -1.9 option + * to check code generation and modification with that version specified. + */ +public class SanityTests19 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", true); + } + + 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", 53, 0); + } + + public void testVersionCorrect2() throws ClassNotFoundException { + runTest("simple - k"); + checkVersion("A", 53, 0); + } + + public void testVersionCorrect3() throws ClassNotFoundException { + runTest("simple - l"); + checkVersion("A", 53, 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","_"); + // checkStackMapExistence("X","__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 static Test suite() { + return XMLBasedAjcTestCase.loadSuite(SanityTests19.class); + } + + protected File getSpecFile() { + return getClassResource("sanity-tests.xml"); + } + +} diff --git a/tests/src/org/aspectj/systemtest/ajc190/sanity-tests.xml b/tests/src/org/aspectj/systemtest/ajc190/sanity-tests.xml new file mode 100644 index 000000000..ca9b71efc --- /dev/null +++ b/tests/src/org/aspectj/systemtest/ajc190/sanity-tests.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.39.5