byebug 3.5.1 → 4.0.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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/.rubocop.yml +18 -1
  4. data/.travis.yml +21 -1
  5. data/CHANGELOG.md +356 -308
  6. data/CONTRIBUTING.md +31 -15
  7. data/GUIDE.md +859 -475
  8. data/Gemfile +8 -10
  9. data/LICENSE +1 -1
  10. data/README.md +41 -45
  11. data/Rakefile +30 -28
  12. data/byebug.gemspec +18 -18
  13. data/ext/byebug/breakpoint.c +88 -75
  14. data/ext/byebug/byebug.c +253 -252
  15. data/ext/byebug/byebug.h +53 -53
  16. data/ext/byebug/context.c +188 -159
  17. data/ext/byebug/extconf.rb +9 -6
  18. data/ext/byebug/locker.c +53 -11
  19. data/ext/byebug/threads.c +137 -39
  20. data/lib/byebug/attacher.rb +7 -2
  21. data/lib/byebug/breakpoint.rb +30 -0
  22. data/lib/byebug/command.rb +36 -32
  23. data/lib/byebug/commands/break.rb +49 -48
  24. data/lib/byebug/commands/catch.rb +64 -0
  25. data/lib/byebug/commands/condition.rb +13 -9
  26. data/lib/byebug/commands/continue.rb +8 -4
  27. data/lib/byebug/commands/delete.rb +10 -4
  28. data/lib/byebug/commands/display.rb +33 -25
  29. data/lib/byebug/commands/edit.rb +18 -13
  30. data/lib/byebug/commands/enable_disable.rb +26 -24
  31. data/lib/byebug/commands/eval.rb +77 -35
  32. data/lib/byebug/commands/finish.rb +9 -5
  33. data/lib/byebug/commands/frame.rb +66 -125
  34. data/lib/byebug/commands/help.rb +14 -21
  35. data/lib/byebug/commands/history.rb +5 -1
  36. data/lib/byebug/commands/info.rb +41 -106
  37. data/lib/byebug/commands/interrupt.rb +6 -2
  38. data/lib/byebug/commands/irb.rb +5 -2
  39. data/lib/byebug/commands/kill.rb +6 -2
  40. data/lib/byebug/commands/list.rb +21 -14
  41. data/lib/byebug/commands/method.rb +17 -9
  42. data/lib/byebug/commands/pry.rb +13 -3
  43. data/lib/byebug/commands/quit.rb +10 -5
  44. data/lib/byebug/commands/restart.rb +12 -19
  45. data/lib/byebug/commands/save.rb +10 -6
  46. data/lib/byebug/commands/set.rb +15 -14
  47. data/lib/byebug/commands/show.rb +8 -8
  48. data/lib/byebug/commands/source.rb +14 -8
  49. data/lib/byebug/commands/stepping.rb +15 -29
  50. data/lib/byebug/commands/threads.rb +73 -49
  51. data/lib/byebug/commands/tracevar.rb +56 -0
  52. data/lib/byebug/commands/undisplay.rb +8 -4
  53. data/lib/byebug/commands/untracevar.rb +38 -0
  54. data/lib/byebug/commands/var.rb +107 -0
  55. data/lib/byebug/context.rb +78 -42
  56. data/lib/byebug/core.rb +78 -40
  57. data/lib/byebug/helper.rb +58 -42
  58. data/lib/byebug/history.rb +12 -1
  59. data/lib/byebug/interface.rb +91 -11
  60. data/lib/byebug/interfaces/local_interface.rb +12 -19
  61. data/lib/byebug/interfaces/remote_interface.rb +12 -15
  62. data/lib/byebug/interfaces/script_interface.rb +14 -18
  63. data/lib/byebug/interfaces/test_interface.rb +54 -0
  64. data/lib/byebug/printers/base.rb +64 -0
  65. data/lib/byebug/printers/plain.rb +53 -0
  66. data/lib/byebug/processor.rb +20 -1
  67. data/lib/byebug/processors/command_processor.rb +57 -172
  68. data/lib/byebug/processors/control_command_processor.rb +16 -43
  69. data/lib/byebug/remote.rb +13 -7
  70. data/lib/byebug/runner.rb +102 -54
  71. data/lib/byebug/setting.rb +45 -68
  72. data/lib/byebug/settings/autoeval.rb +2 -0
  73. data/lib/byebug/settings/autoirb.rb +3 -0
  74. data/lib/byebug/settings/autolist.rb +3 -0
  75. data/lib/byebug/settings/autosave.rb +2 -0
  76. data/lib/byebug/settings/basename.rb +2 -0
  77. data/lib/byebug/settings/callstyle.rb +2 -0
  78. data/lib/byebug/settings/fullpath.rb +2 -0
  79. data/lib/byebug/settings/histfile.rb +2 -0
  80. data/lib/byebug/settings/histsize.rb +2 -0
  81. data/lib/byebug/settings/linetrace.rb +2 -0
  82. data/lib/byebug/settings/listsize.rb +2 -0
  83. data/lib/byebug/settings/post_mortem.rb +7 -2
  84. data/lib/byebug/settings/stack_on_error.rb +2 -0
  85. data/lib/byebug/settings/verbose.rb +2 -0
  86. data/lib/byebug/settings/width.rb +2 -0
  87. data/lib/byebug/state.rb +12 -0
  88. data/lib/byebug/states/control_state.rb +26 -0
  89. data/lib/byebug/states/regular_state.rb +178 -0
  90. data/lib/byebug/version.rb +1 -1
  91. metadata +24 -109
  92. data/lib/byebug/commands/catchpoint.rb +0 -53
  93. data/lib/byebug/commands/reload.rb +0 -29
  94. data/lib/byebug/commands/trace.rb +0 -50
  95. data/lib/byebug/commands/variables.rb +0 -206
  96. data/lib/byebug/options.rb +0 -46
  97. data/lib/byebug/settings/autoreload.rb +0 -12
  98. data/lib/byebug/settings/forcestep.rb +0 -14
  99. data/lib/byebug/settings/testing.rb +0 -12
  100. data/lib/byebug/settings/tracing_plus.rb +0 -11
  101. data/test/commands/break_test.rb +0 -364
  102. data/test/commands/condition_test.rb +0 -85
  103. data/test/commands/continue_test.rb +0 -47
  104. data/test/commands/delete_test.rb +0 -26
  105. data/test/commands/display_test.rb +0 -37
  106. data/test/commands/edit_test.rb +0 -52
  107. data/test/commands/eval_test.rb +0 -89
  108. data/test/commands/finish_test.rb +0 -74
  109. data/test/commands/frame_test.rb +0 -223
  110. data/test/commands/help_test.rb +0 -66
  111. data/test/commands/history_test.rb +0 -61
  112. data/test/commands/info_test.rb +0 -238
  113. data/test/commands/interrupt_test.rb +0 -45
  114. data/test/commands/irb_test.rb +0 -28
  115. data/test/commands/kill_test.rb +0 -50
  116. data/test/commands/list_test.rb +0 -174
  117. data/test/commands/method_test.rb +0 -52
  118. data/test/commands/post_mortem_test.rb +0 -71
  119. data/test/commands/pry_test.rb +0 -26
  120. data/test/commands/quit_test.rb +0 -53
  121. data/test/commands/reload_test.rb +0 -39
  122. data/test/commands/restart_test.rb +0 -46
  123. data/test/commands/save_test.rb +0 -67
  124. data/test/commands/set_test.rb +0 -140
  125. data/test/commands/show_test.rb +0 -76
  126. data/test/commands/source_test.rb +0 -46
  127. data/test/commands/stepping_test.rb +0 -192
  128. data/test/commands/thread_test.rb +0 -164
  129. data/test/commands/trace_test.rb +0 -71
  130. data/test/commands/undisplay_test.rb +0 -75
  131. data/test/commands/variables_test.rb +0 -105
  132. data/test/debugger_alias_test.rb +0 -7
  133. data/test/runner_test.rb +0 -150
  134. data/test/support/matchers.rb +0 -65
  135. data/test/support/test_interface.rb +0 -59
  136. data/test/support/utils.rb +0 -122
  137. data/test/test_helper.rb +0 -58
