testing: migrate suggestions.sh
Change-Id: Iad28262035aa96c5ef6fa33e2a830b5fa8a9ae50
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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 shouldn’t 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 shouldn’t suggest anything if there’s 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"
|
||||
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user