byebug 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/GUIDE.md +2 -2
  4. data/LICENSE +3 -3
  5. data/README.md +5 -4
  6. data/byebug.gemspec +1 -1
  7. data/ext/byebug/byebug.c +20 -19
  8. data/lib/byebug.rb +2 -53
  9. data/lib/byebug/command.rb +9 -109
  10. data/lib/byebug/commands/breakpoints.rb +1 -1
  11. data/lib/byebug/commands/control.rb +20 -21
  12. data/lib/byebug/commands/display.rb +2 -3
  13. data/lib/byebug/commands/eval.rb +6 -16
  14. data/lib/byebug/commands/finish.rb +1 -1
  15. data/lib/byebug/commands/frame.rb +9 -9
  16. data/lib/byebug/commands/help.rb +2 -3
  17. data/lib/byebug/commands/history.rb +28 -0
  18. data/lib/byebug/commands/info.rb +3 -3
  19. data/lib/byebug/commands/list.rb +2 -13
  20. data/lib/byebug/commands/method.rb +5 -45
  21. data/lib/byebug/commands/reload.rb +1 -12
  22. data/lib/byebug/commands/repl.rb +6 -15
  23. data/lib/byebug/commands/save.rb +2 -7
  24. data/lib/byebug/commands/set.rb +45 -116
  25. data/lib/byebug/commands/show.rb +22 -126
  26. data/lib/byebug/commands/stepping.rb +1 -1
  27. data/lib/byebug/commands/trace.rb +14 -25
  28. data/lib/byebug/commands/variables.rb +3 -41
  29. data/lib/byebug/helper.rb +11 -42
  30. data/lib/byebug/history.rb +5 -13
  31. data/lib/byebug/processors/command_processor.rb +6 -6
  32. data/lib/byebug/setting.rb +82 -0
  33. data/lib/byebug/settings/autoeval.rb +20 -0
  34. data/lib/byebug/settings/autoirb.rb +19 -0
  35. data/lib/byebug/settings/autolist.rb +19 -0
  36. data/lib/byebug/settings/autoreload.rb +11 -0
  37. data/lib/byebug/settings/autosave.rb +11 -0
  38. data/lib/byebug/settings/basename.rb +7 -0
  39. data/lib/byebug/settings/callstyle.rb +15 -0
  40. data/lib/byebug/settings/forcestep.rb +11 -0
  41. data/lib/byebug/settings/fullpath.rb +11 -0
  42. data/lib/byebug/settings/histfile.rb +16 -0
  43. data/lib/byebug/settings/histsize.rb +18 -0
  44. data/lib/byebug/settings/linetrace.rb +15 -0
  45. data/lib/byebug/settings/listsize.rb +15 -0
  46. data/lib/byebug/settings/post_mortem.rb +15 -0
  47. data/lib/byebug/settings/stack_on_error.rb +7 -0
  48. data/lib/byebug/settings/testing.rb +7 -0
  49. data/lib/byebug/settings/tracing_plus.rb +7 -0
  50. data/lib/byebug/settings/verbose.rb +7 -0
  51. data/lib/byebug/settings/width.rb +29 -0
  52. data/lib/byebug/version.rb +1 -1
  53. data/test/breakpoints_test.rb +345 -324
  54. data/test/conditions_test.rb +61 -48
  55. data/test/continue_test.rb +38 -27
  56. data/test/debugger_alias_test.rb +5 -3
  57. data/test/display_test.rb +103 -92
  58. data/test/edit_test.rb +42 -34
  59. data/test/eval_test.rb +91 -75
  60. data/test/finish_test.rb +51 -40
  61. data/test/frame_test.rb +197 -184
  62. data/test/help_test.rb +47 -38
  63. data/test/history_test.rb +54 -0
  64. data/test/info_test.rb +306 -293
  65. data/test/interrupt_test.rb +44 -38
  66. data/test/kill_test.rb +40 -31
  67. data/test/list_test.rb +166 -133
  68. data/test/method_test.rb +67 -60
  69. data/test/post_mortem_test.rb +56 -48
  70. data/test/quit_test.rb +44 -35
  71. data/test/reload_test.rb +36 -24
  72. data/test/repl_test.rb +57 -47
  73. data/test/restart_test.rb +56 -69
  74. data/test/save_test.rb +62 -53
  75. data/test/set_test.rb +140 -118
  76. data/test/show_test.rb +68 -201
  77. data/test/source_test.rb +39 -29
  78. data/test/stepping_test.rb +163 -136
  79. data/test/support/test_dsl.rb +9 -11
  80. data/test/test_helper.rb +2 -7
  81. data/test/thread_test.rb +121 -107
  82. data/test/trace_test.rb +86 -83
  83. data/test/variables_test.rb +104 -98
  84. metadata +27 -86
  85. data/test/examples/breakpoint.rb +0 -6
  86. data/test/examples/breakpoint_deep.rb +0 -4
  87. data/test/examples/conditions.rb +0 -4
  88. data/test/examples/continue.rb +0 -5
  89. data/test/examples/display.rb +0 -5
  90. data/test/examples/edit.rb +0 -4
  91. data/test/examples/eval.rb +0 -4
  92. data/test/examples/finish.rb +0 -3
  93. data/test/examples/frame.rb +0 -4
  94. data/test/examples/frame_deep.rb +0 -1
  95. data/test/examples/gcd.rb +0 -15
  96. data/test/examples/hanoi.rb +0 -34
  97. data/test/examples/help.rb +0 -1
  98. data/test/examples/info.rb +0 -6
  99. data/test/examples/info2.rb +0 -3
  100. data/test/examples/interrupt.rb +0 -8
  101. data/test/examples/kill.rb +0 -2
  102. data/test/examples/list.rb +0 -23
  103. data/test/examples/method.rb +0 -4
  104. data/test/examples/post_mortem.rb +0 -4
  105. data/test/examples/primes.rb +0 -25
  106. data/test/examples/quit.rb +0 -2
  107. data/test/examples/reload.rb +0 -6
  108. data/test/examples/repl.rb +0 -6
  109. data/test/examples/restart.rb +0 -6
  110. data/test/examples/save.rb +0 -3
  111. data/test/examples/set.rb +0 -3
  112. data/test/examples/settings.rb +0 -1
  113. data/test/examples/show.rb +0 -1
  114. data/test/examples/source.rb +0 -3
  115. data/test/examples/stepping.rb +0 -8
  116. data/test/examples/stepping_raise_from_c_method.rb +0 -3
  117. data/test/examples/stepping_raise_from_ruby_method.rb +0 -3
  118. data/test/examples/test-triangle.rb +0 -14
  119. data/test/examples/thread.rb +0 -5
  120. data/test/examples/tmate.rb +0 -10
  121. data/test/examples/trace.rb +0 -8
  122. data/test/examples/tri3.rb +0 -6
  123. data/test/examples/triangle.rb +0 -13
  124. data/test/examples/variables.rb +0 -4
  125. data/test/timeout_test.rb +0 -9
