byebug 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +9 -0
  4. data/CONTRIBUTING.md +13 -1
  5. data/GUIDE.md +181 -1
  6. data/README.md +67 -211
  7. data/Rakefile +1 -0
  8. data/bin/byebug +1 -8
  9. data/ext/byebug/byebug.c +66 -25
  10. data/ext/byebug/context.c +16 -20
  11. data/ext/byebug/extconf.rb +2 -1
  12. data/lib/byebug.rb +16 -9
  13. data/lib/byebug/command.rb +3 -3
  14. data/lib/byebug/commands/condition.rb +2 -2
  15. data/lib/byebug/commands/edit.rb +12 -9
  16. data/lib/byebug/commands/eval.rb +0 -16
  17. data/lib/byebug/commands/frame.rb +7 -17
  18. data/lib/byebug/commands/info.rb +2 -9
  19. data/lib/byebug/commands/list.rb +1 -1
  20. data/lib/byebug/commands/reload.rb +11 -0
  21. data/lib/byebug/commands/repl.rb +3 -6
  22. data/lib/byebug/commands/set.rb +5 -5
  23. data/lib/byebug/commands/show.rb +5 -0
  24. data/lib/byebug/commands/threads.rb +4 -4
  25. data/lib/byebug/commands/trace.rb +2 -1
  26. data/lib/byebug/context.rb +14 -5
  27. data/lib/byebug/interface.rb +1 -1
  28. data/lib/byebug/processor.rb +1 -1
  29. data/lib/byebug/remote.rb +1 -24
  30. data/lib/byebug/version.rb +1 -1
  31. data/old_doc/byebug.1 +0 -3
  32. data/old_doc/byebug.texi +2 -3
  33. data/test/breakpoints_test.rb +75 -52
  34. data/test/conditions_test.rb +2 -3
  35. data/test/continue_test.rb +6 -0
  36. data/test/edit_test.rb +3 -3
  37. data/test/eval_test.rb +14 -5
  38. data/test/examples/breakpoint.rb +4 -13
  39. data/test/examples/breakpoint_deep.rb +1 -21
  40. data/test/examples/conditions.rb +1 -1
  41. data/test/examples/continue.rb +2 -1
  42. data/test/examples/edit.rb +1 -0
  43. data/test/examples/eval.rb +1 -11
  44. data/test/examples/finish.rb +0 -17
  45. data/test/examples/frame.rb +2 -26
  46. data/test/examples/frame_deep.rb +0 -19
  47. data/test/examples/help.rb +0 -1
  48. data/test/examples/info.rb +4 -36
  49. data/test/examples/kill.rb +1 -1
  50. data/test/examples/list.rb +1 -1
  51. data/test/examples/method.rb +2 -13
  52. data/test/examples/post_mortem.rb +1 -16
  53. data/test/examples/quit.rb +1 -1
  54. data/test/examples/reload.rb +1 -1
  55. data/test/examples/restart.rb +1 -1
  56. data/test/examples/show.rb +0 -1
  57. data/test/examples/stepping.rb +2 -19
  58. data/test/examples/thread.rb +0 -27
  59. data/test/examples/variables.rb +0 -22
  60. data/test/finish_test.rb +22 -6
  61. data/test/frame_test.rb +89 -56
  62. data/test/info_test.rb +71 -46
  63. data/test/kill_test.rb +6 -1
  64. data/test/list_test.rb +1 -2
  65. data/test/method_test.rb +32 -13
  66. data/test/post_mortem_test.rb +34 -21
  67. data/test/quit_test.rb +0 -1
  68. data/test/restart_test.rb +6 -0
  69. data/test/set_test.rb +1 -1
  70. data/test/show_test.rb +17 -17
  71. data/test/source_test.rb +2 -3
  72. data/test/stepping_test.rb +31 -7
  73. data/test/support/test_dsl.rb +11 -1
  74. data/test/test_helper.rb +9 -0
  75. data/test/thread_test.rb +57 -23
  76. data/test/trace_test.rb +0 -1
  77. data/test/variables_test.rb +36 -17
  78. metadata +3 -9
  79. data/test/examples/breakpoint2.rb +0 -7
  80. data/test/examples/jump.rb +0 -14
  81. data/test/examples/set_annotate.rb +0 -12
