byebug 1.8.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -1
  3. data/GUIDE.md +14 -22
  4. data/README.md +69 -6
  5. data/bin/byebug +3 -20
  6. data/ext/byebug/breakpoint.c +185 -101
  7. data/ext/byebug/byebug.c +393 -214
  8. data/ext/byebug/byebug.h +34 -15
  9. data/ext/byebug/context.c +327 -102
  10. data/ext/byebug/extconf.rb +1 -1
  11. data/ext/byebug/locker.c +54 -0
  12. data/ext/byebug/threads.c +113 -0
  13. data/lib/byebug.rb +19 -58
  14. data/lib/byebug/command.rb +18 -19
  15. data/lib/byebug/commands/breakpoints.rb +1 -4
  16. data/lib/byebug/commands/catchpoint.rb +1 -1
  17. data/lib/byebug/commands/condition.rb +1 -1
  18. data/lib/byebug/commands/control.rb +2 -3
  19. data/lib/byebug/commands/display.rb +2 -7
  20. data/lib/byebug/commands/edit.rb +1 -1
  21. data/lib/byebug/commands/enable.rb +12 -12
  22. data/lib/byebug/commands/eval.rb +4 -4
  23. data/lib/byebug/commands/finish.rb +1 -1
  24. data/lib/byebug/commands/frame.rb +12 -8
  25. data/lib/byebug/commands/info.rb +20 -52
  26. data/lib/byebug/commands/kill.rb +1 -5
  27. data/lib/byebug/commands/list.rb +2 -1
  28. data/lib/byebug/commands/quit.rb +1 -1
  29. data/lib/byebug/commands/repl.rb +2 -2
  30. data/lib/byebug/commands/save.rb +1 -1
  31. data/lib/byebug/commands/set.rb +84 -90
  32. data/lib/byebug/commands/show.rb +44 -53
  33. data/lib/byebug/commands/skip.rb +1 -1
  34. data/lib/byebug/commands/stepping.rb +5 -4
  35. data/lib/byebug/commands/threads.rb +202 -0
  36. data/lib/byebug/commands/trace.rb +1 -1
  37. data/lib/byebug/helper.rb +3 -3
  38. data/lib/byebug/interface.rb +2 -20
  39. data/lib/byebug/processor.rb +21 -100
  40. data/lib/byebug/remote.rb +3 -3
  41. data/lib/byebug/version.rb +1 -1
  42. data/old_doc/byebug.1 +0 -6
  43. data/old_doc/byebug.texi +29 -46
  44. data/test/breakpoints_test.rb +44 -65
  45. data/test/conditions_test.rb +0 -9
  46. data/test/continue_test.rb +2 -2
  47. data/test/display_test.rb +4 -23
  48. data/test/edit_test.rb +2 -16
  49. data/test/eval_test.rb +4 -13
  50. data/test/examples/thread.rb +32 -0
  51. data/test/finish_test.rb +1 -13
  52. data/test/frame_test.rb +5 -12
  53. data/test/help_test.rb +2 -12
  54. data/test/info_test.rb +8 -18
  55. data/test/kill_test.rb +1 -10
  56. data/test/list_test.rb +5 -14
  57. data/test/method_test.rb +1 -10
  58. data/test/post_mortem_test.rb +247 -14
  59. data/test/quit_test.rb +0 -9
  60. data/test/reload_test.rb +1 -15
  61. data/test/repl_test.rb +1 -9
  62. data/test/restart_test.rb +3 -18
  63. data/test/save_test.rb +1 -13
  64. data/test/set_test.rb +35 -32
  65. data/test/show_test.rb +8 -27
  66. data/test/source_test.rb +1 -8
  67. data/test/stepping_test.rb +65 -96
  68. data/test/support/test_dsl.rb +12 -17
  69. data/test/test_helper.rb +1 -1
  70. data/test/thread_test.rb +106 -0
  71. data/test/trace_test.rb +5 -17
  72. data/test/variables_test.rb +1 -10
  73. metadata +9 -7
  74. data/lib/byebug/commands/jump.rb +0 -52
  75. data/test/jump_test.rb +0 -77
  76. data/test/support/context.rb +0 -15
