byebug 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +125 -99
  4. data/CONTRIBUTING.md +4 -6
  5. data/GUIDE.md +42 -20
  6. data/Gemfile +5 -3
  7. data/README.md +2 -3
  8. data/Rakefile +11 -7
  9. data/bin/byebug +2 -252
  10. data/byebug.gemspec +7 -4
  11. data/ext/byebug/byebug.c +17 -18
  12. data/ext/byebug/byebug.h +4 -5
  13. data/ext/byebug/context.c +37 -39
  14. data/ext/byebug/threads.c +39 -18
  15. data/lib/byebug.rb +2 -110
  16. data/lib/byebug/attacher.rb +23 -0
  17. data/lib/byebug/breakpoint.rb +60 -0
  18. data/lib/byebug/command.rb +62 -70
  19. data/lib/byebug/commands/break.rb +24 -24
  20. data/lib/byebug/commands/catchpoint.rb +18 -10
  21. data/lib/byebug/commands/condition.rb +18 -17
  22. data/lib/byebug/commands/continue.rb +17 -9
  23. data/lib/byebug/commands/delete.rb +19 -13
  24. data/lib/byebug/commands/display.rb +19 -53
  25. data/lib/byebug/commands/edit.rb +7 -4
  26. data/lib/byebug/commands/enable_disable.rb +130 -0
  27. data/lib/byebug/commands/eval.rb +40 -22
  28. data/lib/byebug/commands/finish.rb +13 -4
  29. data/lib/byebug/commands/frame.rb +65 -45
  30. data/lib/byebug/commands/help.rb +17 -18
  31. data/lib/byebug/commands/history.rb +14 -8
  32. data/lib/byebug/commands/info.rb +160 -182
  33. data/lib/byebug/commands/interrupt.rb +4 -1
  34. data/lib/byebug/commands/irb.rb +30 -0
  35. data/lib/byebug/commands/kill.rb +7 -8
  36. data/lib/byebug/commands/list.rb +71 -66
  37. data/lib/byebug/commands/method.rb +14 -6
  38. data/lib/byebug/commands/pry.rb +35 -0
  39. data/lib/byebug/commands/quit.rb +9 -6
  40. data/lib/byebug/commands/reload.rb +5 -2
  41. data/lib/byebug/commands/restart.rb +13 -9
  42. data/lib/byebug/commands/save.rb +17 -17
  43. data/lib/byebug/commands/set.rb +16 -15
  44. data/lib/byebug/commands/show.rb +10 -11
  45. data/lib/byebug/commands/source.rb +11 -5
  46. data/lib/byebug/commands/stepping.rb +38 -24
  47. data/lib/byebug/commands/threads.rb +45 -31
  48. data/lib/byebug/commands/trace.rb +22 -9
  49. data/lib/byebug/commands/undisplay.rb +45 -0
  50. data/lib/byebug/commands/variables.rb +83 -27
  51. data/lib/byebug/context.rb +25 -22
  52. data/lib/byebug/core.rb +82 -0
  53. data/lib/byebug/helper.rb +37 -28
  54. data/lib/byebug/history.rb +8 -4
  55. data/lib/byebug/interface.rb +12 -17
  56. data/lib/byebug/interfaces/local_interface.rb +11 -8
  57. data/lib/byebug/interfaces/remote_interface.rb +11 -8
  58. data/lib/byebug/interfaces/script_interface.rb +9 -6
  59. data/lib/byebug/options.rb +46 -0
  60. data/lib/byebug/processor.rb +7 -1
  61. data/lib/byebug/processors/command_processor.rb +135 -125
  62. data/lib/byebug/processors/control_command_processor.rb +23 -23
  63. data/lib/byebug/remote.rb +17 -26
  64. data/lib/byebug/runner.rb +100 -0
  65. data/lib/byebug/setting.rb +33 -8
  66. data/lib/byebug/settings/autoeval.rb +5 -15
  67. data/lib/byebug/settings/autoirb.rb +4 -1
  68. data/lib/byebug/settings/autolist.rb +5 -2
  69. data/lib/byebug/settings/autoreload.rb +5 -2
  70. data/lib/byebug/settings/autosave.rb +6 -2
  71. data/lib/byebug/settings/basename.rb +7 -2
  72. data/lib/byebug/settings/callstyle.rb +4 -1
  73. data/lib/byebug/settings/forcestep.rb +6 -3
  74. data/lib/byebug/settings/fullpath.rb +5 -2
  75. data/lib/byebug/settings/histfile.rb +5 -3
  76. data/lib/byebug/settings/histsize.rb +5 -3
  77. data/lib/byebug/settings/linetrace.rb +4 -1
  78. data/lib/byebug/settings/listsize.rb +5 -1
  79. data/lib/byebug/settings/post_mortem.rb +21 -13
  80. data/lib/byebug/settings/stack_on_error.rb +6 -2
  81. data/lib/byebug/settings/testing.rb +6 -1
  82. data/lib/byebug/settings/tracing_plus.rb +5 -1
  83. data/lib/byebug/settings/verbose.rb +13 -2
  84. data/lib/byebug/settings/width.rb +4 -1
  85. data/lib/byebug/version.rb +1 -1
  86. data/test/{break_test.rb → commands/break_test.rb} +41 -53
  87. data/test/{condition_test.rb → commands/condition_test.rb} +14 -14
  88. data/test/{continue_test.rb → commands/continue_test.rb} +0 -0
  89. data/test/{delete_test.rb → commands/delete_test.rb} +2 -2
  90. data/test/commands/display_test.rb +37 -0
  91. data/test/{edit_test.rb → commands/edit_test.rb} +0 -0
  92. data/test/{eval_test.rb → commands/eval_test.rb} +1 -0
  93. data/test/{finish_test.rb → commands/finish_test.rb} +11 -1
  94. data/test/{frame_test.rb → commands/frame_test.rb} +12 -16
  95. data/test/{help_test.rb → commands/help_test.rb} +21 -4
  96. data/test/{history_test.rb → commands/history_test.rb} +0 -0
  97. data/test/{info_test.rb → commands/info_test.rb} +5 -55
  98. data/test/{interrupt_test.rb → commands/interrupt_test.rb} +0 -0
  99. data/test/commands/irb_test.rb +28 -0
  100. data/test/{kill_test.rb → commands/kill_test.rb} +1 -1
  101. data/test/{list_test.rb → commands/list_test.rb} +1 -1
  102. data/test/{method_test.rb → commands/method_test.rb} +0 -0
  103. data/test/{post_mortem_test.rb → commands/post_mortem_test.rb} +6 -10
  104. data/test/{pry_test.rb → commands/pry_test.rb} +4 -13
  105. data/test/{quit_test.rb → commands/quit_test.rb} +4 -4
  106. data/test/{reload_test.rb → commands/reload_test.rb} +0 -0
  107. data/test/{restart_test.rb → commands/restart_test.rb} +6 -0
  108. data/test/{save_test.rb → commands/save_test.rb} +2 -2
  109. data/test/{set_test.rb → commands/set_test.rb} +9 -2
  110. data/test/{show_test.rb → commands/show_test.rb} +1 -1
  111. data/test/{source_test.rb → commands/source_test.rb} +3 -3
  112. data/test/{stepping_test.rb → commands/stepping_test.rb} +44 -35
  113. data/test/{thread_test.rb → commands/thread_test.rb} +0 -0
  114. data/test/{trace_test.rb → commands/trace_test.rb} +0 -0
  115. data/test/{display_test.rb → commands/undisplay_test.rb} +7 -45
  116. data/test/{variables_test.rb → commands/variables_test.rb} +10 -1
  117. data/test/debugger_alias_test.rb +2 -2
  118. data/test/runner_test.rb +127 -0
  119. data/test/support/matchers.rb +27 -25
  120. data/test/support/test_interface.rb +9 -5
  121. data/test/support/utils.rb +96 -101
  122. data/test/test_helper.rb +32 -20
  123. metadata +93 -68
  124. data/lib/byebug/commands/enable.rb +0 -154
  125. data/lib/byebug/commands/repl.rb +0 -126
  126. data/test/irb_test.rb +0 -47
  127. data/test/support/breakpoint.rb +0 -13
