BuildCancellingTest.java
/********************************************************************
* Copyright (c) 2004 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
*
* Contributors:
* Andy Clement Initial version
* Helen Hawkins Converted to new interface (bug 148190)
* ******************************************************************/
package org.aspectj.ajde.core.tests;
import org.aspectj.ajde.core.AjdeCoreTestCase;
import org.aspectj.ajde.core.TestBuildProgressMonitor;
import org.aspectj.ajde.core.TestCompilerConfiguration;
/**
* It is now possible to cancel the compiler during either the compilation or
* weaving phases - this testcase verifies a few cases, making sure the process
* stops when expected. It can check the disk contents, but it doesn't right
* now.
*
* Two different .lst files are used during these tests: LoadsaCode.lst and
* EvenMoreCode.lst which contain mixes of aspects and classes
*
* Here are some things to think about that will help you understand what is on
* the disk when we cancel the compiler.
*
* There are 3 important phases worth remembering : - Compile all the types -
* Weave all the aspects - Weave all the classes
*
* Each of those steps goes through all the types. This means during the 'weave
* all the aspects' step we are jumping over classes and during the 'weave all
* the classes ' step we are jumping over aspects. Why is this important?
*
*
* We only write bytes out during the 'weave all the classes ' phase and it is
* even during that phase that we write out the bytes for aspects. This means if
* you cancel during compilation or during the weaving of aspects - there will
* be nothing on the disk. If you cancel whilst in the 'weave all the classes '
* phase then the disk will contain anything finished with by the cancellation
* point.
*/
public class BuildCancellingTest extends AjdeCoreTestCase {
private final boolean debugTests = false;
private TestBuildProgressMonitor programmableBPM;
private TestCompilerConfiguration compilerConfig;
private String[] loadsaCode = { "A1.aj", "A2.aj", "HW.java", "A3.aj",
"A4.aj" };
private String[] evenMoreCode = { "A1.aj", "Cl1.java", "A2.aj", "Cl2.java",
"HW.java", "A3.aj", "Cl3.java", "A4.aj" };
protected void setUp() throws Exception {
super.setUp();
initialiseProject("BuildCancelling");
programmableBPM = (TestBuildProgressMonitor) getCompiler()
.getBuildProgressMonitor();
compilerConfig = (TestCompilerConfiguration) getCompiler()
.getCompilerConfiguration();
}
protected void tearDown() throws Exception {
super.tearDown();
programmableBPM = null;
compilerConfig = null;
}
/**
* After first compilation message, get it to cancel, there should be one
* more warning message about cancelling the compile and their should be
* nothing on the disk.
*/
public void testCancelFirstCompile() {
if (debugTests)
System.out
.println("\n\n\ntestCancelFirstCompile: Building with LoadsaCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(loadsaCode));
programmableBPM.cancelOn("compiled:", 1); // Force a cancel after the
// first compile occurs
doBuild(true);
assertTrue("Should have cancelled after first compile?:"
+ programmableBPM.numCompiledMessages,
programmableBPM.numCompiledMessages == 1);
// Comment out to check the disk contents
// assertTrue("As weaving was cancelled, no files should have been
// written out, but I found:"+wovenClassesFound(),
// wovenClassesFound()==0);
boolean expectedCancelMessageFound = checkFor("Compilation cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about compilation being cancelled!",
expectedCancelMessageFound);
}
/**
* After third compilation message, get it to cancel, there should be one
* more warning message about cancelling the compile and their should be
* nothing on the disk.
*/
public void testCancelThirdCompile() {
if (debugTests)
System.out
.println("\n\n\ntestCancelThirdCompile: Building with LoadsaCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(loadsaCode));
programmableBPM.cancelOn("compiled:", 3); // Force a cancel after the
// third compile occurs
doBuild(true);
assertTrue("Should have cancelled after third compile?:"
+ programmableBPM.numCompiledMessages,
programmableBPM.numCompiledMessages == 3);
// Comment out to check the disk contents
// assertTrue("As weaving was cancelled, no files should have been
// written out, but I found:"+wovenClassesFound(),
// wovenClassesFound()==0);
boolean expectedCancelMessageFound = checkFor("Compilation cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about compilation being cancelled!",
expectedCancelMessageFound);
}
/**
* After first weave aspect message, get it to cancel, there should be one
* more warning message about cancelling the weave and their should be
* nothing on the disk.
*/
public void testCancelFirstAspectWeave() {
if (debugTests)
System.out
.println("\n\n\ntestCancelFirstAspectWeave: Building with LoadsaCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(loadsaCode));
programmableBPM.cancelOn("woven aspect ", 1); // Force a cancel after
// the first weave
// aspect occurs
doBuild(true);
assertTrue("Should have cancelled after first aspect weave?:"
+ programmableBPM.numWovenAspectMessages,
programmableBPM.numWovenAspectMessages == 1);
// Comment out to check the disk contents
// assertTrue("As weaving was cancelled, no files should have been
// written out?:"+wovenClassesFound(),
// wovenClassesFound()==0);
boolean expectedCancelMessageFound = checkFor("Weaving cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about weaving being cancelled!",
expectedCancelMessageFound);
}
/**
* After third weave aspect message, get it to cancel, there should be one
* more warning message about cancelling the weave and their should be
* nothing on the disk.
*/
public void testCancelThirdAspectWeave() {
if (debugTests)
System.out
.println("\n\n\ntestCancelThirdAspectWeave: Building with LoadsaCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(loadsaCode));
// Force a cancel after the third weave occurs.
// This should leave two class files on disk - I think?
programmableBPM.cancelOn("woven aspect ", 3);
doBuild(true);
assertTrue("Should have cancelled after third weave?:"
+ programmableBPM.numWovenAspectMessages,
programmableBPM.numWovenAspectMessages == 3);
// Comment out to check disk contents
// assertTrue("As weaving was cancelled, no files should have been
// written out?:"+wovenClassesFound(),
// wovenClassesFound()==0);
boolean expectedCancelMessageFound = checkFor("Weaving cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about weaving being cancelled!",
expectedCancelMessageFound);
}
/**
* After first weave class message, get it to cancel, there should be one
* more warning message about cancelling the weave and their should be
* nothing on the disk.
*
* EvenMoreCode.lst contains: A1.aj Cl1.java A2.aj Cl2.java HW.java A3.aj
* Cl3.java A4.aj
*
*/
public void testCancelFirstClassWeave() {
if (debugTests)
System.out
.println("testCancelFirstClassWeave: Building with EvenMoreCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(evenMoreCode));
programmableBPM.cancelOn("woven class", 1);
doBuild(true);
// Should just be A1 on the disk - uncomment this line to verify that!
// (and uncomment diskContents())
// assertTrue("Incorrect disk contents found",diskContents("A1"));
assertTrue("Should have cancelled after first class weave?:"
+ programmableBPM.numWovenClassMessages,
programmableBPM.numWovenClassMessages == 1);
boolean expectedCancelMessageFound = checkFor("Weaving cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about weaving being cancelled!",
expectedCancelMessageFound);
}
/**
* After first weave aspect message, get it to cancel, there should be one
* more warning message about cancelling the weave and their should be
* nothing on the disk.
*
* EvenMoreCode.lst contains: A1.aj Cl1.java A2.aj Cl2.java HW.java A3.aj
* Cl3.java A4.aj
*
*/
public void testCancelSecondClassWeave() {
if (debugTests)
System.out
.println("testCancelSecondClassWeave: Building with EvenMoreCode");
compilerConfig.setProjectSourceFiles(getSourceFileList(evenMoreCode));
programmableBPM.cancelOn("woven class", 2);
doBuild(true);
// Uncomment this line to verify disk contents(and uncomment
// diskContents())
// assertTrue("Incorrect disk contents found",diskContents("A1 Cl1
// A2"));
assertTrue("Should have cancelled after first class weave?:"
+ programmableBPM.numWovenClassMessages,
programmableBPM.numWovenClassMessages == 2);
boolean expectedCancelMessageFound = checkFor("Weaving cancelled as requested");
if (!expectedCancelMessageFound)
dumpTaskData(); // Useful for debugging
assertTrue(
"Failed to get warning message about weaving being cancelled!",
expectedCancelMessageFound);
}
}