2021-09-11 18:44:09 +02:00
|
|
|
{ depot, lib, ... }:
|
|
|
|
|
|
|
|
let
|
|
|
|
inherit (depot.nix.runTestsuite)
|
|
|
|
runTestsuite
|
|
|
|
it
|
|
|
|
assertEq
|
|
|
|
assertThrows
|
|
|
|
assertDoesNotThrow
|
|
|
|
;
|
|
|
|
|
|
|
|
inherit (depot.nix.utils)
|
|
|
|
isDirectory
|
|
|
|
isRegularFile
|
|
|
|
isSymlink
|
2021-09-11 18:47:18 +02:00
|
|
|
pathType
|
2021-09-14 16:41:30 +02:00
|
|
|
storePathName
|
2022-05-28 13:49:34 +02:00
|
|
|
onlyDrvPath
|
2021-09-11 18:44:09 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
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))
|
|
|
|
]);
|
2021-09-14 16:41:30 +02:00
|
|
|
|
|
|
|
cheddarStorePath =
|
|
|
|
builtins.unsafeDiscardStringContext depot.tools.cheddar.outPath;
|
|
|
|
|
2021-12-16 17:28:21 +01:00
|
|
|
cleanedSource = lib.cleanSource ./.;
|
|
|
|
|
2021-09-14 16:41:30 +02:00
|
|
|
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")
|
2021-12-16 17:28:21 +01:00
|
|
|
(assertEq "base name of a cleanSourced path"
|
|
|
|
(storePathName cleanedSource)
|
|
|
|
cleanedSource.name)
|
2021-09-14 16:41:30 +02:00
|
|
|
];
|
2022-05-28 13:49:34 +02:00
|
|
|
|
|
|
|
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)
|
|
|
|
];
|
2021-09-11 18:44:09 +02:00
|
|
|
in
|
|
|
|
|
|
|
|
runTestsuite "nix.utils" [
|
|
|
|
pathPredicates
|
2021-09-14 16:41:30 +02:00
|
|
|
storePathNameTests
|
2022-05-28 13:49:34 +02:00
|
|
|
onlyDrvPathTests
|
2021-09-11 18:44:09 +02:00
|
|
|
]
|