@@ -13,28 +13,28 @@ module Byebug
13
13
  QuitCommand.any_instance.expects(:exit!)
14
14
  enter 'quit', 'y'
15
15
  debug_proc(@example)
16
- check_output_includes 'Really quit? (y/n)', interface.confirm_queue
16
+ check_confirm_includes 'Really quit? (y/n)'
17
17
  end
18
18
 
19
19
  def test_does_not_quit_if_user_did_not_confirm
20
20
  QuitCommand.any_instance.expects(:exit!).never
21
21
  enter 'quit', 'n'
22
22
  debug_proc(@example)
23
- check_output_includes 'Really quit? (y/n)', interface.confirm_queue
23
+ check_confirm_includes 'Really quit? (y/n)'
24
24
  end
25
25
 
26
26
  def test_quits_inmediately_if_used_with_bang
27
27
  QuitCommand.any_instance.expects(:exit!)
28
28
  enter 'quit!'
29
29
  debug_proc(@example)
30
- check_output_doesnt_include 'Really quit? (y/n)', interface.confirm_queue
30
+ check_confirm_doesnt_include 'Really quit? (y/n)'
31
31
  end
32
32
 
33
33
  def test_quits_inmediately_if_used_with_unconditionally
34
34
  QuitCommand.any_instance.expects(:exit!)