@@ -1,59 +1,36 @@
1
- class RestartExample
2
- def concat_args(a, b, c)
3
- a.to_s + b.to_s + c.to_s
4
- end
5
- end
6
-
7
- class TestRestart < TestDsl::TestCase
8
- describe 'usual restarting' do
9
- temporary_change_const Byebug, 'BYEBUG_SCRIPT', 'byebug_script'
10
-
11
- it 'must be restarted with arguments' do
12
- Byebug::RestartCommand.any_instance.expects(:exec).
13
- with("#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT} 1 2 3")
14
- enter 'restart 1 2 3'
15
- debug_file 'restart'
1
+ module RestartTest
2
+ class Example
3
+ def concat_args(a, b, c)
4
+ a.to_s + b.to_s + c.to_s
16
5
  end
6
+ end
17
7
 
18
- describe 'when arguments have spaces' do
19
- temporary_change_hash Byebug.settings, :argv, ['argv1', 'argv 2']
20
-
21
- it 'must be correctly escaped' do
22
- Byebug::RestartCommand.any_instance.expects(:exec).with \
23
- "#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT} argv1 argv\\ 2"
24
- enter 'restart'
25
- debug_file 'restart'
8
+ class RestartTestCase < TestDsl::TestCase
9
+ before do
10
+ @example = -> do
11
+ byebug
12
+ a = ARGV[0]
13
+ b = ARGV[1]
14
+ c = ARGV[2]
15
+ Example.new.concat_args(a, b, c)
26
16
  end
