OutjarTest.java
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* 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:
* Matthew Webster - initial implementation
*******************************************************************************/
package org.aspectj.ajdt.internal.core.builder;
import java.io.File;
import org.aspectj.tools.ajc.AjcTestCase;
import org.aspectj.tools.ajc.CompilationResult;
import org.aspectj.weaver.WeaverMessages;
public class OutjarTest extends AjcTestCase {
public static final String PROJECT_DIR = "OutjarTest";
public static final String injarName = "child.jar";
public static final String aspectjarName = "aspects.jar";
public static final String outjarName = "outjar.jar";
private File baseDir;
/**
* Make copies of JARs used for -injars/-inpath and -aspectpath because so
* they are not overwritten when a test fails.
*/
@Override
protected void setUp() throws Exception {
super.setUp();
baseDir = new File("../org.aspectj.ajdt.core/testdata",PROJECT_DIR);
}
/**
* Aim: Check that -outjar does not coincide with a member of -injars. This
* is because if a binary weave fails -outjar is deleted.
*
* Inputs to the compiler:
* -injar
* -aspectpath
* -outjar
*
* Expected result = Compile aborts with error message.
*/
public void testOutjarInInjars () {
String[] args = new String[] { "-aspectpath", aspectjarName, "-injars", injarName, "-outjar", injarName };
Message error = new Message(WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH));
MessageSpec spec = new MessageSpec(null, null, newMessageList(error));
CompilationResult result = ajc(baseDir, args);
assertMessages(result, spec);
}
/**
* Aim: Check that -outjar does not coincide with a member of -inpath. This
* is because if a binary weave fails -outjar is deleted.
*
* Inputs to the compiler:
* -injar
* -aspectpath
* -outjar
*
* Expected result = Compile aborts with error message.
*/
public void testOutjarInInpath () {
String[] args = new String[] { "-aspectpath", aspectjarName, "-inpath", injarName, "-outjar", injarName };
Message error = new Message(WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH));
MessageSpec spec = new MessageSpec(null, null, newMessageList(error));
CompilationResult result = ajc(baseDir, args);
assertMessages(result, spec);
}
/**
* Aim: Check that -outjar does not coincide with a member of -aspectpath. This
* is because if a binary weave fails -outjar is deleted.
*
* Inputs to the compiler:
* -injar
* -aspectpath
* -outjar
*
* Expected result = Compile aborts with error message.
*/
public void testOutjarInAspectpath () {
String[] args = new String[] { "-aspectpath", aspectjarName, "-inpath", injarName, "-outjar", aspectjarName };
Message error = new Message(WeaverMessages.format(WeaverMessages.OUTJAR_IN_INPUT_PATH));
MessageSpec spec = new MessageSpec(null, null, newMessageList(error));
CompilationResult result = ajc(baseDir, args);
assertMessages(result, spec);
}
/**
* Aim: Check that -outjar is not present when compile fails.
*
* Inputs to the compiler:
* -injar
* -aspectpath
* -outjar
*
* Expected result = Compile fails with error message.
*/
public void testOutjarDeletedOnError () {
String[] args = new String[] { "-aspectpath", aspectjarName, "-injars", injarName, "-outjar", outjarName, "-1.8" };
Message error = new Message(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_INTERFACES, "jar1.Parent"));
Message warning = new Message("advice defined in jar3.Aspect has not been applied [Xlint:adviceDidNotMatch]");
MessageSpec spec = new MessageSpec(newMessageList(warning), newMessageList(error));
CompilationResult result = ajc(baseDir, args);
assertMessages(result, spec);
File outjar = new File(ajc.getSandboxDirectory(), outjarName);
assertFalse("-outjar " + outjar.getPath() + " should be deleted", outjar.exists());
}
}