byebug 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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