27
17
  end
28
18
 
29
- describe 'when arguments specified by set command' do
30
- temporary_change_hash Byebug.settings, :argv, []
31
-
32
- it 'must specify arguments by "set" command' do
33
- Byebug::RestartCommand.any_instance.expects(:exec).
34
- with("#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT} 1 2 3")
35
- enter 'set args 1 2 3', 'restart'
36
- debug_file 'restart'
37
- end
19
+ def must_restart(cmd = nil)
20
+ expectation = Byebug::RestartCommand.any_instance.expects(:exec)
21
+ expectation = expectation.with(cmd) if cmd
22
+ expectation
38
23
  end
39
- end
40
-
41
- describe 'messaging' do
42
- before { enter 'restart' }
43
24
 
44
- describe 'reexecing' do
25
+ describe 'usual restarting' do
45
26
  temporary_change_const Byebug, 'BYEBUG_SCRIPT', 'byebug_script'
46
27
 
47
- describe 'with set args' do
48
- temporary_change_hash Byebug.settings, :argv, ['argv']
49
-
50
- it 'must restart and show a message about reexecing' do
51
- must_restart
52
- debug_file 'restart'
53
- check_output_includes \
54
- "Re exec'ing:\n" \
55
- "\t#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT} argv"
56
- end
28
+ it 'must be restarted with arguments' do
29
+ cmd = "#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT} 1 2 3"
30
+ must_restart(cmd)
31
+ enter 'restart 1 2 3'
32
+ debug_proc(@example)
33
+ check_output_includes "Re exec'ing:\n\t#{cmd}"
57
34
  end
58
35
  end
59
36
 
@@ -62,9 +39,9 @@ class TestRestart < TestDsl::TestCase
62
39
 
63
40
  it 'must not restart and show error messages instead' do
64
41
  must_restart.never
65
- debug_file 'restart'
66
- check_output_includes 'Don\'t know name of debugged program',
67
- interface.error_queue
42
+ enter 'restart'
43
+ debug_proc(@example)
44
+ check_error_includes 'Don\'t know name of debugged program'
68
45
  end
69
46
  end
70
47
 
@@ -73,32 +50,40 @@ class TestRestart < TestDsl::TestCase
73
50
 
74
51
  it 'must not restart' do
75
52
  must_restart.never
76
- debug_file 'restart'
53
+ enter 'restart'
54
+ debug_proc(@example)
77
55
  end
78
56
 
79
57
  it 'must show an error message' do
80
- debug_file 'restart'
81
- check_output_includes 'Ruby program blabla doesn\'t exist',
82
- interface.error_queue
58
+ enter 'restart'
59
+ debug_proc(@example)
60
+ check_error_includes 'Ruby program blabla doesn\'t exist'
83
61
  end
84
62
  end
85
63
 
86
- describe 'byebug runner script is not specified' do
87
- before { must_restart }
64
+ describe 'when no runner script specified' do
65
+ temporary_change_const Byebug, 'BYEBUG_SCRIPT', :__undefined__
88
66
 
89
- it 'must restart anyway' do
90
- debug_file 'restart'
91
- end
67
+ describe 'restarting' do
68
+ before do
69
+ must_restart
70
+ enter 'restart'
71
+ end
92
72
 
93
- it 'must show a warning message' do
94
- debug_file 'restart'
95
- check_output_includes 'Byebug was not called from the outset...'
96
- end
73
+ it 'must restart anyways' do
74
+ debug_proc(@example)
75
+ end
76
+
77
+ it 'must show a warning message' do
78
+ debug_proc(@example)
79
+ check_output_includes 'Byebug was not called from the outset...'
80
+ end
97
81
 
98
- it 'must show a warning message when prog script is not executable' do
99
- debug_file 'restart'
100
- check_output_includes "Ruby program #{Byebug::PROG_SCRIPT} not " \
101
- "executable... We'll add a call to Ruby."
82
+ it 'must show a warning message when prog script is not executable' do
83
+ debug_proc(@example)
84
+ check_output_includes "Ruby program #{Byebug::PROG_SCRIPT} not " \
85
+ "executable... We'll wrap it in a ruby call"
86
+ end
102
87
  end