@@ -1,29 +1,45 @@
1
1
  require_relative 'test_helper'
2
2
 
3
- class TestFinish < TestDsl::TestCase
3
+ class FinishExample
4
+ def a
5
+ b
6
+ end
7
+ def b
8
+ c
9
+ 2
10
+ end
11
+ def c
12
+ d
13
+ 3
14
+ end
15
+ def d
16
+ 5
17
+ end
18
+ end
4
19
 
20
+ class TestFinish < TestDsl::TestCase
5
21
  it 'must stop at the next frame by default' do
6
- enter 'break 16', 'cont', 'finish'
22
+ enter "break #{__FILE__}:16", 'cont', 'finish'
7
23
  debug_file('finish') { $state.line.must_equal 13 }
8
24
  end
9
25
 
10
26
  it 'must stop at the #0 frame by default' do
11
- enter 'break 16', 'cont', 'finish 0'
27
+ enter "break #{__FILE__}:16", 'cont', 'finish 0'
12
28
  debug_file('finish') { $state.line.must_equal 13 }
13
29
  end
14
30
 
15
31
  it 'must stop at the specified frame' do
16
- enter 'break 16', 'cont', 'finish 1'
32
+ enter "break #{__FILE__}:16", 'cont', 'finish 1'
17
33
  debug_file('finish') { $state.line.must_equal 9 }
18
34
  end
19
35
 
20
36
  it 'must stop at the next frame if the current frame was changed' do
21
- enter 'break 16', 'cont', 'up', 'finish'
37
+ enter "break #{__FILE__}:16", 'cont', 'up', 'finish'
22
38
  debug_file('finish') { $state.line.must_equal 9 }
23
39
  end
24
40
 
25
41
  describe 'not a number is specified for frame' do
26
- before { enter 'break 16', 'cont', 'finish foo' }
42
+ before { enter "break #{__FILE__}:16", 'cont', 'finish foo' }
27
43
 
28
44
  it 'must show an error' do
29
45
  debug_file('finish')
@@ -1,10 +1,53 @@
1
1
  require_relative 'test_helper'
2
2
 
3
+ class FrameExample
4
+ def initialize(f)
5
+ @f = f
6
+ end
7
+
8
+ def a
9
+ b
10
+ end
11
+
12
+ def b
13
+ c
14
+ 2
15
+ end
16
+
17
+ def c
18
+ d('a')
19
+ 3
20
+ end
21
+
22
+ def d(e)
23
+ 5
24
+ end
25
+ end
26
+
27
+ class FrameDeepExample
28
+ def a
29
+ z = 1
30
+ z += b
31
+ end
32
+ def b
33
+ z = 2
34
+ z += c
35
+ end
36
+ def c
37
+ z = 3
38
+ byebug
39
+ z += d('a')
40
+ end
41
+ def d(e)
42
+ 4
43
+ end
44
+ end
45
+
3
46
  class TestFrame < TestDsl::TestCase
4
47
  describe 'when byebug started at the beginning' do
5
48
  before do
6
49
  @tst_file = fullpath('frame')
7
- enter 'break 23', 'cont'
50
+ enter "break #{__FILE__}:23", 'cont'
8
51
  end
9
52
 
10
53
  it 'must go up' do
@@ -35,7 +78,7 @@ class TestFrame < TestDsl::TestCase
35
78
  it 'must print current stack frame when without arguments' do
36
79
  enter 'up', 'frame'
37
80
  debug_file('frame')