35
35
  enter 'quit unconditionally'
36
36
  debug_proc(@example)
37
- check_output_doesnt_include 'Really quit? (y/n)', interface.confirm_queue
37
+ check_confirm_doesnt_include 'Really quit? (y/n)'
38
38
  end
39
39
 
40
40
  def test_closes_interface_before_quitting
@@ -15,9 +15,15 @@ module Byebug
15
15
  RestartExample.new.concat_args(a, b, c)
16
16
  end
17
17
 
18
+ @old_prog_script = Byebug::PROG_SCRIPT if defined?(Byebug::PROG_SCRIPT)
19
+
18
20
  super
19
21
  end
20
22
 
23
+ def after
24
+ force_set_const(Byebug, 'PROG_SCRIPT', @old_prog_script)
25
+ end
26
+
21
27
  def must_restart(cmd = nil)
22
28
  expectation = RestartCommand.any_instance.expects(:exec)
23
29
  expectation = expectation.with(cmd) if cmd
@@ -54,14 +54,14 @@ module Byebug
54
54
  enter 'save'
55
55
  debug_proc(@example)
56
56
  assert_includes File.read(interface.restart_file), 'set autoirb false'
57
- FileUtils.rm(interface.restart_file)
57
+ File.delete(interface.restart_file)
58
58
  end
59
59
 
60
60
  def test_save_without_a_filename_shows_a_message_with_the_file_used
61
61
  enter 'save'
62
62
  debug_proc(@example)
63
63
  check_output_includes "Saved to '#{interface.restart_file}'"
64
- FileUtils.rm(interface.restart_file)
64
+ File.delete(interface.restart_file)
65
65
  end
66
66
  end
67
67
  end
@@ -96,7 +96,7 @@ module Byebug
96
96
  def test_set_histsize_shows_an_error_message_if_no_size_is_provided
97
97
  enter 'set histsize'
98
98
  debug_proc(@example)
99
- check_output_includes 'You must specify a value for setting :histsize'
99
+ check_error_includes 'You must specify a value for setting :histsize'
100
100
  end
101
101
 
102
102
  def test_set_histfile_sets_command_history_file
@@ -110,7 +110,7 @@ module Byebug
110
110
  def test_set_histfile_shows_an_error_message_if_no_filename_is_provided
111
111
  enter 'set histfile'
112
112
  debug_proc(@example)
113
- check_output_includes 'You must specify a value for setting :histfile'
113
+ check_error_includes 'You must specify a value for setting :histfile'
114
114
  end
