diff options
Diffstat (limited to 'pkgs/build-support/testers/default.nix')
-rw-r--r-- | pkgs/build-support/testers/default.nix | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/pkgs/build-support/testers/default.nix b/pkgs/build-support/testers/default.nix index 7244d3d385753..6ab0ee843cb08 100644 --- a/pkgs/build-support/testers/default.nix +++ b/pkgs/build-support/testers/default.nix @@ -1,8 +1,60 @@ -{ pkgs, lib, callPackage, runCommand, stdenv }: +{ pkgs, buildPackages, lib, callPackage, runCommand, stdenv, substituteAll, }: # Documentation is in doc/builders/testers.chapter.md { + # See https://nixos.org/manual/nixpkgs/unstable/#tester-testBuildFailure + # or doc/builders/testers.chapter.md + testBuildFailure = drv: drv.overrideAttrs (orig: { + builder = buildPackages.bash; + args = [ + (substituteAll { coreutils = buildPackages.coreutils; src = ./expect-failure.sh; }) + orig.realBuilder or stdenv.shell + ] ++ orig.args or ["-e" (orig.builder or ../../stdenv/generic/default-builder.sh)]; + }); + + # See https://nixos.org/manual/nixpkgs/unstable/#tester-testEqualDerivation + # or doc/builders/testers.chapter.md testEqualDerivation = callPackage ./test-equal-derivation.nix { }; + # See https://nixos.org/manual/nixpkgs/unstable/#tester-testEqualContents + # or doc/builders/testers.chapter.md + testEqualContents = { + assertion, + actual, + expected, + }: runCommand "equal-contents-${lib.strings.toLower assertion}" { + inherit assertion actual expected; + } '' + echo "Checking:" + echo "$assertion" + if ! diff -U5 -r "$actual" "$expected" --color=always + then + echo + echo 'Contents must be equal, but were not!' + echo + echo "+: expected, at $expected" + echo "-: unexpected, at $actual" + exit 1 + else + find "$expected" -type f -executable > expected-executables | sort + find "$actual" -type f -executable > actual-executables | sort + if ! diff -U0 actual-executables expected-executables --color=always + then + echo + echo "Contents must be equal, but some files' executable bits don't match" + echo + echo "+: make this file executable in the actual contents" + echo "-: make this file non-executable in the actual contents" + exit 1 + else + echo "expected $expected and actual $actual match." + echo 'OK' + touch $out + fi + fi + ''; + + # See https://nixos.org/manual/nixpkgs/unstable/#tester-testVersion + # or doc/builders/testers.chapter.md testVersion = { package, command ? "${package.meta.mainProgram or package.pname or package.name} --version", |