byebug 3.5.1 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|