@@ -1,7 +1,7 @@
1
1
  require_relative 'test_helper'
2
2
 
3
3
  class TestMethod < TestDsl::TestCase
4
- temporary_change_hash Byebug::Command.settings, :autolist, 0
4
+ temporary_change_hash Byebug.settings, :autolist, 0
5
5
 
6
6
  describe 'show instance method of a class' do
7
7
  it 'must show using full command name' do
@@ -58,13 +58,4 @@ class TestMethod < TestDsl::TestCase
58
58
  check_output_includes '@a = "b"', '@c = "d"'
59
59
  end
60
60
  end
61
-
62
- describe 'Post Mortem' do
63
- it 'must work in post-mortem mode' do
64
- enter 'cont', 'm i self'
65
- debug_file 'post_mortem'
66
- check_output_includes /to_s/
67
- end
68
- end
69
-
70
61
  end
@@ -2,24 +2,257 @@ require_relative 'test_helper'
2
2
 
3
3
  class TestPostMortem < TestDsl::TestCase
4
4
 
5
- it 'must enter into post mortem mode' do
6
- enter 'cont'
7
- debug_file('post_mortem') { Byebug.post_mortem?.must_equal true }
8
- end
5
+ describe 'Features' do
6
+ it 'must enter into post-mortem mode' do
7
+ enter 'cont'
8
+ debug_file('post_mortem') { Byebug.post_mortem?.must_equal true }
9
+ end
10
+
11
+ it 'must stop at the correct line' do
12
+ enter 'cont'
13
+ debug_file('post_mortem') { $state.line.must_equal 8 }
14
+ end
15
+
16
+ it 'must exit from post-mortem mode after stepping command' do
17
+ enter 'cont', 'break 12', 'cont'
18
+ debug_file('post_mortem') { Byebug.post_mortem?.must_equal false }
19
+ end
9
20
 
10
- it 'must stop at the correct line' do
11
- enter 'cont'
12
- debug_file('post_mortem') { $state.line.must_equal 8 }
21
+ it 'must save the raised exception' do
22
+ enter 'cont'
23
+ debug_file('post_mortem') {
24
+ Byebug.last_exception.must_be_kind_of RuntimeError }
25
+ end
13
26
  end
14
27
 
15
- it 'must exit from post mortem mode after stepping command' do
16
- enter 'cont', 'break 12', 'cont'
17
- debug_file('post_mortem') { Byebug.post_mortem?.must_equal false }
28
+ describe 'Unavailable commands' do
29
+ temporary_change_hash Byebug.settings, :autoeval, false
30
+
31
+ describe 'step' do
32
+ it 'must not work in post-mortem mode' do
33
+ enter 'cont', 'step'
34
+ debug_file 'post_mortem'
35
+ check_error_includes 'Unknown command: "step". Try "help".'
36
+ end
37
+ end
38
+
39
+ describe 'next' do
40
+ it 'must not work in post-mortem mode' do
41
+ enter 'cont', 'next'
42
+ debug_file 'post_mortem'
43
+ check_error_includes 'Unknown command: "next". Try "help".'
44
+ end
45
+ end
46
+
47
+ describe 'finish' do
48
+ it 'must not work in post-mortem mode' do
49
+ enter 'cont', 'finish'
50
+ debug_file 'post_mortem'
51
+ check_error_includes 'Unknown command: "finish". Try "help".'
52
+ end
53
+ end
18
54
  end
19
55
 