115
115
 
116
116
  [:listsize, :width].each do |set|
@@ -122,6 +122,13 @@ module Byebug
122
122
  end
123
123
  end
124
124
 
125
+ def test_verbose_prints_tracepoint_api_event_information
126
+ enter 'set verbose'
127
+ debug_proc(@example)
128
+ assert_equal true, Byebug.verbose?
129
+ Byebug.verbose = false
130
+ end
131
+
125
132
  def test_set_without_arguments_shows_help_for_set_command
126
133
  enter 'set'
127
134
  debug_proc(@example)
@@ -48,7 +48,7 @@ module Byebug
48
48
  def test_show_unknown_setting
49
49
  enter 'show bla'
50
50
  debug_proc(@example)
51
- check_output_includes 'Unknown setting :bla'
51
+ check_error_includes 'Unknown setting :bla'
52
52
  end
53
53
 
54
54
  def test_show_histfile
@@ -16,7 +16,7 @@ module Byebug
16
16
  end
17
17
 
18
18
  def teardown
19
- FileUtils.rm('source_example.txt')
19
+ File.delete('source_example.txt')
20
20
  end
21
21
 
22
22
  %w(source so).each do |cmd_alias|
@@ -38,8 +38,8 @@ module Byebug
38
38
  define_method(:"test_#{cmd_alias}_without_arguments_shows_help") do
39
39
  enter 'source'
40
40
  debug_proc(@example)
41
- check_output_includes \
42
- "source FILE\texecutes a file containing byebug commands"
41
+ check_output_includes(
42
+ /Executes file <file> containing byebug commands./)
43
43
  end
44
44
  end
45
45
  end
@@ -47,9 +47,14 @@ module Byebug
47
47
  enter 's'
48
48
  debug_proc(@example) { assert_equal 14, state.line }
49
49
  end
50
+
51
+ def test_next_does_not_stop_at_byebug_internal_frames
52
+ enter 'set forcestep', 'next 2'
53
+ debug_proc(@example) { refute_match(/byebug.test.support/, state.file) }
54
+ end
50
55
  end
51
56
 
52
- class AdvancedStepping < TestCase
57
+ class AdvancedSteppingTestCase < TestCase
53
58
  def setup
54
59
  @example = -> do
55
60
  byebug
@@ -101,7 +106,7 @@ module Byebug
101
106
 
102
107
  def test_next_goes_the_specified_number_of_lines_forward_by_default
103
108
  enter 'set forcestep', 'next 2'
104
- debug_proc(@example) { assert_equal 58, state.line }
109
+ debug_proc(@example) { assert_equal 63, state.line }
105
110
  end
106
111
 
107
112
  def test_next_informs_when_not_staying_in_the_same_frame
@@ -113,35 +118,37 @@ module Byebug
113
118
 
114
119
  def step_goes_the_specified_number_of_statements_forward_by_default
115
120
  enter 'set forcestep', 'step 2'
116
- debug_proc(@example) { assert_equal 58, state.line }
121
+ debug_proc(@example) { assert_equal 63, state.line }
117
122
  end
118
123
 
119
124
  def test_next_steps_OVER_blocks
120
- enter 'break 58', 'cont', 'next'
121
- debug_proc(@example) { assert_equal 62, state.line }
125
+ enter 'break 63', 'cont', 'next'
126
+ debug_proc(@example) { assert_equal 67, state.line }
122
127
  end
123
128
 
124
129
  def test_step_steps_INTO_blocks
125
- enter 'break 58', 'cont', 'step'
126
- debug_proc(@example) { assert_equal 59, state.line }
130
+ enter 'break 63', 'cont', 'step'
131
+ debug_proc(@example) { assert_equal 64, state.line }
127
132
  end
133
+ end
128
134
 
129
- class RaiseFromCMethodExample
130
- def a
131
- b
132
- rescue NameError
133
- 1
134
- end
135
+ class RaiseFromCMethodExample
136
+ def a
137
+ b
138
+ rescue NameError
139
+ 1
140
+ end
135
141
 
