diff --git a/tests/functional/repl_characterization/data/stack_vars.test b/tests/functional/repl_characterization/data/stack_vars.test deleted file mode 100644 index bd845087c..000000000 --- a/tests/functional/repl_characterization/data/stack_vars.test +++ /dev/null @@ -1,108 +0,0 @@ -@args --debugger - trace: before outer break - info: breakpoint reached - -Here we are in the outer break and the let of "meow". st should show meow there -as it is in scope. - nix-repl> :st - - 0: error: breakpoint reached - $TEST_DATA/stack_vars.nix:6:22 - - 5| b = builtins.trace "before outer break" ( - 6| let meow = 2; in builtins.break a - | ^ - 7| ); - - Env level 0 - static: meow - - Env level 1 - static: a b - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> meow - 2 - -If we :st past the frame in the backtrace with the meow in it, the meow should not be there. - - nix-repl> :st 3 - - 3: while calling a function - $TEST_DATA/stack_vars.nix:5:7 - - 4| ); - 5| b = builtins.trace "before outer break" ( - | ^ - 6| let meow = 2; in builtins.break a - - Env level 0 - static: a b - - Env level 1 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> :c - trace: before inner break - info: breakpoint reached - - nix-repl> :st - - 0: error: breakpoint reached - $TEST_DATA/stack_vars.nix:3:23 - - 2| a = builtins.trace "before inner break" ( - 3| let meow' = 3; in builtins.break { msg = "hello"; } - | ^ - 4| ); - - Env level 0 - static: meow' - - Env level 1 - static: a b - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> meow' - 3 - - nix-repl> :st 3 - 3: while calling a function - $TEST_DATA/stack_vars.nix:2:7 - - 1| let - 2| a = builtins.trace "before inner break" ( - | ^ - 3| let meow' = 3; in builtins.break { msg = "hello"; } - - Env level 0 - static: a b - - Env level 1 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> :quit - error: - … while evaluating the file '$TEST_DATA/stack_vars.nix': - - … while evaluating b - at $TEST_DATA/stack_vars.nix:9:3: - 8| in - 9| b - | ^ - 10| - - … while calling the 'trace' builtin - at $TEST_DATA/stack_vars.nix:5:7: - 4| ); - 5| b = builtins.trace "before outer break" ( - | ^ - 6| let meow = 2; in builtins.break a - - (stack trace truncated; use '--show-trace' to show the full trace) - - error: breakpoint reached diff --git a/tests/functional/repl_characterization/data/stacktrace_invalid_arg.test b/tests/functional/repl_characterization/data/stacktrace_invalid_arg.test deleted file mode 100644 index 39c3350e2..000000000 --- a/tests/functional/repl_characterization/data/stacktrace_invalid_arg.test +++ /dev/null @@ -1,73 +0,0 @@ -@args --debugger - nix-repl> throw "(forever?????????)" - error: (forever?????????) - -argument-less :st works fine - nix-repl> :st - - 0: error: (forever?????????) - «string»:1:1 - - 1| throw "(forever?????????)" - | ^ - - Env level 0 - static: - - Env level 1 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -a non-numeric strings produces an error - nix-repl> :st chat - error: argument 'chat' is not a valid integer - - nix-repl> :st bedroom community - error: argument 'bedroom community' is not a valid integer - -...even when they start with a digit - nix-repl> :st 6up - error: argument '6up' is not a valid integer - -...or when they're floats - nix-repl> :st 4.50 - error: argument '4.50' is not a valid integer - -an integer outside the range produces an error - nix-repl> :st 23571113171923 - error: argument '23571113171923' is not a valid integer - -argument-less :st is still at the same index after errors - nix-repl> :st 1 - - 1: while calling a function - «string»:1:1 - - 1| throw "(forever?????????)" - | ^ - - Env level 0 - static: - - Env level 1 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> :st foo - error: argument 'foo' is not a valid integer - - nix-repl> :st - - 1: while calling a function - «string»:1:1 - - 1| throw "(forever?????????)" - | ^ - - Env level 0 - static: - - Env level 1 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -quit - nix-repl> :quit - error: (forever?????????) diff --git a/tests/functional/repl_characterization/data/stacktrace_oob.test b/tests/functional/repl_characterization/data/stacktrace_oob.test deleted file mode 100644 index a50f3489e..000000000 --- a/tests/functional/repl_characterization/data/stacktrace_oob.test +++ /dev/null @@ -1,110 +0,0 @@ -@args --debugger - nix-repl> let f = _: throw "x_x"; x = f 5; in x - error: x_x - -frames from 0 up to 4 work fine - nix-repl> :st 0 - - 0: error: x_x - «string»:1:12 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: _ - - Env level 1 - static: f x - - Env level 2 - static: - - Env level 3 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - nix-repl> :st 4 - - 4: while evaluating a 'let' expression - «string»:1:1 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: f x - - Env level 1 - static: - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -absolute frames out of bounds print an error - nix-repl> :st 5 - error: stack index must be between 0 and 4 (inclusive), but was 5 - -argument-less :st is still at the same after absolute oob - nix-repl> :st - - 4: while evaluating a 'let' expression - «string»:1:1 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: f x - - Env level 1 - static: - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -positive relative frames oob clamp to upper bound and print a warning - nix-repl> :st +5 - - 4: while evaluating a 'let' expression - «string»:1:1 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: f x - - Env level 1 - static: - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - warning: stopped at stack frame 4, cannot go any higher - -negative relative frames oob clamp to lower bound and print a warning - nix-repl> :st -5 - - 0: error: x_x - «string»:1:12 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: _ - - Env level 1 - static: f x - - Env level 2 - static: - - Env level 3 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - - warning: stopped at stack frame 0, cannot go any deeper - -quit - nix-repl> :quit - error: x_x diff --git a/tests/functional/repl_characterization/data/stacktrace_relative.test b/tests/functional/repl_characterization/data/stacktrace_relative.test deleted file mode 100644 index 2728a18ca..000000000 --- a/tests/functional/repl_characterization/data/stacktrace_relative.test +++ /dev/null @@ -1,64 +0,0 @@ -@args --debugger - nix-repl> let f = _: throw "x_x"; x = f 5; in x - error: x_x - -absolute indices still work: - nix-repl> :st 1 - - 1: while calling a function - «string»:1:12 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: _ - - Env level 1 - static: f x - - Env level 2 - static: - - Env level 3 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -index with + goes up the stack relative to current (1 in this case): - nix-repl> :st +3 - - 4: while evaluating a 'let' expression - «string»:1:1 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: f x - - Env level 1 - static: - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -index with - goes down and is also relative to current (4): - nix-repl> :st -1 - - 3: while calling a function - «string»:1:29 - - 1| let f = _: throw "x_x"; x = f 5; in x - | ^ - - Env level 0 - static: f x - - Env level 1 - static: - - Env level 2 - abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true - -quit - nix-repl> :quit - error: x_x diff --git a/tests/functional/repl_characterization/repl_characterization.cc b/tests/functional/repl_characterization/repl_characterization.cc index c2a61e580..49a195fcb 100644 --- a/tests/functional/repl_characterization/repl_characterization.cc +++ b/tests/functional/repl_characterization/repl_characterization.cc @@ -176,9 +176,4 @@ TEST_F(ReplSessionTest, tidy) runReplTestPath(#name); \ } -REPL_TEST(stack_vars); -REPL_TEST(stacktrace_invalid_arg); -REPL_TEST(stacktrace_oob); -REPL_TEST(stacktrace_relative); - }; // namespace nix diff --git a/tests/functional2/repl_characterization/stacktrace/invalid_arg.md b/tests/functional2/repl_characterization/stacktrace/invalid_arg.md new file mode 100644 index 000000000..32edfb84a --- /dev/null +++ b/tests/functional2/repl_characterization/stacktrace/invalid_arg.md @@ -0,0 +1,127 @@ +--- +args: ['--debugger'] +--- + +```nix +throw "(forever????????)" +``` +```output +error: (forever????????) + +``` + + +argument-less :st works fine + +```nix +:st +``` +```output + +0: error: (forever????????) +«string»:1:1 + + 1| throw "(forever????????)" + | ^ + +Env level 0 +static: + +Env level 1 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +``` + + +a non-numeric string produces an error + +```nix +:st chat +:st bedroom community +``` +```output +error: argument 'chat' is not a valid integer + +error: argument 'bedroom community' is not a valid integer + +``` + + +even when they start with a digit +```nix +:st 6up +``` +```output +error: argument '6up' is not a valid integer + +``` + + +or when they're floats +```nix +:st 4.50 +``` +```output +error: argument '4.50' is not a valid integer + +``` + + + +an integer outside of the range produces an error +```nix +:st 23571113171923 +``` +```output +error: argument '23571113171923' is not a valid integer + +``` + + +argument-less `:st` is still at the same index after errors +```nix +:st 1 +:st foo +:st +``` +```output + +1: while calling a function +«string»:1:1 + + 1| throw "(forever????????)" + | ^ + +Env level 0 +static: + +Env level 1 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + + +error: argument 'foo' is not a valid integer + + +1: while calling a function +«string»:1:1 + + 1| throw "(forever????????)" + | ^ + +Env level 0 +static: + +Env level 1 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +``` + + +quit +```nix +:quit +``` +```output +error: (forever????????) + +``` diff --git a/tests/functional2/repl_characterization/stacktrace/oob.md b/tests/functional2/repl_characterization/stacktrace/oob.md new file mode 100644 index 000000000..02628dfc3 --- /dev/null +++ b/tests/functional2/repl_characterization/stacktrace/oob.md @@ -0,0 +1,165 @@ +--- +args: ['--debugger'] +--- + +```nix +let f = _: throw "x_x"; x = f 5; in x +``` +```output +error: x_x + +Added 3 variables. +``` + + + +frames from 0 up to 4 work fine +```nix +:st 0 +:st 4 +``` +```output + +0: error: x_x +«string»:1:12 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: _ + +Env level 1 +static: f x + +Env level 2 +static: + +Env level 3 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 3 variables. + + +4: while evaluating a 'let' expression +«string»:1:1 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: f x + +Env level 1 +static: + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +``` + + +absolute frames out of bounds print an error +```nix +:st 5 +``` +```output +error: stack index must be between 0 and 4 (inclusive), but was 5 + +``` + + +argument-less `:st` is still the same afer absolute oob +```nix +:st +``` +```output + +4: while evaluating a 'let' expression +«string»:1:1 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: f x + +Env level 1 +static: + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +``` + + +positive relative frames oob clamp to upper bound and prints a warning +```nix +:st +5 +``` +```output + +4: while evaluating a 'let' expression +«string»:1:1 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: f x + +Env level 1 +static: + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. +warning: stopped at stack frame 4, cannot go any higher + +``` + + +negative relative frames oob clamp to lower bound and print a warning +```nix +:st -5 +``` +```output + +0: error: x_x +«string»:1:12 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: _ + +Env level 1 +static: f x + +Env level 2 +static: + +Env level 3 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 3 variables. +warning: stopped at stack frame 0, cannot go any deeper + +``` + + + +quit +```nix +:quit +``` +```output +error: x_x + +``` diff --git a/tests/functional2/repl_characterization/stacktrace/relative.md b/tests/functional2/repl_characterization/stacktrace/relative.md new file mode 100644 index 000000000..fbc03cdf6 --- /dev/null +++ b/tests/functional2/repl_characterization/stacktrace/relative.md @@ -0,0 +1,105 @@ +--- +args: ['--debugger'] +--- + +```nix +let f = _: throw "x_x"; x = f 5; in x +``` +```output +error: x_x + +Added 3 variables. +``` + + +absolute indices still work: +```nix +:st 1 +``` +```output + +1: while calling a function +«string»:1:12 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: _ + +Env level 1 +static: f x + +Env level 2 +static: + +Env level 3 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 3 variables. + +``` + + +index with + goes up the stack relative to current (1 in this case): +```nix +:st +3 +``` +```output + +4: while evaluating a 'let' expression +«string»:1:1 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: f x + +Env level 1 +static: + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +``` + + + +index with - goes down and is also relative to current(4): + +```nix +:st -1 +``` +```output + +3: while calling a function +«string»:1:29 + + 1| let f = _: throw "x_x"; x = f 5; in x + | ^ + +Env level 0 +static: f x + +Env level 1 +static: + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +``` + + +quit +```nix +:quit +``` +```output +error: x_x + +``` diff --git a/tests/functional/repl_characterization/data/stack_vars.nix b/tests/functional2/repl_characterization/stacktrace/stack_vars.nix similarity index 100% rename from tests/functional/repl_characterization/data/stack_vars.nix rename to tests/functional2/repl_characterization/stacktrace/stack_vars.nix diff --git a/tests/functional2/repl_characterization/stacktrace/vars.md b/tests/functional2/repl_characterization/stacktrace/vars.md new file mode 100644 index 000000000..a2a6dee2d --- /dev/null +++ b/tests/functional2/repl_characterization/stacktrace/vars.md @@ -0,0 +1,178 @@ +--- +args: ['--debugger', '-f', '{PWD}/stack_vars.nix'] +should_fail: True +files: ['stack_vars.nix'] +--- + +```output +Lix VERSION +Type :? for help. +trace: before outer break +info: breakpoint reached + +Added 3 variables. +``` +Here we are in the outer break and the let of "meow". `:st` should show meow there +```nix +:st +``` +```output + +0: error: breakpoint reached +/pwd/stack_vars.nix:6:22 + + 5| b = builtins.trace "before outer break" ( + 6| let meow = 2; in builtins.break a + | ^ + 7| ); + +Env level 0 +static: meow + +Env level 1 +static: a b + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 3 variables. + +``` +```nix +meow +``` +```output +2 + +``` + + + + +If we `:st` past the frame in the backtrace with the `meow` in it, the `meow` should not be there +```nix +:st 3 +:c +``` +```output + +3: while calling a function +/pwd/stack_vars.nix:5:7 + + 4| ); + 5| b = builtins.trace "before outer break" ( + | ^ + 6| let meow = 2; in builtins.break a + +Env level 0 +static: a b + +Env level 1 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +trace: before inner break +info: breakpoint reached + +Added 3 variables. +``` + +```nix +:st +``` +```output + +0: error: breakpoint reached +/pwd/stack_vars.nix:3:23 + + 2| a = builtins.trace "before inner break" ( + 3| let meow' = 3; in builtins.break { msg = "hello"; } + | ^ + 4| ); + +Env level 0 +static: meow' + +Env level 1 +static: a b + +Env level 2 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 3 variables. + +``` + +```nix +meow' +:st 3 +``` +```output +3 + + +3: while calling a function +/pwd/stack_vars.nix:2:7 + + 1| let + 2| a = builtins.trace "before inner break" ( + | ^ + 3| let meow' = 3; in builtins.break { msg = "hello"; } + +Env level 0 +static: a b + +Env level 1 +abort baseNameOf break builtins derivation derivationStrict dirOf false fetchGit fetchMercurial fetchTarball fetchTree fromTOML import isNull map null placeholder removeAttrs scopedImport throw toString true + +Added 2 variables. + +``` + + + +```nix +:quit +``` +```output +error: + … while evaluating the file '/pwd/stack_vars.nix': + + … while evaluating b + at /pwd/stack_vars.nix:9:3: + 8| in + 9| b + | ^ + 10| + + … while calling the 'trace' builtin + at /pwd/stack_vars.nix:5:7: + 4| ); + 5| b = builtins.trace "before outer break" ( + | ^ + 6| let meow = 2; in builtins.break a + + … while calling the 'break' builtin + at /pwd/stack_vars.nix:6:22: + 5| b = builtins.trace "before outer break" ( + 6| let meow = 2; in builtins.break a + | ^ + 7| ); + + … while calling the 'trace' builtin + at /pwd/stack_vars.nix:2:7: + 1| let + 2| a = builtins.trace "before inner break" ( + | ^ + 3| let meow' = 3; in builtins.break { msg = "hello"; } + + … while calling the 'break' builtin + at /pwd/stack_vars.nix:3:23: + 2| a = builtins.trace "before inner break" ( + 3| let meow' = 3; in builtins.break { msg = "hello"; } + | ^ + 4| ); + + error: breakpoint reached +```