Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
8.1 kB · 353 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354# NOTE: Tests related to isDeclaredArray go here.{ isDeclaredArray, lib, runCommand, testers,}:let inherit (lib.attrsets) recurseIntoAttrs; inherit (testers) shellcheck shfmt testBuildFailure';
commonArgs = { __structuredAttrs = true; strictDeps = true; preferLocalBuild = true; nativeBuildInputs = [ isDeclaredArray ]; };
check = let mkLine = intro: values: "${if intro == null then "" else intro + " "}check${if values == null then "" else "=" + values}"; mkScope = scope: line: if scope == null then line else if scope == "function" then '' foo() { ${line} } foo '' else builtins.throw "Invalid scope: ${scope}"; in { name, scope, intro, values, }: runCommand name commonArgs '' set -eu
${mkScope scope (mkLine intro values)}
if isDeclaredArray check; then nixLog "test passed" touch "$out" else nixErrorLog "test failed" exit 1 fi '';inrecurseIntoAttrs { shellcheck = shellcheck { name = "isDeclaredArray"; src = ./isDeclaredArray.bash; };
shfmt = shfmt { name = "isDeclaredArray"; src = ./isDeclaredArray.bash; };
undeclaredFails = testBuildFailure' { name = "undeclaredFails"; drv = runCommand "undeclared" commonArgs '' set -eu if isDeclaredArray undeclared; then nixLog "test passed" touch "$out" else nixErrorLog "test failed" exit 1 fi ''; expectedBuilderLogEntries = [ "test failed" ]; };
mapFails = testBuildFailure' { name = "mapFails"; drv = runCommand "map" commonArgs '' set -eu local -A map if isDeclaredArray map; then nixLog "test passed" touch "$out" else nixErrorLog "test failed" exit 1 fi ''; expectedBuilderLogEntries = [ "test failed" ]; };
emptyStringNamerefFails = testBuildFailure' { name = "emptyStringNamerefFails"; drv = runCommand "emptyStringNameref" commonArgs '' set -eu if isDeclaredArray ""; then nixLog "test passed" touch "$out" else nixErrorLog "test failed" exit 1 fi ''; expectedBuilderLogEntries = [ "local: `': not a valid identifier" "test failed" ]; };
namerefToEmptyStringFails = testBuildFailure' { name = "namerefToEmptyStringFails"; drv = check { name = "namerefToEmptyString"; scope = null; intro = "local -n"; values = ""; }; expectedBuilderLogEntries = [ "local: `': not a valid identifier" # The test fails in such a way that it exits immediately, without returning to the else branch. ]; };
sameScopeEmptyStringFails = testBuildFailure' { name = "sameScopeEmptyStringFails"; drv = check { name = "sameScopeEmptyString"; scope = null; intro = null; values = ""; }; expectedBuilderLogEntries = [ "test failed" ]; };
sameScopeEmptyArray = check { name = "sameScopeEmptyArray"; scope = null; intro = null; values = "()"; };
sameScopeSingletonArray = check { name = "sameScopeSingletonArray"; scope = null; intro = null; values = ''("hello!")''; };
sameScopeLocalUnsetArray = check { name = "sameScopeLocalUnsetArray"; scope = null; intro = "local -a"; values = null; };
sameScopeLocalEmptyArray = check { name = "sameScopeLocalEmptyArray"; scope = null; intro = "local -a"; values = "()"; };
sameScopeLocalSingletonArray = check { name = "sameScopeLocalSingletonArray"; scope = null; intro = "local -a"; values = ''("hello!")''; };
sameScopeDeclareUnsetArray = check { name = "sameScopeDeclareUnsetArray"; scope = null; intro = "declare -a"; values = null; };
sameScopeDeclareEmptyArray = check { name = "sameScopeDeclareEmptyArray"; scope = null; intro = "declare -a"; values = "()"; };
sameScopeDeclareSingletonArray = check { name = "sameScopeDeclareSingletonArray"; scope = null; intro = "declare -a"; values = ''("hello!")''; };
previousScopeEmptyStringFails = testBuildFailure' { name = "previousScopeEmptyStringFails"; drv = check { name = "previousScopeEmptyString"; scope = "function"; intro = null; values = ""; }; expectedBuilderLogEntries = [ "test failed" ]; };
# Works because the variable isn't lexically scoped. previousScopeEmptyArray = check { name = "previousScopeEmptyArray"; scope = "function"; intro = null; values = "()"; };
# Works because the variable isn't lexically scoped. previousScopeSingletonArray = check { name = "previousScopeSingletonArray"; scope = "function"; intro = null; values = ''("hello!")''; };
previousScopeLocalUnsetArrayFails = testBuildFailure' { name = "previousScopeLocalUnsetArrayFails"; drv = check { name = "previousScopeLocalUnsetArray"; scope = "function"; intro = "local -a"; values = null; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeLocalEmptyArrayFails = testBuildFailure' { name = "previousScopeLocalEmptyArrayFails"; drv = check { name = "previousScopeLocalEmptyArray"; scope = "function"; intro = "local -a"; values = "()"; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeLocalSingletonArrayFails = testBuildFailure' { name = "previousScopeLocalSingletonArrayFails"; drv = check { name = "previousScopeLocalSingletonArray"; scope = "function"; intro = "local -a"; values = ''("hello!")''; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeLocalGlobalUnsetArray = check { name = "previousScopeLocalGlobalUnsetArray"; scope = "function"; intro = "local -ag"; values = null; };
previousScopeLocalGlobalEmptyArray = check { name = "previousScopeLocalGlobalEmptyArray"; scope = "function"; intro = "local -ag"; values = "()"; };
previousScopeLocalGlobalSingletonArray = check { name = "previousScopeLocalGlobalSingletonArray"; scope = "function"; intro = "local -ag"; values = ''("hello!")''; };
previousScopeDeclareUnsetArrayFails = testBuildFailure' { name = "previousScopeDeclareUnsetArrayFails"; drv = check { name = "previousScopeDeclareUnsetArray"; scope = "function"; intro = "declare -a"; values = null; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeDeclareEmptyArrayFails = testBuildFailure' { name = "previousScopeDeclareEmptyArrayFails"; drv = check { name = "previousScopeDeclareEmptyArray"; scope = "function"; intro = "declare -a"; values = "()"; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeDeclareSingletonArrayFails = testBuildFailure' { name = "previousScopeDeclareSingletonArrayFails"; drv = check { name = "previousScopeDeclareSingletonArray"; scope = "function"; intro = "declare -a"; values = ''("hello!")''; }; expectedBuilderLogEntries = [ "test failed" ]; };
previousScopeDeclareGlobalUnsetArray = check { name = "previousScopeDeclareGlobalUnsetArray"; scope = "function"; intro = "declare -ag"; values = null; };
previousScopeDeclareGlobalEmptyArray = check { name = "previousScopeDeclareGlobalEmptyArray"; scope = "function"; intro = "declare -ag"; values = "()"; };
previousScopeDeclareGlobalSingletonArray = check { name = "previousScopeDeclareGlobalSingletonArray"; scope = "function"; intro = "declare -ag"; values = ''("hello!")''; };}