20
- it 'must save the raised exception' do
21
- enter 'cont'
22
- debug_file('post_mortem') {
23
- Byebug.last_exception.must_be_kind_of RuntimeError }
56
+ describe 'Available commands' do
57
+ before { @tst_file = fullpath('post_mortem') }
58
+
59
+ describe 'restart' do
60
+ it 'must work in post-mortem mode' do
61
+ must_restart
62
+ enter 'cont', 'restart'
63
+ debug_file 'post_mortem'
64
+ end
65
+ end
66
+
67
+ describe 'display' do
68
+ it 'must be able to set display expressions in post-mortem mode' do
69
+ enter 'cont', 'display 2 + 2'
70
+ debug_file 'post_mortem'
71
+ check_output_includes '1:', '2 + 2 = 4'
72
+ end
73
+ end
74
+
75
+ describe 'frame' do
76
+ it 'must work in post-mortem mode' do
77
+ enter 'cont', 'frame'
78
+ debug_file('post_mortem') { $state.line.must_equal 8 }
79
+ check_output_includes \
80
+ /--> #0 block in CatchExample\.a\s+at #{@tst_file}:8/
81
+ end
82
+ end
83
+
84
+ describe 'condition' do
85
+ it 'must be able to set conditions in post-mortem mode' do
86
+ enter 'cont', 'break 12',
87
+ ->{ "cond #{Byebug.breakpoints.first.id} true" }, 'cont'
88
+ debug_file('post_mortem') { $state.line.must_equal 12 }
89
+ end
90
+ end
91
+
92
+ describe 'break' do
93
+ it 'must be able to set breakpoints in post-mortem mode' do
94
+ enter 'cont', 'break 12', 'cont'
95
+ debug_file('post_mortem') { $state.line.must_equal 12 }
96
+ end
97
+ end
98
+
99
+ describe 'exit' do
100
+ it 'must work in post-mortem mode' do
101
+ Byebug::QuitCommand.any_instance.expects(:exit!)
102
+ enter 'cont', 'exit!'
103
+ debug_file 'post_mortem'
104
+ end
105
+ end
106
+
107
+ describe 'reload' do
108
+ after { change_line_in_file(@tst_file, 7, ' z = 4') }
109
+
110
+ it 'must work in post-mortem mode' do
111
+ enter 'cont', -> do
112
+ change_line_in_file(@tst_file, 7, 'z = 100')
113
+ 'reload'
114
+ end, 'l 7-7'
115
+ debug_file 'post_mortem'
116
+ check_output_includes '7: z = 100'
117
+ end
118
+ end
119
+
120
+ describe 'edit' do
121
+ temporary_change_hash ENV, 'EDITOR', 'editr'
122
+
123
+ it 'must work in post-mortem mode' do
124
+ Byebug::Edit.any_instance.
125
+ expects(:system).with("editr +2 #{fullpath('edit')}")
126
+ enter 'cont', "edit #{fullpath('edit')}:2", 'cont'
127
+ debug_file 'post_mortem'
128
+ end
129
+ end
130
+
131
+ describe 'info' do
132
+ it 'must work in post-mortem mode' do
133
+ enter 'cont', 'info line'
134
+ debug_file 'post_mortem'
135
+ check_output_includes "Line 8 of \"#{@tst_file}\""
136
+ end
137
+ end
138
+
139
+ describe 'irb' do
140
+ let(:irb) { stub(context: ->{}) }
141
+
142
+ it 'must work in post-mortem mode' do
143
+ irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
144
+ enter 'cont', 'break 12', 'irb'
145
+ debug_file('post_mortem') { $state.line.must_equal 12 }
146
+ end
147
+ end
148
+
149
+ describe 'source' do
150
+ before { File.open(filename, 'w') do |f|
151
+ f.puts 'break 2'
152
+ f.puts 'break 3 if true'
153
+ end }
154
+ after { FileUtils.rm(filename) }
155
+
156
+ let(:filename) { 'source_example.txt' }
157
+
158
+ it 'must work in post-mortem mode' do
159
+ enter 'cont', "so #{filename}"
160
+ debug_file('post_mortem') { Byebug.breakpoints[0].pos.must_equal 3 }
161
+ end
162
+ end
163
+
164
+ describe 'help' do
165
+ it 'must work in post-mortem mode' do
166
+ enter 'cont', 'help'
167
+ debug_file 'post_mortem'
168
+ check_output_includes 'Available commands:'
169
+ end
170
+ end
171
+
172
+ describe 'var' do
173
+ it 'must work in post-mortem mode' do
174
+ enter 'cont', 'var local'
175
+ debug_file 'post_mortem'
176
+ check_output_includes 'x => nil', 'z => 4'
177
+ end
178
+ end
179
+
180
+ describe 'list' do
181
+ it 'must work in post-mortem mode' do
182
+ enter 'cont'
183
+ debug_file 'post_mortem'
184
+ check_output_includes "[3, 12] in #{@tst_file}"
185
+ end
186
+ end
187
+
188
+ describe 'method' do
189
+ it 'must work in post-mortem mode' do
190
+ enter 'cont', 'm i self'
191
+ debug_file 'post_mortem'
192
+ check_output_includes /to_s/
193
+ end
194
+ end
195
+
196
+ describe 'kill' do
197
+ it 'must work in post-mortem mode' do
198
+ Process.expects(:kill).with('USR1', Process.pid)
199
+ enter 'cont', 'kill USR1'
200
+ debug_file 'post_mortem'
201
+ end
202
+ end
203
+
204
+ describe 'eval' do
205
+ it 'must work in post-mortem mode' do
206
+ enter 'cont', 'eval 2 + 2'
207
+ debug_file 'post_mortem'
208
+ check_output_includes '4'
209
+ end
210
+ end
211
+
212
+ describe 'set' do
213
+ temporary_change_hash Byebug.settings, :autolist, 0
214
+
215
+ it 'must work in post-mortem mode' do
216
+ enter 'cont', 'set autolist on'
217
+ debug_file 'post_mortem'
218
+ check_output_includes 'autolist is on.'
219
+ end
220
+ end
221
+
222
+ describe 'save' do
223
+ let(:file_name) { 'save_output.txt' }
224
+ let(:file_contents) { File.read(file_name) }
225
+ after { FileUtils.rm(file_name) }
226
+
227
+ it 'must work in post-mortem mode' do
228
+ enter 'cont', "save #{file_name}"
229
+ debug_file 'post_mortem'
230
+ file_contents.must_include 'set autoirb off'
231
+ end
232
+ end
233
+
234
+ describe 'show' do
235
+ it 'must work in post-mortem mode' do
236
+ enter 'cont', 'show autolist'
237
+ debug_file 'post_mortem'
238
+ check_output_includes 'autolist is on.'
239
+ end
240
+ end
241
+
242
+ describe 'trace' do
243
+ it 'must work in post-mortem mode' do
244
+ enter 'cont', 'trace on'
245
+ debug_file 'post_mortem'
246
+ check_output_includes 'line tracing is on.'
247
+ end
248
+ end
249
+
250
+ describe 'thread' do
251
+ it "must work in post-mortem mode" do
252
+ enter 'cont', 'thread list'
253
+ debug_file('post_mortem')
254
+ check_output_includes /\+ \d+ #<Thread:(\S+) run/
255
+ end
256
+ end
24
257
  end