103
88
  end
104
89
 
@@ -107,12 +92,14 @@ class TestRestart < TestDsl::TestCase
107
92
 
108
93
  it 'must restart anyway' do
109
94
  must_restart
110
- debug_file 'restart'
95
+ enter 'restart'
96
+ debug_proc(@example)
111
97
  end
112
98
 
113
99
  it 'must show an error message ' do
114
100
  must_restart
115
- debug_file 'restart'
101
+ enter 'restart'
102
+ debug_proc(@example)
116
103
  check_output_includes \
117
104
  'Failed to change initial directory /unexistent/path'
118
105
  end
@@ -1,74 +1,83 @@
1
- class TestSave < TestDsl::TestCase
2
-
3
- describe 'successful saving' do
4
- let(:file_name) { 'save_output.txt' }
5
- let(:file_contents) { File.read(file_name) }
1
+ module SaveTest
2
+ class SaveTestCase < TestDsl::TestCase
6
3
  before do
7
- enter 'break 2', 'break 3 if true', 'catch NoMethodError',
8
- 'display 2 + 3', 'display 5 + 6', "save #{file_name}"
9
- debug_file 'save'
10
- end
11
- after do
12
- File.delete(file_name)
13
- end
14
-
15
- it 'must save usual breakpoints' do
16
- file_contents.must_include "break #{fullpath('save')}:2"
17
- end
18
-
19
- it 'must save conditinal breakpoints' do
20
- file_contents.must_include "break #{fullpath('save')}:3 if true"
21
- end
22
-
23
- it 'must save catchpoints' do
24
- file_contents.must_include 'catch NoMethodError'
4
+ @example = -> do
5
+ byebug
6
+ a = 2
7
+ a = 3
8
+ end
25
9
  end
26
10
 
27
- it 'must save displays' do
28
- file_contents.must_include 'display 2 + 3'
29
- end
11
+ describe 'successful saving' do
12
+ let(:file_name) { 'save_output.txt' }
13
+ let(:file_contents) { File.read(file_name) }
14
+ before do
15
+ enter 'break 2', 'break 3 if true', 'catch NoMethodError',
16
+ 'display 2 + 3', 'display 5 + 6', "save #{file_name}"
17
+ debug_proc(@example)
18
+ end
19
+ after do
20
+ File.delete(file_name)
21
+ end
30
22
 
31
- describe 'saving settings' do
32
- it 'must save autoeval' do
33
- file_contents.must_include 'set autoeval on'
23
+ it 'must save usual breakpoints' do
24
+ file_contents.must_include "break #{__FILE__}:2"
34
25
  end
35
26
 
36
- it 'must save basename' do
37
- file_contents.must_include 'set basename off'
27
+ it 'must save conditinal breakpoints' do
28
+ file_contents.must_include "break #{__FILE__}:3 if true"
38
29
  end
39
30
 
40
- it 'must save testing' do
41
- file_contents.must_include 'set testing on'
31
+ it 'must save catchpoints' do
32
+ file_contents.must_include 'catch NoMethodError'
42
33
  end
43
34
 
44
- it 'must save autolist' do
45
- file_contents.must_include 'set autolist on'
35
+ it 'must save displays' do
36
+ file_contents.must_include 'display 2 + 3'
46
37
  end
47
38
 
48
- it 'must save autoirb' do
49
- file_contents.must_include 'set autoirb off'
39
+ describe 'saving settings' do
40
+ it 'must save autoeval' do
41
+ file_contents.must_include 'set autoeval true'
42
+ end
43
+
44
+ it 'must save basename' do
45
+ file_contents.must_include 'set basename false'
46
+ end
47
+
48
+ it 'must save testing' do
49
+ file_contents.must_include 'set testing true'
50
+ end
51
+
52
+ it 'must save autolist' do
53
+ file_contents.must_include 'set autolist true'
54
+ end
55
+
56
+ it 'must save autoirb' do
57
+ file_contents.must_include 'set autoirb false'
58
+ end
50
59
  end
51
- end
52
60
 
53
- it 'must show a message about successful saving' do
54
- check_output_includes "Saved to '#{file_name}'"
61
+ it 'must show a message about successful saving' do
62
+ check_output_includes "Saved to '#{file_name}'"
63
+ end
55
64
  end