136
- def b
137
- c
138
- end
142
+ def b
143
+ c
144
+ end
139
145
 
140
- def c
141
- d
142
- end
146
+ def c
147
+ d
143
148
  end
149
+ end
144
150
 
151
+ class RaiseFromCMethodTestCase < TestCase
145
152
  def test_next_steps_over_rescue_when_raising_from_c_method
146
153
  example_raise = -> do
147
154
  byebug
@@ -149,26 +156,28 @@ module Byebug
149
156
  RaiseFromCMethodExample.new.a
150
157
  end
151
158
 
152
- enter 'break 131', 'cont', 'next'
153
- debug_proc(example_raise) { assert_equal 133, state.line }
159
+ enter 'break 137', 'cont', 'next'
160
+ debug_proc(example_raise) { assert_equal 139, state.line }
154
161
  end
162
+ end
155
163
 
156
- class RaiseFromRubyMethodExample
157
- def a
158
- b
159
- rescue
160
- 1
161
- end
164
+ class RaiseFromRubyMethodExample
165
+ def a
166
+ b
167
+ rescue
168
+ 1
169
+ end
162
170
 
163
- def b
164
- c
165
- end
171
+ def b
172
+ c
173
+ end
166
174
 
167
- def c
168
- raise 'bang'
169
- end
175
+ def c
176
+ raise 'bang'
170
177
  end
178
+ end
171
179
 
180
+ class RaiseFromRubyMethodTestCase < TestCase
172
181
  def test_next_steps_over_rescue_when_raising_from_ruby_method
173
182
  example_raise = -> do
174
183
  byebug
@@ -176,8 +185,8 @@ module Byebug
176
185
  RaiseFromRubyMethodExample.new.a
177
186
  end
178
187
 
179
- enter 'break 158', 'cont', 'next'
180
- debug_proc(example_raise) { assert_equal 160, state.line }
188
+ enter 'break 166', 'cont', 'next'
189
+ debug_proc(example_raise) { assert_equal 168, state.line }
181
190
  end
182
191
  end
183
192
  end
@@ -1,40 +1,4 @@
1
1
  module Byebug
2
- class DisplayTestCase < TestCase
3
- def setup
4
- @example = -> do
5
- d = 0
6
- byebug
7
- d = d + 3
8
- d = d + 6
9
- end
10
-
11
- super
12
- end
13
-
14
- def test_shows_expressions
15
- enter 'display d + 1'
16
- debug_proc(@example)
17
- check_output_includes '1: ', 'd + 1 = 1'
18
- end
19
-
20
- def test_works_when_using_a_shortcut
21
- enter 'disp d + 1'
22
- debug_proc(@example)
23
- check_output_includes '1: ', 'd + 1 = 1'
24
- end
25
-
26
- def test_saves_displayed_expressions
27
- enter 'display d + 1'
28
- debug_proc(@example) { assert_equal [[true, 'd + 1']], state.display }
29
- end
30
-
31
- def test_displays_all_expressions_available
32
- enter 'display d', 'display d + 1', 'display'
33
- debug_proc(@example)
34
- check_output_includes '1: ', 'd = 0', '2: ', 'd + 1 = 1'
35
- end
36
- end
37
-
38
2
  class UndisplayTestCase < TestCase
39
3
  def setup
40
4
  @example = -> do
@@ -50,8 +14,7 @@ module Byebug
50
14
  def test_asks_for_confirmation
51
15
  enter 'display d', 'display d + 1', 'undisplay'
52
16
  debug_proc(@example)
53
- check_output_includes \
54
- 'Clear all expressions? (y/n)', interface.confirm_queue
17
+ check_confirm_includes 'Clear all expressions? (y/n)'
55
18
  end
56
19
 
57
20
  def test_removes_all_expressions_from_list_if_confirmed
@@ -59,7 +22,7 @@ module Byebug
59
22
  debug_proc(@example) do
60
23
  assert_equal [[false, 'd'], [false, 'd + 1']], state.display