25
258
  end
@@ -42,13 +42,4 @@ class TestQuit < TestDsl::TestCase
42
42
  enter 'exit!'
43
43
  debug_file 'quit'
44
44
  end
45
-
46
- describe 'Post Mortem' do
47
- it 'must work in post-mortem mode' do
48
- Byebug::QuitCommand.any_instance.expects(:exit!)
49
- enter 'cont', 'exit!'
50
- debug_file 'post_mortem'
51
- end
52
- end
53
-
54
45
  end
@@ -3,7 +3,7 @@ require_relative 'test_helper'
3
3
  class TestReload < TestDsl::TestCase
4
4
 
5
5
  describe 'autoreloading' do
6
- after { Byebug::Command.settings[:autoreload] = true }
6
+ after { Byebug.settings[:autoreload] = true }
7
7
 
8
8
  it 'must notify that automatic reloading is on by default' do
9
9
  enter 'reload'
@@ -31,18 +31,4 @@ class TestReload < TestDsl::TestCase
31
31
  check_output_includes '4: a = 100'
32
32
  end
33
33
  end
34
-
35
- describe 'Post Mortem' do
36
- after { change_line_in_file(fullpath('post_mortem'), 7, ' z = 4') }
37
-
38
- it 'must work in post-mortem mode' do
39
- enter 'cont', -> do
40
- change_line_in_file(fullpath('post_mortem'), 7, 'z = 100')
41
- 'reload'
42
- end, 'l 7-7'
43
- debug_file 'post_mortem'
44
- check_output_includes '7: z = 100'
45
- end
46
- end
47
-
48
34
  end
