From 0c0a41a81a7865cb822b4fd242cac07c873debda Mon Sep 17 00:00:00 2001 From: Taeer Bar-Yam Date: Tue, 25 Nov 2025 17:46:35 +0100 Subject: [PATCH] tests: add tests for dynamic attribute in let and inherit Regression tests for the previous commit. Co-authored-by: Sergei Zimmerman Co-authored-by: piegames --- maintainers/flake-module.nix | 2 ++ .../lang/eval-fail-dynamic-attrs-inherit-2.err.exp | 6 ++++++ .../lang/eval-fail-dynamic-attrs-inherit-2.nix | 6 ++++++ .../lang/eval-fail-dynamic-attrs-inherit.err.exp | 6 ++++++ .../lang/eval-fail-dynamic-attrs-inherit.nix | 6 ++++++ .../lang/eval-fail-dynamic-attrs-let-2.err.exp | 5 +++++ .../lang/eval-fail-dynamic-attrs-let-2.nix | 4 ++++ .../lang/eval-fail-dynamic-attrs-let-3.err.exp | 5 +++++ .../lang/eval-fail-dynamic-attrs-let-3.nix | 4 ++++ .../lang/eval-fail-dynamic-attrs-let.err.exp | 5 +++++ .../lang/eval-fail-dynamic-attrs-let.nix | 4 ++++ .../functional/lang/eval-okay-dynamic-attrs-3.exp | 1 + .../functional/lang/eval-okay-dynamic-attrs-3.nix | 14 ++++++++++++++ 13 files changed, 68 insertions(+) create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.err.exp create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.nix create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-inherit.err.exp create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-inherit.nix create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let-2.err.exp create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let-2.nix create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let-3.err.exp create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let-3.nix create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let.err.exp create mode 100644 tests/functional/lang/eval-fail-dynamic-attrs-let.nix create mode 100644 tests/functional/lang/eval-okay-dynamic-attrs-3.exp create mode 100644 tests/functional/lang/eval-okay-dynamic-attrs-3.nix diff --git a/maintainers/flake-module.nix b/maintainers/flake-module.nix index 8dcff9c63..414e6c570 100644 --- a/maintainers/flake-module.nix +++ b/maintainers/flake-module.nix @@ -79,6 +79,8 @@ # Not supported by nixfmt ''^tests/functional/lang/eval-okay-deprecate-cursed-or\.nix$'' ''^tests/functional/lang/eval-okay-attrs5\.nix$'' + ''^tests/functional/lang/eval-fail-dynamic-attrs-inherit\.nix$'' + ''^tests/functional/lang/eval-fail-dynamic-attrs-inherit-2\.nix$'' # More syntax tests # These tests, or parts of them, should have been parse-* test cases. diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.err.exp b/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.err.exp new file mode 100644 index 000000000..e71fc23b5 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.err.exp @@ -0,0 +1,6 @@ +error: dynamic attributes not allowed in inherit + at /pwd/lang/eval-fail-dynamic-attrs-inherit-2.nix:5:15: + 4| { + 5| inherit (a) ${"b" + ""}; + | ^ + 6| } diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.nix b/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.nix new file mode 100644 index 000000000..7af9685fe --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-inherit-2.nix @@ -0,0 +1,6 @@ +let + a.b = 1; +in +{ + inherit (a) ${"b" + ""}; +} diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-inherit.err.exp b/tests/functional/lang/eval-fail-dynamic-attrs-inherit.err.exp new file mode 100644 index 000000000..b08b0e201 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-inherit.err.exp @@ -0,0 +1,6 @@ +error: dynamic attributes not allowed in inherit + at /pwd/lang/eval-fail-dynamic-attrs-inherit.nix:5:11: + 4| { + 5| inherit ${"a" + ""}; + | ^ + 6| } diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-inherit.nix b/tests/functional/lang/eval-fail-dynamic-attrs-inherit.nix new file mode 100644 index 000000000..3a9b68410 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-inherit.nix @@ -0,0 +1,6 @@ +let + a = 1; +in +{ + inherit ${"a" + ""}; +} diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let-2.err.exp b/tests/functional/lang/eval-fail-dynamic-attrs-let-2.err.exp new file mode 100644 index 000000000..2eb7f04a7 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let-2.err.exp @@ -0,0 +1,5 @@ +error: dynamic attributes not allowed in let + at /pwd/lang/eval-fail-dynamic-attrs-let-2.nix:1:1: + 1| let + | ^ + 2| ${"${"a"}"} = 1; diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let-2.nix b/tests/functional/lang/eval-fail-dynamic-attrs-let-2.nix new file mode 100644 index 000000000..bcec33ddf --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let-2.nix @@ -0,0 +1,4 @@ +let + ${"${"a"}"} = 1; +in +a diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let-3.err.exp b/tests/functional/lang/eval-fail-dynamic-attrs-let-3.err.exp new file mode 100644 index 000000000..0f44e25dd --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let-3.err.exp @@ -0,0 +1,5 @@ +error: dynamic attributes not allowed in let + at /pwd/lang/eval-fail-dynamic-attrs-let-3.nix:1:1: + 1| let + | ^ + 2| "${"a"}" = 1; diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let-3.nix b/tests/functional/lang/eval-fail-dynamic-attrs-let-3.nix new file mode 100644 index 000000000..37453c530 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let-3.nix @@ -0,0 +1,4 @@ +let + "${"a"}" = 1; +in +a diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let.err.exp b/tests/functional/lang/eval-fail-dynamic-attrs-let.err.exp new file mode 100644 index 000000000..ca3192133 --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let.err.exp @@ -0,0 +1,5 @@ +error: dynamic attributes not allowed in let + at /pwd/lang/eval-fail-dynamic-attrs-let.nix:1:1: + 1| let + | ^ + 2| ${"a" + ""} = 1; diff --git a/tests/functional/lang/eval-fail-dynamic-attrs-let.nix b/tests/functional/lang/eval-fail-dynamic-attrs-let.nix new file mode 100644 index 000000000..fca32ae4f --- /dev/null +++ b/tests/functional/lang/eval-fail-dynamic-attrs-let.nix @@ -0,0 +1,4 @@ +let + ${"a" + ""} = 1; +in +a diff --git a/tests/functional/lang/eval-okay-dynamic-attrs-3.exp b/tests/functional/lang/eval-okay-dynamic-attrs-3.exp new file mode 100644 index 000000000..9d27f872c --- /dev/null +++ b/tests/functional/lang/eval-okay-dynamic-attrs-3.exp @@ -0,0 +1 @@ +{ a = 1; attrs = { b = 1; c = 1; d = 1; }; b = 1; c = 1; d = 1; } diff --git a/tests/functional/lang/eval-okay-dynamic-attrs-3.nix b/tests/functional/lang/eval-okay-dynamic-attrs-3.nix new file mode 100644 index 000000000..d55ed82f8 --- /dev/null +++ b/tests/functional/lang/eval-okay-dynamic-attrs-3.nix @@ -0,0 +1,14 @@ +# dynamic attrs are not generally allowed in `let`, and inherit, but they are if they only contain a string +let + ${"a"} = 1; + attrs = rec { + b = c; + ${"c"} = d; + d = a; + }; +in +{ + inherit ${"a"}; + inherit attrs; + inherit (attrs) ${"b"} ${"c"} d; +}