EfficientTJPTests.java
/*******************************************************************************
* Copyright (c) 2018 Contributors
* 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
*******************************************************************************/
package org.aspectj.systemtest.ajc190;
import org.aspectj.apache.bcel.classfile.JavaClass;
import org.aspectj.apache.bcel.classfile.Method;
import org.aspectj.testing.XMLBasedAjcTestCase;
import org.junit.Assert;
import junit.framework.Test;
/**
*
* @author Andy Clement
*/
public class EfficientTJPTests extends XMLBasedAjcTestCase {
public void testThisJoinPointMethodExecution() {
// Test setting it via sys props rather than passing the option directly
try {
System.setProperty("ASPECTJ_OPTS", "-Xajruntimetarget:1.9");
runTest("tjp 1");
checkPreClinitContains("One","Factory.makeMethodSJP");
} finally {
System.setProperty("ASPECTJ_OPTS", "");
}
}
public void testThisEnclosingJoinPointMethodExecution() {
runTest("tjp 2");
checkPreClinitContains("Two","Factory.makeMethodESJP");
}
public void testThisJoinPointConstructorExecution() {
runTest("tjp 3");
checkPreClinitContains("Three","Factory.makeConstructorSJP");
}
public void testThisEnclosingJoinPointConstructorExecution() {
runTest("tjp 3a");
checkPreClinitContains("ThreeA","Factory.makeConstructorESJP");
}
public void testThisJoinPointHandler() {
runTest("tjp 4");
checkPreClinitContains("Four","Factory.makeCatchClauseSJP");
}
public void testThisEnclosingJoinPointHandler() {
runTest("tjp 4a");
checkPreClinitContains("FourA","Factory.makeMethodESJP");
}
public void testThisJoinPointFieldGet() {
runTest("tjp get fields");
checkPreClinitContains("Fields","Factory.makeFieldSJP");
}
public void testThisEnclosingJoinPointFieldGet() {
runTest("tjp get fieldsE");
checkPreClinitContains("FieldsE","Factory.makeMethodESJP");
}
public void testThisJoinPointFieldSet() {
runTest("tjp set fields");
checkPreClinitContains("Fields2","Factory.makeFieldSJP");
}
public void testThisJoinPointClinit() {
runTest("tjp clinit");
checkPreClinitContains("Clinit","Factory.makeInitializerSJP");
}
public void testThisEnclosingJoinPointClinit() {
runTest("tejp clinit");
checkPreClinitContains("ClinitE","Factory.makeInitializerESJP");
}
public void testThisJoinPointAdvice() {
// covers enclosing joinpoint too
runTest("tjp advice");
checkPreClinitContains("X","Factory.makeAdviceESJP");
}
public void testThisJoinPointInitialization() {
runTest("tjp init");
checkPreClinitContains("A","Factory.makeConstructorESJP");
checkPreClinitContains("B","Factory.makeConstructorESJP");
}
// ///////////////////////////////////////
public static Test suite() {
return XMLBasedAjcTestCase.loadSuite(EfficientTJPTests.class);
}
@Override
protected java.net.URL getSpecFile() {
return getClassResource("features190.xml");
}
public void checkPreClinitContains(String classname, String text) {
try {
JavaClass jc = getClassFrom(ajc.getSandboxDirectory(), classname);
Method[] meths = jc.getMethods();
for (Method method : meths) {
if (method.getName().equals("ajc$preClinit")) {
String code = method.getCode().getCodeString();
assertTrue("Expected to contain '" + text + "':\n" + code, code.contains(text));
return;
}
}
Assert.fail("Unable to find ajc$preClinit in class "+classname);
} catch (Exception e) {
Assert.fail(e.toString());
}
}
}