@@ -1,164 +0,0 @@
1
- module Byebug
2
- class ThreadExample
3
- def initialize
4
- Thread.main[:should_break] = false
5
- end
6
-
7
- def launch
8
- @t1 = Thread.new do
9
- while true
10
- break if Thread.main[:should_break]
11
- sleep 0.02
12
- end
13
- end
14
-
15
- @t2 = Thread.new do
16
- while true
17
- sleep 0.02
18
- end
19
- end
20
-
21
- @t1.join
22
- Thread.main[:should_break]
23
- end
24
-
25
- def kill
26
- @t2.kill
27
- end
28
- end
29
-
30
- class ThreadTestCase < TestCase
31
- def setup
32
- @example = -> do
33
- byebug
34
-
35
- t = ThreadExample.new
36
- t.launch
37
- t.kill
38
- end
39
-
40
- super
41
- end
42
-
43
- def release
44
- @release ||= 'eval Thread.main[:should_break] = true'
45
- end
46
-
47
- def first_thnum
48
- Byebug.contexts.first.thnum
49
- end
50
-
51
- def last_thnum
52
- Byebug.contexts.last.thnum
53
- end
54
-
55
- def test_thread_list_marks_current_thread_with_a_plus_sign
56
- skip 'for now'
57
- thnum = nil
58
- enter 'break 8', 'cont', 'thread list', release
59
- debug_proc(@example) { thnum = first_thnum }
60
- check_output_includes(/\+ #{thnum} #<Thread:\S+ run>\t#{__FILE__}:8/)
61
- end
62
-
63
- def test_thread_list_works_with_shortcut
64
- skip 'for now'
65
- thnum = nil
66
- enter 'break 8', 'cont', 'th list', release
67
- debug_proc(@example) { thnum = first_thnum }
68
- check_output_includes(/\+ #{thnum} #<Thread:\S+ run>\t#{__FILE__}:8/)
69
- end
70
-
71
- def test_thread_list_show_all_available_threads
72
- skip 'for now'
73
- enter 'break 21', 'cont', 'thread list', release
74
- debug_proc(@example)
75
- check_output_includes(/(\+)?\d+ #<Thread:\S+ (sleep|run)>/,
76
- /(\+)?\d+ #<Thread:\S+ (sleep|run)>/,
77
- /(\+)?\d+ #<Thread:\S+ (sleep|run)>/)
78
- end
79
-
80
- def test_thread_stop_marks_thread_as_suspended
81
- skip 'for now'
82
- thnum = nil
83
- enter 'break 21', 'cont', -> { "thread stop #{last_thnum}" }, release
84
- debug_proc(@example) { thnum = last_thnum }
85
- check_output_includes(/\$ #{thnum} #<Thread:/)
86
- end
87
-
88
- def test_thread_stop_actually_suspends_thread_execution
89
- skip 'for now'
90
- enter 'break 21', 'cont', 'trace on',
91
- -> { "thread stop #{last_thnum}" }, release
92
- debug_proc(@example)
93
- check_output_doesnt_include(/Tracing: #{__FILE__}:16/,
94
- /Tracing: #{__FILE__}:17/)
95
- end
96
-
97
- def test_thread_stop_shows_error_when_thread_number_not_specified
98
- skip 'for now'
99
- enter 'break 8', 'cont', 'thread stop', release
100
- debug_proc(@example)
101
- check_error_includes '"thread stop" needs a thread number'
102
- end
103
-
104
- def test_thread_stop_shows_error_when_trying_to_stop_current_thread
105
- skip 'for now'
106
- enter 'break 8', 'cont', -> { "thread stop #{first_thnum}" }, release
107
- debug_proc(@example)
108
- check_error_includes "It's the current thread"
109
- end
110
-
111
- def test_thread_resume_removes_threads_from_the_suspended_state
112
- skip 'for now'
113
- thnum = nil
114
- enter 'break 21', 'cont',
115
- -> { thnum = last_thnum ; "thread stop #{thnum}" },
116
- -> { "thread resume #{thnum}" }, release
117
- debug_proc(@example) do
118
- assert_equal false, Byebug.contexts.last.suspended?
119
- end
120
- check_output_includes(/\$ #{thnum} #<Thread:/, /#{thnum} #<Thread:/)
121
- end
122
-
123
- def test_thread_resume_shows_error_if_thread_number_not_specified
124
- skip 'for now'
125
- enter 'break 8', 'cont', 'thread resume', release
126
- debug_proc(@example)
127
- check_error_includes '"thread resume" needs a thread number'
128
- end
129
-
130
- def test_thread_resume_shows_error_when_trying_to_resume_current_thread
131
- skip 'for now'
132
- enter 'break 8', 'cont', -> { "thread resume #{first_thnum}" }, release
133
- debug_proc(@example)
134
- check_error_includes "It's the current thread"
135
- end
136
-
137
- def test_thread_resume_shows_error_if_thread_is_already_running
138
- skip 'for now'
139
- enter 'break 21', 'cont', -> { "thread resume #{last_thnum}" }, release
140
- debug_proc(@example)
141
- check_error_includes 'Already running'
142
- end
143
-
144
- def test_thread_switch_changes_execution_to_another_thread
145
- skip 'for now'
146
- enter 'break 21', 'cont', -> { "thread switch #{last_thnum}" }, release
147
- debug_proc(@example) { assert_equal state.line, 16 }
148
- end
149
-
150
- def test_thread_switch_shows_error_if_thread_number_not_specified
151
- skip 'for now'
152
- enter 'break 8', 'cont', 'thread switch', release
153
- debug_proc(@example)
154
- check_error_includes '"thread switch" needs a thread number'
155
- end
156
-
157
- def test_thread_switch_shows_error_when_trying_to_switch_current_thread
158
- skip 'for now'
159
- enter 'break 8', 'cont', -> { "thread switch #{first_thnum}" }, release
160
- debug_proc(@example)
161
- check_error_includes "It's the current thread"
162
- end
163
- end
164
- end
@@ -1,71 +0,0 @@
1
- module Byebug
2
- class TraceTestCase < TestCase
3
- def setup
4
- @example = -> do
5
- $bla = 5
6
- byebug
7
- $bla = 7
8
- $bla = 8
9
- $bla = 9
10
- $bla = 10
11
- $bla = (0 == (10 % $bla))
12
- end
13
- untrace_var(:$bla) if defined?($bla)
14
-
15
- super
16
- end
17
-
18
- def test_linetrace_setting_enables_tracing_program_execution
19
- enter 'set linetrace', 'cont 11', 'set nolinetrace'
20
- debug_proc(@example)
21
- check_output_includes 'linetrace is on',
22
- "Tracing: #{__FILE__}:8 $bla = 8",
23
- "Tracing: #{__FILE__}:9 $bla = 9",
24
- "Tracing: #{__FILE__}:10 $bla = 10",
25
- "Tracing: #{__FILE__}:11 $bla = (0 == (10 % $bla))"
26
- end
27
-
28
- def test_basename_setting_affects_tracing_output
29
- enter 'set basename', 'set linetrace on', 'cont 10', 'set nolinetrace'
30
- debug_proc(@example)
31
- check_output_includes \
32
- "Tracing: #{File.basename(__FILE__)}:10 $bla = 10"
33
- end
34
-
35
- def test_disabling_linetrace_setting_stops_tracing
36
- enter 'set linetrace', 'next', 'set nolinetrace'
37
- debug_proc(@example)
38
- check_output_includes "Tracing: #{__FILE__}:8 $bla = 8"
39
- check_output_doesnt_include "Tracing: #{__FILE__}:9 $bla = 9"
40
- end
41
-
42
- def test_tracevar_tracks_global_variables
43
- enter 'tracevar bla'
44
- debug_proc(@example)
45
- check_output_includes "traced global variable 'bla' has value '7'",
46
- "traced global variable 'bla' has value '10'"
47
- end
48
-
49
- def test_tracevar_stop_makes_program_stop_when_global_var_changes
50
- enter 'tracevar bla stop', 'break 10', 'cont'
51
- debug_proc(@example) { assert_equal 8, state.line }
52
- end
53
-
54
- def test_tracevar_nostop_does_not_stop_when_global_var_changes
55
- enter 'tracevar bla nostop', 'break 10', 'cont'
56
- debug_proc(@example) { assert_equal 10, state.line }
57
- end
58
-
59
- def test_tracevar_shows_an_error_message_if_there_is_no_such_global_var
60
- enter 'tracevar foo'
61
- debug_proc(@example)
62
- check_error_includes "'foo' is not a global variable."
63
- end
64
-
65
- def test_tracevar_shows_an_error_message_if_subcommand_is_invalid
66
- enter 'tracevar bla foo'
67
- debug_proc(@example)
68
- check_error_includes 'expecting "stop" or "nostop"; got "foo"'
69
- end
70
- end
71
- end
@@ -1,75 +0,0 @@
1
- module Byebug
2
- class UndisplayTestCase < 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_asks_for_confirmation
15
- enter 'display d', 'display d + 1', 'undisplay'
16
- debug_proc(@example)
17
- check_confirm_includes 'Clear all expressions? (y/n)'
18
- end
19
-
20
- def test_removes_all_expressions_from_list_if_confirmed
21
- enter 'display d', 'display d + 1', 'undisplay', 'y', 'next'
22
- debug_proc(@example) do
23
- assert_equal [[false, 'd'], [false, 'd + 1']], state.display
24
- end
25
- check_output_doesnt_include '1: d = 3', '2: d + 1 = 4'
26
- end
27
-
28
- def test_does_not_remove_all_expressions_from_list_unless_confirmed
29
- enter 'display d', 'display d + 1', 'undisplay', 'n', 'display'
30
- debug_proc(@example) do
31
- assert_equal [[true, 'd'], [true, 'd + 1']], state.display
32
- end
33
-
34
- check_output_includes '1: d = 0', '2: d + 1 = 1'
35
- end
36
-
37
- def test_marks_specific_expression_from_list_as_inactive
38
- enter 'display d', 'display d + 1', 'undisplay 1'
39
-
40
- debug_proc(@example) do
41
- assert_equal [[nil, 'd'], [true, 'd + 1']], state.display
42
- end
43
- end
44
-
45
- def test_displays_only_the_active_position
46
- enter 'display d', 'display d + 1', 'undisplay 1', 'next'
47
- debug_proc(@example)
48
- check_output_includes '2: d + 1 = 4'
49
- check_output_doesnt_include '1: d = 3'
50
- end
51
-
52
- def test_disable_display_removes_the_expression_from_display_list
53
- enter 'display d', 'disable display 1'
54
- debug_proc(@example) { assert_equal [[false, 'd']], state.display }
55
- end
56
-
57
- def test_disable_display_shows_an_error_if_no_displays_are_set
58
- enter 'disable display 1'
59
- debug_proc(@example)
60
- check_error_includes 'No display expressions have been set'
61
- end
62
-
63
- def test_disable_display_shows_an_error_if_theres_no_such_display_position
64
- enter 'display d', 'disable display 4'
65
- debug_proc(@example)
66
- check_error_includes \
67
- '"disable display" argument "4" needs to be at most 1'
68
- end
69
-
70
- def test_enable_display_set_display_flag_to_true_in_display_list
71
- enter 'display d', 'disable display 1', 'enable display 1'
72
- debug_proc(@example) { assert_equal [[true, 'd']], state.display }
73
- end
74
- end
75
- end
@@ -1,105 +0,0 @@
1
- module Byebug
2
- class VariablesExample
3
- SOMECONST = 'foo' unless defined?(SOMECONST)
4
-
5
- def initialize
6
- @inst_a = 1
7
- @inst_b = 2
8
- @inst_c = '1' * 40
9
- @inst_d = BasicObject.new
10
- end
11
-
12
- def run
13
- a = 4
14
- b = [1, 2, 3].map do |i|
15
- a * i
16
- end
17
- b
18
- end
19
- end
20
-
21
- class VariablesTestCase < TestCase
22
- def setup
23
- @example = -> do
24
- byebug
25
-
26
- v = VariablesExample.new
27
- v.run
28
- end
29
-
30
- super
31
- end
32
-
33
- # TODO: we check a class minitest variable... brittle...
34
- ['var class', 'v cl'].each do |cmd_alias|
35
- define_method(:"test_#{cmd_alias}_shows_class_variables") do
36
- enter cmd_alias
37
- debug_proc(@example)
38
- check_output_includes(/@@runnables/)
39
- end
40
- end
41
-
42
- ['var const', 'v co'].each do |cmd_alias|
43
- define_method(:"test_#{cmd_alias}_shows_constants_in_class_or_module") do
44
- enter "#{cmd_alias} VariablesExample"
45
- debug_proc(@example)
46
- check_output_includes 'SOMECONST => "foo"'
47
- end
48
- end
49
-
50
- def test_var_const_shows_error_if_given_object_is_not_a_class_or_module
51
- enter 'var const v'
52
- debug_proc(@example)
53
- check_output_includes 'Should be Class/Module: v'
54
- end
55
-
56
- ['var global', 'v g'].each do |cmd_alias|
57
- define_method(:"test_#{cmd_alias}_shows_global_variables") do
58
- enter cmd_alias
59
- debug_proc(@example)
60
- check_output_includes '$VERBOSE = true'
61
- end
62
- end
63
-
64
- ['var instance', 'v ins'].each do |cmd_alias|
65
- define_method(:"test_#{cmd_alias}_shows_instance_vars_of_an_object") do
66
- enter 'break 27', 'cont', "#{cmd_alias} v"
67
- debug_proc(@example)
68
- check_output_includes '@inst_a = 1', '@inst_b = 2'
69
- end
70
- end
71
-
72
- def test_var_instance_shows_instance_variables_of_self_if_no_object_given
73
- enter 'break 9', 'cont', 'var instance'
74
- debug_proc(@example)
75
- check_output_includes '@inst_a = 1', '@inst_b = 2'
76
- end
77
-
78
- def test_var_instance_cuts_long_variable_values_according_to_width_setting
79
- enter 'break 27', 'cont', 'set width 45', 'var instance v'
80
- debug_proc(@example)
81
- check_output_includes '@inst_c = "1111111111111111111111111111111...'
82
- end
83
-
84
- def test_v_ins_shows_error_if_value_does_not_have_to_s_or_inspect_methods
85
- enter 'break 27', 'cont', 'v ins v'
86
- debug_proc(@example)
87
- check_output_includes '@inst_d = *Error in evaluation*'
88
- end
89
-
90
- def test_var_local_shows_local_variables
91
- enter 'break 15', 'cont', 'var local'
92
- debug_proc(@example)
93
- check_output_includes 'a => 4', 'b => nil', 'i => 1'
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
104
- end
105
- end
@@ -1,7 +0,0 @@
1
- module Byebug
2
- class DebuggerAliasTestCase < TestCase
3
- def test_aliases_debugger_to_byebug
4
- assert_equal Kernel.method(:byebug), Kernel.method(:debugger)
5
- end
6
- end
7
- end
@@ -1,150 +0,0 @@
1
- require 'byebug/runner'
2
-
3
- module Byebug
4
- class RunnerTest < TestCase
5
- def setup
6
- super
7
- @old_argv = ARGV
8
- @runner = Byebug::Runner.new
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
- @runner.run
18
-
19
- check_output_includes(/#{Byebug::VERSION}/)
20
- end
21
-
22
- def test_run_with_help_flag
23
- ARGV.replace(%w(--help))
24
- @runner.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
- @runner.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
- @runner.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) { @runner.run }
49
-
50
- check_error_includes(/You must specify a program to debug.../)
51
- end
52
-
53
- def test_run_with_an_nonexistent_script
54
- ARGV.replace(%w(non_existent_script.rb))
55
-
56
- assert_raises(SystemExit) { @runner.run }
57
-
58
- check_error_includes("The script doesn't exist")
59
- end
60
-
61
- def expect_it_debugs_script(rc = true)
62
- Byebug.expects(:start)
63
- rc_expectation = Byebug.expects(:run_init_script)
64
- rc_expectation.never unless rc
65
- @runner.expects(:debug_program)
66
- end
67
-
68
- def test_run_with_a_script_to_debug
69
- ARGV.replace(%w(lib/byebug.rb))
70
- expect_it_debugs_script
71
-
72
- @runner.run
73
- end
74
-
75
- def test_run_with_a_script_and_params_does_not_consume_script_params
76
- ARGV.replace(%w(-- lib/byebug.rb -opt value))
77
- expect_it_debugs_script
78
-
79
- @runner.run
80
- assert_equal %w(lib/byebug.rb -opt value), ARGV
81
- end
82
-
83
- def test_run_with_ruby_script_ruby_is_ignored_and_script_passed_instead
84
- ARGV.replace(%w(-- ruby lib/byebug.rb))
85
- expect_it_debugs_script
86
-
87
- @runner.run
88
- assert_equal %w(lib/byebug.rb), ARGV
89
- end
90
-
91
- def test_run_with_no_rc_option
92
- ARGV.replace(%w(--no-rc lib/byebug.rb))
93
- expect_it_debugs_script(false)
94
-
95
- @runner.run
96
- end
97
-
98
- def test_run_with_post_mortem_mode_flag
99
- ARGV.replace(%w(-m lib/byebug.rb))
100
- expect_it_debugs_script
101
- @runner.run
102
-
103
- assert_equal true, Byebug.post_mortem?
104
- Byebug::Setting[:post_mortem] = false
105
- end
106
-
107
- def test_run_with_linetracing_flag
108
- ARGV.replace(%w(-t lib/byebug.rb))
109
- expect_it_debugs_script
110
- @runner.run
111
-
112
- assert_equal true, Byebug.tracing?
113
- Byebug::Setting[:linetrace] = false
114
- end
115
-
116
- def test_run_with_no_quit_flag
117
- skip 'for now'
118
- ARGV.replace(%w(--no-quit lib/byebug.rb))
119
- @runner.run
120
-
121
- check_output_includes('(byebug:ctrl)')
122
- end
123
-
124
- def test_run_with_require_flag
125
- ARGV.replace(%w(-r abbrev lib/byebug.rb))
126
- expect_it_debugs_script
127
- @runner.run
128
-
129
- hsh = { 'can' => 'can', 'cat' => 'cat' }
130
- assert_equal hsh, %w(can cat).abbrev
131
- end
132
-
133
- def test_run_with_include_flag
134
- ARGV.replace(%w(-I custom_dir lib/byebug.rb))
135
- expect_it_debugs_script
136
- @runner.run
137
-
138
- assert_includes $LOAD_PATH, 'custom_dir'
139
- end
140
-
141
- def test_run_with_debug_flag
142
- ARGV.replace(%w(-d lib/byebug.rb))
143
- expect_it_debugs_script
144
- @runner.run
145
-
146
- assert_equal $DEBUG, true
147
- $DEBUG = false
148
- end
149
- end
150
- end