byebug 3.5.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/.rubocop.yml +18 -1
- data/.travis.yml +21 -1
- data/CHANGELOG.md +356 -308
- data/CONTRIBUTING.md +31 -15
- data/GUIDE.md +859 -475
- data/Gemfile +8 -10
- data/LICENSE +1 -1
- data/README.md +41 -45
- data/Rakefile +30 -28
- data/byebug.gemspec +18 -18
- data/ext/byebug/breakpoint.c +88 -75
- data/ext/byebug/byebug.c +253 -252
- data/ext/byebug/byebug.h +53 -53
- data/ext/byebug/context.c +188 -159
- data/ext/byebug/extconf.rb +9 -6
- data/ext/byebug/locker.c +53 -11
- data/ext/byebug/threads.c +137 -39
- data/lib/byebug/attacher.rb +7 -2
- data/lib/byebug/breakpoint.rb +30 -0
- data/lib/byebug/command.rb +36 -32
- data/lib/byebug/commands/break.rb +49 -48
- data/lib/byebug/commands/catch.rb +64 -0
- data/lib/byebug/commands/condition.rb +13 -9
- data/lib/byebug/commands/continue.rb +8 -4
- data/lib/byebug/commands/delete.rb +10 -4
- data/lib/byebug/commands/display.rb +33 -25
- data/lib/byebug/commands/edit.rb +18 -13
- data/lib/byebug/commands/enable_disable.rb +26 -24
- data/lib/byebug/commands/eval.rb +77 -35
- data/lib/byebug/commands/finish.rb +9 -5
- data/lib/byebug/commands/frame.rb +66 -125
- data/lib/byebug/commands/help.rb +14 -21
- data/lib/byebug/commands/history.rb +5 -1
- data/lib/byebug/commands/info.rb +41 -106
- data/lib/byebug/commands/interrupt.rb +6 -2
- data/lib/byebug/commands/irb.rb +5 -2
- data/lib/byebug/commands/kill.rb +6 -2
- data/lib/byebug/commands/list.rb +21 -14
- data/lib/byebug/commands/method.rb +17 -9
- data/lib/byebug/commands/pry.rb +13 -3
- data/lib/byebug/commands/quit.rb +10 -5
- data/lib/byebug/commands/restart.rb +12 -19
- data/lib/byebug/commands/save.rb +10 -6
- data/lib/byebug/commands/set.rb +15 -14
- data/lib/byebug/commands/show.rb +8 -8
- data/lib/byebug/commands/source.rb +14 -8
- data/lib/byebug/commands/stepping.rb +15 -29
- data/lib/byebug/commands/threads.rb +73 -49
- data/lib/byebug/commands/tracevar.rb +56 -0
- data/lib/byebug/commands/undisplay.rb +8 -4
- data/lib/byebug/commands/untracevar.rb +38 -0
- data/lib/byebug/commands/var.rb +107 -0
- data/lib/byebug/context.rb +78 -42
- data/lib/byebug/core.rb +78 -40
- data/lib/byebug/helper.rb +58 -42
- data/lib/byebug/history.rb +12 -1
- data/lib/byebug/interface.rb +91 -11
- data/lib/byebug/interfaces/local_interface.rb +12 -19
- data/lib/byebug/interfaces/remote_interface.rb +12 -15
- data/lib/byebug/interfaces/script_interface.rb +14 -18
- data/lib/byebug/interfaces/test_interface.rb +54 -0
- data/lib/byebug/printers/base.rb +64 -0
- data/lib/byebug/printers/plain.rb +53 -0
- data/lib/byebug/processor.rb +20 -1
- data/lib/byebug/processors/command_processor.rb +57 -172
- data/lib/byebug/processors/control_command_processor.rb +16 -43
- data/lib/byebug/remote.rb +13 -7
- data/lib/byebug/runner.rb +102 -54
- data/lib/byebug/setting.rb +45 -68
- data/lib/byebug/settings/autoeval.rb +2 -0
- data/lib/byebug/settings/autoirb.rb +3 -0
- data/lib/byebug/settings/autolist.rb +3 -0
- data/lib/byebug/settings/autosave.rb +2 -0
- data/lib/byebug/settings/basename.rb +2 -0
- data/lib/byebug/settings/callstyle.rb +2 -0
- data/lib/byebug/settings/fullpath.rb +2 -0
- data/lib/byebug/settings/histfile.rb +2 -0
- data/lib/byebug/settings/histsize.rb +2 -0
- data/lib/byebug/settings/linetrace.rb +2 -0
- data/lib/byebug/settings/listsize.rb +2 -0
- data/lib/byebug/settings/post_mortem.rb +7 -2
- data/lib/byebug/settings/stack_on_error.rb +2 -0
- data/lib/byebug/settings/verbose.rb +2 -0
- data/lib/byebug/settings/width.rb +2 -0
- data/lib/byebug/state.rb +12 -0
- data/lib/byebug/states/control_state.rb +26 -0
- data/lib/byebug/states/regular_state.rb +178 -0
- data/lib/byebug/version.rb +1 -1
- metadata +24 -109
- data/lib/byebug/commands/catchpoint.rb +0 -53
- data/lib/byebug/commands/reload.rb +0 -29
- data/lib/byebug/commands/trace.rb +0 -50
- data/lib/byebug/commands/variables.rb +0 -206
- data/lib/byebug/options.rb +0 -46
- data/lib/byebug/settings/autoreload.rb +0 -12
- data/lib/byebug/settings/forcestep.rb +0 -14
- data/lib/byebug/settings/testing.rb +0 -12
- data/lib/byebug/settings/tracing_plus.rb +0 -11
- data/test/commands/break_test.rb +0 -364
- data/test/commands/condition_test.rb +0 -85
- data/test/commands/continue_test.rb +0 -47
- data/test/commands/delete_test.rb +0 -26
- data/test/commands/display_test.rb +0 -37
- data/test/commands/edit_test.rb +0 -52
- data/test/commands/eval_test.rb +0 -89
- data/test/commands/finish_test.rb +0 -74
- data/test/commands/frame_test.rb +0 -223
- data/test/commands/help_test.rb +0 -66
- data/test/commands/history_test.rb +0 -61
- data/test/commands/info_test.rb +0 -238
- data/test/commands/interrupt_test.rb +0 -45
- data/test/commands/irb_test.rb +0 -28
- data/test/commands/kill_test.rb +0 -50
- data/test/commands/list_test.rb +0 -174
- data/test/commands/method_test.rb +0 -52
- data/test/commands/post_mortem_test.rb +0 -71
- data/test/commands/pry_test.rb +0 -26
- data/test/commands/quit_test.rb +0 -53
- data/test/commands/reload_test.rb +0 -39
- data/test/commands/restart_test.rb +0 -46
- data/test/commands/save_test.rb +0 -67
- data/test/commands/set_test.rb +0 -140
- data/test/commands/show_test.rb +0 -76
- data/test/commands/source_test.rb +0 -46
- data/test/commands/stepping_test.rb +0 -192
- data/test/commands/thread_test.rb +0 -164
- data/test/commands/trace_test.rb +0 -71
- data/test/commands/undisplay_test.rb +0 -75
- data/test/commands/variables_test.rb +0 -105
- data/test/debugger_alias_test.rb +0 -7
- data/test/runner_test.rb +0 -150
- data/test/support/matchers.rb +0 -65
- data/test/support/test_interface.rb +0 -59
- data/test/support/utils.rb +0 -122
- data/test/test_helper.rb +0 -58
data/test/commands/save_test.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
class SaveTestCase < TestCase
|
3
|
-
def setup
|
4
|
-
@example = -> do
|
5
|
-
byebug
|
6
|
-
a = 2
|
7
|
-
a = 3
|
8
|
-
end
|
9
|
-
|
10
|
-
super
|
11
|
-
|
12
|
-
enter 'break 2', 'break 3 if true', 'catch NoMethodError',
|
13
|
-
'display 2 + 3', 'save save_output.txt'
|
14
|
-
debug_proc(@example)
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
File.delete('save_output.txt')
|
19
|
-
end
|
20
|
-
|
21
|
-
def file_contents
|
22
|
-
@file_contents ||= File.read('save_output.txt')
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_save_records_regular_breakpoints
|
26
|
-
assert_includes file_contents, "break #{__FILE__}:2"
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_save_records_conditional_breakpoints
|
30
|
-
assert_includes file_contents, "break #{__FILE__}:3 if true"
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_save_records_catchpoints
|
34
|
-
assert_includes file_contents, 'catch NoMethodError'
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_save_records_displays
|
38
|
-
assert_includes file_contents, 'display 2 + 3'
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_save_records_current_state_of_settings
|
42
|
-
assert_includes file_contents, 'set autoeval true'
|
43
|
-
assert_includes file_contents, 'set basename false'
|
44
|
-
assert_includes file_contents, 'set testing true'
|
45
|
-
assert_includes file_contents, 'set autolist false'
|
46
|
-
assert_includes file_contents, 'set autoirb false'
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_save_shows_a_success_message
|
50
|
-
check_output_includes "Saved to 'save_output.txt'"
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_save_without_a_filename_uses_a_default_file
|
54
|
-
enter 'save'
|
55
|
-
debug_proc(@example)
|
56
|
-
assert_includes File.read(RESTART_FILE), 'set autoirb false'
|
57
|
-
File.delete(RESTART_FILE)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_save_without_a_filename_shows_a_message_with_the_file_used
|
61
|
-
enter 'save'
|
62
|
-
debug_proc(@example)
|
63
|
-
check_output_includes "Saved to '#{RESTART_FILE}'"
|
64
|
-
File.delete(RESTART_FILE)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
data/test/commands/set_test.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
class SetTestCase < TestCase
|
3
|
-
def setup
|
4
|
-
@example = -> do
|
5
|
-
byebug
|
6
|
-
a = 2
|
7
|
-
a += 1
|
8
|
-
end
|
9
|
-
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
[:autoeval, :autolist, :autoreload, :autosave, :basename, :forcestep,
|
14
|
-
:fullpath, :post_mortem, :stack_on_error, :testing,
|
15
|
-
:tracing_plus].each do |set|
|
16
|
-
['on', '1', 'true', ''].each do |key|
|
17
|
-
define_method(:"test_enable_boolean_setting_#{set}_using_#{key}") do
|
18
|
-
Setting[set] = false
|
19
|
-
enter "set #{set} #{key}"
|
20
|
-
debug_proc(@example)
|
21
|
-
assert_equal true, Setting[set]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
['off', '0', 'false'].each do |key|
|
26
|
-
define_method(:"test_disable_boolean_setting_#{set}_using_#{key}") do
|
27
|
-
Setting[set] = true
|
28
|
-
enter "set #{set} #{key}"
|
29
|
-
debug_proc(@example)
|
30
|
-
assert_equal false, Setting[set]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
define_method(:"test_disable_boolean_setting_#{set}_using_no_prefix") do
|
35
|
-
Setting[set] = true
|
36
|
-
enter "set no#{set}"
|
37
|
-
debug_proc(@example)
|
38
|
-
assert_equal false, Setting[set]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_set_enables_a_setting_using_shorcut_when_not_ambiguous
|
43
|
-
Setting[:forcestep] = false
|
44
|
-
enter 'set fo'
|
45
|
-
debug_proc(@example)
|
46
|
-
assert_equal true, Setting[:forcestep]
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_set_does_not_enable_a_setting_using_shorcut_when_ambiguous
|
50
|
-
Setting[:forcestep] = false
|
51
|
-
Setting[:fullpath] = false
|
52
|
-
enter 'set f'
|
53
|
-
debug_proc(@example)
|
54
|
-
assert_equal false, Setting[:forcestep]
|
55
|
-
assert_equal false, Setting[:fullpath]
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_set_disables_a_setting_using_shorcut_when_not_ambiguous
|
59
|
-
Setting[:forcestep] = true
|
60
|
-
enter 'set nofo'
|
61
|
-
debug_proc(@example)
|
62
|
-
assert_equal false, Setting[:forcestep]
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_set_does_not_disable_a_setting_using_shorcut_when_ambiguous
|
66
|
-
Setting[:forcestep] = true
|
67
|
-
Setting[:fullpath] = true
|
68
|
-
enter 'set nof'
|
69
|
-
debug_proc(@example)
|
70
|
-
assert_equal true, Setting[:forcestep]
|
71
|
-
assert_equal true, Setting[:fullpath]
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_set_testing_sets_the_thread_state_variable
|
75
|
-
Setting[:testing] = false
|
76
|
-
enter 'set testing', 'break 7', 'cont'
|
77
|
-
debug_proc(@example) do
|
78
|
-
assert_kind_of CommandProcessor::State, state
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_set_notesting_unsets_the_thread_state_variable
|
83
|
-
Setting[:testing] = true
|
84
|
-
enter 'set notesting', 'break 7', 'cont'
|
85
|
-
debug_proc(@example) { assert_nil state }
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_set_histsize_sets_maximum_history_size
|
89
|
-
Setting[:histsize] = 1
|
90
|
-
enter 'set histsize 250'
|
91
|
-
debug_proc(@example)
|
92
|
-
assert_equal 250, Setting[:histsize]
|
93
|
-
check_output_includes "Maximum size of byebug's command history is 250"
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_set_histsize_shows_an_error_message_if_no_size_is_provided
|
97
|
-
enter 'set histsize'
|
98
|
-
debug_proc(@example)
|
99
|
-
check_error_includes 'You must specify a value for setting :histsize'
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_set_histfile_sets_command_history_file
|
103
|
-
filename = File.expand_path('.custom-byebug-hist')
|
104
|
-
enter "set histfile #{filename}"
|
105
|
-
debug_proc(@example)
|
106
|
-
assert_equal filename, Setting[:histfile]
|
107
|
-
check_output_includes "The command history file is #{filename}"
|
108
|
-
Setting[:histfile] = HistfileSetting::DEFAULT
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_set_histfile_shows_an_error_message_if_no_filename_is_provided
|
112
|
-
enter 'set histfile'
|
113
|
-
debug_proc(@example)
|
114
|
-
check_error_includes 'You must specify a value for setting :histfile'
|
115
|
-
end
|
116
|
-
|
117
|
-
[:listsize, :width].each do |set|
|
118
|
-
define_method(:"test_set_#{set}_changes_integer_setting_#{set}") do
|
119
|
-
Setting[set] = 80
|
120
|
-
enter "set #{set} 120"
|
121
|
-
debug_proc(@example)
|
122
|
-
assert_equal 120, Setting[set]
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_verbose_prints_tracepoint_api_event_information
|
127
|
-
enter 'set verbose'
|
128
|
-
debug_proc(@example)
|
129
|
-
assert_equal true, Byebug.verbose?
|
130
|
-
Byebug.verbose = false
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_set_without_arguments_shows_help_for_set_command
|
134
|
-
enter 'set'
|
135
|
-
debug_proc(@example)
|
136
|
-
check_output_includes(/Modifies parts of byebug environment./)
|
137
|
-
check_output_includes(/List of settings supported in byebug/)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
data/test/commands/show_test.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
class ShowTestCase < TestCase
|
3
|
-
def setup
|
4
|
-
@example = -> do
|
5
|
-
byebug
|
6
|
-
end
|
7
|
-
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
[:autoeval, :autolist, :autoreload, :autosave, :basename, :forcestep,
|
12
|
-
:fullpath, :post_mortem, :stack_on_error, :testing,
|
13
|
-
:tracing_plus].each do |set|
|
14
|
-
define_method(:"test_show_#{set}_shows_disabled_bool_setting_#{set}") do
|
15
|
-
Setting[set] = false
|
16
|
-
enter "show #{set}"
|
17
|
-
debug_proc(@example)
|
18
|
-
check_output_includes "#{set} is off"
|
19
|
-
end
|
20
|
-
|
21
|
-
define_method(:"test_show_#{set}_shows_enabled_bool_setting_#{set}") do
|
22
|
-
Setting[set] = true
|
23
|
-
enter "show #{set}"
|
24
|
-
debug_proc(@example)
|
25
|
-
check_output_includes "#{set} is on"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_show_callstyle
|
30
|
-
enter 'show callstyle'
|
31
|
-
debug_proc(@example)
|
32
|
-
check_output_includes "Frame display callstyle is 'long'"
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_show_listsize
|
36
|
-
enter 'show listsize'
|
37
|
-
debug_proc(@example)
|
38
|
-
check_output_includes 'Number of source lines to list is 10'
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_show_width
|
42
|
-
width = Setting[:width]
|
43
|
-
enter 'show width'
|
44
|
-
debug_proc(@example)
|
45
|
-
check_output_includes "Maximum width of byebug's output is #{width}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_show_unknown_setting
|
49
|
-
enter 'show bla'
|
50
|
-
debug_proc(@example)
|
51
|
-
check_error_includes 'Unknown setting :bla'
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_show_histfile
|
55
|
-
filename = Setting[:histfile]
|
56
|
-
enter 'show histfile'
|
57
|
-
debug_proc(@example)
|
58
|
-
check_output_includes "The command history file is #{filename}"
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_show_histsize
|
62
|
-
max_size = Setting[:histsize]
|
63
|
-
enter 'show histsize'
|
64
|
-
debug_proc(@example)
|
65
|
-
check_output_includes \
|
66
|
-
"Maximum size of byebug's command history is #{max_size}"
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_show_without_arguments_displays_help_for_the_show_command
|
70
|
-
enter 'show'
|
71
|
-
debug_proc(@example)
|
72
|
-
check_output_includes(/Generic command for showing byebug settings./)
|
73
|
-
check_output_includes(/List of settings supported in byebug/)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
class SourceTestCase < TestCase
|
3
|
-
def setup
|
4
|
-
@example = -> do
|
5
|
-
byebug
|
6
|
-
a = 2
|
7
|
-
a = 3
|
8
|
-
end
|
9
|
-
|
10
|
-
File.open('source_example.txt', 'w') do |f|
|
11
|
-
f.puts 'break 2'
|
12
|
-
f.puts 'break 3 if true'
|
13
|
-
end
|
14
|
-
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
|
-
def teardown
|
19
|
-
File.delete('source_example.txt')
|
20
|
-
end
|
21
|
-
|
22
|
-
%w(source so).each do |cmd_alias|
|
23
|
-
define_method(:"test_#{cmd_alias}_runs_byebug_commands_from_file") do
|
24
|
-
enter "#{cmd_alias} source_example.txt"
|
25
|
-
debug_proc(@example) do
|
26
|
-
assert_equal 2, Byebug.breakpoints[0].pos
|
27
|
-
assert_equal 3, Byebug.breakpoints[1].pos
|
28
|
-
assert_equal 'true', Byebug.breakpoints[1].expr
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
define_method(:"test_#{cmd_alias}_shows_an_error_if_file_not_found") do
|
33
|
-
enter "#{cmd_alias} blabla"
|
34
|
-
debug_proc(@example)
|
35
|
-
check_error_includes(/File ".*blabla" not found/)
|
36
|
-
end
|
37
|
-
|
38
|
-
define_method(:"test_#{cmd_alias}_without_arguments_shows_help") do
|
39
|
-
enter 'source'
|
40
|
-
debug_proc(@example)
|
41
|
-
check_output_includes(
|
42
|
-
/Executes file <file> containing byebug commands./)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,192 +0,0 @@
|
|
1
|
-
module Byebug
|
2
|
-
class Example
|
3
|
-
def self.a(num)
|
4
|
-
num += 2
|
5
|
-
b(num)
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.b(num)
|
9
|
-
v2 = 5 if 1 == num ; [1, 2, v2].map { |t| t.to_f }
|
10
|
-
c(num)
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.c(num)
|
14
|
-
num += 4
|
15
|
-
num
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class BasicSteppingTestCase < TestCase
|
20
|
-
def setup
|
21
|
-
@example = -> do
|
22
|
-
byebug
|
23
|
-
|
24
|
-
ex = Example.c(7)
|
25
|
-
ex
|
26
|
-
end
|
27
|
-
|
28
|
-
super
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_next_goes_to_the_next_line
|
32
|
-
enter 'next'
|
33
|
-
debug_proc(@example) { assert_equal 25, state.line }
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_n_goes_to_the_next_line
|
37
|
-
enter 'n'
|
38
|
-
debug_proc(@example) { assert_equal 25, state.line }
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_step_goes_to_the_next_statement
|
42
|
-
enter 'step'
|
43
|
-
debug_proc(@example) { assert_equal 14, state.line }
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_s_goes_to_the_next_statement
|
47
|
-
enter 's'
|
48
|
-
debug_proc(@example) { assert_equal 14, state.line }
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_next_does_not_stop_at_byebug_internal_frames
|
52
|
-
enter 'set forcestep', 'next 2'
|
53
|
-
debug_proc(@example) { refute_match(/byebug.test.support/, state.file) }
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class AdvancedSteppingTestCase < TestCase
|
58
|
-
def setup
|
59
|
-
@example = -> do
|
60
|
-
byebug
|
61
|
-
|
62
|
-
ex = Example.a(7)
|
63
|
-
2.times do
|
64
|
-
ex += 1
|
65
|
-
end
|
66
|
-
|
67
|
-
Example.b(ex)
|
68
|
-
end
|
69
|
-
|
70
|
-
super
|
71
|
-
|
72
|
-
enter 'break 9', 'cont'
|
73
|
-
end
|
74
|
-
|
75
|
-
%w(next step).each do |cmd|
|
76
|
-
define_method(:"test_#{cmd}_stays_by_default") do
|
77
|
-
enter cmd
|
78
|
-
debug_proc(@example) { assert_equal 9, state.line }
|
79
|
-
end
|
80
|
-
|
81
|
-
define_method(:"test_#{cmd}+_goes_2_next_line") do
|
82
|
-
enter "#{cmd}+"
|
83
|
-
debug_proc(@example) { assert_equal 10, state.line }
|
84
|
-
end
|
85
|
-
|
86
|
-
define_method(:"test_#{cmd}-_stays") do
|
87
|
-
enter "#{cmd}-"
|
88
|
-
debug_proc(@example) { assert_equal 9, state.line }
|
89
|
-
end
|
90
|
-
|
91
|
-
define_method(:"test_#{cmd}_goes_2_next_line_if_forcestep_is_set") do
|
92
|
-
enter 'set forcestep', cmd
|
93
|
-
debug_proc(@example) { assert_equal 10, state.line }
|
94
|
-
end
|
95
|
-
|
96
|
-
define_method(:"test_#{cmd}+_goes_2_next_line_regardless_forcestep") do
|
97
|
-
enter 'set forcestep', "#{cmd}+"
|
98
|
-
debug_proc(@example) { assert_equal 10, state.line }
|
99
|
-
end
|
100
|
-
|
101
|
-
define_method(:"test_#{cmd}-_stays_regardless_forcestep") do
|
102
|
-
enter 'set forcestep', "#{cmd}-"
|
103
|
-
debug_proc(@example) { assert_equal 9, state.line }
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_next_goes_the_specified_number_of_lines_forward_by_default
|
108
|
-
enter 'set forcestep', 'next 2'
|
109
|
-
debug_proc(@example) { assert_equal 63, state.line }
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_next_informs_when_not_staying_in_the_same_frame
|
113
|
-
enter 'set forcestep', 'next 2'
|
114
|
-
debug_proc(@example)
|
115
|
-
check_output_includes \
|
116
|
-
'Next went up a frame because previous frame finished'
|
117
|
-
end
|
118
|
-
|
119
|
-
def step_goes_the_specified_number_of_statements_forward_by_default
|
120
|
-
enter 'set forcestep', 'step 2'
|
121
|
-
debug_proc(@example) { assert_equal 63, state.line }
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_next_steps_OVER_blocks
|
125
|
-
enter 'break 63', 'cont', 'next'
|
126
|
-
debug_proc(@example) { assert_equal 67, state.line }
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_step_steps_INTO_blocks
|
130
|
-
enter 'break 63', 'cont', 'step'
|
131
|
-
debug_proc(@example) { assert_equal 64, state.line }
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
class RaiseFromCMethodExample
|
136
|
-
def a
|
137
|
-
b
|
138
|
-
rescue NameError
|
139
|
-
1
|
140
|
-
end
|
141
|
-
|
142
|
-
def b
|
143
|
-
c
|
144
|
-
end
|
145
|
-
|
146
|
-
def c
|
147
|
-
d
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
class RaiseFromCMethodTestCase < TestCase
|
152
|
-
def test_next_steps_over_rescue_when_raising_from_c_method
|
153
|
-
example_raise = -> do
|
154
|
-
byebug
|
155
|
-
|
156
|
-
RaiseFromCMethodExample.new.a
|
157
|
-
end
|
158
|
-
|
159
|
-
enter 'break 137', 'cont', 'next'
|
160
|
-
debug_proc(example_raise) { assert_equal 139, state.line }
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
class RaiseFromRubyMethodExample
|
165
|
-
def a
|
166
|
-
b
|
167
|
-
rescue
|
168
|
-
1
|
169
|
-
end
|
170
|
-
|
171
|
-
def b
|
172
|
-
c
|
173
|
-
end
|
174
|
-
|
175
|
-
def c
|
176
|
-
raise 'bang'
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
class RaiseFromRubyMethodTestCase < TestCase
|
181
|
-
def test_next_steps_over_rescue_when_raising_from_ruby_method
|
182
|
-
example_raise = -> do
|
183
|
-
byebug
|
184
|
-
|
185
|
-
RaiseFromRubyMethodExample.new.a
|
186
|
-
end
|
187
|
-
|
188
|
-
enter 'break 166', 'cont', 'next'
|
189
|
-
debug_proc(example_raise) { assert_equal 168, state.line }
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|