byebug 0.0.1
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.
- data/.gitignore +10 -0
- data/.travis.yml +8 -0
- data/AUTHORS +10 -0
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +1 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +5 -0
- data/Rakefile +28 -0
- data/bin/byebug +395 -0
- data/byebug.gemspec +29 -0
- data/doc/hanoi.rb +35 -0
- data/doc/primes.rb +28 -0
- data/doc/rdebug-emacs.texi +1030 -0
- data/doc/test-tri2.rb +18 -0
- data/doc/tri3.rb +8 -0
- data/doc/triangle.rb +12 -0
- data/ext/byebug/breakpoint.c +476 -0
- data/ext/byebug/byebug.c +512 -0
- data/ext/byebug/byebug.h +131 -0
- data/ext/byebug/context.c +424 -0
- data/ext/byebug/extconf.rb +21 -0
- data/ext/byebug/locker.c +53 -0
- data/lib/byebug.rb +404 -0
- data/lib/byebug/command.rb +232 -0
- data/lib/byebug/commands/breakpoints.rb +153 -0
- data/lib/byebug/commands/catchpoint.rb +56 -0
- data/lib/byebug/commands/condition.rb +49 -0
- data/lib/byebug/commands/continue.rb +38 -0
- data/lib/byebug/commands/control.rb +110 -0
- data/lib/byebug/commands/display.rb +122 -0
- data/lib/byebug/commands/edit.rb +48 -0
- data/lib/byebug/commands/enable.rb +202 -0
- data/lib/byebug/commands/eval.rb +176 -0
- data/lib/byebug/commands/finish.rb +43 -0
- data/lib/byebug/commands/frame.rb +303 -0
- data/lib/byebug/commands/help.rb +56 -0
- data/lib/byebug/commands/info.rb +462 -0
- data/lib/byebug/commands/irb.rb +123 -0
- data/lib/byebug/commands/jump.rb +66 -0
- data/lib/byebug/commands/kill.rb +51 -0
- data/lib/byebug/commands/list.rb +94 -0
- data/lib/byebug/commands/method.rb +84 -0
- data/lib/byebug/commands/quit.rb +39 -0
- data/lib/byebug/commands/reload.rb +40 -0
- data/lib/byebug/commands/save.rb +90 -0
- data/lib/byebug/commands/set.rb +210 -0
- data/lib/byebug/commands/show.rb +246 -0
- data/lib/byebug/commands/skip.rb +35 -0
- data/lib/byebug/commands/source.rb +36 -0
- data/lib/byebug/commands/stepping.rb +83 -0
- data/lib/byebug/commands/threads.rb +189 -0
- data/lib/byebug/commands/tmate.rb +36 -0
- data/lib/byebug/commands/trace.rb +56 -0
- data/lib/byebug/commands/variables.rb +199 -0
- data/lib/byebug/context.rb +58 -0
- data/lib/byebug/helper.rb +69 -0
- data/lib/byebug/interface.rb +223 -0
- data/lib/byebug/processor.rb +468 -0
- data/lib/byebug/version.rb +3 -0
- data/man/rdebug.1 +241 -0
- data/test/breakpoints_test.rb +357 -0
- data/test/conditions_test.rb +77 -0
- data/test/continue_test.rb +44 -0
- data/test/display_test.rb +141 -0
- data/test/edit_test.rb +56 -0
- data/test/eval_test.rb +92 -0
- data/test/examples/breakpoint1.rb +15 -0
- data/test/examples/breakpoint2.rb +7 -0
- data/test/examples/conditions.rb +4 -0
- data/test/examples/continue.rb +4 -0
- data/test/examples/display.rb +5 -0
- data/test/examples/edit.rb +3 -0
- data/test/examples/edit2.rb +3 -0
- data/test/examples/eval.rb +4 -0
- data/test/examples/finish.rb +20 -0
- data/test/examples/frame.rb +20 -0
- data/test/examples/frame_threads.rb +31 -0
- data/test/examples/help.rb +2 -0
- data/test/examples/info.rb +38 -0
- data/test/examples/info2.rb +3 -0
- data/test/examples/info_threads.rb +48 -0
- data/test/examples/irb.rb +6 -0
- data/test/examples/jump.rb +14 -0
- data/test/examples/kill.rb +2 -0
- data/test/examples/list.rb +12 -0
- data/test/examples/method.rb +15 -0
- data/test/examples/post_mortem.rb +19 -0
- data/test/examples/quit.rb +2 -0
- data/test/examples/reload.rb +6 -0
- data/test/examples/restart.rb +6 -0
- data/test/examples/save.rb +3 -0
- data/test/examples/set.rb +3 -0
- data/test/examples/set_annotate.rb +12 -0
- data/test/examples/settings.rb +1 -0
- data/test/examples/show.rb +2 -0
- data/test/examples/source.rb +3 -0
- data/test/examples/stepping.rb +21 -0
- data/test/examples/thread.rb +32 -0
- data/test/examples/tmate.rb +10 -0
- data/test/examples/trace.rb +7 -0
- data/test/examples/trace_threads.rb +20 -0
- data/test/examples/variables.rb +26 -0
- data/test/finish_test.rb +48 -0
- data/test/frame_test.rb +143 -0
- data/test/help_test.rb +50 -0
- data/test/info_test.rb +313 -0
- data/test/irb_test.rb +81 -0
- data/test/jump_test.rb +70 -0
- data/test/kill_test.rb +48 -0
- data/test/list_test.rb +145 -0
- data/test/method_test.rb +70 -0
- data/test/post_mortem_test.rb +27 -0
- data/test/quit_test.rb +56 -0
- data/test/reload_test.rb +44 -0
- data/test/restart_test.rb +164 -0
- data/test/save_test.rb +92 -0
- data/test/set_test.rb +177 -0
- data/test/show_test.rb +293 -0
- data/test/source_test.rb +45 -0
- data/test/stepping_test.rb +130 -0
- data/test/support/breakpoint.rb +13 -0
- data/test/support/context.rb +14 -0
- data/test/support/matchers.rb +67 -0
- data/test/support/mocha_extensions.rb +72 -0
- data/test/support/processor.rb +7 -0
- data/test/support/test_dsl.rb +206 -0
- data/test/support/test_interface.rb +68 -0
- data/test/test_helper.rb +10 -0
- data/test/tmate_test.rb +44 -0
- data/test/trace_test.rb +159 -0
- data/test/variables_test.rb +119 -0
- metadata +265 -0
data/test/irb_test.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "Irb Command" do
|
4
|
+
include TestDsl
|
5
|
+
before do
|
6
|
+
interface.stubs(:kind_of?).with(Byebug::LocalInterface).returns(true)
|
7
|
+
IRB::Irb.stubs(:new).returns(irb)
|
8
|
+
Signal.trap("SIGINT", "IGNORE")
|
9
|
+
end
|
10
|
+
after do
|
11
|
+
Signal.trap("SIGINT", "DEFAULT")
|
12
|
+
end
|
13
|
+
let(:irb) { stub(context: ->{}) }
|
14
|
+
|
15
|
+
it "must support next command" do
|
16
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :next)
|
17
|
+
enter 'irb'
|
18
|
+
debug_file('irb') { state.line.must_equal 3 }
|
19
|
+
end
|
20
|
+
|
21
|
+
it "must support step command" do
|
22
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :step)
|
23
|
+
enter 'irb'
|
24
|
+
debug_file('irb') { state.line.must_equal 3 }
|
25
|
+
end
|
26
|
+
|
27
|
+
it "must support cont command" do
|
28
|
+
irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
|
29
|
+
enter 'break 4', 'irb'
|
30
|
+
debug_file('irb') { state.line.must_equal 4 }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "autoirb" do
|
34
|
+
temporary_change_hash_value(Byebug::Command.settings, :autoirb, 0)
|
35
|
+
|
36
|
+
it "must call irb automatically after breakpoint" do
|
37
|
+
irb.expects(:eval_input)
|
38
|
+
enter 'set autoirb', 'break 4', 'cont'
|
39
|
+
debug_file 'irb'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO: Can't reliably test the signal, from time to time Signal.trap, which is defined in IRBCommand, misses
|
44
|
+
# the SIGINT signal, which makes the test suite exit. Not sure how to fix that...
|
45
|
+
it "must translate SIGINT into 'cont' command" # do
|
46
|
+
# irb.stubs(:eval_input).calls { Process.kill("SIGINT", Process.pid) }
|
47
|
+
# enter 'break 4', 'irb'
|
48
|
+
# debug_file('irb') { state.line.must_equal 4 }
|
49
|
+
#end
|
50
|
+
|
51
|
+
describe "setting context to $rdebug_state" do
|
52
|
+
before { $rdebug_state = nil }
|
53
|
+
temporary_change_hash_value(Byebug::Command.settings, :byebugtesting, false)
|
54
|
+
|
55
|
+
it "must set $rdebug_state if irb is in the debug mode" do
|
56
|
+
rdebug_state = nil
|
57
|
+
irb.stubs(:eval_input).calls { rdebug_state = $rdebug_state }
|
58
|
+
enter 'irb -d'
|
59
|
+
debug_file('irb')
|
60
|
+
rdebug_state.must_be_kind_of Byebug::CommandProcessor::State
|
61
|
+
end
|
62
|
+
|
63
|
+
it "must not set $rdebug_state if irb is not in the debug mode" do
|
64
|
+
rdebug_state = nil
|
65
|
+
irb.stubs(:eval_input).calls { rdebug_state = $rdebug_state }
|
66
|
+
enter 'irb'
|
67
|
+
debug_file('irb')
|
68
|
+
rdebug_state.must_be_nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "Post Mortem" do
|
73
|
+
it "must work in post-mortem mode" do
|
74
|
+
skip("No post morten mode for now")
|
75
|
+
#irb.stubs(:eval_input).throws(:IRB_EXIT, :cont)
|
76
|
+
#enter 'cont', 'break 12', 'irb'
|
77
|
+
#debug_file("post_mortem") { state.line.must_equal 12 }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
data/test/jump_test.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "Jump Command" do
|
4
|
+
include TestDsl
|
5
|
+
|
6
|
+
describe "successful" do
|
7
|
+
it "must jump with absolute line number" do
|
8
|
+
enter 'break 6', 'cont', "jump 8 #{fullpath('jump')}"
|
9
|
+
debug_file('jump') { state.line.must_equal 8 }
|
10
|
+
end
|
11
|
+
|
12
|
+
it "must not initialize skipped variables during jump" do
|
13
|
+
enter 'break 6', 'cont', "jump 8 #{fullpath('jump')}", 'next'
|
14
|
+
enter 'var local'
|
15
|
+
debug_file('jump')
|
16
|
+
check_output_includes "a => 2", "b => nil", "c => nil", "d => 5"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "must jump with relative line number (-)" do
|
20
|
+
enter 'break 8', 'cont', "jump -2 #{fullpath('jump')}"
|
21
|
+
debug_file('jump') { state.line.must_equal 6 }
|
22
|
+
end
|
23
|
+
|
24
|
+
it "must jump with relative line number (+)" do
|
25
|
+
enter 'break 8', 'cont', "jump +2 #{fullpath('jump')}"
|
26
|
+
debug_file('jump') { state.line.must_equal 10 }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "errors" do
|
31
|
+
it "must show an error if line number is invalid" do
|
32
|
+
enter 'jump bla'
|
33
|
+
debug_file('jump')
|
34
|
+
check_output_includes "Bad line number: bla", interface.error_queue
|
35
|
+
end
|
36
|
+
|
37
|
+
it "must show an error if line number is not specified" do
|
38
|
+
enter 'jump'
|
39
|
+
debug_file('jump')
|
40
|
+
check_output_includes '"jump" must be followed by a line number', interface.error_queue
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "when there is no active code in specified line" do
|
44
|
+
it "must not jump to there" do
|
45
|
+
enter "jump 13 #{fullpath('jump')}"
|
46
|
+
debug_file('jump') { state.line.must_equal 3 }
|
47
|
+
end
|
48
|
+
|
49
|
+
it "must show an error" do
|
50
|
+
enter "jump 13 #{fullpath('jump')}"
|
51
|
+
debug_file('jump')
|
52
|
+
check_output_includes "Couldn't find active code at #{fullpath('jump')}:13", interface.error_queue
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "Post Mortem" do
|
58
|
+
# TODO: This test fails with "Segmentation fault". Probably need to fix it somehow, or forbid this
|
59
|
+
# command in the post mortem mode. Seems like state.context.frame_file and state.context.frame_line
|
60
|
+
# cause that.
|
61
|
+
it "must work in post-mortem mode" do
|
62
|
+
skip("No post morten mode for now")
|
63
|
+
#enter 'cont', 'jump 12'
|
64
|
+
#debug_file 'post_mortem'
|
65
|
+
#pi
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
end
|
data/test/kill_test.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "Kill Command" do
|
4
|
+
include TestDsl
|
5
|
+
|
6
|
+
it "must send signal to some pid" do
|
7
|
+
Process.expects(:kill).with("USR1", Process.pid)
|
8
|
+
enter 'kill USR1'
|
9
|
+
debug_file('kill')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "must finalize interface when sending KILL signal explicitly" do
|
13
|
+
Process.stubs(:kill).with("KILL", Process.pid)
|
14
|
+
interface.expects(:finalize)
|
15
|
+
enter 'kill KILL'
|
16
|
+
debug_file('kill')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "must ask confirmation when sending KILL implicitly" do
|
20
|
+
Process.expects(:kill).with("KILL", Process.pid)
|
21
|
+
enter 'kill', 'y'
|
22
|
+
debug_file('kill')
|
23
|
+
check_output_includes "Really kill? (y/n)", interface.confirm_queue
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "unknown signal" do
|
27
|
+
it "must not send the signal" do
|
28
|
+
Process.expects(:kill).with("BLA", Process.pid).never
|
29
|
+
enter 'kill BLA'
|
30
|
+
debug_file('kill')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "must show an error" do
|
34
|
+
enter 'kill BLA'
|
35
|
+
debug_file('kill')
|
36
|
+
check_output_includes "signal name BLA is not a signal I know about", interface.error_queue
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "Post Mortem" do
|
41
|
+
it "must work in post-mortem mode" do
|
42
|
+
skip("No post morten mode for now")
|
43
|
+
#Process.expects(:kill).with("USR1", Process.pid)
|
44
|
+
#enter 'cont', 'kill USR1'
|
45
|
+
#debug_file "post_mortem"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/test/list_test.rb
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "List Command" do
|
4
|
+
include TestDsl
|
5
|
+
temporary_change_hash_value(Byebug::Command.settings, :listsize, 3)
|
6
|
+
before { LineCache.clear_file_cache }
|
7
|
+
after { LineCache.clear_file_cache }
|
8
|
+
|
9
|
+
describe "listsize" do
|
10
|
+
it "must show lines according to :listsize setting" do
|
11
|
+
enter 'set listsize 4', 'break 5', 'cont', 'list'
|
12
|
+
debug_file 'list'
|
13
|
+
check_output_includes "[3, 6] in #{fullpath('list')}"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "must not set it if the param is not an integer" do
|
17
|
+
enter 'set listsize 4.0', 'break 5', 'cont', 'list'
|
18
|
+
debug_file 'list'
|
19
|
+
check_output_includes "[4, 6] in #{fullpath('list')}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "without arguments" do
|
24
|
+
it "must show surrounding lines with the first call" do
|
25
|
+
enter 'break 5', 'cont', 'list'
|
26
|
+
debug_file 'list'
|
27
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "=> 5 5", "6 6"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "must list forward after second call" do
|
31
|
+
enter 'break 5', 'cont', 'list', 'list'
|
32
|
+
debug_file 'list'
|
33
|
+
check_output_includes "[7, 9] in #{fullpath('list')}", "7 7", "8 8", "9 9"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "list backward" do
|
38
|
+
it "must show surrounding lines with the first call" do
|
39
|
+
enter 'break 5', 'cont', 'list -'
|
40
|
+
debug_file 'list'
|
41
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "=> 5 5", "6 6"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "must list backward after second call" do
|
45
|
+
enter 'break 5', 'cont', 'list -', 'list -'
|
46
|
+
debug_file 'list'
|
47
|
+
check_output_includes "[1, 3] in #{fullpath('list')}", "1 byebug", "2 2", "3 3"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "must show the surrounding lines with =" do
|
52
|
+
enter 'break 5', 'cont', 'list ='
|
53
|
+
debug_file 'list'
|
54
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "=> 5 5", "6 6"
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "autolist" do
|
58
|
+
temporary_change_hash_value(Byebug::Command.settings, :autolist, 0)
|
59
|
+
|
60
|
+
it "must show the surronding lines even without 'list' command if autolist is enabled" do
|
61
|
+
enter 'set autolist', 'break 5', 'cont'
|
62
|
+
debug_file 'list'
|
63
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "=> 5 5", "6 6"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "specified lines" do
|
68
|
+
it "must show with mm-nn" do
|
69
|
+
enter 'list 4-6'
|
70
|
+
debug_file 'list'
|
71
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "5 5", "6 6"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "must show with mm,nn" do
|
75
|
+
enter 'list 4,6'
|
76
|
+
debug_file 'list'
|
77
|
+
check_output_includes "[4, 6] in #{fullpath('list')}", "4 4", "5 5", "6 6"
|
78
|
+
end
|
79
|
+
|
80
|
+
it "must show surroundings with mm-" do
|
81
|
+
enter 'list 4-'
|
82
|
+
debug_file 'list'
|
83
|
+
check_output_includes "[3, 5] in #{fullpath('list')}", "3 3", "4 4", "5 5"
|
84
|
+
end
|
85
|
+
|
86
|
+
it "must show surroundings with mm," do
|
87
|
+
enter 'list 4,'
|
88
|
+
debug_file 'list'
|
89
|
+
check_output_includes "[3, 5] in #{fullpath('list')}", "3 3", "4 4", "5 5"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "must show nothing if there is no such lines" do
|
93
|
+
enter 'list 44,44'
|
94
|
+
debug_file 'list'
|
95
|
+
check_output_includes "[44, 44] in #{fullpath('list')}"
|
96
|
+
check_output_doesnt_include /^44 \S/
|
97
|
+
end
|
98
|
+
|
99
|
+
it "must show nothing if range is incorrect" do
|
100
|
+
enter 'list 5,4'
|
101
|
+
debug_file 'list'
|
102
|
+
check_output_includes "[5, 4] in #{fullpath('list')}"
|
103
|
+
check_output_doesnt_include "5 5"
|
104
|
+
check_output_doesnt_include "4 4"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "reload source" do
|
109
|
+
temporary_change_hash_value(Byebug::Command.settings, :reload_source_on_change, false)
|
110
|
+
|
111
|
+
after { change_line_in_file(fullpath('list'), 4, '4') }
|
112
|
+
it "must not reload if setting is false" do
|
113
|
+
enter 'set noautoreload', -> do
|
114
|
+
change_line_in_file(fullpath('list'), 4, '100')
|
115
|
+
'list 4-4'
|
116
|
+
end
|
117
|
+
debug_file 'list'
|
118
|
+
check_output_includes "4 4"
|
119
|
+
end
|
120
|
+
|
121
|
+
it "must reload if setting is true" do
|
122
|
+
enter 'set autoreload', -> do
|
123
|
+
change_line_in_file(fullpath('list'), 4, '100')
|
124
|
+
'list 4-4'
|
125
|
+
end
|
126
|
+
debug_file 'list'
|
127
|
+
check_output_includes "4 100"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
it "must show an error when there is no such file" do
|
132
|
+
enter ->{state.file = "blabla"; 'list 4-4'}
|
133
|
+
debug_file 'list'
|
134
|
+
check_output_includes "No sourcefile available for blabla", interface.error_queue
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "Post Mortem" do
|
138
|
+
it "must work in post-mortem mode" do
|
139
|
+
skip("No post morten mode for now")
|
140
|
+
#enter 'cont', 'list'
|
141
|
+
#debug_file 'post_mortem'
|
142
|
+
#check_output_includes "[7, 9] in #{fullpath('post_mortem')}"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
data/test/method_test.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "Method Command" do
|
4
|
+
include TestDsl
|
5
|
+
|
6
|
+
# TODO: Need to write tests for 'method signature' command, but I can't install the 'ruby-internal' gem
|
7
|
+
# on my machine, it fails to build gem native extension.
|
8
|
+
|
9
|
+
describe "show instance method of a class" do
|
10
|
+
it "must show using full command name" do
|
11
|
+
enter 'break 15', 'cont', 'm MethodEx'
|
12
|
+
debug_file 'method'
|
13
|
+
check_output_includes /bla/
|
14
|
+
check_output_doesnt_include /foo/
|
15
|
+
end
|
16
|
+
|
17
|
+
it "must show using shortcut" do
|
18
|
+
enter 'break 15', 'cont', 'method MethodEx'
|
19
|
+
debug_file 'method'
|
20
|
+
check_output_includes /bla/
|
21
|
+
end
|
22
|
+
|
23
|
+
it "must show an error if specified object is not a class or module" do
|
24
|
+
enter 'break 15', 'cont', 'm a'
|
25
|
+
debug_file 'method'
|
26
|
+
check_output_includes "Should be Class/Module: a"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe "show methods of an object" do
|
32
|
+
it "must show using full command name" do
|
33
|
+
enter 'break 15', 'cont', 'method instance a'
|
34
|
+
debug_file 'method'
|
35
|
+
check_output_includes /bla/
|
36
|
+
check_output_doesnt_include /foo/
|
37
|
+
end
|
38
|
+
|
39
|
+
it "must show using shortcut" do
|
40
|
+
enter 'break 15', 'cont', 'm i a'
|
41
|
+
debug_file 'method'
|
42
|
+
check_output_includes /bla/
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
describe "show instance variables of an object" do
|
48
|
+
it "must show using full name command" do
|
49
|
+
enter 'break 15', 'cont', 'method iv a'
|
50
|
+
debug_file 'method'
|
51
|
+
check_output_includes '@a = "b"', '@c = "d"'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "must show using shortcut" do
|
55
|
+
enter 'break 15', 'cont', 'm iv a'
|
56
|
+
debug_file 'method'
|
57
|
+
check_output_includes '@a = "b"', '@c = "d"'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "Post Mortem" do
|
62
|
+
it "must work in post-mortem mode" do
|
63
|
+
skip("No post morten mode for now")
|
64
|
+
#enter 'cont', 'm i self'
|
65
|
+
#debug_file 'post_mortem'
|
66
|
+
#check_output_includes /to_s/
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
# XXX: No post morten mode for now
|
4
|
+
#
|
5
|
+
#describe "Post Mortem" do
|
6
|
+
# include TestDsl
|
7
|
+
#
|
8
|
+
# it "must enter into port mortem mode" do
|
9
|
+
# enter 'cont'
|
10
|
+
# debug_file("post_mortem") { Byebug.post_mortem?.must_equal true }
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# it "must stop at the correct line" do
|
14
|
+
# enter 'cont'
|
15
|
+
# debug_file("post_mortem") { state.line.must_equal 8 }
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# it "must exit from post mortem mode after stepping command" do
|
19
|
+
# enter 'cont', 'break 12', 'cont'
|
20
|
+
# debug_file("post_mortem") { Byebug.post_mortem?.must_equal false }
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# it "must save the raised exception" do
|
24
|
+
# enter 'cont'
|
25
|
+
# debug_file("post_mortem") { Byebug.last_exception.must_be_kind_of RuntimeError }
|
26
|
+
# end
|
27
|
+
#end
|
data/test/quit_test.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe "Quit Command" do
|
4
|
+
include TestDsl
|
5
|
+
|
6
|
+
it "must quit if user confirmed" do
|
7
|
+
Byebug::QuitCommand.any_instance.expects(:exit!)
|
8
|
+
enter 'quit', 'y'
|
9
|
+
debug_file 'quit'
|
10
|
+
check_output_includes "Really quit? (y/n)", interface.confirm_queue
|
11
|
+
end
|
12
|
+
|
13
|
+
it "must not quit if user didn't confirm" do
|
14
|
+
Byebug::QuitCommand.any_instance.expects(:exit!).never
|
15
|
+
enter 'quit', 'n'
|
16
|
+
debug_file 'quit'
|
17
|
+
check_output_includes "Really quit? (y/n)", interface.confirm_queue
|
18
|
+
end
|
19
|
+
|
20
|
+
it "must quit immediatly if used with !" do
|
21
|
+
Byebug::QuitCommand.any_instance.expects(:exit!)
|
22
|
+
enter 'quit!'
|
23
|
+
debug_file 'quit'
|
24
|
+
check_output_doesnt_include "Really quit? (y/n)", interface.confirm_queue
|
25
|
+
end
|
26
|
+
|
27
|
+
it "must quit immediatly if used with 'unconditionally'" do
|
28
|
+
Byebug::QuitCommand.any_instance.expects(:exit!)
|
29
|
+
enter 'quit unconditionally'
|
30
|
+
debug_file 'quit'
|
31
|
+
check_output_doesnt_include "Really quit? (y/n)", interface.confirm_queue
|
32
|
+
end
|
33
|
+
|
34
|
+
it "must finalize interface before quitting" do
|
35
|
+
Byebug::QuitCommand.any_instance.stubs(:exit!)
|
36
|
+
interface.expects(:finalize)
|
37
|
+
enter 'quit!'
|
38
|
+
debug_file 'quit'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "must quit if used 'exit' alias" do
|
42
|
+
Byebug::QuitCommand.any_instance.expects(:exit!)
|
43
|
+
enter 'exit!'
|
44
|
+
debug_file 'quit'
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "Post Mortem" do
|
48
|
+
it "must work in post-mortem mode" do
|
49
|
+
skip("No post morten mode for now")
|
50
|
+
#Byebug::QuitCommand.any_instance.expects(:exit!)
|
51
|
+
#enter 'cont', 'exit!'
|
52
|
+
#debug_file 'post_mortem'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|