From a17dda9e2f6b47d8ebd089557481c38e056cdae0 Mon Sep 17 00:00:00 2001
From: Dominik Hansen <Dominik.Hansen@uni-duesseldorf.de>
Date: Thu, 23 May 2013 12:02:08 +0200
Subject: [PATCH] Tests are running in a single JVM.

Former-commit-id: 7962a277c354d1911205b8445b380a240d401ccd
---
 build.gradle                                  |  6 +--
 src/main/java/de/b2tla/B2TLA.java             |  6 +--
 src/main/java/de/b2tla/Globals.java           |  2 -
 src/main/java/de/b2tla/TLCRunner.java         | 44 ++++++++++++-------
 .../java/de/b2tla/util/BTLCPrintStream.java   | 16 +++----
 5 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/build.gradle b/build.gradle
index 84d381c..294c5f3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -40,17 +40,17 @@ compileJava {
 }
 
 test {
-	//exclude('de/b2tla/tlc/integration/**')
+	exclude('de/b2tla/tlc/integration/**')
 }
 
 
 task integrationtest(type: Test){
+	forkEvery = 1
 	doFirst{
 		println("Running integration tests")
 	 }
 	scanForTestClasses = true
 	include('de/b2tla/tlc/integration/**')
-	
 }
 
 jar { from sourceSets.main.allJava }
@@ -61,7 +61,7 @@ manifest.mainAttributes("Main-Class" : 'de.b2tla.B2TLA')
 manifest.mainAttributes("Class-Path": './tla/ tla2tools.jar')
 
 
