123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- /********************************************************************
- * Copyright (c) 2004 Contributors.
- * 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 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);
-
- }
- }
|