aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/AJDBTest.java
diff options
context:
space:
mode:
authorwisberg <wisberg>2002-12-16 18:51:06 +0000
committerwisberg <wisberg>2002-12-16 18:51:06 +0000
commit144143c2970a1e874d74cdbd0f8c622d4282a3c3 (patch)
treeb12383d3d9e76c7e1f25f7fbec83051ef17f81fb /tests/new/AJDBTest.java
parentfafae443719b26159ab2d7dac1c9b46b5e00b671 (diff)
downloadaspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz
aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip
initial version
Diffstat (limited to 'tests/new/AJDBTest.java')
-rw-r--r--tests/new/AJDBTest.java188
1 files changed, 188 insertions, 0 deletions
diff --git a/tests/new/AJDBTest.java b/tests/new/AJDBTest.java
new file mode 100644
index 000000000..197539fe1
--- /dev/null
+++ b/tests/new/AJDBTest.java
@@ -0,0 +1,188 @@
+import org.aspectj.tools.ajdb.Main;
+import org.aspectj.debugger.tty.CommandLineDebugger;
+import org.aspectj.debugger.base.*;
+import com.sun.jdi.*;
+import com.sun.jdi.event.*;
+import java.io.*;
+import java.util.*;
+import org.aspectj.testing.Tester;
+
+public class AJDBTest implements StopListener, VMListener {
+
+ String classpath;
+ {
+ classpath = "\"" + Tester.outputDir();
+ String javaClasspath = System.getProperty("java.class.path");
+ if (javaClasspath != null) {
+ classpath += ";" + javaClasspath;
+ }
+ classpath += "\"";
+ }
+
+ protected String[] stringCommands() {
+ return new String[] {
+ "workingdir " + Tester.workingDir(),
+ "use " + "./new",
+ "stop on AJDBClass.java:24",
+ "run -classpath " + classpath + " AJDBClass",
+ };
+ }
+ protected String getSourceName() {
+ return "AJDBClass.java";
+ }
+
+ // Methods for VMListener
+ protected void death(VMDeathEvent e) {
+ System.out.println("*** Death: " + e);
+ }
+ protected void disconnect(VMDisconnectEvent e) {
+ System.out.println("*** Disconnect: " + e);
+ }
+ protected void start(VMStartEvent e) {
+ System.out.println("*** Start: " + e);
+ }
+
+ // Methods for StopListener
+ protected void access(AccessWatchpointEvent e) {
+ }
+ protected void breakpoint(BreakpointEvent e) {
+ checkLines((List) ex("where"), "next");
+ }
+ protected void exception(ExceptionEvent e) {
+ }
+ protected void modification(ModificationWatchpointEvent e) {
+ }
+ protected void step(StepEvent e) {
+ List lines = (List) ex("where");
+ checkLines(lines);
+ try {
+ StackFrame frame = (StackFrame) lines.get(0);
+ Location loc = frame.location();
+ if (loc.sourceName().equals("Thread.java") &&
+ loc.method().name().equals("exit")) {
+ isRunning = false;
+ }
+ } catch (Throwable t) {}
+ ex("next");
+
+ }
+
+ public void checkLines(Collection lines, Object then) {
+ checkLines(lines);
+ if (then != null) ex(then);
+ }
+
+ public void checkLines(Collection lines) {
+ Iterator iter = lines.iterator();
+ while (iter.hasNext()) {
+ StackFrame frame = (StackFrame) iter.next();
+ String source = "no.source";
+ try {
+ source = debugger.sourceName(frame.location());
+ } catch (Throwable t) {}
+ int line = debugger.lineNumber(frame.location());
+ if (source.equals(getSourceName())) {
+ Tester.check(line>0, "non-mapping line for " + frame);
+ }
+ }
+ }
+
+ // VMListener
+ public void vmDeathEvent(VMDeathEvent e) {
+ death(e);
+ }
+ public void vmDisconnectEvent(VMDisconnectEvent e) {
+ disconnect(e);
+ }
+ public void vmStartEvent(VMStartEvent e) {
+ start(e);
+ }
+
+ // StopListener
+ public final void accessWatchpointEvent(AccessWatchpointEvent e) {
+ access(e);
+ }
+ public final void breakpointEvent(BreakpointEvent e) {
+ breakpoint(e);
+ }
+ public final void exceptionEvent(ExceptionEvent e) {
+ exception(e);
+ }
+ public final void modificationWatchpointEvent(ModificationWatchpointEvent e) {
+ modification(e);
+ }
+ public final void stepEvent(StepEvent e) {
+ step(e);
+ }
+
+ AJDebugger debugger;
+ CommandLineDebugger ajdb;
+
+ public void realMain(String[] args) {
+ String fileName = null;
+ String[] newArgs = args;
+ if (args.length > 0) {
+ fileName = args[0];
+ newArgs = new String[args.length-1];
+ System.arraycopy(args, 1, newArgs, 0, newArgs.length);
+ }
+ realMain(fileName, newArgs);
+ }
+
+ private void realMain(String fileName, String[] args) {
+ debugger = (ajdb = new Main().debug(args)).getDebugger();
+ debugger.addStopListener(this);
+ debugger.addVMListener(this);
+ ex(fileName == null ? commands() : commands(fileName));
+ while (isRunning) {
+ //System.out.println(">>>>>>>> " + debugger.isRunning());
+ }
+ }
+ private boolean isRunning = true;
+
+ public final Collection commands() {
+ Collection list = new Vector();
+ String[] commands = stringCommands();
+ for (int i = 0; i < commands.length; i++) {
+ list.add(commands[i]);
+ }
+ return list;
+ }
+
+ Object ex(Object command) {
+ return ajdb.executeCommand(command+"");
+ }
+
+ void ex(Collection list) {
+ Iterator iter = list.iterator();
+ while (iter.hasNext()) {
+ ex(iter.next());
+ }
+ }
+
+ final static String COMMENT = "#";
+ final static String FILENAME = "script.txt";
+ Collection commands(String fileName) {
+ Collection list = new Vector();
+ try {
+ BufferedReader in = new BufferedReader(new FileReader(fileName));
+ String line;
+ while ((line = in.readLine()) != null) {
+ line = line.trim();
+ if (line.startsWith(COMMENT)) {
+ continue;
+ }
+ list.add(line);
+ }
+ in.close();
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ System.exit(-1);
+ }
+ return list;
+ }
+
+ public static void main(String[] args) {
+ new AJDBTest().realMain(args);
+ }
+}