56
- end
57
65
 
58
- describe 'without filename' do
59
- let(:file_contents) { File.read(interface.restart_file) }
60
- after { FileUtils.rm(interface.restart_file) }
66
+ describe 'without filename' do
67
+ let(:file_contents) { File.read(interface.restart_file) }
68
+ after { FileUtils.rm(interface.restart_file) }
61
69
 
62
- it 'must fabricate a filename if not provided' do
63
- enter 'save'
64
- debug_file 'save'
65
- file_contents.must_include 'set autoirb'
66
- end
70
+ it 'must fabricate a filename if not provided' do
71
+ enter 'save'
72
+ debug_proc(@example)
73
+ file_contents.must_include 'set autoirb'
74
+ end
67
75
 
68
- it 'must show a message where the file is saved' do
69
- enter 'save'
70
- debug_file 'save'
71
- check_output_includes "Saved to '#{interface.restart_file}'"
76
+ it 'must show a message where the file is saved' do
77
+ enter 'save'
78
+ debug_proc(@example)
79
+ check_output_includes "Saved to '#{interface.restart_file}'"
80
+ end
72
81
  end
73
82
  end
74
83
  end
@@ -1,161 +1,183 @@
1
- class TestSet < TestDsl::TestCase
1
+ module SetTest
2
+ class SetTestCase < TestDsl::TestCase
3
+ before do
4
+ @example = -> do
5
+ byebug
6
+ a = 2
7
+ a += 1
8
+ end
9
+ end
2
10
 
3
- [:autoeval, :autoreload, :autosave, :basename, :forcestep, :fullpath,
4
- :linetrace_plus, :stack_on_error].each do |setting|
11
+ [:autoeval, :autolist, :autoreload, :autosave, :basename, :forcestep,
12
+ :fullpath, :post_mortem, :stack_on_error, :testing, :linetrace,
13
+ :tracing_plus].each do |setting|
14
+ describe "setting boolean #{setting} to on" do
15
+ temporary_change_hash Byebug::Setting, setting, false
5
16
 
6
- describe "setting #{setting} to on" do
7
- temporary_change_hash Byebug.settings, setting, false
17
+ it "must set #{setting} to on using on" do
18
+ enter "set #{setting} on"
19
+ debug_proc(@example)
20
+ Byebug::Setting[setting].must_equal true
21
+ end
8
22
 
9
- it "must set #{setting} to on using on" do
10
- enter "set #{setting} on"
11
- debug_file 'set'
12
- Byebug.settings[setting].must_equal true
13
- end
23
+ it "must set #{setting} to on using 1" do
24
+ enter "set #{setting} 1"
25
+ debug_proc(@example)
26
+ Byebug::Setting[setting].must_equal true
27
+ end
14
28
 
15
- it "must set #{setting} to on using 1" do
16
- enter "set #{setting} 1"
17
- debug_file 'set'
18
- Byebug.settings[setting].must_equal true
29
+ it "must set #{setting} to on by default" do
30
+ enter "set #{setting}"
31
+ debug_proc(@example)
32
+ Byebug::Setting[setting].must_equal true
33
+ end
19
34
  end
20
35
 
21
- it "must set #{setting} to on by default" do
22
- enter "set #{setting}"
23
- debug_file 'set'
24
- Byebug.settings[setting].must_equal true
25
- end
36
+ describe "setting boolean #{setting} to off" do
37
+ temporary_change_hash Byebug::Setting, setting, true
26
38
 
27
- it "must set #{setting} using shortcut" do
28
- skip 'it for now until I make it work'
29
- enter "set autol"
30
- debug_file 'set'
31
- Byebug.settings[setting].must_equal 1
32
- end
33
- end
39
+ it "must set #{setting} to off using off" do
40
+ enter "set #{setting} off"
41
+ debug_proc(@example)
42
+ Byebug::Setting[setting].must_equal false
43
+ end
34
44
 
35
- describe "setting #{setting} to off" do
36
- temporary_change_hash Byebug.settings, setting, true
45
+ it "must set #{setting} to on using 0" do
46
+ enter "set #{setting} 0"
47
+ debug_proc(@example)
48
+ Byebug::Setting[setting].must_equal false
49
+ end
37
50
 
