diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index e1e3cf7e..dde08093 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -309,11 +309,11 @@ class Macros { wholeExp.checkNumArgs(1, 2, "(assert [expression] [message])"); var b = wholeExp.expBuilder(); var expression = exps[0]; - var basicMessage = 'Assertion ${expression.def.toString()} failed'; + var failureError = KissError.fromExp(wholeExp, "").toString(AssertionFail); var messageExp = if (exps.length > 1) { - b.callSymbol("+", [b.str(basicMessage + ": "), exps[1]]); + exps[1]; } else { - b.str(basicMessage); + b.str(""); }; var letVal = b.symbol(); b.callSymbol("let", [ @@ -324,7 +324,9 @@ class Macros { b.callSymbol("if", [ letVal, letVal, - b.callSymbol("throw", [messageExp]) + b.callSymbol("throw", [ + b.callSymbol("kiss.Prelude.runtimeInsertAssertionMessage", [messageExp, b.str(failureError)]) + ]) ]) ]); }; diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index 43da7900..7ccdc4ae 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -691,6 +691,15 @@ class Prelude { return str.substr(negIdx(startIdx), negIdx(endIdx)); } + public static function runtimeInsertAssertionMessage(message:String, error:String) { + var colonIdx = 0; + for (_ in 0...4) { + colonIdx = error.indexOf(":", colonIdx) + 1; + } + colonIdx += 1; + return error.substr(0, colonIdx) + message + error.substr(colonIdx); + } + public static var newLine = "\n"; public static var backSlash = "\\"; public static var doubleQuote = "\""; diff --git a/kiss/src/test/cases/BasicTestCase.kiss b/kiss/src/test/cases/BasicTestCase.kiss index cbfb3d4a..b7c8c785 100644 --- a/kiss/src/test/cases/BasicTestCase.kiss +++ b/kiss/src/test/cases/BasicTestCase.kiss @@ -327,7 +327,8 @@ (try (assert false (+ "false " "should " "have " "been " "true")) (catch [:String message] - (Assert.equals "Assertion false failed: false should have been true" message))) + (Assert.equals "kiss/src/test/cases/BasicTestCase.kiss:328:13: Assertion failed: false should have been true +From:[(assert false (+ \"false \" \"should \" \"have \" \"been \" \"true\"))]" message))) (assert true) (assert ![]))