@@ -35,14 +35,6 @@ class TestRepl < TestDsl::TestCase
35
35
  debug_file 'repl'
36
36
  end
37
37
  end
38
-
39
- describe 'Post Mortem' do
40
- it 'must work in post-mortem mode' do
41
- irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
42
- enter 'cont', 'break 12', 'irb'
43
- debug_file('post_mortem') { $state.line.must_equal 12 }
44
- end
45
- end
46
38
  end
47
39
 
48
40
  @has_pry = false
@@ -66,7 +58,7 @@ class TestRepl < TestDsl::TestCase
66
58
  end
67
59
  end
68
60
 
69
- describe 'Post Mortem' do
61
+ describe 'post-mortem' do
70
62
  it 'must work in post-mortem mode' do
71
63
  skip 'TODO'
72
64
  end
@@ -1,12 +1,6 @@
1
1
  require_relative 'test_helper'
2
2
 
3
3
  class TestRestart < TestDsl::TestCase
4
-
5
- def must_restart
6
- Byebug::RestartCommand.any_instance.unstub(:exec)
7
- Byebug::RestartCommand.any_instance.expects(:exec)
8
- end
9
-
10
4
  describe 'usual restarting' do
11
5
  temporary_change_const Byebug, 'BYEBUG_SCRIPT', 'byebug_script'
12
6
 
@@ -18,7 +12,7 @@ class TestRestart < TestDsl::TestCase
18
12
  end
19
13
 
20
14
  describe 'when arguments have spaces' do
21
- temporary_change_hash Byebug::Command.settings, :argv, ['argv1', 'argv 2']
15
+ temporary_change_hash Byebug.settings, :argv, ['argv1', 'argv 2']
22
16
 
23
17
  it 'must be correctly escaped' do
24
18
  Byebug::RestartCommand.any_instance.expects(:exec).with \
@@ -29,7 +23,7 @@ class TestRestart < TestDsl::TestCase
29
23
  end
30
24
 
31
25
  describe 'when arguments specified by set command' do
32
- temporary_change_hash Byebug::Command.settings, :argv, []
26
+ temporary_change_hash Byebug.settings, :argv, []
33
27
 
34
28
  it 'must specify arguments by "set" command' do
35
29
  Byebug::RestartCommand.any_instance.expects(:exec).
@@ -47,7 +41,7 @@ class TestRestart < TestDsl::TestCase
47
41
  temporary_change_const Byebug, 'BYEBUG_SCRIPT', 'byebug_script'
48
42
 
49
43
  describe 'with set args' do
50
- temporary_change_hash Byebug::Command.settings, :argv, ['argv']
44
+ temporary_change_hash Byebug.settings, :argv, ['argv']
51
45
 
52
46
  it 'must restart and show a message about reexecing' do
53
47
  must_restart
@@ -141,13 +135,4 @@ class TestRestart < TestDsl::TestCase
141
135
  end
142
136
  end
143
137
  end
144
-
145
- describe 'Post Mortem' do
146
- it 'must work in post-mortem mode' do
147
- must_restart
148
- enter 'cont', 'restart'
149
- debug_file 'post_mortem'
150
- end
151
- end
152
-
153
138
  end
@@ -1,6 +1,7 @@
1
1
  require_relative 'test_helper'
2
2
 
3
3
  class TestSave < TestDsl::TestCase
4
+
4
5
  describe 'successful saving' do
5
6
  let(:file_name) { 'save_output.txt' }