38
- check_output_includes /#1 FrameExample\.c\s+at #{@tst_file}:18/
81
+ check_output_includes(/#1 FrameExample\.c\s+at #{__FILE__}:18/)
39
82
  end
40
83
 
41
84
  it 'must set frame to the first one' do
@@ -45,7 +88,7 @@ class TestFrame < TestDsl::TestCase
45
88
 
46
89
  it 'must set frame to the last one' do
47
90
  enter 'frame -1'
48
- debug_file('frame') { $state.file.must_match /minitest\/unit.rb/ }
91
+ debug_file('frame') { $state.file.must_match(/minitest\/unit.rb/) }
49
92
  end
50
93
 
51
94
  it 'must not set frame if the frame number is too low' do
@@ -63,21 +106,16 @@ class TestFrame < TestDsl::TestCase
63
106
  end
64
107
 
65
108
  describe 'fullpath' do
66
- def short_path(fullpath)
67
- separator = File::ALT_SEPARATOR || File::SEPARATOR
68
- "...#{separator}" + fullpath.split(separator)[-3..-1].join(separator)
69
- end
70
-
71
109
  describe 'when set' do
72
110
  temporary_change_hash Byebug.settings, :fullpath, true
73
111
 
74
112
  it 'must display current backtrace with fullpaths' do
75
113
  enter 'where'
76
114
  debug_file 'frame'
77
- check_output_includes \
78
- /--> #0 FrameExample\.d\(e#String\)\s+at #{@tst_file}:23/,
79
- /#1 FrameExample\.c\s+at #{@tst_file}:18/,
80
- /#2 FrameExample\.b\s+at #{@tst_file}:13/
115
+ check_output_includes(
116
+ /--> #0 FrameExample\.d\(e#String\)\s+at #{__FILE__}:23/,
117
+ /#1 FrameExample\.c\s+at #{__FILE__}:18/,
118
+ /#2 FrameExample\.b\s+at #{__FILE__}:13/)
81
119
  end
82
120
  end
83
121
 
@@ -87,11 +125,11 @@ class TestFrame < TestDsl::TestCase
87
125
  it 'must display current backtrace with shortpaths' do
88
126
  enter 'where'
89
127
  debug_file 'frame'
90
- check_output_includes \
91
- /--> #0 FrameExample\.d\(e#String\)\s+at #{short_path(@tst_file)}:23/,
92
- /#1 FrameExample\.c\s+at #{short_path(@tst_file)}:18/,
93
- /#2 FrameExample\.b\s+at #{short_path(@tst_file)}:13/,
94
- /#3 FrameExample\.a\s+at #{short_path(@tst_file)}:9/
128
+ check_output_includes(
129
+ /--> #0 FrameExample\.d\(e#String\)\s+at #{shortpath(__FILE__)}:23/,
130
+ /#1 FrameExample\.c\s+at #{shortpath(__FILE__)}:18/,
131
+ /#2 FrameExample\.b\s+at #{shortpath(__FILE__)}:13/,
132
+ /#3 FrameExample\.a\s+at #{shortpath(__FILE__)}:9/)
95
133
  end
96
134
  end
97
135
  end
@@ -103,11 +141,11 @@ class TestFrame < TestDsl::TestCase
103
141
  it 'displays current backtrace with callstyle "long"' do
104
142
  enter 'where'
105
143
  debug_file 'frame'
106
- check_output_includes \
107
- /--> #0 FrameExample\.d\(e#String\)\s+at #{@tst_file}:23/,
108
- /#1 FrameExample\.c\s+at #{@tst_file}:18/,
109
- /#2 FrameExample\.b\s+at #{@tst_file}:13/,
110
- /#3 FrameExample\.a\s+at #{@tst_file}:9/
144
+ check_output_includes(
145
+ /--> #0 FrameExample\.d\(e#String\)\s+at #{__FILE__}:23/,
146
+ /#1 FrameExample\.c\s+at #{__FILE__}:18/,
147
+ /#2 FrameExample\.b\s+at #{__FILE__}:13/,
148
+ /#3 FrameExample\.a\s+at #{__FILE__}:9/)
111
149
  end
112
150
  end
113
151
 
@@ -117,81 +155,76 @@ class TestFrame < TestDsl::TestCase
117
155
  it 'displays current backtrace with callstyle "short"' do
118
156
  enter 'where'
119
157
  debug_file 'frame'
120
- check_output_includes /--> #0 d\(e\)\s+at #{@tst_file}:23/,
121
- /#1 c\s+at #{@tst_file}:18/,
122
- /#2 b\s+at #{@tst_file}:13/,
123
- /#3 a\s+at #{@tst_file}:9/
158
+ check_output_includes(/--> #0 d\(e\)\s+at #{__FILE__}:23/,
159
+ /#1 c\s+at #{__FILE__}:18/,
160
+ /#2 b\s+at #{__FILE__}:13/,
161
+ /#3 a\s+at #{__FILE__}:9/)
124
162
  end
125
163
  end
126
164
  end
127
165
  end
128
166
 
129
167
  describe 'when byebug is started deep in the callstack' do
130
- before { @tst_file = fullpath('frame_deep') }
168
+ before { enter "break #{__FILE__}:42", 'cont' }
131
169
 
132
170
  it 'must print backtrace' do
133
- enter 'break 16', 'cont', 'where'
171
+ enter 'where'
134
172
  debug_file 'frame_deep'
135
- check_output_includes \
136
- /--> #0 FrameDeepExample\.d\(e#String\)\s+at #{@tst_file}:16/,
137
- /#1 FrameDeepExample\.c\s+at #{@tst_file}:13/,
138
- /#2 FrameDeepExample\.b\s+at #{@tst_file}:8/
173
+ check_output_includes(
174
+ /--> #0 FrameDeepExample\.d\(e#String\)\s+at #{__FILE__}:42/,
175
+ /#1 FrameDeepExample\.c\s+at #{__FILE__}:39/,
176
+ /#2 FrameDeepExample\.b\s+at #{__FILE__}:34/)
139
177
  end
140
178
 
141
179
  it 'must go up' do
142
- enter 'break 16', 'cont', 'up'
143
- debug_file('frame_deep') { $state.line.must_equal 13 }
180
+ enter 'up'
181
+ debug_file('frame_deep') { $state.line.must_equal 39 }
144
182
  end
145
183
 
146
184
  it 'must go down' do
147
- enter 'break 16', 'cont', 'up', 'down'
148
- debug_file('frame_deep') { $state.line.must_equal 16 }
185
+ enter 'up', 'down'
186
+ debug_file('frame_deep') { $state.line.must_equal 42 }
149
187
  end
150
188
 
151
189
  it 'must set frame' do
152
- enter 'break 16', 'cont', 'frame 2'
153
- debug_file('frame_deep') { $state.line.must_equal 8 }
190
+ enter 'frame 2'
191
+ debug_file('frame_deep') { $state.line.must_equal 34 }
154
192
  end
155
193
 
156
194
  it 'must eval properly when scaling the stack' do
157
- enter 'break 16', 'cont', 'p z', 'up', 'p z', 'up', 'p z'
195
+ enter 'p z', 'up', 'p z', 'up', 'p z'
158
196
  debug_file('frame_deep')
159
197
  check_output_includes 'nil', '3', '2'
160
198
  end
161
199
  end
162
200
 
163
- describe 'c-frames (issue #10)' do
164
- before do
165
- @tst_file = fullpath('frame')
166
- enter 'break 5', 'cont'
167
- end
168
-
201
+ describe 'c-frames' do
169
202
  it 'must mark c-frames when printing the stack' do
203
+ enter "break #{__FILE__}:5", 'cont', 'where'
170
204
  enter 'where'
171
205
  debug_file 'frame'
172
- check_output_includes \
173
- /--> #0 FrameExample.initialize\(f#String\)\s+at #{@tst_file}:5/,
174
- /ͱ-- #1 Class.new\(\*args\)\s+at #{@tst_file}:28/,
175
- /#2 <top \(required\)>\s+at #{@tst_file}:28/
206
+ check_output_includes(
207
+ /--> #0 FrameExample.initialize\(f#String\)\s+at #{__FILE__}:5/,
208
+ /ͱ-- #1 Class.new\(\*args\)\s+at #{fullpath('frame')}:3/,
209
+ /#2 <top \(required\)>\s+at #{fullpath('frame')}:3/)
176
210
  end
177
211
 
178
- it 'must not navigate "up" to c-frames' do
179
- enter 'up', 'eval local_var'
212
+ it '"up" skips c-frames' do
213
+ enter "break #{__FILE__}:9", 'cont', 'up', 'eval fr_ex.class.to_s'
180
214
  debug_file 'frame'
181
- check_output_includes '"hola"'
215
+ check_output_includes '"FrameExample"'
182
216
  end
183
217
 
184
- it 'must not navigate "down" to c-frames' do
185
- enter 'up', 'down', 'eval f'
218
+ it '"down" skips c-frames' do
219
+ enter "break #{__FILE__}:9", 'cont', 'up', 'down', 'eval @f'
186
220
  debug_file 'frame'
187
221
  check_output_includes '"f"'
188
222
  end
189
223
 
190
224
  it 'must not jump straigh to c-frames' do
191
- enter 'frame 1'
225
+ enter "break #{__FILE__}:5", 'cont', 'frame 1'
192
226
  debug_file 'frame'
193
227
  check_output_includes "Can't navigate to c-frame", interface.error_queue
194
228
  end
195
229
  end
196
-
197
230
  end
@@ -1,33 +1,61 @@
1
1
  require_relative 'test_helper'
2
2
 
3
+ class InfoExample
4
+ def initialize
5
+ @foo = "bar"
6
+ @bla = "blabla"
7
+ end
8
+
9
+ def a(y, z)
10
+ w = "1" * 30
11
+ x = 2
12
+ w + x.to_s + y + z + @foo
13
+ end
14
+
15
+ def c
16
+ a = BasicObject.new
17
+ a
18
+ end
19
+
20
+ def b
21
+ a('a', 'b')
22
+ e = "%.2f"
23
+ e
24
+ end
25
+
26
+ def d
27
+ raise "bang"
28
+ rescue
29
+ end
30
+
31
+ end
32
+
3
33
  class TestInfo < TestDsl::TestCase
4
34
  include Columnize
5
35
 
6
36
  describe 'Args info' do
7
- temporary_change_hash Byebug.settings, :width, 15
8
-
9
37
  it 'must show info about all args' do
10
- enter 'break 3', 'cont', 'info args'
38
+ enter "break #{__FILE__}:12", 'cont', 'info args'
11
39
  debug_file 'info'
12
- check_output_includes 'a = "aaaaaaa...', 'b = "b"'
40
+ check_output_includes 'y = "a"', 'z = "b"'
13
41
  end
14
42
  end
15
43
 
16
44
  describe 'Breakpoints info' do
17
45
  it 'must show info about all breakpoints' do
18
- enter 'break 7', 'break 9 if a == b', 'info breakpoints'
46
+ enter 'break 4', 'break 5 if y == z', 'info breakpoints'
19
47
  debug_file 'info'
20
48
  check_output_includes 'Num Enb What',
21
- /\d+ +y at #{fullpath('info')}:7/,
22
- /\d+ +y at #{fullpath('info')}:9 if a == b/
49
+ /\d+ +y at #{fullpath('info')}:4/,
50
+ /\d+ +y at #{fullpath('info')}:5 if y == z/
23
51
  end
24
52
 
25
53
  it 'must show info about specific breakpoint' do
26
- enter 'break 7', 'break 9',
54
+ enter 'break 4', 'break 5',
27
55
  ->{ "info breakpoints #{Byebug.breakpoints.first.id}" }
28
56
  debug_file 'info'
29
- check_output_includes 'Num Enb What', /\d+ +y at #{fullpath('info')}:7/
30
- check_output_doesnt_include /\d+ +y at #{fullpath('info')}:9/
57
+ check_output_includes 'Num Enb What', /\d+ +y at #{fullpath('info')}:4/
58
+ check_output_doesnt_include(/\d+ +y at #{fullpath('info')}:5/)
31
59
  end
32
60
 
33
61
  it 'must show an error if no breakpoints are found' do
@@ -37,16 +65,16 @@ class TestInfo < TestDsl::TestCase
37
65
  end
38
66
 
39
67
  it 'must show an error if no breakpoints are found' do
40
- enter 'break 7', 'info breakpoints 123'
68
+ enter 'break 4', 'info breakpoints 123'
41
69
  debug_file 'info'
42
70
  check_error_includes 'No breakpoints found among list given.'
43
71
  end
44
72
 
45
73
  it 'must show hit count' do
46
- enter 'break 9', 'cont', 'info breakpoints'
74
+ enter 'break 5', 'cont', 'info breakpoints'
47
75
  debug_file 'info'
48
- check_output_includes \
49
- /\d+ +y at #{fullpath('info')}:9/, 'breakpoint already hit 1 time'
76
+ check_output_includes(
77
+ /\d+ +y at #{fullpath('info')}:5/, 'breakpoint already hit 1 time')
50
78
  end
51
79
  end
52
80
 
@@ -68,7 +96,7 @@ class TestInfo < TestDsl::TestCase
68
96
  end
69
97
 
70
98
  describe 'Files info' do
71
- let(:files) { (LineCache.cached_files + SCRIPT_LINES__.keys).uniq.sort }
99
+ let(:files) { SCRIPT_LINES__.keys.uniq.sort }
72
100
 
73
101
  it 'must show all files read in' do
74
102
  enter 'info files'
@@ -129,12 +157,12 @@ class TestInfo < TestDsl::TestCase
129
157
  end
130
158
 
131
159
  it 'must show breakpoints in the file' do
132
- enter 'break 5', 'break 7', "info file #{file} breakpoints"
160
+ enter 'break 4', 'break 5', "info file #{file} breakpoints"
133
161
  debug_file 'info'
134
- check_output_includes /Created breakpoint \d+ at #{file}:5/,
135
- /Created breakpoint \d+ at #{file}:7/,
162
+ check_output_includes(/Created breakpoint \d+ at #{file}:4/,
163
+ /Created breakpoint \d+ at #{file}:5/,
136
164
  filename,
137
- 'breakpoint line numbers:', breakpoint_line_numbers
165
+ 'breakpoint line numbers:', breakpoint_line_numbers)
138
166
  check_output_doesnt_include lines, mtime, sha1
139
167
  end
140
168
 
@@ -145,12 +173,6 @@ class TestInfo < TestDsl::TestCase
145
173
  filename, lines, breakpoint_line_numbers, mtime, sha1
146
174
  end
147
175
 
148
- it 'must not show info about the file if the file is not loaded' do
149
- enter "info file #{fullpath('info2')} basic"
150
- debug_file 'info'
151
- check_output_includes "File #{fullpath('info2')} is not cached"
152
- end
153
-
154
176
  it 'must not show any info if the parameter is invalid' do
155
177
  enter "info file #{file} blabla"
156
178
  debug_file 'info'
@@ -160,7 +182,7 @@ class TestInfo < TestDsl::TestCase
160
182
 
161
183
  describe 'Instance variables info' do
162
184
  it 'must show instance variables' do
163
- enter 'break 21', 'cont', 'info instance_variables'
185
+ enter "break #{__FILE__}:12", 'cont', 'info instance_variables'
164
186
  debug_file 'info'
165
187
  check_output_includes '@bla = "blabla"', '@foo = "bar"'
166
188
  end
@@ -168,9 +190,9 @@ class TestInfo < TestDsl::TestCase
168
190
 
169
191
  describe 'Line info' do
170
192
  it 'must show the current line' do
171
- enter 'break 21', 'cont', 'info line'
193
+ enter "break #{__FILE__}:12", 'cont', 'info line'
172
194
  debug_file 'info'
173
- check_output_includes "Line 21 of \"#{fullpath('info')}\""
195
+ check_output_includes "Line 12 of \"#{__FILE__}\""
174
196
  end
175
197
  end
176
198
 
@@ -178,13 +200,13 @@ class TestInfo < TestDsl::TestCase
178
200
  temporary_change_hash Byebug.settings, :width, 28
179
201
 
180
202
  it 'must show the current local variables' do
181
- enter 'break 21', 'cont', 'info locals'
203
+ enter "break #{__FILE__}:12", 'cont', 'info locals'
182
204
  debug_file 'info'
183
- check_output_includes 'a = "11111111111111111111...', 'b = 2'
205
+ check_output_includes 'w = "11111111111111111111...', 'x = 2'
184
206
  end
185
207
 
186
208
  it 'must fail if local variable doesn\'t respond to #to_s or to #inspect' do
187
- enter 'break 26', 'cont', 'info locals'
209
+ enter "break #{__FILE__}:17", 'cont', 'info locals'
188
210
  debug_file 'info'
189
211
  check_output_includes 'a = *Error in evaluation*'
190
212
  end
@@ -207,17 +229,19 @@ class TestInfo < TestDsl::TestCase
207
229
  end
208
230
 
209
231
  it 'must show the breakpoint stop reason' do
210
- enter 'break 7', 'cont', 'info program'
232
+ enter 'break 4', 'cont', 'info program'
211
233
  debug_file 'info'
212
234
  check_output_includes 'Program stopped.', 'It stopped at a breakpoint.'
213
235
  end
214
236
 
215
237
  it 'must show the catchpoint stop reason' do
216
- skip('TODO')
238
+ enter 'catch Exception', 'cont', 'info program'
239
+ debug_file 'info'
240
+ check_output_includes 'Program stopped.', 'It stopped at a catchpoint.'
217
241
  end
218
242
 
219
243
  it 'must show the unknown stop reason' do
220
- enter 'break 7', 'cont',
244
+ enter 'break 5', 'cont',
221
245
  ->{ context.stubs(:stop_reason).returns('blabla'); 'info program' }
222
246
  debug_file 'info'
223
247
  check_output_includes 'Program stopped.', 'unknown reason: blabla'
@@ -230,11 +254,12 @@ class TestInfo < TestDsl::TestCase
230
254
 
231
255
  describe 'Stack info' do
232
256
  it 'must show stack info' do
233
- enter 'set fullpath', 'break 20', 'cont', 'info stack'
257
+ enter 'set fullpath', "break #{__FILE__}:10", 'cont', 'info stack'
234
258
  debug_file 'info'
235
- check_output_includes /--> #0 InfoExample.a\s+at #{fullpath('info')}:20/,
236
- /#1 InfoExample.b\s+at #{fullpath('info')}:30/,
237
- /#2 <top \(required\)>\s+at #{fullpath('info')}:36/
259
+ check_output_includes(
260
+ /--> #0 InfoExample.a\(y\#String, z\#String\)\s+at #{__FILE__}:10/,
261
+ /#1 InfoExample.b\s+at #{__FILE__}:21/,
262
+ /#2 <top \(required\)>\s+at #{fullpath('info')}:4/)
238
263
  end
239
264
  end
240
265
 
@@ -250,17 +275,17 @@ class TestInfo < TestDsl::TestCase
250
275
  temporary_change_hash Byebug.settings, :width, 30
251
276
 
252
277
  it 'must show all variables' do
253
- enter 'break 21', 'cont', 'info variables'
278
+ enter "break #{__FILE__}:12", 'cont', 'info variables'
254
279
  debug_file 'info'
255
- check_output_includes 'a = "1111111111111111111111...',
256
- 'b = 2',
257
- /self = #<InfoExample:\S+.../,
280
+ check_output_includes(/self = #<InfoExample:\S+.../,
281
+ 'w = "1111111111111111111111...',
282
+ 'x = 2',
258
283
  '@bla = "blabla"',
259
- '@foo = "bar"'
284
+ '@foo = "bar"')
260
285
  end
261
286
 
262
287
  it 'must fail if the variable doesn\'t respond to #to_s or to #inspect' do
263
- enter 'break 26', 'cont', 'info variables'
288
+ enter "break #{__FILE__}:17", 'cont', 'info variables'
264
289
  debug_file 'info'
265
290
  check_output_includes 'a = *Error in evaluation*',
266
291
  /self = #<InfoExample:\S+.../,
@@ -269,7 +294,7 @@ class TestInfo < TestDsl::TestCase
269
294
  end
270
295
 
271
296
  it 'must correctly print variables containing % sign' do
272
- enter 'break 32', 'cont', 'info variables'
297
+ enter "break #{__FILE__}:23", 'cont', 'info variables'
273
298
  debug_file 'info'
274
299
  check_output_includes 'e = "%.2f"'
275
300
  end
@@ -279,7 +304,7 @@ class TestInfo < TestDsl::TestCase
279
304
  it 'must show help when typing just "info"' do
280
305
  enter 'info', 'cont'
281
306
  debug_file 'info'
282
- check_output_includes /List of "info" subcommands:/
307
+ check_output_includes(/List of "info" subcommands:/)
283
308
  end
284
309
  end
285
310
  end