blob: 8c9c73807472603364149fea3ed8624f7618189c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
{ depot, lib, verifyTag, discr, discrDef, match, matchLam }:
let
inherit (depot.nix.runTestsuite)
runTestsuite
assertEq
it
;
isTag-test = it "checks whether something is a tag" [
(assertEq "is Tag"
(verifyTag { foo = "bar"; })
{
isTag = true;
name = "foo";
val = "bar";
errmsg = null;
})
(assertEq "is not Tag"
(removeAttrs (verifyTag { foo = "bar"; baz = 42; }) ["errmsg"])
{
isTag = false;
name = null;
val = null;
})
];
discr-test = it "can discr things" [
(assertEq "id"
(discr [
{ a = lib.const true; }
] "x")
{ a = "x"; })
(assertEq "bools here, ints there"
(discr [
{ bool = lib.isBool; }
{ int = lib.isInt; }
] 25)
{ int = 25; })
(assertEq "bools here, ints there 2"
(discr [
{ bool = lib.isBool; }
{ int = lib.isInt; }
] true)
{ bool = true; })
(assertEq "fallback to default"
(discrDef "def" [
{ bool = lib.isBool; }
{ int = lib.isInt; }
] "foo")
{ def = "foo"; })
];
match-test = it "can match things" [
(assertEq "match example"
(let
success = { res = 42; };
failure = { err = "no answer"; };
matcher = {
res = i: i + 1;
err = _: 0;
};
in {
one = match success matcher;
two = match failure matcher;
})
{ one = 43;
two = 0; })
(assertEq "matchLam & pipe"
(lib.pipe { foo = 42; } [
(matchLam {
foo = i: if i < 23 then { small = i; } else { big = i; };
bar = _: { small = 5; };
})
(matchLam {
small = i: "yay it was small";
big = i: "whoo it was big!";
})
])
"whoo it was big!")
];
in
runTestsuite "tag" [
isTag-test
discr-test
match-test
]
|