testing: migrate suggestions.sh

Change-Id: Iad28262035aa96c5ef6fa33e2a830b5fa8a9ae50
This commit is contained in:
eldritch horrors
2026-02-27 17:42:17 +00:00
parent 8cf21fcf75
commit 26f1397b75
3 changed files with 62 additions and 49 deletions
-1
View File
@@ -108,7 +108,6 @@ functional_tests_scripts = [
'db-migration.sh',
'bash-profile.sh',
'pass-as-file.sh',
'suggestions.sh',
'store-ping.sh',
'flakes/show.sh',
'path-from-hash-part.sh',
-48
View File
@@ -1,48 +0,0 @@
source common.sh
clearStore
cd "$TEST_HOME"
cat <<EOF > flake.nix
{
outputs = a: {
packages.$system = {
foo = 1;
fo1 = 1;
fo2 = 1;
fooo = 1;
foooo = 1;
fooooo = 1;
fooooo1 = 1;
fooooo2 = 1;
fooooo3 = 1;
fooooo4 = 1;
fooooo5 = 1;
fooooo6 = 1;
};
};
}
EOF
# Probable typo in the requested attribute path. Suggest some close possibilities
NIX_BUILD_STDERR_WITH_SUGGESTIONS=$(! nix build .\#fob 2>&1 1>/dev/null)
[[ "$NIX_BUILD_STDERR_WITH_SUGGESTIONS" =~ "Did you mean one of fo1, fo2, foo or fooo?" ]] || \
fail "The nix build stderr should suggest the three closest possiblities"
# None of the possible attributes is close to `bar`, so shouldnt suggest anything
NIX_BUILD_STDERR_WITH_NO_CLOSE_SUGGESTION=$(! nix build .\#bar 2>&1 1>/dev/null)
[[ ! "$NIX_BUILD_STDERR_WITH_NO_CLOSE_SUGGESTION" =~ "Did you mean" ]] || \
fail "The nix build stderr shouldnt suggest anything if theres nothing relevant to suggest"
NIX_EVAL_STDERR_WITH_SUGGESTIONS=$(! nix build --impure --expr '(builtins.getFlake (builtins.toPath ./.)).packages.'$system'.fob' 2>&1 1>/dev/null)
[[ "$NIX_EVAL_STDERR_WITH_SUGGESTIONS" =~ "Did you mean one of fo1, fo2, foo or fooo?" ]] || \
fail "The evaluator should suggest the three closest possiblities"
NIX_EVAL_STDERR_WITH_SUGGESTIONS=$(! nix build --impure --expr '({ foo }: foo) { foo = 1; fob = 2; }' 2>&1 1>/dev/null)
[[ ! "$NIX_EVAL_STDERR_WITH_SUGGESTIONS" =~ "Did you mean" ]] || \
fail "The evaluator shouldn't suggest anything if all arguments are already provided."
NIX_EVAL_STDERR_WITH_SUGGESTIONS=$(! nix build --impure --expr '({ foo ? 1 }: foo) { fob = 2; }' 2>&1 1>/dev/null)
[[ "$NIX_EVAL_STDERR_WITH_SUGGESTIONS" =~ "Did you mean foo?" ]] || \
fail "The evaluator should suggest the three closest possiblities"
+62
View File
@@ -0,0 +1,62 @@
import pytest
from testlib.fixtures.nix import Nix
from testlib.fixtures.file_helper import File, with_files
@with_files(
{
"flake.nix": File("""{
outputs = a: {
packages.system = {
foo = 1;
fo1 = 1;
fo2 = 1;
fooo = 1;
foooo = 1;
fooooo = 1;
fooooo1 = 1;
fooooo2 = 1;
fooooo3 = 1;
fooooo4 = 1;
fooooo5 = 1;
fooooo6 = 1;
};
};
}""")
}
)
class TestSuggestions:
@pytest.fixture(autouse=True)
def setup(self, nix: Nix):
nix.settings.add_xp_feature("nix-command", "flakes")
nix.settings.system = "system"
@pytest.mark.parametrize(
"args",
[
[".#fob"],
["--impure", "--expr", "(builtins.getFlake (builtins.toPath ./.)).packages.system.fob"],
],
)
def test_three_closest(self, nix: Nix, args: list[str]):
err = nix.nix(["build", *args]).run().expect(1).stderr_s
assert "Did you mean one of fo1, fo2, foo or fooo?" in err
def test_only_suggest_relevant(self, nix: Nix):
assert "Did you mean" not in nix.nix(["build", ".#bar"]).run().expect(1).stderr_s
def test_inactive_if_all_args_provided(self, nix: Nix):
assert "Did you mean" not in (
nix.nix(["build", "--impure", "--expr", "({ foo }: foo) { foo = 1; fob = 2; }"])
.run()
.expect(1)
.stderr_s
)
def test_expr(self, nix: Nix):
assert "Did you mean foo?" in (
nix.nix(["build", "--impure", "--expr", "({ foo ? 1 }: foo) { fob = 2; }"])
.run()
.expect(1)
.stderr_s
)