38
- it "must set #{setting} to off using off" do
39
- enter "set #{setting} off"
40
- debug_file 'set'
41
- Byebug.settings[setting].must_equal false
51
+ it "must set #{setting} to off using 'no' prefix" do
52
+ enter "set no#{setting}"
53
+ debug_proc(@example)
54
+ Byebug::Setting[setting].must_equal false
55
+ end
42
56
  end
57
+ end
43
58
 
44
- it "must set #{setting} to on using 0" do
45
- enter "set #{setting} 0"
46
- debug_file 'set'
47
- Byebug.settings[setting].must_equal false
48
- end
59
+ describe 'shortcuts' do
60
+ describe 'setting' do
61
+ temporary_change_hash Byebug::Setting, :autosave, false
49
62
 
50
- it "must set #{setting} to off using 'no' prefix" do
51
- enter "set no#{setting}"
52
- debug_file 'set'
53
- Byebug.settings[setting].must_equal false
54
- end
63
+ it 'must set setting if shortcut not ambiguous' do
64
+ enter 'set autos'
65
+ debug_proc(@example)
66
+ Byebug::Setting[:autosave].must_equal true
67
+ end
55
68
 
56
- it "must set #{setting} off using 'no' prefix and shortcut" do
57
- skip 'it for now until I make it work'
58
- enter 'set noautol'
59
- debug_file 'set'
60
- Byebug.settings[setting].must_equal 0
69
+ it 'must not set setting if shortcut is ambiguous' do
70
+ enter 'set auto'
71
+ debug_proc(@example)
72
+ Byebug::Setting[:autosave].must_equal false
73
+ end
61
74
  end
62
- end
63
- end
64
75
 
65
- describe 'messages' do
66
- temporary_change_hash Byebug.settings, :autolist, 0
76
+ describe 'unsetting' do
77
+ temporary_change_hash Byebug::Setting, :autosave, true
78
+
79
+ it 'must unset setting if shortcut not ambiguous' do
80
+ enter 'set noautos'
81
+ debug_proc(@example)
82
+ Byebug::Setting[:autosave].must_equal false
83
+ end
67
84
 
68
- it 'must show a message after setting' do
69
- enter 'set autolist on'
70
- debug_file 'set'
71
- check_output_includes 'autolist is on.'
85
+ it 'must not set setting to off if shortcut ambiguous' do
86
+ enter 'set noauto'
87
+ debug_proc(@example)
88
+ Byebug::Setting[:autosave].must_equal true
89
+ end
90
+ end
72
91
  end
73
- end
74
92
 
75
- describe 'testing' do
76
- describe 'state' do
77
- describe 'when setting "testing" to on' do
78
- temporary_change_hash Byebug.settings, :testing, false
93
+ describe 'testing' do
94
+ describe 'state' do
95
+ describe 'when setting "testing" to on' do
96
+ temporary_change_hash Byebug::Setting, :testing, false
79
97
 
80
- it 'must get set' do
81
- enter 'set testing', 'break 3', 'cont'
82
- debug_file('set') {
83
- state.must_be_kind_of Byebug::CommandProcessor::State }
98
+ it 'must get set' do
99
+ enter 'set testing', 'break 7', 'cont'
100
+ debug_proc(@example) {
101
+ state.must_be_kind_of Byebug::CommandProcessor::State }
102
+ end
84
103
  end
85
- end
86
104
 
87
- describe 'when setting "testing" to off' do
88
- temporary_change_hash Byebug.settings, :testing, true
105
+ describe 'when setting "testing" to off' do
106
+ temporary_change_hash Byebug::Setting, :testing, true
89
107
 
90
- it 'must get unset' do
91
- enter 'set notesting', 'break 3', 'cont'
92
- debug_file('set') { state.must_be_nil }
108
+ it 'must get unset' do
109
+ enter 'set notesting', 'break 7', 'cont'
110
+ debug_proc(@example) { state.must_be_nil }
111
+ end
93
112
  end
94
113
  end
95
114
  end
96
- end
97
115
 
