From a1dedc908d1d9f7e2b9490dc7b3b3020e8fe7d0b Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Wed, 5 Apr 2023 16:44:58 +0200 Subject: lib.filesystem.pathType and co.: Add tests Co-Authored-By: Robert Hensing --- lib/tests/filesystem.sh | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 lib/tests/filesystem.sh (limited to 'lib/tests/filesystem.sh') diff --git a/lib/tests/filesystem.sh b/lib/tests/filesystem.sh new file mode 100755 index 0000000000000..ab1504abb4907 --- /dev/null +++ b/lib/tests/filesystem.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash + +# Tests lib/filesystem.nix +# Run: +# [nixpkgs]$ lib/tests/filesystem.sh +# or: +# [nixpkgs]$ nix-build lib/tests/release.nix + +set -euo pipefail +shopt -s inherit_errexit + +# Use +# || die +die() { + echo >&2 "test case failed: " "$@" + exit 1 +} + +if test -n "${TEST_LIB:-}"; then + NIX_PATH=nixpkgs="$(dirname "$TEST_LIB")" +else + NIX_PATH=nixpkgs="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."; pwd)" +fi +export NIX_PATH + +work="$(mktemp -d)" +clean_up() { + rm -rf "$work" +} +trap clean_up EXIT +cd "$work" + +mkdir directory +touch regular +ln -s target symlink +mkfifo fifo + +checkPathType() { + local path=$1 + local expectedPathType=$2 + local actualPathType=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import ; in lib.filesystem.pathType path' \ + --argstr path "$path") + if [[ "$actualPathType" != "$expectedPathType" ]]; then + die "lib.filesystem.pathType \"$path\" == $actualPathType, but $expectedPathType was expected" + fi +} + +checkPathType "$PWD/directory" '"directory"' +checkPathType "$PWD/regular" '"regular"' +checkPathType "$PWD/symlink" '"symlink"' +checkPathType "$PWD/fifo" '"unknown"' + +checkPathIsDirectory() { + local path=$1 + local expectedIsDirectory=$2 + local actualIsDirectory=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import ; in lib.filesystem.pathIsDirectory path' \ + --argstr path "$path") + if [[ "$actualIsDirectory" != "$expectedIsDirectory" ]]; then + die "lib.filesystem.pathIsDirectory \"$path\" == $actualIsDirectory, but $expectedIsDirectory was expected" + fi +} + +checkPathIsDirectory "$PWD/directory" "true" +checkPathIsDirectory "$PWD/regular" "false" +checkPathIsDirectory "$PWD/symlink" "false" +checkPathIsDirectory "$PWD/fifo" "false" +checkPathIsDirectory "$PWD/non-existent" "false" + +checkPathIsRegularFile() { + local path=$1 + local expectedIsRegularFile=$2 + local actualIsRegularFile=$(nix-instantiate --eval --strict --json 2>&1 \ + -E '{ path }: let lib = import ; in lib.filesystem.pathIsRegularFile path' \ + --argstr path "$path") + if [[ "$actualIsRegularFile" != "$expectedIsRegularFile" ]]; then + die "lib.filesystem.pathIsRegularFile \"$path\" == $actualIsRegularFile, but $expectedIsRegularFile was expected" + fi +} + +checkPathIsRegularFile "$PWD/directory" "false" +checkPathIsRegularFile "$PWD/regular" "true" +checkPathIsRegularFile "$PWD/symlink" "false" +checkPathIsRegularFile "$PWD/fifo" "false" +checkPathIsRegularFile "$PWD/non-existent" "false" + +echo >&2 tests ok -- cgit 1.4.1