6
7
  let(:file_contents) { File.read(file_name) }
@@ -54,7 +55,6 @@ class TestSave < TestDsl::TestCase
54
55
  it 'must show a message about successful saving' do
55
56
  check_output_includes "Saved to '#{file_name}'"
56
57
  end
57
-
58
58
  end
59
59
 
60
60
  describe 'without filename' do
@@ -73,16 +73,4 @@ class TestSave < TestDsl::TestCase
73
73
  check_output_includes "Saved to '#{interface.restart_file}'"
74
74
  end
75
75
  end
76
-
77
- describe 'Post Mortem' do
78
- let(:file_name) { 'save_output.txt' }
79
- let(:file_contents) { File.read(file_name) }
80
- after { FileUtils.rm(file_name) }
81
- it 'must work in post-mortem mode' do
82
- enter 'cont', "save #{file_name}"
83
- debug_file 'post_mortem'
84
- file_contents.must_include 'set autoirb off'
85
- end
86
- end
87
-
88
76
  end
@@ -3,63 +3,63 @@ require_relative 'test_helper'
3
3
  class TestSet < TestDsl::TestCase
4
4
 
5
5
  describe 'setting to on' do
6
- temporary_change_hash Byebug::Command.settings, :autolist, 0
6
+ temporary_change_hash Byebug.settings, :autolist, 0
7
7
 
8
8
  it 'must set a setting to on' do
9
9
  enter 'set autolist on'
10
10
  debug_file 'set'
11
- Byebug::Command.settings[:autolist].must_equal 1
11
+ Byebug.settings[:autolist].must_equal 1
12
12
  end
13
13
 
14
14
  it 'must set a setting to on by 1' do
15
15
  enter 'set autolist 1'
16
16
  debug_file 'set'
17
- Byebug::Command.settings[:autolist].must_equal 1
17
+ Byebug.settings[:autolist].must_equal 1
18
18
  end
19
19
 
20
20
  it 'must set a setting to on by default' do
21
21
  enter 'set autolist'
22
22
  debug_file 'set'
23
- Byebug::Command.settings[:autolist].must_equal 1
23
+ Byebug.settings[:autolist].must_equal 1
24
24
  end
25
25
 
26
26
  it 'must set a setting using shortcut' do
27
27
  enter 'set autol'
28
28
  debug_file 'set'
29
- Byebug::Command.settings[:autolist].must_equal 1
29
+ Byebug.settings[:autolist].must_equal 1
30
30
  end
31
31
  end
32
32
 
33
33
  describe 'setting to off' do
34
- temporary_change_hash Byebug::Command.settings, :autolist, 1
34
+ temporary_change_hash Byebug.settings, :autolist, 1
35
35
 
36
36
  it 'must set a setting to off' do
37
37
  enter 'set autolist off'
38
38
  debug_file 'set'
39
- Byebug::Command.settings[:autolist].must_equal 0
39
+ Byebug.settings[:autolist].must_equal 0
40
40
  end
41
41
 
42
42
  it 'must set a setting to off by 0' do
43
43
  enter 'set autolist 0'
44
44
  debug_file 'set'
45
- Byebug::Command.settings[:autolist].must_equal 0
45
+ Byebug.settings[:autolist].must_equal 0
46
46
  end
47
47
 
48
48
  it 'must set a setting to off by "no" prefix' do
49
49
  enter 'set noautolist'
50
50
  debug_file 'set'
51
- Byebug::Command.settings[:autolist].must_equal 0
51
+ Byebug.settings[:autolist].must_equal 0
52
52
  end
53
53
 
54
54
  it 'must set a setting to off by "no" prefix and shortcut' do
55
55
  enter 'set noautol'
56
56
  debug_file 'set'
57
- Byebug::Command.settings[:autolist].must_equal 0
57
+ Byebug.settings[:autolist].must_equal 0
58
58
  end
59
59
  end
60
60
 
61
61
  describe 'messages' do
