about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nix/runTestsuite/default.nix26
1 files changed, 22 insertions, 4 deletions
diff --git a/nix/runTestsuite/default.nix b/nix/runTestsuite/default.nix
index 6d2befc863fe..9ac9f87d45fa 100644
--- a/nix/runTestsuite/default.nix
+++ b/nix/runTestsuite/default.nix
@@ -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
     ;