about summary refs log tree commit diff
path: root/nix/tag/tests.nix
blob: bcc42c758a6c5516f10b29cd0219feafece655a3 (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
89
90
91
92
93
94
{ 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
]