assert throw line number on failure. close #42

This commit is contained in:
2022-06-04 18:10:02 +00:00
parent 70379cf36b
commit 8dd7f62c8a
3 changed files with 17 additions and 5 deletions

View File

@@ -309,11 +309,11 @@ class Macros {
wholeExp.checkNumArgs(1, 2, "(assert [expression] [message])"); wholeExp.checkNumArgs(1, 2, "(assert [expression] [message])");
var b = wholeExp.expBuilder(); var b = wholeExp.expBuilder();
var expression = exps[0]; var expression = exps[0];
var basicMessage = 'Assertion ${expression.def.toString()} failed'; var failureError = KissError.fromExp(wholeExp, "").toString(AssertionFail);
var messageExp = if (exps.length > 1) { var messageExp = if (exps.length > 1) {
b.callSymbol("+", [b.str(basicMessage + ": "), exps[1]]); exps[1];
} else { } else {
b.str(basicMessage); b.str("");
}; };
var letVal = b.symbol(); var letVal = b.symbol();
b.callSymbol("let", [ b.callSymbol("let", [
@@ -324,7 +324,9 @@ class Macros {
b.callSymbol("if", [ b.callSymbol("if", [
letVal, letVal,
letVal, letVal,
b.callSymbol("throw", [messageExp]) b.callSymbol("throw", [
b.callSymbol("kiss.Prelude.runtimeInsertAssertionMessage", [messageExp, b.str(failureError)])
])
]) ])
]); ]);
}; };

View File

@@ -691,6 +691,15 @@ class Prelude {
return str.substr(negIdx(startIdx), negIdx(endIdx)); 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 newLine = "\n";
public static var backSlash = "\\"; public static var backSlash = "\\";
public static var doubleQuote = "\""; public static var doubleQuote = "\"";

View File

@@ -327,7 +327,8 @@
(try (try
(assert false (+ "false " "should " "have " "been " "true")) (assert false (+ "false " "should " "have " "been " "true"))
(catch [:String message] (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 true)
(assert ![])) (assert ![]))