blob: d5159a8433b494a4a29a081159e24da749f40842 (
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
{ depot, lib, ... }:
let
inherit (depot.nix.runTestsuite)
runTestsuite
it
assertEq
assertThrows
assertDoesNotThrow
;
inherit (depot.nix.utils)
isDirectory
isRegularFile
isSymlink
pathType
storePathName
onlyDrvPath
;
assertUtilsPred = msg: act: exp: [
(assertDoesNotThrow "${msg} does not throw" act)
(assertEq msg (builtins.tryEval act).value exp)
];
pathPredicates = it "judges paths correctly" (lib.flatten [
# isDirectory
(assertUtilsPred "directory isDirectory"
(isDirectory ./directory)
true)
(assertUtilsPred "symlink not isDirectory"
(isDirectory ./symlink-directory)
false)
(assertUtilsPred "file not isDirectory"
(isDirectory ./directory/file)
false)
# isRegularFile
(assertUtilsPred "file isRegularFile"
(isRegularFile ./directory/file)
true)
(assertUtilsPred "symlink not isRegularFile"
(isRegularFile ./symlink-file)
false)
(assertUtilsPred "directory not isRegularFile"
(isRegularFile ./directory)
false)
# isSymlink
(assertUtilsPred "symlink to file isSymlink"
(isSymlink ./symlink-file)
true)
(assertUtilsPred "symlink to directory isSymlink"
(isSymlink ./symlink-directory)
true)
(assertUtilsPred "symlink to symlink isSymlink"
(isSymlink ./symlink-symlink-file)
true)
(assertUtilsPred "symlink to missing file isSymlink"
(isSymlink ./missing)
true)
(assertUtilsPred "directory not isSymlink"
(isSymlink ./directory)
false)
(assertUtilsPred "file not isSymlink"
(isSymlink ./directory/file)
false)
# missing files throw
(assertThrows "isDirectory throws on missing file"
(isDirectory ./does-not-exist))
(assertThrows "isRegularFile throws on missing file"
(isRegularFile ./does-not-exist))
(assertThrows "isSymlink throws on missing file"
(isSymlink ./does-not-exist))
]);
cheddarStorePath =
builtins.unsafeDiscardStringContext depot.tools.cheddar.outPath;
cleanedSource = lib.cleanSource ./.;
storePathNameTests = it "correctly gets the basename of a store path" [
(assertEq "base name of a derivation"
(storePathName depot.tools.cheddar)
depot.tools.cheddar.name)
(assertEq "base name of a store path string"
(storePathName cheddarStorePath)
depot.tools.cheddar.name)
(assertEq "base name of a path within a store path"
(storePathName "${cheddarStorePath}/bin/cheddar") "cheddar")
(assertEq "base name of a path"
(storePathName ../default.nix) "default.nix")
(assertEq "base name of a cleanSourced path"
(storePathName cleanedSource)
cleanedSource.name)
];
onlyDrvPathTests = it "correctly updates the string context of drvPath" [
(assertEq "onlyDrvPath only produces path dependencies"
(builtins.all
(dep: dep.path or false)
(builtins.attrValues
(builtins.getContext (onlyDrvPath depot.tools.cheddar))))
true)
];
in
runTestsuite "nix.utils" [
pathPredicates
storePathNameTests
onlyDrvPathTests
]
|