98
- describe 'histsize' do
99
- after { Byebug::History.max_size = Byebug::History::DEFAULT_MAX_SIZE }
116
+ describe 'histsize' do
117
+ temporary_change_hash Byebug::Setting, :histsize, 1
100
118
 
101
- it 'must set maximum history size' do
102
- enter 'set histsize 250'
103
- debug_file 'set'
104
- Byebug::History.max_size.must_equal 250
105
- end
119
+ it 'must set maximum history size' do
120
+ enter 'set histsize 250'
121
+ debug_proc(@example)
122
+ Byebug::Setting[:histsize].must_equal 250
123
+ end
106
124
 
107
- it 'must show a message' do
108
- enter 'set histsize 250'
109
- debug_file 'set'
110
- check_output_includes "Byebug history's maximum size is 250"
111
- end
125
+ it 'must show a message' do
126
+ enter 'set histsize 250'
127
+ debug_proc(@example)
128
+ check_output_includes "Maximum size of byebug's command history is 250"
129
+ end
112
130
 
113
- it 'must show an error message if no size provided' do
114
- enter 'set histsize'
115
- debug_file 'set'
116
- check_output_includes 'You need to specify the history size'
131
+ it 'must show an error message if no size provided' do
132
+ enter 'set histsize'
133
+ debug_proc(@example)
134
+ check_output_includes 'You must specify a value for setting :histsize'
135
+ end
117
136
  end
118
- end
119
137
 
120
- describe 'histfile' do
121
- let(:filename) { File.expand_path('./.custom-byebug-hist') }
138
+ describe 'histfile' do
139
+ let(:filename) { File.expand_path('.custom-byebug-hist') }
122
140
 
123
- after { Byebug::History.file = Byebug::History::DEFAULT_FILE }
141
+ temporary_change_hash Byebug::Setting, :histfile, File.expand_path('.byebug-hist')
124
142
 
125
- it 'must set history filename' do
126
- enter "set histfile #{filename}"
127
- debug_file 'set'
128
- Byebug::History.file.must_equal filename
129
- end
143
+ it 'must set history filename' do
144
+ enter "set histfile #{filename}"
145
+ debug_proc(@example)
146
+ Byebug::Setting[:histfile].must_equal filename
147
+ end
130
148
 
131
- it 'must show a message' do
132
- enter "set histfile #{filename}"
133
- debug_file 'set'
134
- check_output_includes "The command history file is \"#{filename}\""
135
- end
149
+ it 'must show a message' do
150
+ enter "set histfile #{filename}"
151
+ debug_proc(@example)
152
+ check_output_includes "The command history file is #{filename}"
153
+ end
136
154
 
137
- it 'must show an error message if no filename provided' do
138
- enter 'set histfile'
139
- debug_file 'set'
140
- check_output_includes 'You need to specify a filename'
155
+ it 'must show an error message if no filename provided' do
156
+ enter 'set histfile'
157
+ debug_proc(@example)
158
+ check_output_includes 'You must specify a value for setting :histfile'
159
+ end
141
160
  end
142
- end
143
161
 
144
- describe 'width' do
145
- temporary_change_hash Byebug.settings, :width, 20
162
+ [:listsize, :width].each do |setting|
163
+ describe "setting integer setting #{setting}" do
164
+ temporary_change_hash Byebug::Setting, setting, 80
146
165
 
147
- it 'must get correctly set' do
148
- enter 'set width 10'
149
- debug_file('set')
150
- Byebug.settings[:width].must_equal 10
166
+ it 'must get correctly set' do
167
+ enter "set #{setting} 120"
168
+ debug_proc(@example)
169
+ Byebug::Setting[setting].must_equal 120
170
+ end
171
+ end
151
172
  end
152
- end
153
173
 
154
- describe 'Help' do
155
- it 'must show help when typing just "set"' do
156
- enter 'set', 'cont'
157
- debug_file 'set'
158
- check_output_includes(/List of "set" subcommands:/)
174
+ describe 'Help' do
175
+ it 'must show help when typing just "set"' do
176
+ enter 'set', 'cont'
177
+ debug_proc(@example)
178
+ check_output_includes(/Modifies parts of byebug environment./)
179
+ check_output_includes(/List of settings supported in byebug/)
180
+ end
159
181
  end
160
182
  end
161
183
  end