feat(nix/runTestsuite): add assertThrows

Uses `builtins.tryEval` to check that the expression throws when
`deepSeq`-ed.

Change-Id: I0d57cc37f473bb733f57a1b1c0d889084152fd2f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2463
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Profpatsch 2021-01-29 20:53:26 +01:00
parent 7f091079ce
commit f4a4da134b

View file

@ -56,11 +56,15 @@ let
yep = struct "yep" {
test = string;
};
nope = struct "nope" {
nope-eq = struct "nope-eq" {
test = string;
left = any;
right = any;
};
nope-throw = struct "nope-throw" {
test = string;
expr = any;
};
};
# Result of an it. An it is a bunch of asserts
@ -76,12 +80,23 @@ let
(desc: left: right:
if left == right
then { yep = { test = desc; }; }
else { nope = {
else { nope-eq = {
test = desc;
inherit left right;
};
});
# assert that the expression throws when `deepSeq`-ed
assertThrows = defun [ string any AssertResult ]
(desc: expr:
if ! (builtins.tryEval (builtins.deepSeq expr {})).success
then { yep = { test = desc; }; }
else { nope-throw = {
test = desc;
inherit expr;
};
});
# Annotate a bunch of asserts with a descriptive name
it = desc: asserts: {
it-desc = desc;
@ -99,7 +114,8 @@ let
goodAss = ass: {
good = AssertResult.match ass {
yep = _: true;
nope = _: false;
nope-eq = _: false;
nope-throw = _: false;
};
x = ass;
};
@ -108,7 +124,8 @@ let
asserts = partitionTests (ass:
AssertResult.match ass {
yep = _: true;
nope = _: false;
nope-eq = _: false;
nope-throw = _: false;
}) it.asserts;
};
goodIts = partitionTests (it: (goodIt it).asserts.err == []);
@ -133,6 +150,7 @@ let
in {
inherit
assertEq
assertThrows
it
runTestsuite
;