Browse Source

[ci] make it easier to look for errors in misc tests report

Aleksandr Kuzmenko 5 years ago
parent
commit
0a57734344
1 changed files with 25 additions and 12 deletions
  1. 25 12
      tests/misc/src/Main.hx

+ 25 - 12
tests/misc/src/Main.hx

@@ -7,19 +7,25 @@ using StringTools;
 
 
 typedef Result = {
 typedef Result = {
 	count:Int,
 	count:Int,
-	failures:Int
+	failures:Int,
+	summary:String
 }
 }
 
 
 class Main {
 class Main {
 	static public function main() {
 	static public function main() {
 		var result:Result = compileProjects();
 		var result:Result = compileProjects();
 		Sys.println('Done running ${result.count} tests with ${result.failures} failures');
 		Sys.println('Done running ${result.count} tests with ${result.failures} failures');
+		if(result.count > 20 && result.failures > 0) {
+			Sys.println('Summary:');
+			Sys.println(result.summary);
+		}
 		Sys.exit(result.failures);
 		Sys.exit(result.failures);
 	}
 	}
 
 
 	static public function compileProjects():Result {
 	static public function compileProjects():Result {
 		var count = 0;
 		var count = 0;
 		var failures = 0;
 		var failures = 0;
+		var failuresSummary = [];
 		var filter = Compiler.getDefine("MISC_TEST_FILTER");
 		var filter = Compiler.getDefine("MISC_TEST_FILTER");
 		var filterRegex = filter == null ? ~/.*/ : new EReg(filter, "");
 		var filterRegex = filter == null ? ~/.*/ : new EReg(filter, "");
 		function browse(dirPath) {
 		function browse(dirPath) {
@@ -39,10 +45,11 @@ class Main {
 					Sys.println('Running haxe $path');
 					Sys.println('Running haxe $path');
 					var expectFailure = file.endsWith("-fail.hxml");
 					var expectFailure = file.endsWith("-fail.hxml");
 					var expectStderr = if (FileSystem.exists('$file.stderr')) prepareExpectedOutput(File.getContent('$file.stderr')) else null;
 					var expectStderr = if (FileSystem.exists('$file.stderr')) prepareExpectedOutput(File.getContent('$file.stderr')) else null;
-					var success = runCommand("haxe", [file], expectFailure, expectStderr);
+					var result = runCommand("haxe", [file], expectFailure, expectStderr);
 					++count;
 					++count;
-					if (!success) {
+					if (!result.success) {
 						failures++;
 						failures++;
+						failuresSummary.push(result.summary);
 					}
 					}
 					Sys.setCwd(old);
 					Sys.setCwd(old);
 				}
 				}
@@ -51,7 +58,8 @@ class Main {
 		browse("projects");
 		browse("projects");
 		return {
 		return {
 			count: count,
 			count: count,
-			failures: failures
+			failures: failures,
+			summary: failuresSummary.join('\n')
 		}
 		}
 	}
 	}
 
 
@@ -77,7 +85,12 @@ class Main {
 		return p;
 		return p;
 	}
 	}
 
 
-	static function runCommand(command:String, args:Array<String>, expectFailure:Bool, expectStderr:String) {
+	static function runCommand(command:String, args:Array<String>, expectFailure:Bool, expectStderr:String):{success:Bool, summary:String} {
+		var summary = [];
+		function println(msg:String) {
+			summary.push(msg);
+			Sys.println(msg);
+		}
 		#if timeout
 		#if timeout
 		switch Sys.systemName() {
 		switch Sys.systemName() {
 			case 'Linux':
 			case 'Linux':
@@ -94,13 +107,13 @@ class Main {
 		var success = exit == 0;
 		var success = exit == 0;
 		// 124 - exit code of linux `timeout` command in case it actually timed out
 		// 124 - exit code of linux `timeout` command in case it actually timed out
 		if (exit == 124) {
 		if (exit == 124) {
-			Sys.println('Timeout. No response in ${Compiler.getDefine('timeout')} seconds.');
+			println('Timeout. No response in ${Compiler.getDefine('timeout')} seconds.');
 		}
 		}
 		var result = switch [success, expectFailure] {
 		var result = switch [success, expectFailure] {
 			case [true, false]:
 			case [true, false]:
 				true;
 				true;
 			case [true, true]:
 			case [true, true]:
-				Sys.println("Expected failure, but no failure occurred");
+				println("Expected failure, but no failure occurred");
 				false;
 				false;
 			case [false, true]:
 			case [false, true]:
 				true;
 				true;
@@ -111,19 +124,19 @@ class Main {
 		}
 		}
 
 
 		if (stdout.length > 0) {
 		if (stdout.length > 0) {
-			Sys.println(stdout);
+			println(stdout.toString());
 		}
 		}
 
 
 		if (result && expectStderr != null) {
 		if (result && expectStderr != null) {
 			var stderr = proc.stderr.readAll().toString().replace("\r\n", "\n").trim();
 			var stderr = proc.stderr.readAll().toString().replace("\r\n", "\n").trim();
 			if (stderr != expectStderr.trim()) {
 			if (stderr != expectStderr.trim()) {
-				Sys.println("Actual stderr output doesn't match the expected one");
-				Sys.println('Expected:\n"$expectStderr"');
-				Sys.println('Actual:\n"$stderr"');
+				println("Actual stderr output doesn't match the expected one");
+				println('Expected:\n"$expectStderr"');
+				println('Actual:\n"$stderr"');
 				result = false;
 				result = false;
 			}
 			}
 		}
 		}
 		proc.close();
 		proc.close();
-		return result;
+		return {success:result, summary:summary.join('\n')};
 	}
 	}
 }
 }