From: wisberg Date: Wed, 6 Aug 2003 19:55:52 +0000 (+0000) Subject: added test to ensure handler from initial runCommand() is not used in repeatCommand(). X-Git-Tag: V1_1_1~144 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3b729301c726c44f028906ec53e518e2d3081e83;p=aspectj.git added test to ensure handler from initial runCommand() is not used in repeatCommand(). The test fails so there is a bug, but in the current system we seem to use the same handler, so the bug is harmless. (It does affect other things I'm doing.) The test is disabled by default and can be enabled with a system property. --- diff --git a/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-1.java b/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-1.java new file mode 100644 index 000000000..6713acad6 --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-1.java @@ -0,0 +1,5 @@ + +public class Main { + public static void main(String[] args) { + } +} \ No newline at end of file diff --git a/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-2.java b/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-2.java new file mode 100644 index 000000000..9eedbe4fb --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/ajdtCommand/Main-2.java @@ -0,0 +1,7 @@ + + +public class Main { + public static void main(String[] args) { + err // CE 5 + } +} \ No newline at end of file diff --git a/org.aspectj.ajdt.core/testdata/ajdtCommand/readme.txt b/org.aspectj.ajdt.core/testdata/ajdtCommand/readme.txt new file mode 100644 index 000000000..fde56d89a --- /dev/null +++ b/org.aspectj.ajdt.core/testdata/ajdtCommand/readme.txt @@ -0,0 +1 @@ +see org.aspectj.ajdt.ajc.AjdtCommandTestCase.testIncrementalHandler() diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/AjdtCommandTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/AjdtCommandTestCase.java index f8e4b61a4..19339ea9f 100644 --- a/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/AjdtCommandTestCase.java +++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/AjdtCommandTestCase.java @@ -14,13 +14,12 @@ package org.aspectj.ajdt.ajc; import org.aspectj.ajdt.internal.core.builder.AjBuildConfig; -import org.aspectj.bridge.AbortException; -import org.aspectj.bridge.CountingMessageHandler; -import org.aspectj.bridge.MessageWriter; -import org.aspectj.util.StreamPrintWriter; +import org.aspectj.bridge.*; +import org.aspectj.util.*; import org.eclipse.jdt.core.compiler.InvalidInputException; -import java.io.PrintWriter; +import java.io.*; +import java.util.*; import junit.framework.TestCase; @@ -29,6 +28,7 @@ import junit.framework.TestCase; */ public class AjdtCommandTestCase extends TestCase { + private ArrayList tempFiles = new ArrayList(); private StreamPrintWriter outputWriter = new StreamPrintWriter(new PrintWriter(System.out)); private AjdtCommand command = new AjdtCommand(); private MessageWriter messageWriter = new MessageWriter(outputWriter, false); @@ -39,6 +39,84 @@ public class AjdtCommandTestCase extends TestCase { // command.buildArgParser.out = outputWriter; } + private static boolean delete(File file) { + if ((null == file) || !file.exists()) { + return true; + } else if (!file.canWrite()) { + return false; + } + if (file.isDirectory()) { + FileUtil.deleteContents(file); + } + return file.delete(); + } + + public void testIncrementalHandler() throws IOException { + // verify that AjdtCommand respects handler parm + // in runCommand and repeatCommand + final String sig = getClass().getName() + + ".testIncrementalHandler"; + boolean runTest = false; + try { + runTest = null != System.getProperty(sig); + } catch (Throwable t) { + } + if (!runTest) { + System.out.println("warning: to run " + sig + + "(), set system property " + sig); + return; + } + // setup initial compile + File testBase = new File("testdata/ajdtCommand"); + assertTrue(testBase.isDirectory()); + assertTrue(testBase.canWrite()); + File genBase = new File(testBase, "genBase"); + tempFiles.add(genBase); + if (genBase.exists()) { + FileUtil.deleteContents(genBase); + } else { + genBase.mkdirs(); + } + assertTrue(genBase.canWrite()); + File classesDir = new File(testBase, "classes"); + tempFiles.add(classesDir); + assertTrue(classesDir.mkdirs()); + File mainSrc= new File(testBase, "Main-1.java"); + File main = new File(genBase, "Main.java"); + FileUtil.copyFile(mainSrc, main); + assertTrue(main.canRead()); + long initialSize = main.length(); + + // do initial compile + String[] args = new String[] { + "-d", + classesDir.getPath(), + "-classpath", + "../lib/test/aspectjrt.jar", + main.getPath() + }; + AjdtCommand command = new AjdtCommand(); + IMessageHolder holder = new MessageHandler(); + boolean result = command.runCommand(args, holder); + assertTrue(result); + assertTrue(!holder.hasAnyMessage(IMessage.WARNING, true)); + int initialMessages = holder.numMessages(null, true); + + // do repeat compile, introducing an error + mainSrc= new File(testBase, "Main-2.java"); + FileUtil.copyFile(mainSrc, main); + assertTrue(main.canRead()); + long nextSize = main.length(); + assertTrue(nextSize > initialSize); + IMessageHolder newHolder = new MessageHandler(); + result = command.repeatCommand(newHolder); + + // verify failed, no effect on first holder, error in second + assertFalse(result); + assertEquals(1, newHolder.numMessages(IMessage.ERROR, false)); + assertEquals(initialMessages, holder.numMessages(null, true)); + } + public void testIncrementalOption() throws InvalidInputException { AjBuildConfig config = command.genBuildConfig( new String[] { "-incremental" }, @@ -119,5 +197,11 @@ public class AjdtCommandTestCase extends TestCase { protected void tearDown() throws Exception { super.tearDown(); outputWriter.flushBuffer(); + for (ListIterator iter = tempFiles.listIterator(); iter.hasNext();) { + File file = (File) iter.next(); + if (delete(file)) { + iter.remove(); + } + } } }