From f58958762f03ffe2aa8410ad122f530ddbf99e6b Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Fri, 9 Oct 2015 17:57:52 +0200
Subject: [PATCH] Fail tests with better errors

---
 .../testcases/TestCasesCompile.scala          |  4 ++--
 .../verification/VerificationSuite.scala      | 12 +++---------
 .../scala/leon/test/LeonRegressionSuite.scala | 19 ++++++++++++++++++-
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/test/scala/leon/regression/testcases/TestCasesCompile.scala b/src/test/scala/leon/regression/testcases/TestCasesCompile.scala
index 64367b70d..994a61901 100644
--- a/src/test/scala/leon/regression/testcases/TestCasesCompile.scala
+++ b/src/test/scala/leon/regression/testcases/TestCasesCompile.scala
@@ -39,8 +39,8 @@ class TestCasesCompile extends LeonRegressionSuite {
       try {
         pipeline.run(ctx, List(f.getAbsolutePath))
       } catch {
-        case _: LeonFatalError =>
-          fail(" Failed to compile "+name)
+        case fe: LeonFatalError =>
+          fail(ctx, s"Failed to compile $name", fe)
       }
     }
   }
diff --git a/src/test/scala/leon/regression/verification/VerificationSuite.scala b/src/test/scala/leon/regression/verification/VerificationSuite.scala
index dd8b08879..2460d7791 100644
--- a/src/test/scala/leon/regression/verification/VerificationSuite.scala
+++ b/src/test/scala/leon/regression/verification/VerificationSuite.scala
@@ -66,16 +66,10 @@ trait VerificationSuite extends LeonRegressionSuite {
         }
       }
     } catch {
-      case _: LeonFatalError =>
-        ctx.reporter match {
-          case sr: TestSilentReporter =>
-            println("Unexpected fatal error:")
-            for (e <- sr.lastErrors) {
-              println(" "+e)
-            }
-          case _ =>
+      case fe: LeonFatalError =>
+        test("Compilation") {
+          fail(ctx, "Unexpected fatal error while setting up tests", fe)
         }
-        test("Compilation of test files in " + testDir + cat)(fail("Failed to compile"))
     }
   }
 
diff --git a/src/test/scala/leon/test/LeonRegressionSuite.scala b/src/test/scala/leon/test/LeonRegressionSuite.scala
index 929c2be3b..941cb9b90 100644
--- a/src/test/scala/leon/test/LeonRegressionSuite.scala
+++ b/src/test/scala/leon/test/LeonRegressionSuite.scala
@@ -39,7 +39,7 @@ trait LeonRegressionSuite extends FunSuite with Timeouts {
   }
 
   protected val all : String=>Boolean = (s : String) => true
-  
+
   def scanFilesIn(f: File, filter: String=>Boolean = all, recursive: Boolean = false): Iterable[File] = {
     Option(f.listFiles()).getOrElse(Array()).flatMap{f =>
       if (f.isDirectory && recursive) {
@@ -56,4 +56,21 @@ trait LeonRegressionSuite extends FunSuite with Timeouts {
 
     scanFilesIn(baseDir, filter, recursive)
   }
+
+  protected def fail(ctx: LeonContext, reason: String, fe: LeonFatalError): Nothing = {
+    val omsg = ctx.reporter match {
+      case sr: TestSilentReporter =>
+        sr.lastErrors ++= fe.msg
+        Some((sr.lastErrors ++ fe.msg).mkString("\n"))
+      case _ =>
+        fe.msg
+    }
+
+    val fullError = omsg match {
+      case Some(msg) => s"$reason:\n$msg"
+      case None => s"$reason"
+    }
+
+    throw new TestFailedException(fullError, fe, 5)
+  }
 }
-- 
GitLab