diff --git a/pkgs/build-support/trivial-builders/test/write-text-file.nix b/pkgs/build-support/trivial-builders/test/write-text-file.nix index ac83a75fca4a..2e6685c1980b 100644 --- a/pkgs/build-support/trivial-builders/test/write-text-file.nix +++ b/pkgs/build-support/trivial-builders/test/write-text-file.nix @@ -1,34 +1,71 @@ -{ writeTextFile }: +/* + To run: + + cd nixpkgs + nix-build -A tests.trivial-builders.writeTextFile + + or to run an individual test case + + cd nixpkgs + nix-build -A tests.trivial-builders.writeTextFile.foo +*/ +{ lib, runCommand, runtimeShell, writeTextFile }: let veryWeirdName = ''here's a name with some "bad" characters, like spaces and quotes''; -in writeTextFile { - name = "weird-names"; - destination = "/etc/${veryWeirdName}"; - text = ''passed!''; - checkPhase = '' - # intentionally hardcode everything here, to make sure - # Nix does not mess with file paths +in +lib.recurseIntoAttrs { - name="here's a name with some \"bad\" characters, like spaces and quotes" - fullPath="$out/etc/$name" + different-exe-name = + let + pkg = writeTextFile { + name = "bar"; + destination = "/bin/foo"; + executable = true; + text = '' + #!${runtimeShell} + echo hi + ''; + }; + in + assert pkg.meta.mainProgram == "foo"; + assert baseNameOf (lib.getExe pkg) == "foo"; + assert pkg.name == "bar"; + runCommand "test-writeTextFile-different-exe-name" {} '' + PATH="${lib.makeBinPath [ pkg ]}:$PATH" + x=$(foo) + [[ "$x" == hi ]] + touch $out + ''; - if [ -f "$fullPath" ]; then - echo "[PASS] File exists!" - else - echo "[FAIL] File was not created at expected path!" - exit 1 - fi + weird-name = writeTextFile { + name = "weird-names"; + destination = "/etc/${veryWeirdName}"; + text = ''passed!''; + checkPhase = '' + # intentionally hardcode everything here, to make sure + # Nix does not mess with file paths - content=$(<"$fullPath") - expected="passed!" + name="here's a name with some \"bad\" characters, like spaces and quotes" + fullPath="$out/etc/$name" - if [ "$content" = "$expected" ]; then - echo "[PASS] Contents match!" - else - echo "[FAIL] File contents don't match!" - echo " Expected: $expected" - echo " Got: $content" - exit 2 - fi - ''; + if [ -f "$fullPath" ]; then + echo "[PASS] File exists!" + else + echo "[FAIL] File was not created at expected path!" + exit 1 + fi + + content=$(<"$fullPath") + expected="passed!" + + if [ "$content" = "$expected" ]; then + echo "[PASS] Contents match!" + else + echo "[FAIL] File contents don't match!" + echo " Expected: $expected" + echo " Got: $content" + exit 2 + fi + ''; + }; }