lib.debug.throwTestFailures: init
`lib.debug.runTests` provides a unit test evaluator for Nix, but its
results are returned in a raw and difficult-to-read form.
Currently, different callers output the results in various ways:
`builtins.throw (builtins.toJSON failures)` and `builtins.throw ("Tests
failed: " + lib.generators.toPretty { } failures)` are both used.
This change adds a new `lib.debug.throwTestFailures` function which
displays the results nicely before throwing an exception (or returns
`null` if no failures are given), unifying these disparate call-sites.
First, each failing test is pretty-printed in a `trace` message:
```
trace: FAIL testDerivation:
Expected: <derivation a>
Result: <derivation b>
```
Then, an exception is thrown containing the number of tests that failed
(and their names), followed by the raw JSON of the results (for parity
with previous usage, and because `lib.generators.toPretty` sometimes
omits information that `builins.toJSON` includes):
```
error:
… while evaluating the file '...':
… caused by explicit throw
at /nix/store/.../lib/debug.nix:528:7:
527| in
528| throw (
| ^
529| builtins.seq traceFailures (
error: 1 tests failed:
- testDerivation
[{"expected":"/nix/store/xh7kyqp69mxkwspmi81a94m9xx74r8dr-a","name":"testDerivation","result":"/nix/store/503l84nir4zw57d1shfhai25bxxn16c6-b"}]
```
This commit is contained in:
@@ -4741,8 +4741,6 @@ runTests {
|
||||
expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/default.nix";
|
||||
};
|
||||
|
||||
# Tests for cross index utilities
|
||||
|
||||
testRenameCrossIndexFrom = {
|
||||
expr = lib.renameCrossIndexFrom "pkgs" {
|
||||
pkgsBuildBuild = "dummy-build-build";
|
||||
@@ -4819,4 +4817,31 @@ runTests {
|
||||
};
|
||||
};
|
||||
|
||||
testThrowTestFailuresEmpty = {
|
||||
expr = lib.debug.throwTestFailures {
|
||||
failures = [ ];
|
||||
};
|
||||
|
||||
expected = null;
|
||||
};
|
||||
|
||||
testThrowTestFailures = testingThrow (
|
||||
lib.debug.throwTestFailures {
|
||||
failures = [
|
||||
{
|
||||
name = "testDerivation";
|
||||
expected = builtins.derivation {
|
||||
name = "a";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
result = builtins.derivation {
|
||||
name = "b";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user