/******************************************************************************* * Copyright (c) 2010 Lucierna * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt * * Contributors: * Abraham Nevado - initial API and implementation *******************************************************************************/ package org.aspectj.systemtest.ajc1610; import org.aspectj.apache.bcel.classfile.JavaClass; import org.aspectj.apache.bcel.classfile.Method; import org.aspectj.testing.XMLBasedAjcTestCase; import junit.framework.Test; public class NewFeatures extends org.aspectj.testing.XMLBasedAjcTestCase { // With Java23 marking anything < 1.8 as obsolete, test no longer valid, I think. // public void testMakeSJPOptimizationLDCNo() { // this.runTest("makeSJP optimization - LDC - No"); // try { // JavaClass myClass = getMyClass("B"); // Method preClinitMethod = getPreClinitMethod(myClass); // NewFeatures.assertTrue("For 1.4 it must use classForName", preClinitMethod.getCode().toString().contains("forName")); // } catch (Exception e) { // NewFeatures.fail(e.toString()); // } // } @SuppressWarnings("unused") public void testMakeSJPOptimizationCollapsedSJPYes14() { this.runTest("makeSJP optimization - Collapsed SJP - Yes 1.4"); try { JavaClass myClass = getMyClass("B"); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationLDCYes() { this.runTest("makeSJP optimization - LDC - Yes"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); NewFeatures.assertTrue("For 1.5 it must not use classForName", !preClinitMethod.getCode().toString() .contains("forName")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationCollapsedSJPYes() { this.runTest("makeSJP optimization - Collapsed SJP - Yes"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); NewFeatures.assertTrue("MakedMethodSig MUST not be present", !preClinitMethod.getCode().toString().contains("makeMethodSig")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationCollapsedSJPNo() { this.runTest("makeSJP optimization - Collapsed SJP - No"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); NewFeatures.assertTrue("MakedMethodSig required", preClinitMethod.getCode().toString().contains("makeMethodSig")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationNoExceptionNo() { this.runTest("makeSJP optimization - No Exception - No"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); NewFeatures .assertTrue( "MakedMethodSig required", preClinitMethod .getCode() .toString() .contains( "invokevirtual org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationNoExceptionYes() { this.runTest("makeSJP optimization - No Exception - Yes"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); NewFeatures .assertTrue( "MakedMethodSig required", preClinitMethod .getCode() .toString() .contains( "org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Lorg/aspectj/lang/JoinPoint$StaticPart;")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } public void testMakeSJPOptimizationRemoveExtraColon() { this.runTest("makeSJP optimization - Remove Colon"); try { JavaClass myClass = getMyClass("B"); Method preClinitMethod = getPreClinitMethod(myClass); System.out.println(preClinitMethod.getCode().toString()); NewFeatures.assertTrue("MakedMethodSig required", preClinitMethod.getCode().toString().contains("50: ldc \"java.lang.String\" (108)")); } catch (Exception e) { NewFeatures.fail(e.toString()); } } // /////////////////////////////////////// private Method getPreClinitMethod(JavaClass myClass) { Method lm[] = myClass.getMethods(); for (Method method : lm) { if (method.getName().equals("ajc$preClinit")) { return method; } } return null; } public static Test suite() { return XMLBasedAjcTestCase.loadSuite(NewFeatures.class); } private JavaClass getMyClass(String className) throws ClassNotFoundException { return getClassFrom(ajc.getSandboxDirectory(), className); } protected java.net.URL getSpecFile() { return getClassResource("newfeatures-tests.xml"); } }