61
24
  end
62
- check_output_doesnt_include '1: ', 'd = 3', '2: ', 'd + 1 = 4'
25
+ check_output_doesnt_include '1: d = 3', '2: d + 1 = 4'
63
26
  end
64
27
 
65
28
  def test_does_not_remove_all_expressions_from_list_unless_confirmed
@@ -68,7 +31,7 @@ module Byebug
68
31
  assert_equal [[true, 'd'], [true, 'd + 1']], state.display
69
32
  end
70
33
 
71
- check_output_includes '1: ', 'd = 0', '2: ', 'd + 1 = 1'
34
+ check_output_includes '1: d = 0', '2: d + 1 = 1'
72
35
  end
73
36
 
74
37
  def test_marks_specific_expression_from_list_as_inactive
@@ -82,8 +45,8 @@ module Byebug
82
45
  def test_displays_only_the_active_position
83
46
  enter 'display d', 'display d + 1', 'undisplay 1', 'next'
84
47
  debug_proc(@example)
85
- check_output_includes '2: ', 'd + 1 = 4'
86
- check_output_doesnt_include '1: ', 'd = 3'
48
+ check_output_includes '2: d + 1 = 4'
49
+ check_output_doesnt_include '1: d = 3'
87
50
  end
88
51
 
89
52
  def test_disable_display_removes_the_expression_from_display_list
@@ -94,14 +57,13 @@ module Byebug
94
57
  def test_disable_display_shows_an_error_if_no_displays_are_set
95
58
  enter 'disable display 1'
96
59
  debug_proc(@example)
97
- check_output_includes \
98
- 'No display expressions have been set', interface.error_queue
60
+ check_error_includes 'No display expressions have been set'
99
61
  end
100
62
 
101
63
  def test_disable_display_shows_an_error_if_theres_no_such_display_position
102
64
  enter 'display d', 'disable display 4'
103
65
  debug_proc(@example)
104
- check_output_includes \
66
+ check_error_includes \
105
67
  '"disable display" argument "4" needs to be at most 1'
106
68
  end
107
69
 
@@ -30,7 +30,7 @@ module Byebug
30
30
  super
31
31
  end
32
32
 
33
- # we check a class minitest variable... brittle but ok for now
33
+ # TODO: we check a class minitest variable... brittle...
34
34
  ['var class', 'v cl'].each do |cmd_alias|
35
35
  define_method(:"test_#{cmd_alias}_shows_class_variables") do
36
36
  enter cmd_alias
@@ -92,5 +92,14 @@ module Byebug
92
92
  debug_proc(@example)
93
93
  check_output_includes 'a => 4', 'b => nil', 'i => 1'
94
94
  end
95
+
96
+ # TODO: class variables not currently checked
97
+ ['var all', 'v a'].each do |cmd_alias|
98
+ define_method(:"test_#{cmd_alias}_shows_all_variables") do
99
+ enter 'break 15', 'cont', cmd_alias
100
+ debug_proc(@example)
101
+ check_output_includes '$VERBOSE = true', '@inst_a = 1', 'a => 4'
102
+ end
103
+ end
95
104
  end
96
105
  end
@@ -1,5 +1,5 @@
1
- module DebuggerAlias
2
- class DebuggerAliasTest < Minitest::Test
1
+ module Byebug
2
+ class DebuggerAliasTestCase < TestCase
3
3
  def test_aliases_debugger_to_byebug
4
4
  assert_equal Kernel.method(:byebug), Kernel.method(:debugger)
5
5
  end