62
- temporary_change_hash Byebug::Command.settings, :autolist, 0
62
+ temporary_change_hash Byebug.settings, :autolist, 0
63
63
 
64
64
  it 'must show a message after setting' do
65
65
  enter 'set autolist on'
@@ -71,7 +71,7 @@ class TestSet < TestDsl::TestCase
71
71
  describe 'testing' do
72
72
  describe '$state' do
73
73
  describe 'when setting "testing" to on' do
74
- temporary_change_hash Byebug::Command.settings, :testing, false
74
+ temporary_change_hash Byebug.settings, :testing, false
75
75
 
76
76
  it 'must get set' do
77
77
  enter 'set testing', 'break 3', 'cont'
@@ -81,7 +81,7 @@ class TestSet < TestDsl::TestCase
81
81
  end
82
82
 
83
83
  describe 'when setting "testing" to off' do
84
- temporary_change_hash Byebug::Command.settings, :testing, true
84
+ temporary_change_hash Byebug.settings, :testing, true
85
85
 
86
86
  it 'must get unset' do
87
87
  enter 'set notesting', 'break 3', 'cont'
@@ -99,6 +99,12 @@ class TestSet < TestDsl::TestCase
99
99
  interface.history_save.must_equal true
100
100
  end
101
101
 
102
+ it 'must set history save to on when no param' do
103
+ enter 'set history save'
104
+ debug_file 'set'
105
+ interface.history_save.must_equal true
106
+ end
107
+
102
108
  it 'must show a message' do
103
109
  enter 'set history save on'
104
110
  debug_file 'set'
@@ -124,6 +130,12 @@ class TestSet < TestDsl::TestCase
124
130
  debug_file 'set'
125
131
  check_output_includes 'Byebug history size is 250'
126
132
  end
133
+
134
+ it 'must show an error message if no size provided' do
135
+ enter 'set history size'
136
+ debug_file 'set'
137
+ check_output_includes 'You need to specify the history size'
138
+ end
127
139
  end
128
140
 
129
141
  describe 'filename' do
@@ -141,29 +153,30 @@ class TestSet < TestDsl::TestCase
141
153
  debug_file 'set'
142
154
  check_output_includes "The command history file is \"#{filename}\""
143
155
  end
156
+
157
+ it 'must show an error message if no filenmae provided' do
158
+ enter 'set history filename'
159
+ debug_file 'set'
160
+ check_output_includes 'You need to specify a filename'
161
+ end
162
+
144
163
  end
145
164
 
146
165
  it 'must show an error message if used wrong subcommand' do
147
166
  enter 'set history bla 2'
148
167
  debug_file 'set'
149
168
  check_output_includes \
150
- 'Invalid history parameter bla. Should be "filename", "save" or "size".'
151
- end
152
-
153
- it 'must show an error message if provided only one argument' do
154
- enter 'set history save'
155
- debug_file 'set'
156
- check_output_includes 'Need two parameters for "set history"; got 1.'
169
+ 'Invalid history parameter bla. Should be "filename", "save" or "size"'
157
170
  end
158
171
  end
159
172
 
160
173
  describe 'width' do
161
- temporary_change_hash Byebug::Command.settings, :width, 20
174
+ temporary_change_hash Byebug.settings, :width, 20
162
175
 
163
176
  it 'must get correctly set' do
164
177
  enter 'set width 10'
165
178
  debug_file('set')
166
- Byebug::Command.settings[:width].must_equal 10
179
+ Byebug.settings[:width].must_equal 10
167
180
  end
168
181
  end
169
182
 
@@ -174,14 +187,4 @@ class TestSet < TestDsl::TestCase
174
187
  check_output_includes /List of "set" subcommands:/
175
188
  end
176
189
  end
177
-
178
- describe 'Post Mortem' do
179
- temporary_change_hash Byebug::Command.settings, :autolist, 0
180
-
181
- it 'must work in post-mortem mode' do
182
- enter 'cont', 'set autolist on'
183
- debug_file 'post_mortem'
184
- check_output_includes 'autolist is on.'
185
- end
186
- end
187
190
  end