byebug 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.travis.yml +0 -5
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -1
- data/LICENSE +23 -20
- data/byebug.gemspec +5 -5
- data/ext/byebug/breakpoint.c +102 -134
- data/ext/byebug/byebug.c +110 -64
- data/ext/byebug/byebug.h +2 -3
- data/ext/byebug/context.c +72 -39
- data/lib/byebug.rb +34 -38
- data/lib/byebug/command.rb +19 -24
- data/lib/byebug/commands/breakpoints.rb +11 -12
- data/lib/byebug/commands/catchpoint.rb +1 -1
- data/lib/byebug/commands/control.rb +2 -4
- data/lib/byebug/commands/finish.rb +1 -1
- data/lib/byebug/commands/frame.rb +15 -17
- data/lib/byebug/commands/info.rb +29 -28
- data/lib/byebug/commands/irb.rb +23 -21
- data/lib/byebug/commands/method.rb +4 -4
- data/lib/byebug/commands/reload.rb +8 -6
- data/lib/byebug/commands/set.rb +27 -23
- data/lib/byebug/commands/show.rb +6 -4
- data/lib/byebug/commands/stepping.rb +2 -2
- data/lib/byebug/commands/threads.rb +10 -10
- data/lib/byebug/commands/trace.rb +13 -14
- data/lib/byebug/commands/variables.rb +14 -12
- data/lib/byebug/context.rb +2 -15
- data/lib/byebug/interface.rb +5 -0
- data/lib/byebug/processor.rb +59 -64
- data/lib/byebug/version.rb +2 -1
- data/old_doc/Makefile +20 -0
- data/{man/rdebug.1 → old_doc/byebug.1} +5 -5
- data/old_doc/byebug.html +6178 -0
- data/old_doc/byebug.texi +3775 -0
- data/{doc → old_doc}/hanoi.rb +0 -0
- data/{doc → old_doc}/primes.rb +0 -0
- data/{doc → old_doc}/test-tri2.rb +0 -0
- data/{doc → old_doc}/tri3.rb +0 -0
- data/{doc → old_doc}/triangle.rb +0 -0
- data/test/breakpoints_test.rb +96 -60
- data/test/conditions_test.rb +15 -12
- data/test/examples/info.rb +5 -5
- data/test/examples/stepping.rb +1 -1
- data/test/frame_test.rb +40 -39
- data/test/info_test.rb +105 -96
- data/test/irb_test.rb +66 -61
- data/test/jump_test.rb +18 -9
- data/test/list_test.rb +114 -107
- data/test/restart_test.rb +51 -58
- data/test/save_test.rb +8 -7
- data/test/set_test.rb +8 -11
- data/test/show_test.rb +3 -5
- data/test/stepping_test.rb +43 -53
- data/test/support/context.rb +1 -0
- data/test/support/processor.rb +10 -4
- data/test/support/test_dsl.rb +46 -18
- data/test/support/test_interface.rb +8 -5
- data/test/test_helper.rb +2 -2
- data/test/trace_test.rb +123 -124
- metadata +39 -17
- data/AUTHORS +0 -10
- data/doc/rdebug-emacs.texi +0 -1030
data/test/restart_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
2
|
|
3
|
-
describe "Restart Command" do
|
3
|
+
describe "Restart Command (test setup)" do
|
4
4
|
include TestDsl
|
5
5
|
|
6
6
|
def must_restart
|
@@ -8,47 +8,50 @@ describe "Restart Command" do
|
|
8
8
|
Byebug::RestartCommand.any_instance.expects(:exec)
|
9
9
|
end
|
10
10
|
|
11
|
-
describe "Restart Command
|
11
|
+
describe "Restart Command" do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@old_consts = {}
|
15
|
+
@old_hashes = {}
|
16
|
+
set_tmp_const(Byebug,
|
17
|
+
"INITIAL_DIR", Pathname.new(__FILE__ + "/../..").realpath.to_s)
|
18
|
+
set_tmp_const(Byebug,
|
19
|
+
"PROG_SCRIPT", Pathname.new(fullpath('restart')).
|
20
|
+
relative_path_from(Pathname.new(Byebug::INITIAL_DIR)).
|
21
|
+
cleanpath.to_s)
|
22
|
+
set_tmp_const(Byebug, "RDEBUG_SCRIPT", 'rdebug_script')
|
23
|
+
set_tmp_hash(Byebug::Command.settings, :argv, ['argv'])
|
24
|
+
Byebug::RestartCommand.any_instance.stubs(:exec).
|
25
|
+
with("#{Byebug::RDEBUG_SCRIPT} argv")
|
26
|
+
end
|
12
27
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
Byebug::RestartCommand.any_instance.stubs(:exec).
|
20
|
-
with("#{Byebug::RDEBUG_SCRIPT} argv")
|
28
|
+
after do
|
29
|
+
restore_tmp_const(Byebug, "INITIAL_DIR")
|
30
|
+
restore_tmp_const(Byebug, "PROG_SCRIPT")
|
31
|
+
restore_tmp_const(Byebug, "RDEBUG_SCRIPT")
|
32
|
+
restore_tmp_hash(Byebug::Command.settings, :argv)
|
33
|
+
end
|
21
34
|
|
22
35
|
it "must be restarted with arguments" do
|
23
36
|
Byebug::RestartCommand.any_instance.expects(:exec).
|
24
|
-
|
37
|
+
with("#{Byebug::RDEBUG_SCRIPT} test/examples/restart.rb 1 2 3")
|
25
38
|
enter 'restart 1 2 3'
|
26
39
|
debug_file('restart')
|
27
40
|
end
|
28
41
|
|
29
42
|
it "must be restarted without arguments" do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
cleanpath.to_s) do
|
35
|
-
temporary_change_hash_value(Byebug::Command.settings, :argv, ['argv']) do
|
36
|
-
Byebug::RestartCommand.
|
37
|
-
any_instance.expects(:exec).with("#{Byebug::RDEBUG_SCRIPT} argv")
|
38
|
-
enter 'restart'
|
39
|
-
debug_file('restart')
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
+
Byebug::RestartCommand.
|
44
|
+
any_instance.expects(:exec).with("#{Byebug::RDEBUG_SCRIPT} argv")
|
45
|
+
enter 'restart'
|
46
|
+
debug_file('restart')
|
43
47
|
end
|
44
48
|
|
45
49
|
it "must specify arguments by 'set' command" do
|
46
50
|
temporary_change_hash_value(Byebug::Command.settings, :argv, []) do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
51
|
+
Byebug::RestartCommand.any_instance.expects(:exec).
|
52
|
+
with("#{Byebug::RDEBUG_SCRIPT} 1 2 3")
|
53
|
+
enter 'set args 1 2 3', 'restart'
|
54
|
+
debug_file('restart')
|
52
55
|
end
|
53
56
|
end
|
54
57
|
|
@@ -56,40 +59,27 @@ describe "Restart Command" do
|
|
56
59
|
before { enter 'restart' }
|
57
60
|
|
58
61
|
describe "reexecing" do
|
59
|
-
|
60
|
-
it "must restart" do
|
62
|
+
it "must restart and show a message about reexecing" do
|
61
63
|
must_restart
|
62
64
|
debug_file('restart')
|
63
|
-
|
64
|
-
|
65
|
-
it "must show a message about reexecing" do
|
66
|
-
temporary_set_const(Byebug, "PROG_SCRIPT",
|
67
|
-
Pathname.new(fullpath('restart')).
|
68
|
-
relative_path_from(Pathname.new(__FILE__ + "/../..")).
|
69
|
-
cleanpath.to_s) do
|
70
|
-
temporary_change_hash_value(Byebug::Command.settings, :argv,
|
71
|
-
[Byebug::PROG_SCRIPT]) do
|
72
|
-
temporary_set_const(Byebug, "RDEBUG_SCRIPT",
|
73
|
-
Pathname.new(__FILE__ + "/../../bin/byebug").realpath.to_s) do
|
74
|
-
debug_file('restart')
|
75
|
-
check_output_includes "Re exec'ing:\n\t#{Byebug::RDEBUG_SCRIPT}"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
65
|
+
check_output_includes "Re exec'ing:\n\t#{Byebug::RDEBUG_SCRIPT}" \
|
66
|
+
" argv"
|
79
67
|
end
|
80
68
|
end
|
81
69
|
|
82
70
|
describe "no script is specified and don't use $0" do
|
83
71
|
before do
|
84
|
-
|
72
|
+
set_tmp_const(Byebug, "PROG_SCRIPT", :__undefined__)
|
73
|
+
set_tmp_const(Byebug, "DEFAULT_START_SETTINGS",
|
74
|
+
init: false, post_mortem: false, tracing: nil)
|
85
75
|
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
debug_file('restart')
|
76
|
+
after do
|
77
|
+
restore_tmp_const(Byebug, "PROG_SCRIPT")
|
78
|
+
restore_tmp_const(Byebug, "DEFAULT_START_SETTINGS")
|
90
79
|
end
|
91
80
|
|
92
|
-
it "must show
|
81
|
+
it "must not restart and show error messages instead" do
|
82
|
+
must_restart.never
|
93
83
|
debug_file('restart')
|
94
84
|
check_output_includes "Don't know name of debugged program", interface.error_queue
|
95
85
|
end
|
@@ -119,6 +109,9 @@ describe "Restart Command" do
|
|
119
109
|
|
120
110
|
describe "byebug runner script is not specified" do
|
121
111
|
|
112
|
+
before { set_tmp_const(Byebug, "RDEBUG_SCRIPT", :__undefined__) }
|
113
|
+
after { restore_tmp_const(Byebug, "RDEBUG_SCRIPT") }
|
114
|
+
|
122
115
|
it "must restart anyway" do
|
123
116
|
must_restart
|
124
117
|
debug_file('restart')
|
@@ -131,8 +124,8 @@ describe "Restart Command" do
|
|
131
124
|
|
132
125
|
it "must show a warning message when prog script is not executable" do
|
133
126
|
debug_file('restart')
|
134
|
-
check_output_includes "Ruby program #{Byebug::PROG_SCRIPT}
|
135
|
-
|
127
|
+
check_output_includes "Ruby program #{Byebug::PROG_SCRIPT} not " \
|
128
|
+
"executable... We'll add a call to Ruby."
|
136
129
|
end
|
137
130
|
end
|
138
131
|
|
@@ -154,9 +147,9 @@ describe "Restart Command" do
|
|
154
147
|
describe "Post Mortem" do
|
155
148
|
it "must work in post-mortem mode" do
|
156
149
|
skip("No post morten mode for now")
|
157
|
-
|
158
|
-
|
159
|
-
|
150
|
+
must_restart
|
151
|
+
enter 'cont', 'restart'
|
152
|
+
debug_file 'post_mortem'
|
160
153
|
end
|
161
154
|
end
|
162
155
|
|
data/test/save_test.rb
CHANGED
@@ -2,14 +2,14 @@ require_relative 'test_helper'
|
|
2
2
|
|
3
3
|
describe "Save Command" do
|
4
4
|
include TestDsl
|
5
|
-
let(:file_name) { 'save_output.txt' }
|
6
5
|
|
7
6
|
describe "successful saving" do
|
7
|
+
let(:file_name) { 'save_output.txt' }
|
8
8
|
let(:file_contents) { File.read(file_name) }
|
9
9
|
before do
|
10
|
-
enter 'break 2', 'break 3 if true', 'catch NoMethodError',
|
11
|
-
|
12
|
-
|
10
|
+
enter 'break 2', 'break 3 if true', 'catch NoMethodError',
|
11
|
+
'display 2 + 3', 'display 5 + 6', 'set autoeval', 'set autolist',
|
12
|
+
"save #{file_name}"
|
13
13
|
debug_file 'save'
|
14
14
|
end
|
15
15
|
after do
|
@@ -79,13 +79,14 @@ describe "Save Command" do
|
|
79
79
|
end
|
80
80
|
|
81
81
|
describe "Post Mortem" do
|
82
|
+
let(:file_name) { 'save_output.txt' }
|
82
83
|
#let(:file_contents) { File.read(file_name) }
|
83
84
|
#after { FileUtils.rm(file_name) }
|
84
85
|
it "must work in post-mortem mode" do
|
85
86
|
skip("No post morten mode for now")
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
enter 'cont', "save #{file_name}"
|
88
|
+
debug_file 'post_mortem'
|
89
|
+
file_contents.must_include "set autoirb off"
|
89
90
|
end
|
90
91
|
end
|
91
92
|
|
data/test/set_test.rb
CHANGED
@@ -64,13 +64,10 @@ describe "Set Command" do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
describe "byebugtesting" do
|
67
|
-
|
68
|
-
before { $rdebug_state = nil }
|
69
|
-
after { $rdebug_state = nil }
|
70
|
-
|
71
|
-
it "must set $rdebug_context if byebugsetting is on" do
|
67
|
+
it "must set $byebug_state if byebugsetting is on" do
|
72
68
|
enter 'set byebugtesting', 'break 3', 'cont'
|
73
|
-
debug_file('set') {
|
69
|
+
debug_file('set') {
|
70
|
+
state.must_be_kind_of Byebug::CommandProcessor::State }
|
74
71
|
end
|
75
72
|
|
76
73
|
it "must set basename on too" do
|
@@ -81,9 +78,9 @@ describe "Set Command" do
|
|
81
78
|
end
|
82
79
|
end
|
83
80
|
|
84
|
-
it "must not set $
|
81
|
+
it "must not set $byebug_state if byebugsetting is off" do
|
85
82
|
enter 'set nobyebugtesting', 'break 3', 'cont'
|
86
|
-
debug_file('set') {
|
83
|
+
debug_file('set') { $byebug_state.must_be_nil }
|
87
84
|
end
|
88
85
|
end
|
89
86
|
|
@@ -168,9 +165,9 @@ describe "Set Command" do
|
|
168
165
|
temporary_change_hash_value(Byebug::Command.settings, :autolist, 0)
|
169
166
|
it "must work in post-mortem mode" do
|
170
167
|
skip("No post morten mode for now")
|
171
|
-
|
172
|
-
|
173
|
-
|
168
|
+
enter 'cont', "set autolist on"
|
169
|
+
debug_file 'post_mortem'
|
170
|
+
check_output_includes "autolist is on."
|
174
171
|
end
|
175
172
|
end
|
176
173
|
|
data/test/show_test.rb
CHANGED
@@ -106,11 +106,9 @@ describe "Show Command" do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
it "must show linetrace" do
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
check_output_includes "line tracing is on."
|
113
|
-
end
|
109
|
+
enter 'trace on', 'show linetrace'
|
110
|
+
debug_file 'show'
|
111
|
+
check_output_includes "line tracing is on."
|
114
112
|
end
|
115
113
|
|
116
114
|
|
data/test/stepping_test.rb
CHANGED
@@ -7,51 +7,46 @@ describe "Stepping Commands" do
|
|
7
7
|
|
8
8
|
describe "Usual mode" do
|
9
9
|
|
10
|
-
before
|
10
|
+
before do
|
11
|
+
enter 'break 10', 'cont'
|
12
|
+
end
|
11
13
|
|
12
14
|
it "must go to the next line if forced by a setting" do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
17
|
-
end
|
15
|
+
Byebug::Command.settings[:force_stepping] = true
|
16
|
+
enter 'next'
|
17
|
+
debug_file('stepping') { state.line.must_equal 11 }
|
18
18
|
end
|
19
19
|
|
20
20
|
it "must go to the next line if forced by a setting (by shortcut)" do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
25
|
-
end
|
21
|
+
Byebug::Command.settings[:force_stepping] = true
|
22
|
+
enter 'n'
|
23
|
+
debug_file('stepping') { state.line.must_equal 11 }
|
26
24
|
end
|
27
25
|
|
28
26
|
it "must leave on the same line if forced by a setting" do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
33
|
-
end
|
27
|
+
Byebug::Command.settings[:force_stepping] = false
|
28
|
+
enter 'next'
|
29
|
+
debug_file('stepping') { state.line.must_equal 10 }
|
34
30
|
end
|
35
31
|
|
36
|
-
it "must go
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
debug_file('stepping') { state.line.must_equal 21 }
|
41
|
-
end
|
32
|
+
it "must go the specified number of lines forward by default" do
|
33
|
+
Byebug::Command.settings[:force_stepping] = true
|
34
|
+
enter 'next 2'
|
35
|
+
debug_file('stepping') { state.line.must_equal 21 }
|
42
36
|
end
|
43
37
|
|
44
|
-
it "must go to the next line if forced
|
38
|
+
it "must go to the next line if forced by 'plus' sign" do
|
45
39
|
enter 'next+'
|
46
40
|
debug_file('stepping') { state.line.must_equal 11 }
|
47
41
|
end
|
48
42
|
|
49
|
-
it "must leave on the same line if forced
|
43
|
+
it "must leave on the same line if forced by 'minus' sign" do
|
50
44
|
enter 'next-'
|
51
45
|
debug_file('stepping') { state.line.must_equal 10 }
|
52
46
|
end
|
53
47
|
|
54
48
|
it "must ignore the setting if 'minus' is specified" do
|
49
|
+
Byebug::Command.settings[:force_stepping] = true
|
55
50
|
enter 'next-'
|
56
51
|
debug_file('stepping') { state.line.must_equal 10 }
|
57
52
|
end
|
@@ -61,48 +56,43 @@ describe "Stepping Commands" do
|
|
61
56
|
temporary_change_hash_value(Byebug::Command.settings, :autoeval, false)
|
62
57
|
it "must not work in post-mortem mode" do
|
63
58
|
skip("No post morten mode for now")
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
enter 'cont', "next"
|
60
|
+
debug_file('post_mortem')
|
61
|
+
check_output_includes 'Unknown command: "next". Try "help".', interface.error_queue
|
67
62
|
end
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|
71
|
-
|
72
66
|
describe "Step Command" do
|
67
|
+
|
73
68
|
describe "Usual mode" do
|
74
|
-
|
69
|
+
|
70
|
+
before do
|
71
|
+
enter 'break 10', 'cont'
|
72
|
+
end
|
75
73
|
|
76
74
|
it "must go to the step line if forced by a setting" do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
81
|
-
end
|
75
|
+
Byebug::Command.settings[:force_stepping] = true
|
76
|
+
enter 'step'
|
77
|
+
debug_file('stepping') { state.line.must_equal 11 }
|
82
78
|
end
|
83
79
|
|
84
80
|
it "must go to the next line by shortcut" do
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
89
|
-
end
|
81
|
+
Byebug::Command.settings[:force_stepping] = true
|
82
|
+
enter 's'
|
83
|
+
debug_file('stepping') { state.line.must_equal 11 }
|
90
84
|
end
|
91
85
|
|
92
86
|
it "must leave on the same line if forced by a setting" do
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
97
|
-
end
|
87
|
+
Byebug::Command.settings[:force_stepping] = false
|
88
|
+
enter 'step'
|
89
|
+
debug_file('stepping') { state.line.must_equal 10 }
|
98
90
|
end
|
99
91
|
|
100
|
-
it "must go
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
debug_file('stepping') { state.line.must_equal 15 }
|
105
|
-
end
|
92
|
+
it "must go the specified number of lines forward by default" do
|
93
|
+
Byebug::Command.settings[:force_stepping] = true
|
94
|
+
enter 'step 2'
|
95
|
+
debug_file('stepping') { state.line.must_equal 15 }
|
106
96
|
end
|
107
97
|
|
108
98
|
it "must go to the step line if forced to do that by 'plus' sign" do
|
@@ -120,9 +110,9 @@ describe "Stepping Commands" do
|
|
120
110
|
temporary_change_hash_value(Byebug::Command.settings, :autoeval, false)
|
121
111
|
it "must not work in post-mortem mode" do
|
122
112
|
skip("No post morten mode for now")
|
123
|
-
|
124
|
-
|
125
|
-
|
113
|
+
enter 'cont', "step"
|
114
|
+
debug_file('post_mortem')
|
115
|
+
check_output_includes 'Unknown command: "step". Try "help".', interface.error_queue
|
126
116
|
end
|
127
117
|
end
|
128
118
|
end
|
data/test/support/context.rb
CHANGED
data/test/support/processor.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module Byebug
|
2
|
+
|
3
|
+
class Processor
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def print(message)
|
7
|
+
Byebug.handler.interface.print_queue << message
|
8
|
+
end
|
5
9
|
end
|
10
|
+
|
6
11
|
end
|
12
|
+
|
7
13
|
end
|
data/test/support/test_dsl.rb
CHANGED
@@ -12,6 +12,7 @@ module TestDsl
|
|
12
12
|
base.class_eval do
|
13
13
|
extend ClassMethods
|
14
14
|
before do
|
15
|
+
Byebug::Command.settings[:byebugtesting] = true
|
15
16
|
Byebug.interface = TestInterface.new
|
16
17
|
Byebug.handler.display.clear
|
17
18
|
end
|
@@ -21,10 +22,11 @@ module TestDsl
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
25
|
+
##
|
24
26
|
# Adds commands to the input queue, so they will be later retrieved by
|
25
|
-
# Processor, i.e
|
27
|
+
# Processor, i.e., it emulates user's input.
|
26
28
|
#
|
27
|
-
# If a command is a Proc object, it will be executed before
|
29
|
+
# If a command is a Proc object, it will be executed before being retrieved by
|
28
30
|
# Processor. May be handy when you need build a command depending on the
|
29
31
|
# current context/state.
|
30
32
|
#
|
@@ -39,13 +41,13 @@ module TestDsl
|
|
39
41
|
interface.input_queue.concat(messages)
|
40
42
|
end
|
41
43
|
|
42
|
-
|
43
|
-
#
|
44
|
+
##
|
45
|
+
# Runs byebug with the provided basename for a file.
|
44
46
|
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
# executed, the test will fail.
|
47
|
+
# The file should be placed in the test/examples dir. You also can specify a
|
48
|
+
# block, which will be executed when Processor extracts all the commands from
|
49
|
+
# the input queue. You can use that for making asserts on the current test. If
|
50
|
+
# you specified the block and it never was executed, the test will fail.
|
49
51
|
#
|
50
52
|
# Usage:
|
51
53
|
# debug "ex1" # ex1 should be placed in test/examples/ex1.rb
|
@@ -81,18 +83,20 @@ module TestDsl
|
|
81
83
|
raise exception if exception
|
82
84
|
end
|
83
85
|
|
86
|
+
##
|
87
|
+
# Checks the output of byebug.
|
84
88
|
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
# argument.
|
89
|
+
# By default it checks output queue of the current interface, but you can
|
90
|
+
# check again any queue by providing it as a second argument.
|
88
91
|
#
|
89
92
|
# Usage:
|
90
93
|
# enter 'break 4', 'cont'
|
91
|
-
# debug
|
94
|
+
# debug 'ex1'
|
92
95
|
# check_output "Breakpoint 1 at #{fullpath('ex1')}:4"
|
93
96
|
#
|
94
97
|
def check_output(check_method, *args)
|
95
|
-
queue = args.last.is_a?(String) || args.last.is_a?(Regexp) ?
|
98
|
+
queue = args.last.is_a?(String) || args.last.is_a?(Regexp) ?
|
99
|
+
interface.output_queue : args.pop
|
96
100
|
queue_messages = queue.map(&:strip)
|
97
101
|
messages = Array(args).map { |msg| msg.is_a?(String) ? msg.strip : msg }
|
98
102
|
queue_messages.send(check_method, messages)
|
@@ -111,17 +115,13 @@ module TestDsl
|
|
111
115
|
end
|
112
116
|
|
113
117
|
def state
|
114
|
-
$
|
118
|
+
$byebug_state
|
115
119
|
end
|
116
120
|
|
117
121
|
def context
|
118
122
|
state.context
|
119
123
|
end
|
120
124
|
|
121
|
-
def breakpoint
|
122
|
-
Byebug.breakpoints.first
|
123
|
-
end
|
124
|
-
|
125
125
|
def force_set_const(klass, const, value)
|
126
126
|
klass.send(:remove_const, const) if klass.const_defined?(const)
|
127
127
|
klass.const_set(const, value)
|
@@ -161,6 +161,34 @@ module TestDsl
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
164
|
+
def set_tmp_hash(hash, key, value)
|
165
|
+
@old_hashes.merge!({ hash => { key => hash[key] } }) do |k, v1, v2|
|
166
|
+
v1.merge(v2)
|
167
|
+
end
|
168
|
+
hash[key] = value
|
169
|
+
end
|
170
|
+
|
171
|
+
def restore_tmp_hash(hash, key)
|
172
|
+
hash[key] = @old_hashes[hash][key]
|
173
|
+
end
|
174
|
+
|
175
|
+
def set_tmp_const(klass, const, value)
|
176
|
+
@old_consts.merge!({ klass =>
|
177
|
+
{ const => klass.const_defined?(const) ?
|
178
|
+
klass.const_get(const) : :__undefined__ } }) do |k, v1, v2|
|
179
|
+
v1.merge(v2)
|
180
|
+
end
|
181
|
+
value == :__undefined__ ? klass.send(:remove_const, const) :
|
182
|
+
force_set_const(klass, const, value)
|
183
|
+
end
|
184
|
+
|
185
|
+
def restore_tmp_const(klass, const)
|
186
|
+
@old_consts[klass][const] == :__undefined ?
|
187
|
+
klass.send(:remove_const, const) :
|
188
|
+
force_set_const(klass, const, @old_consts[klass][const])
|
189
|
+
end
|
190
|
+
|
191
|
+
|
164
192
|
module ClassMethods
|
165
193
|
|
166
194
|
include Shared
|