aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core
diff options
context:
space:
mode:
authoraclement <aclement>2005-11-28 09:26:33 +0000
committeraclement <aclement>2005-11-28 09:26:33 +0000
commit9fbd6fcb28199ebe2f03332691ddf887493f87f4 (patch)
tree048a220af5ded4061165100014e9586a8c3b520a /org.aspectj.ajdt.core
parentc3bef72dcac14398332abde6dfd5498eec24b042 (diff)
downloadaspectj-9fbd6fcb28199ebe2f03332691ddf887493f87f4.tar.gz
aspectj-9fbd6fcb28199ebe2f03332691ddf887493f87f4.zip
matthews changes for stream redirection 118083: Also I've made verbose FALSE so you won't see too much output.
Diffstat (limited to 'org.aspectj.ajdt.core')
-rw-r--r--org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java3
-rw-r--r--org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java58
-rw-r--r--org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/DelegatingOutputStream.java91
3 files changed, 140 insertions, 12 deletions
diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java
index 9ccf23da0..fd902bcff 100644
--- a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java
+++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/Ajc.java
@@ -80,9 +80,8 @@ public class Ajc {
private int incrementalStage = 10;
private boolean shouldEmptySandbox = true;
private AjcCommandController controller;
- private static boolean verbose = true; //(!System.getProperty("org.aspectj.tools.ajc.Ajc.verbose","false").equals("false"));
+ private static boolean verbose = System.getProperty("org.aspectj.tools.ajc.Ajc.verbose","false").equals("true");
-
/**
* Constructs a new Ajc instance, with a new AspectJ compiler
* inside.
diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
index 961079f85..d498254bd 100644
--- a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
+++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
@@ -14,6 +14,7 @@ package org.aspectj.tools.ajc;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.OutputStream;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -25,13 +26,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
+import junit.framework.TestCase;
+
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.testing.util.TestUtil;
import org.aspectj.weaver.loadtime.WeavingURLClassLoader;
-import junit.framework.TestCase;
-
/**
* A TestCase class that acts as the superclass for all test cases wishing
* to drive the ajc compiler.
@@ -51,9 +52,8 @@ import junit.framework.TestCase;
* @see org.aspectj.testing.XMLBasedAjcTestCase
*/
public class AjcTestCase extends TestCase {
-
- private RunResult lastRunResult;
+ private RunResult lastRunResult;
/**
* The Ajc (compiler) instance used for thet test. Created afresh
@@ -85,6 +85,17 @@ public class AjcTestCase extends TestCase {
+ File.pathSeparator+".."+File.separator+"lib" +File.separator+"test"+File.separator+"aspectjrt.jar"
;
+ /*
+ * Save reference to real stderr and stdout before starting redirection
+ */
+ public final static PrintStream err = System.err;
+ public final static PrintStream out = System.out;
+ private final static DelegatingOutputStream delegatingErr;
+ private final static DelegatingOutputStream delegatingOut;
+ public final static boolean DEFAULT_VERBOSE = getBoolean("org.aspectj.tools.ajc.AjcTestCase.verbose",false);
+ public final static boolean DEFAULT_ERR_VERBOSE = getBoolean("org.aspectj.tools.ajc.AjcTestCase.verbose.err",DEFAULT_VERBOSE);
+ public final static boolean DEFAULT_OUT_VERBOSE = getBoolean("org.aspectj.tools.ajc.AjcTestCase.verbose.out",DEFAULT_VERBOSE);
+
/**
* Helper class that represents the specification of an individual
* message expected to be produced during a compilation run.
@@ -562,8 +573,6 @@ public class AjcTestCase extends TestCase {
command.append(" ");
command.append(args[i]);
}
- PrintStream systemOut = System.out;
- PrintStream systemErr = System.err;
ByteArrayOutputStream baosOut = new ByteArrayOutputStream();
ByteArrayOutputStream baosErr = new ByteArrayOutputStream();
StringTokenizer strTok = new StringTokenizer(classpath,File.pathSeparator);
@@ -593,8 +602,8 @@ public class AjcTestCase extends TestCase {
} catch (Exception ex) {
fail ("Unable to prepare org.aspectj.testing.Tester for test run: " + ex);
}
- System.setOut(new PrintStream(baosOut));
- System.setErr(new PrintStream(baosErr));
+ startCapture(baosErr,baosOut);
+
Class toRun = cLoader.loadClass(className);
Method mainMethod = toRun.getMethod("main",new Class[] {String[].class});
mainMethod.invoke(null,new Object[] {args});
@@ -609,8 +618,7 @@ public class AjcTestCase extends TestCase {
// the main method threw an exception...
fail("Exception thrown by " + className + ".main(String[]) :" + invTgt.getTargetException());
} finally {
- System.setOut(systemOut);
- System.setErr(systemErr);
+ stopCapture(baosErr,baosOut);
}
return lastRunResult;
}
@@ -733,6 +741,28 @@ public class AjcTestCase extends TestCase {
}
}
+ private static void startCapture (OutputStream errOS, OutputStream outOS) {
+ delegatingErr.add(errOS);
+ delegatingOut.add(outOS);
+
+ delegatingErr.setVerbose(DEFAULT_ERR_VERBOSE);
+ delegatingOut.setVerbose(DEFAULT_OUT_VERBOSE);
+ }
+
+ private static void stopCapture (OutputStream errOS, OutputStream outOS) {
+ delegatingErr.setVerbose(true);
+ delegatingOut.setVerbose(true);
+
+ delegatingErr.remove(errOS);
+ delegatingOut.remove(outOS);
+ }
+
+ private static boolean getBoolean (String name, boolean def) {
+ String defaultValue = String.valueOf(def);
+ String value = System.getProperty(name,defaultValue);
+ return Boolean.valueOf(value).booleanValue();
+ }
+
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
@@ -747,4 +777,12 @@ public class AjcTestCase extends TestCase {
super.tearDown();
//ajc = null;
}
+
+ static {
+// new RuntimeException("*** AjcTestCase.<clinit>()").printStackTrace();
+ delegatingErr = new DelegatingOutputStream(err);
+ System.setErr(new PrintStream(delegatingErr));
+ delegatingOut = new DelegatingOutputStream(out);
+ System.setOut(new PrintStream(delegatingOut));
+ }
}
diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/DelegatingOutputStream.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/DelegatingOutputStream.java
new file mode 100644
index 000000000..1308197b0
--- /dev/null
+++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/DelegatingOutputStream.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Matthew Webster - initial implementation
+ *******************************************************************************/
+package org.aspectj.tools.ajc;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+public class DelegatingOutputStream extends OutputStream {
+
+ private boolean verbose = true;
+ private OutputStream target;
+ private List delegates;
+
+ public DelegatingOutputStream (OutputStream os) {
+ this.target = os;
+ this.delegates = new LinkedList();
+ }
+
+ public void close() throws IOException {
+ target.close();
+
+ for (Iterator i = delegates.iterator(); i.hasNext();) {
+ OutputStream delegate = (OutputStream)i.next();
+ delegate.close();
+ }
+ }
+
+ public void flush() throws IOException {
+ target.flush();
+
+ for (Iterator i = delegates.iterator(); i.hasNext();) {
+ OutputStream delegate = (OutputStream)i.next();
+ delegate.flush();
+ }
+ }
+
+ public void write(byte[] b, int off, int len) throws IOException {
+ if (verbose) target.write(b, off, len);
+
+ for (Iterator i = delegates.iterator(); i.hasNext();) {
+ OutputStream delegate = (OutputStream)i.next();
+ delegate.write(b,off,len);
+ }
+ }
+
+ public void write(byte[] b) throws IOException {
+ if (verbose) target.write(b);
+
+ for (Iterator i = delegates.iterator(); i.hasNext();) {
+ OutputStream delegate = (OutputStream)i.next();
+ delegate.write(b);
+ }
+ }
+
+ public void write(int b) throws IOException {
+ if (verbose) target.write(b);
+
+ for (Iterator i = delegates.iterator(); i.hasNext();) {
+ OutputStream delegate = (OutputStream)i.next();
+ delegate.write(b);
+ }
+ }
+
+ public boolean add (OutputStream delegate) {
+ return delegates.add(delegate);
+ }
+
+ public boolean remove (OutputStream delegate) {
+ return delegates.remove(delegate);
+ }
+
+ public boolean isVerbose() {
+ return verbose;
+ }
+
+ public void setVerbose(boolean verbose) {
+ this.verbose = verbose;
+ }
+
+}