@@ -0,0 +1,127 @@
1
+ require 'byebug/runner'
2
+
3
+ module Byebug
4
+
5
+ class RunnerTest < TestCase
6
+ def setup
7
+ super
8
+ @old_argv = ARGV
9
+ end
10
+
11
+ def after
12
+ ARGV.replace(@old_argv)
13
+ end
14
+
15
+ def test_run_with_version_flag
16
+ ARGV.replace(%w(--version))
17
+ Byebug::Runner.new.run
18
+
19
+ check_output_includes(/#{Byebug::VERSION}/)
20
+ end
21
+
22
+ def test_run_with_help_flag
23
+ ARGV.replace(%w(--help))
24
+ Byebug::Runner.new.run
25
+
26
+ check_output_includes(/-d.*-I.*-q.*-s.*-x.*-m.*-r.*-R.*-t.*-v.*-h/m)
27
+ end
28
+
29
+ def test_run_with_remote_option_only_with_a_port_number
30
+ ARGV.replace(%w(--remote 9999))
31
+ Byebug.expects(:start_client)
32
+ Byebug::Runner.new.run
33
+
34
+ check_output_includes(/Connecting to byebug server localhost:9999/)
35
+ end
36
+
37
+ def test_run_with_remote_option_with_host_and_port_specification
38
+ ARGV.replace(%w(--remote myhost:9999))
39
+ Byebug.expects(:start_client)
40
+ Byebug::Runner.new.run
41
+
42
+ check_output_includes(/Connecting to byebug server myhost:9999/)
43
+ end
44
+
45
+ def test_run_without_a_script_to_debug
46
+ ARGV.replace([])
47
+
48
+ assert_raises(SystemExit) { Byebug::Runner.new.run }
49
+
50
+ check_output_includes(/You must specify a program to debug.../)
51
+ end
52
+
53
+ def expect_it_debugs_script
54
+ Byebug.expects(:start)
55
+ Byebug::Runner.any_instance.expects(:debug_program)
56
+ Byebug.expects(:run_init_script)
57
+ end
58
+
59
+ def test_run_with_a_script_to_debug
60
+ ARGV.replace(%w(my_script))
61
+ expect_it_debugs_script
62
+
63
+ Byebug::Runner.new.run
64
+ end
65
+
66
+ def test_run_with_no_rc_option
67
+ ARGV.replace(%w(--no-rc my_script))
68
+ Byebug.expects(:start)
69
+ Byebug::Runner.any_instance.expects(:debug_program)
70
+ Byebug.expects(:run_init_script).never
71
+
72
+ Byebug::Runner.new.run
73
+ end
74
+
75
+ def test_run_with_post_mortem_mode_flag
76
+ ARGV.replace(%w(-m my_script))
77
+ expect_it_debugs_script
78
+
79
+ Byebug::Runner.new.run
80
+ assert_equal true, Byebug.post_mortem?
81
+ Byebug::Setting[:post_mortem] = false
82
+ end
83
+
84
+ def test_run_with_linetracing_flag
85
+ ARGV.replace(%w(-t my_script))
86
+ expect_it_debugs_script
87
+
88
+ Byebug::Runner.new.run
89
+ assert_equal true, Byebug.tracing?
90
+ Byebug::Setting[:linetrace] = false
91
+ end
92
+
93
+ def test_run_with_no_quit_flag
94
+ skip 'for now'
95
+ ARGV.replace(%w(--no-quit my_script))
96
+
97
+ Byebug::Runner.new.run
98
+ check_output_includes('(byebug:ctrl)')
99
+ end
100
+
101
+ def test_run_with_require_flag
102
+ ARGV.replace(%w(-r abbrev my_script))
103
+ expect_it_debugs_script
104
+
105
+ Byebug::Runner.new.run
106
+ hsh = { 'can' => 'can', 'cat' => 'cat' }
107
+ assert_equal hsh, %w(can cat).abbrev
108
+ end
109
+
110
+ def test_run_with_include_flag
111
+ ARGV.replace(%w(-I custom_dir my_script))
112
+ expect_it_debugs_script
113
+
114
+ Byebug::Runner.new.run
115
+ assert_includes $LOAD_PATH, 'custom_dir'
116
+ end
117
+
118
+ def test_run_with_debug_flag
119
+ ARGV.replace(%w(-d my_script))
120
+ expect_it_debugs_script
121
+
122
+ Byebug::Runner.new.run
123
+ assert_equal $DEBUG, true
124
+ $DEBUG = false
125
+ end
126
+ end
127
+ end