summaryrefslogtreecommitdiff
path: root/lib/path/tests
diff options
context:
space:
mode:
authorSilvan Mosberger <silvan.mosberger@tweag.io>2022-12-23 21:04:14 +0100
committerSilvan Mosberger <silvan.mosberger@tweag.io>2023-01-03 13:20:36 +0100
commit98fbcf17888872f5ebdf9fb6247266929f4308db (patch)
tree9244e627da309f1414891e951e54f383b8b37b24 /lib/path/tests
parentlib.path: init README.md document (diff)
downloadnixpkgs-98fbcf17888872f5ebdf9fb6247266929f4308db.tar.gz
lib.path.subpath.isValid: init
The first path library function
Diffstat (limited to 'lib/path/tests')
-rw-r--r--lib/path/tests/default.nix27
-rw-r--r--lib/path/tests/unit.nix76
2 files changed, 103 insertions, 0 deletions
diff --git a/lib/path/tests/default.nix b/lib/path/tests/default.nix
new file mode 100644
index 000000000000..784a3af68b6e
--- /dev/null
+++ b/lib/path/tests/default.nix
@@ -0,0 +1,27 @@
+{
+ nixpkgs ? ../../..,
+ system ? builtins.currentSystem,
+ pkgs ? import nixpkgs {
+ config = {};
+ overlays = [];
+ inherit system;
+ },
+ libpath ? ../..,
+}:
+pkgs.runCommand "lib-path-tests" {
+ nativeBuildInputs = with pkgs; [
+ nix
+ ];
+} ''
+ # Needed to make Nix evaluation work
+ export NIX_STATE_DIR=$(mktemp -d)
+
+ cp -r ${libpath} lib
+ export TEST_LIB=$PWD/lib
+
+ echo "Running unit tests lib/path/tests/unit.nix"
+ nix-instantiate --eval lib/path/tests/unit.nix \
+ --argstr libpath "$TEST_LIB"
+
+ touch $out
+''
diff --git a/lib/path/tests/unit.nix b/lib/path/tests/unit.nix
new file mode 100644
index 000000000000..15f5940a51e0
--- /dev/null
+++ b/lib/path/tests/unit.nix
@@ -0,0 +1,76 @@
+# Unit tests for lib.path functions. Use `nix-build` in this directory to
+# run these
+{ libpath }:
+let
+ lib = import libpath;
+ inherit (lib.path) subpath;
+
+ cases = lib.runTests {
+ testSubpathIsValidExample1 = {
+ expr = subpath.isValid null;
+ expected = false;
+ };
+ testSubpathIsValidExample2 = {
+ expr = subpath.isValid "";
+ expected = false;
+ };
+ testSubpathIsValidExample3 = {
+ expr = subpath.isValid "/foo";
+ expected = false;
+ };
+ testSubpathIsValidExample4 = {
+ expr = subpath.isValid "../foo";
+ expected = false;
+ };
+ testSubpathIsValidExample5 = {
+ expr = subpath.isValid "foo/bar";
+ expected = true;
+ };
+ testSubpathIsValidExample6 = {
+ expr = subpath.isValid "./foo//bar/";
+ expected = true;
+ };
+ testSubpathIsValidTwoDotsEnd = {
+ expr = subpath.isValid "foo/..";
+ expected = false;
+ };
+ testSubpathIsValidTwoDotsMiddle = {
+ expr = subpath.isValid "foo/../bar";
+ expected = false;
+ };
+ testSubpathIsValidTwoDotsPrefix = {
+ expr = subpath.isValid "..foo";
+ expected = true;
+ };
+ testSubpathIsValidTwoDotsSuffix = {
+ expr = subpath.isValid "foo..";
+ expected = true;
+ };
+ testSubpathIsValidTwoDotsPrefixComponent = {
+ expr = subpath.isValid "foo/..bar/baz";
+ expected = true;
+ };
+ testSubpathIsValidTwoDotsSuffixComponent = {
+ expr = subpath.isValid "foo/bar../baz";
+ expected = true;
+ };
+ testSubpathIsValidThreeDots = {
+ expr = subpath.isValid "...";
+ expected = true;
+ };
+ testSubpathIsValidFourDots = {
+ expr = subpath.isValid "....";
+ expected = true;
+ };
+ testSubpathIsValidThreeDotsComponent = {
+ expr = subpath.isValid "foo/.../bar";
+ expected = true;
+ };
+ testSubpathIsValidFourDotsComponent = {
+ expr = subpath.isValid "foo/..../bar";
+ expected = true;
+ };
+ };
+in
+ if cases == [] then "Unit tests successful"
+ else throw "Path unit tests failed: ${lib.generators.toPretty {} cases}"