-task copy(dependsOn: jar) << {
+task copy(dependsOn: build) << {
 	copy {
 		from('build/libs/')
 		into('build/b2tla')
diff --git a/src/main/java/de/b2tla/B2TLA.java b/src/main/java/de/b2tla/B2TLA.java
index 1358168..5b271da 100644
--- a/src/main/java/de/b2tla/B2TLA.java
+++ b/src/main/java/de/b2tla/B2TLA.java
@@ -48,10 +48,9 @@ public class B2TLA {
 		}
 		StopWatch.stop("Translation");
 		if (Globals.runTLC) {
-			ArrayList<String> output = TLCRunner.runTLCInANewJVM(
+			ArrayList<String> output = TLCRunner.runTLC(
 					b2tla.machineName, b2tla.path);
 			b2tla.evalOutput(output, false);
-
 		}
 
 	}
@@ -67,7 +66,7 @@ public class B2TLA {
 		}
 
 		if (Globals.runTLC) {
-			ArrayList<String> output = TLCRunner.runTLCInANewJVM(
+			ArrayList<String> output = TLCRunner.runTLC(
 					b2tla.machineName, b2tla.path);
 			ERROR error = TLCOutput.findError(output);
 			System.out.println(error);
@@ -76,6 +75,7 @@ public class B2TLA {
 		return null;
 	}
 
+	
 	private void evalOutput(ArrayList<String> output, boolean createTraceFile) {
 		TLCOutput tlcOutput = new TLCOutput(machineName,
 				output.toArray(new String[output.size()]));
diff --git a/src/main/java/de/b2tla/Globals.java b/src/main/java/de/b2tla/Globals.java
index 813f9e8..228e7ad 100644
--- a/src/main/java/de/b2tla/Globals.java
+++ b/src/main/java/de/b2tla/Globals.java
@@ -13,6 +13,4 @@ public class Globals {
 	public static boolean setupConstants = false;
 	public static boolean deleteOnExit = false;
 	
-	
-	public static TLCOutput tlcOutput = null;
 }
diff --git a/src/main/java/de/b2tla/TLCRunner.java b/src/main/java/de/b2tla/TLCRunner.java
index fe8024a..64b14f3 100644
--- a/src/main/java/de/b2tla/TLCRunner.java
+++ b/src/main/java/de/b2tla/TLCRunner.java
@@ -44,7 +44,7 @@ public class TLCRunner {
 		}
 		String[] args = list.toArray(new String[list.size()]);
 		ProcessHelper helper = new ProcessHelper();
-		System.out.println("Starting TLC...");
+		System.out.println("Starting JVM...");
 		Process p = helper.startNewJavaProcess("", TLCRunner.class.getName(),
 				args);
 
@@ -61,7 +61,7 @@ public class TLCRunner {
 		return stdOut.getLog();
 	}
 
-	public static void runTLCOld(String machineName, String path) {
+	public static ArrayList<String> runTLC(String machineName, String path) {
 		ArrayList<String> list = new ArrayList<String>();
 		if (!Globals.deadlockCheck) {
 			list.add("-deadlock");
@@ -75,7 +75,7 @@ public class TLCRunner {
 		// ByteArrayOutputStream os = new ByteArrayOutputStream();
 		// PrintStream ps = new PrintStream(os);
 		BTLCPrintStream btlcStream = new BTLCPrintStream();
-		PrintStream old = System.out;
+		PrintStream systemOut = System.out;
 		System.setOut(btlcStream);
 		ToolIO.setMode(ToolIO.SYSTEM);
 
@@ -86,22 +86,36 @@ public class TLCRunner {
 			// call the actual processing method
 			tlc.process();
 		}
-		System.setOut(old);
-
-		String[] messages = btlcStream.getArray();
-		System.out.println(Arrays.asList(messages));
-		TLCOutput tlcOutput = new TLCOutput(machineName, messages);
-		tlcOutput.parseTLCOutput();
-		Globals.tlcOutput = tlcOutput;
+		System.setOut(systemOut);
+
+		ArrayList<String> messages = btlcStream.getArrayList();
+		
+		closeThreads();
+		return messages;
+		//TLCOutput tlcOutput = new TLCOutput(machineName, messages);
+		//tlcOutput.parseTLCOutput();
 		// TLCOutputEvaluator evaluator = new TLCOutputEvaluator(machineName,
 		// messages);
-		System.out.println("ERROR: " + tlcOutput.getError());
-		StringBuilder trace = tlcOutput.getErrorTrace();
-		if (tlcOutput.hasTrace()) {
-			createfile(path, machineName + ".tla.trace", trace.toString());
-		}
+		//System.out.println("ERROR: " + tlcOutput.getError());
+		//StringBuilder trace = tlcOutput.getErrorTrace();
+//		if (tlcOutput.hasTrace()) {
+//			createfile(path, machineName + ".tla.trace", trace.toString());
+//		}
 	}
 
+	private static void closeThreads() {
+		Set<Thread> threadSet = new HashSet<Thread>(Thread.getAllStackTraces().keySet());
+		Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]);
+		for (int i = 0; i < threadArray.length; i++) {
+			Thread t = threadArray[i];
+			//System.out.println(t.getId()+ " "+t.getThreadGroup());
+			if(t.getName().equals("RMI Reaper")){
+				t.interrupt();
+			}
+		}
+		//System.exit(0);
+	}
+	
 	public static void createfile(String dir, String fileName, String text) {
 		File d = new File(dir);
 		d.mkdirs();
diff --git a/src/main/java/de/b2tla/util/BTLCPrintStream.java b/src/main/java/de/b2tla/util/BTLCPrintStream.java
index 7b18894..f75ca32 100644
--- a/src/main/java/de/b2tla/util/BTLCPrintStream.java
+++ b/src/main/java/de/b2tla/util/BTLCPrintStream.java
@@ -24,30 +24,24 @@ public class BTLCPrintStream extends PrintStream {
 		return array.toArray(new String[array.size()]);
 	}
 	
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		BTLCPrintStream my = new BTLCPrintStream();
-		System.setOut(my);
-		
-		System.out.print("hallo");
+	public ArrayList<String> getArrayList(){
+		return array;
 	}
+	
 
 	@Override
 	public void println(String str){
 		synchronized (BTLCPrintStream.class){
 			if(!Globals.tool){
-			//	console.println(str);
+				console.println("> " + str);
 			}
-				
 			array.add(str);
 		}
 	}
 	@Override
 	public void print(String str){
 		synchronized (BTLCPrintStream.class){
-			//console.println(str);
+			console.println(str);
 			array.add(str);
 		}
 	}
-- 
GitLab