From 76d6b51f5c789cedce20db54eca4485f55f3060f Mon Sep 17 00:00:00 2001 From: piegames Date: Tue, 20 May 2025 13:20:53 +0200 Subject: [PATCH] tests/functional/lang: Don't pipe input into stdin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Back in the days, this used to be the modus operandi, but then, still many but less years ago, Eelco came along and changed it to passing in the actual file. Of course, no motivation was provided, and it was only done on half of the test runners for some reason, leaving us to wonder what the true intentions of this code are … Anyways, with this commit now everything standardises on passing in the file by path instead of via stdin. Motivation: - We need to `sed` out the path anyways for various other reasons, including import tests and path value tests - Given that, the presumed primary motivation for using stdin in the first place becomes moot - Bonus points for giving better error messages, especially in tests that involve multiple input files Change-Id: Ic6de1ec24f4c4d3c05e33d1ee053614784677513 --- tests/functional/lang.sh | 7 ++++--- tests/functional/lang/parse-fail-crlf.err.exp | 4 ++-- .../lang/parse-fail-dup-attrs-1.err.exp | 4 ++-- .../lang/parse-fail-dup-attrs-2.err.exp | 4 ++-- .../lang/parse-fail-dup-attrs-3.err.exp | 4 ++-- .../lang/parse-fail-dup-attrs-4.err.exp | 4 ++-- .../lang/parse-fail-dup-attrs-7.err.exp | 4 ++-- .../lang/parse-fail-dup-formals.err.exp | 2 +- .../lang/parse-fail-eof-in-string.err.exp | 2 +- .../functional/lang/parse-fail-eof-pos.err.exp | 2 +- tests/functional/lang/parse-fail-eol-1.err.exp | 2 +- tests/functional/lang/parse-fail-eol-2.err.exp | 2 +- tests/functional/lang/parse-fail-eol-3.err.exp | 2 +- .../lang/parse-fail-mixed-nested-attrs1.err.exp | 4 ++-- .../lang/parse-fail-mixed-nested-attrs2.err.exp | 4 ++-- tests/functional/lang/parse-fail-nul.err.exp | Bin 274 -> 307 bytes .../lang/parse-fail-path-slash.err.exp | 2 +- .../lang/parse-fail-patterns-1.err.exp | 2 +- .../lang/parse-fail-regression-20060610.err.exp | 2 +- tests/functional/lang/parse-fail-set.err.exp | 2 +- .../lang/parse-fail-undef-var-2.err.exp | 2 +- .../lang/parse-fail-undef-var.err.exp | 2 +- tests/functional/lang/parse-fail-utf8.err.exp | 2 +- .../parse-okay-rec-set-override-warning.err.exp | 4 ++-- 24 files changed, 35 insertions(+), 34 deletions(-) diff --git a/tests/functional/lang.sh b/tests/functional/lang.sh index 8e6b472d3..3b0b52c17 100755 --- a/tests/functional/lang.sh +++ b/tests/functional/lang.sh @@ -47,8 +47,9 @@ for i in parse-fail-*.nix; do if test -e "$i.flags"; then read -r -a flags < "$i.flags" fi - if expectStderr 1 nix-instantiate --parse "${flags[@]}" - < "$i.nix" > "$i.err" + if expectStderr 1 nix-instantiate --parse "${flags[@]}" "$i.nix" > "$i.err" then + sed -i "s!$(pwd)!/pwd!g" "$i.err" diffAndAccept "$i" err err.exp else echo "FAIL: $i shouldn't parse" @@ -65,11 +66,11 @@ for i in parse-okay-*.nix; do read -r -a flags < "$i.flags" fi if - expect 0 nix-instantiate --parse "${flags[@]}" - < "$i.nix" \ + expect 0 nix-instantiate --parse "${flags[@]}" "$i.nix" \ 1> "$i.out" \ 2> "$i.err" then - sed "s!$(pwd)!/pwd!g" "$i.out" "$i.err" + sed -i "s!$(pwd)!/pwd!g" "$i.out" "$i.err" yq --in-place --yaml-output '.' "$i.out" diffAndAccept "$i" out exp diffAndAccept "$i" err err.exp diff --git a/tests/functional/lang/parse-fail-crlf.err.exp b/tests/functional/lang/parse-fail-crlf.err.exp index cf6c36c94..06c375774 100644 --- a/tests/functional/lang/parse-fail-crlf.err.exp +++ b/tests/functional/lang/parse-fail-crlf.err.exp @@ -1,11 +1,11 @@ warning: CR (`\r`) and CRLF (`\r\n`) line endings are not supported. Please inspect the file and normalize it to use LF (`\n`) line endings instead. Use --extra-deprecated-features cr-line-endings to silence this warning. - at «stdin»:7:21: + at /pwd/parse-okay-crlf.nix:7:21: 6| x = 7| # Dit is een test. | ^ 8| y; error: CR (`\r`) and CRLF (`\r\n`) line endings are not supported. Please inspect the file and normalize it to use LF (`\n`) line endings instead. Use --extra-deprecated-features cr-line-endings to silence this warning. - at «stdin»:14:15: + at /pwd/parse-okay-crlf.nix:14:15: 13| # translated to LF. 14| foo = "multi | ^ diff --git a/tests/functional/lang/parse-fail-dup-attrs-1.err.exp b/tests/functional/lang/parse-fail-dup-attrs-1.err.exp index ffb5198c1..70fb226be 100644 --- a/tests/functional/lang/parse-fail-dup-attrs-1.err.exp +++ b/tests/functional/lang/parse-fail-dup-attrs-1.err.exp @@ -1,5 +1,5 @@ -error: attribute 'x' already defined at «stdin»:1:3 - at «stdin»:3:3: +error: attribute 'x' already defined at /pwd/parse-fail-dup-attrs-1.nix:1:3 + at /pwd/parse-fail-dup-attrs-1.nix:3:3: 2| y = 456; 3| x = 789; | ^ diff --git a/tests/functional/lang/parse-fail-dup-attrs-2.err.exp b/tests/functional/lang/parse-fail-dup-attrs-2.err.exp index 3105e60de..124284bc9 100644 --- a/tests/functional/lang/parse-fail-dup-attrs-2.err.exp +++ b/tests/functional/lang/parse-fail-dup-attrs-2.err.exp @@ -1,5 +1,5 @@ -error: attribute 'x' already defined at «stdin»:9:5 - at «stdin»:10:18: +error: attribute 'x' already defined at /pwd/parse-fail-dup-attrs-2.nix:9:5 + at /pwd/parse-fail-dup-attrs-2.nix:10:18: 9| x = 789; 10| inherit (as) x; | ^ diff --git a/tests/functional/lang/parse-fail-dup-attrs-3.err.exp b/tests/functional/lang/parse-fail-dup-attrs-3.err.exp index 3105e60de..688ade4b8 100644 --- a/tests/functional/lang/parse-fail-dup-attrs-3.err.exp +++ b/tests/functional/lang/parse-fail-dup-attrs-3.err.exp @@ -1,5 +1,5 @@ -error: attribute 'x' already defined at «stdin»:9:5 - at «stdin»:10:18: +error: attribute 'x' already defined at /pwd/parse-fail-dup-attrs-3.nix:9:5 + at /pwd/parse-fail-dup-attrs-3.nix:10:18: 9| x = 789; 10| inherit (as) x; | ^ diff --git a/tests/functional/lang/parse-fail-dup-attrs-4.err.exp b/tests/functional/lang/parse-fail-dup-attrs-4.err.exp index c98a8f8d0..97acf214a 100644 --- a/tests/functional/lang/parse-fail-dup-attrs-4.err.exp +++ b/tests/functional/lang/parse-fail-dup-attrs-4.err.exp @@ -1,5 +1,5 @@ -error: attribute 'services.ssh.port' already defined at «stdin»:2:3 - at «stdin»:3:3: +error: attribute 'services.ssh.port' already defined at /pwd/parse-fail-dup-attrs-4.nix:2:3 + at /pwd/parse-fail-dup-attrs-4.nix:3:3: 2| services.ssh.port = 22; 3| services.ssh.port = 23; | ^ diff --git a/tests/functional/lang/parse-fail-dup-attrs-7.err.exp b/tests/functional/lang/parse-fail-dup-attrs-7.err.exp index 4e0a48eff..ae4a37ee8 100644 --- a/tests/functional/lang/parse-fail-dup-attrs-7.err.exp +++ b/tests/functional/lang/parse-fail-dup-attrs-7.err.exp @@ -1,5 +1,5 @@ -error: attribute 'x' already defined at «stdin»:6:13 - at «stdin»:7:13: +error: attribute 'x' already defined at /pwd/parse-fail-dup-attrs-7.nix:6:13 + at /pwd/parse-fail-dup-attrs-7.nix:7:13: 6| inherit x; 7| inherit x; | ^ diff --git a/tests/functional/lang/parse-fail-dup-formals.err.exp b/tests/functional/lang/parse-fail-dup-formals.err.exp index d7c7e0237..9f6520e91 100644 --- a/tests/functional/lang/parse-fail-dup-formals.err.exp +++ b/tests/functional/lang/parse-fail-dup-formals.err.exp @@ -1,4 +1,4 @@ error: duplicate formal function argument 'x' - at «stdin»:1:8: + at /pwd/parse-fail-dup-formals.nix:1:8: 1| {x, y, x}: x | ^ diff --git a/tests/functional/lang/parse-fail-eof-in-string.err.exp b/tests/functional/lang/parse-fail-eof-in-string.err.exp index 17f34b62d..24d5dec13 100644 --- a/tests/functional/lang/parse-fail-eof-in-string.err.exp +++ b/tests/functional/lang/parse-fail-eof-in-string.err.exp @@ -1,5 +1,5 @@ error: syntax error, unexpected end of file, expecting '"' - at «stdin»:3:6: + at /pwd/parse-fail-eof-in-string.nix:3:6: 2| # Note that this file must not end with a newline. 3| a 1"$ | ^ diff --git a/tests/functional/lang/parse-fail-eof-pos.err.exp b/tests/functional/lang/parse-fail-eof-pos.err.exp index fc56897e4..d21e5e7c0 100644 --- a/tests/functional/lang/parse-fail-eof-pos.err.exp +++ b/tests/functional/lang/parse-fail-eof-pos.err.exp @@ -1,5 +1,5 @@ error: syntax error, unexpected end of file, expecting expression - at «stdin»:3:1: + at /pwd/parse-fail-eof-pos.nix:3:1: 2| # no content 3| | ^ diff --git a/tests/functional/lang/parse-fail-eol-1.err.exp b/tests/functional/lang/parse-fail-eol-1.err.exp index f7f79b460..f500c357b 100644 --- a/tests/functional/lang/parse-fail-eol-1.err.exp +++ b/tests/functional/lang/parse-fail-eol-1.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'invalid' - at «stdin»:2:1: + at /pwd/parse-fail-eol-1.nix:2:1: 1| # foo 2| invalid | ^ diff --git a/tests/functional/lang/parse-fail-eol-2.err.exp b/tests/functional/lang/parse-fail-eol-2.err.exp index f7f79b460..053865db2 100644 --- a/tests/functional/lang/parse-fail-eol-2.err.exp +++ b/tests/functional/lang/parse-fail-eol-2.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'invalid' - at «stdin»:2:1: + at /pwd/parse-fail-eol-2.nix:2:1: 1| # foo 2| invalid | ^ diff --git a/tests/functional/lang/parse-fail-eol-3.err.exp b/tests/functional/lang/parse-fail-eol-3.err.exp index f7f79b460..06901baad 100644 --- a/tests/functional/lang/parse-fail-eol-3.err.exp +++ b/tests/functional/lang/parse-fail-eol-3.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'invalid' - at «stdin»:2:1: + at /pwd/parse-fail-eol-3.nix:2:1: 1| # foo 2| invalid | ^ diff --git a/tests/functional/lang/parse-fail-mixed-nested-attrs1.err.exp b/tests/functional/lang/parse-fail-mixed-nested-attrs1.err.exp index a4472156b..6a0465f1a 100644 --- a/tests/functional/lang/parse-fail-mixed-nested-attrs1.err.exp +++ b/tests/functional/lang/parse-fail-mixed-nested-attrs1.err.exp @@ -1,5 +1,5 @@ -error: attribute 'z' already defined at «stdin»:3:16 - at «stdin»:2:3: +error: attribute 'z' already defined at /pwd/parse-fail-mixed-nested-attrs1.nix:3:16 + at /pwd/parse-fail-mixed-nested-attrs1.nix:2:3: 1| { 2| x.z = 3; | ^ diff --git a/tests/functional/lang/parse-fail-mixed-nested-attrs2.err.exp b/tests/functional/lang/parse-fail-mixed-nested-attrs2.err.exp index ead1f0dbd..f4d66a9cc 100644 --- a/tests/functional/lang/parse-fail-mixed-nested-attrs2.err.exp +++ b/tests/functional/lang/parse-fail-mixed-nested-attrs2.err.exp @@ -1,5 +1,5 @@ -error: attribute 'y' already defined at «stdin»:3:9 - at «stdin»:2:3: +error: attribute 'y' already defined at /pwd/parse-fail-mixed-nested-attrs2.nix:3:9 + at /pwd/parse-fail-mixed-nested-attrs2.nix:2:3: 1| { 2| x.y.y = 3; | ^ diff --git a/tests/functional/lang/parse-fail-nul.err.exp b/tests/functional/lang/parse-fail-nul.err.exp index a04ce99a87b67aeab481a4b817bd01c20e97e29e..b0f3eb3b88c726b82f498131967fda9e0e2309d8 100644 GIT binary patch delta 93 zcmbQlw3%tb-7x)v@)Z5lvcw$S{OrU^-MrEqy}Zl{D?=+ID=q~jU|6G|l$M{*kd#=Y Rgd(9(qo5FnB4Sj-1pw@x7GnSa delta 45 rcmdnYG>K`#U8O^-i%U{6^A7E{GPE+X;!;2YhBXRGY5Dn+1sR0_Zf^~1 diff --git a/tests/functional/lang/parse-fail-path-slash.err.exp b/tests/functional/lang/parse-fail-path-slash.err.exp index 0407543a1..769e685ac 100644 --- a/tests/functional/lang/parse-fail-path-slash.err.exp +++ b/tests/functional/lang/parse-fail-path-slash.err.exp @@ -1,5 +1,5 @@ error: path has a trailing slash - at «stdin»:6:12: + at /pwd/parse-fail-path-slash.nix:6:12: 5| # and https://nixos.org/nix-dev/2016-June/020829.html 6| /nix/store/ | ^ diff --git a/tests/functional/lang/parse-fail-patterns-1.err.exp b/tests/functional/lang/parse-fail-patterns-1.err.exp index 6ba39d884..9278c6af6 100644 --- a/tests/functional/lang/parse-fail-patterns-1.err.exp +++ b/tests/functional/lang/parse-fail-patterns-1.err.exp @@ -1,5 +1,5 @@ error: duplicate formal function argument 'args' - at «stdin»:1:1: + at /pwd/parse-fail-patterns-1.nix:1:1: 1| args@{args, x, y, z}: x | ^ 2| diff --git a/tests/functional/lang/parse-fail-regression-20060610.err.exp b/tests/functional/lang/parse-fail-regression-20060610.err.exp index 59fa1f08f..871bf9517 100644 --- a/tests/functional/lang/parse-fail-regression-20060610.err.exp +++ b/tests/functional/lang/parse-fail-regression-20060610.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'gcc' - at «stdin»:9:11: + at /pwd/parse-fail-regression-20060610.nix:9:11: 8| ({ 9| inherit gcc; | ^ diff --git a/tests/functional/lang/parse-fail-set.err.exp b/tests/functional/lang/parse-fail-set.err.exp index 2f77406a7..f9b1d9e90 100644 --- a/tests/functional/lang/parse-fail-set.err.exp +++ b/tests/functional/lang/parse-fail-set.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'x' - at «stdin»:1:3: + at /pwd/parse-fail-set.nix:1:3: 1| 8.x | ^ 2| diff --git a/tests/functional/lang/parse-fail-undef-var-2.err.exp b/tests/functional/lang/parse-fail-undef-var-2.err.exp index d1728f125..036d0f1f7 100644 --- a/tests/functional/lang/parse-fail-undef-var-2.err.exp +++ b/tests/functional/lang/parse-fail-undef-var-2.err.exp @@ -1,5 +1,5 @@ error: syntax error, expecting '}' - at «stdin»:3:13: + at /pwd/parse-fail-undef-var-2.nix:3:13: 2| 3| f = {x, y : ["baz" "bar" z "bat"]}: x + y; | ^ diff --git a/tests/functional/lang/parse-fail-undef-var.err.exp b/tests/functional/lang/parse-fail-undef-var.err.exp index 3d143d9af..38b8fd5cb 100644 --- a/tests/functional/lang/parse-fail-undef-var.err.exp +++ b/tests/functional/lang/parse-fail-undef-var.err.exp @@ -1,5 +1,5 @@ error: undefined variable 'y' - at «stdin»:1:4: + at /pwd/parse-fail-undef-var.nix:1:4: 1| x: y | ^ 2| diff --git a/tests/functional/lang/parse-fail-utf8.err.exp b/tests/functional/lang/parse-fail-utf8.err.exp index 81df9dc8a..7a134cfd4 100644 --- a/tests/functional/lang/parse-fail-utf8.err.exp +++ b/tests/functional/lang/parse-fail-utf8.err.exp @@ -1,5 +1,5 @@ error: syntax error, expecting end of file - at «stdin»:1:5: + at /pwd/parse-fail-utf8.nix:1:5: 1| 123 é 4 | ^ 2| diff --git a/tests/functional/lang/parse-okay-rec-set-override-warning.err.exp b/tests/functional/lang/parse-okay-rec-set-override-warning.err.exp index 6b55c567f..5e043d404 100644 --- a/tests/functional/lang/parse-okay-rec-set-override-warning.err.exp +++ b/tests/functional/lang/parse-okay-rec-set-override-warning.err.exp @@ -1,11 +1,11 @@ warning: __overrides attributes are deprecated and will be removed in the future. Use --extra-deprecated-features rec-set-overrides to silence this warning. - at «stdin»:3:17: + at /pwd/parse-okay-rec-set-override-warning.nix:3:17: 2| # Should warn 3| { a = rec {}; a.__overrides = {}; } | ^ 4| rec { __overrides = {}; } warning: __overrides attributes are deprecated and will be removed in the future. Use --extra-deprecated-features rec-set-overrides to silence this warning. - at «stdin»:4:9: + at /pwd/parse-okay-rec-set-override-warning.nix:4:9: 3| { a = rec {}; a.__overrides = {}; } 4| rec { __overrides = {}; } | ^