byebug 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +0 -1
- data/CHANGELOG.md +8 -0
- data/GUIDE.md +52 -32
- data/README.md +6 -0
- data/ext/byebug/byebug.c +19 -3
- data/ext/byebug/byebug.h +4 -3
- data/ext/byebug/context.c +21 -5
- data/lib/byebug.rb +5 -14
- data/lib/byebug/command.rb +1 -1
- data/lib/byebug/commands/frame.rb +28 -44
- data/lib/byebug/commands/info.rb +2 -1
- data/lib/byebug/commands/list.rb +1 -1
- data/lib/byebug/commands/repl.rb +7 -21
- data/lib/byebug/commands/set.rb +4 -9
- data/lib/byebug/commands/trace.rb +2 -2
- data/lib/byebug/context.rb +7 -16
- data/lib/byebug/processor.rb +16 -18
- data/lib/byebug/version.rb +1 -1
- data/old_doc/byebug.texi +12 -17
- data/test/breakpoints_test.rb +75 -61
- data/test/conditions_test.rb +7 -7
- data/test/continue_test.rb +5 -5
- data/test/display_test.rb +6 -6
- data/test/edit_test.rb +2 -2
- data/test/examples/{breakpoint1.rb → breakpoint.rb} +0 -0
- data/test/examples/breakpoint_deep.rb +24 -0
- data/test/finish_test.rb +5 -5
- data/test/frame_test.rb +27 -38
- data/test/jump_test.rb +6 -7
- data/test/list_test.rb +1 -1
- data/test/post_mortem_test.rb +1 -1
- data/test/repl_test.rb +4 -40
- data/test/set_test.rb +3 -3
- data/test/show_test.rb +1 -1
- data/test/stepping_test.rb +15 -16
- data/test/support/test_dsl.rb +9 -16
- data/test/trace_test.rb +2 -2
- metadata +6 -6
- data/test/support/mocha_extensions.rb +0 -71
data/test/set_test.rb
CHANGED
@@ -69,14 +69,14 @@ class TestSet < TestDsl::TestCase
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe 'testing' do
|
72
|
-
describe '$
|
72
|
+
describe '$state' do
|
73
73
|
describe 'when setting "testing" to on' do
|
74
74
|
temporary_change_hash Byebug::Command.settings, :testing, false
|
75
75
|
|
76
76
|
it 'must get set' do
|
77
77
|
enter 'set testing', 'break 3', 'cont'
|
78
78
|
debug_file('set') {
|
79
|
-
$
|
79
|
+
$state.must_be_kind_of Byebug::CommandProcessor::State }
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -85,7 +85,7 @@ class TestSet < TestDsl::TestCase
|
|
85
85
|
|
86
86
|
it 'must get unset' do
|
87
87
|
enter 'set notesting', 'break 3', 'cont'
|
88
|
-
debug_file('set') { $
|
88
|
+
debug_file('set') { $state.must_be_nil }
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
data/test/show_test.rb
CHANGED
data/test/stepping_test.rb
CHANGED
@@ -11,17 +11,17 @@ class TestStepping < TestDsl::TestCase
|
|
11
11
|
|
12
12
|
it 'must leave on the same line by default' do
|
13
13
|
enter 'next'
|
14
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
14
|
+
debug_file('stepping') { $state.line.must_equal 10 }
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'must go to the next line if forced by "plus" sign' do
|
18
18
|
enter 'next+'
|
19
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
19
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'must leave on the same line if forced by "minus" sign' do
|
23
23
|
enter 'next-'
|
24
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
24
|
+
debug_file('stepping') { $state.line.must_equal 10 }
|
25
25
|
end
|
26
26
|
|
27
27
|
describe 'when force_stepping is set' do
|
@@ -29,22 +29,22 @@ class TestStepping < TestDsl::TestCase
|
|
29
29
|
|
30
30
|
it 'must go to the next line' do
|
31
31
|
enter 'next'
|
32
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
32
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'must go to the next line (by shortcut)' do
|
36
36
|
enter 'n'
|
37
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
37
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'must go the specified number of lines forward by default' do
|
41
41
|
enter 'next 2'
|
42
|
-
debug_file('stepping') { state.line.must_equal 21 }
|
42
|
+
debug_file('stepping') { $state.line.must_equal 21 }
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'must ignore it if "minus" is specified' do
|
46
46
|
enter 'next-'
|
47
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
47
|
+
debug_file('stepping') { $state.line.must_equal 10 }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -54,7 +54,7 @@ class TestStepping < TestDsl::TestCase
|
|
54
54
|
|
55
55
|
it 'must step over blocks' do
|
56
56
|
enter 'next'
|
57
|
-
debug_file('stepping') { state.line.must_equal 25 }
|
57
|
+
debug_file('stepping') { $state.line.must_equal 25 }
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -82,17 +82,17 @@ class TestStepping < TestDsl::TestCase
|
|
82
82
|
|
83
83
|
it 'must leave on the same line if forced by a setting' do
|
84
84
|
enter 'step'
|
85
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
85
|
+
debug_file('stepping') { $state.line.must_equal 10 }
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'must go to the step line if forced to do that by "plus" sign' do
|
89
89
|
enter 'step+'
|
90
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
90
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'must leave on the same line if forced to do that by "minus" sign' do
|
94
94
|
enter 'step-'
|
95
|
-
debug_file('stepping') { state.line.must_equal 10 }
|
95
|
+
debug_file('stepping') { $state.line.must_equal 10 }
|
96
96
|
end
|
97
97
|
|
98
98
|
describe 'when force_stepping is set' do
|
@@ -100,17 +100,17 @@ class TestStepping < TestDsl::TestCase
|
|
100
100
|
|
101
101
|
it 'must go to the step line if forced by a setting' do
|
102
102
|
enter 'step'
|
103
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
103
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
104
104
|
end
|
105
105
|
|
106
106
|
it 'must go to the next line if forced by a setting (by shortcut)' do
|
107
107
|
enter 's'
|
108
|
-
debug_file('stepping') { state.line.must_equal 11 }
|
108
|
+
debug_file('stepping') { $state.line.must_equal 11 }
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'must go the specified number of lines forward by default' do
|
112
112
|
enter 'step 2'
|
113
|
-
debug_file('stepping') { state.line.must_equal 15 }
|
113
|
+
debug_file('stepping') { $state.line.must_equal 15 }
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -120,10 +120,9 @@ class TestStepping < TestDsl::TestCase
|
|
120
120
|
|
121
121
|
it 'must step into blocks' do
|
122
122
|
enter 'step'
|
123
|
-
debug_file('stepping') { state.line.must_equal 22 }
|
123
|
+
debug_file('stepping') { $state.line.must_equal 22 }
|
124
124
|
end
|
125
125
|
end
|
126
|
-
|
127
126
|
end
|
128
127
|
|
129
128
|
describe 'Post Mortem' do
|
data/test/support/test_dsl.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
module TestDsl
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestCase < MiniTest::Spec
|
4
|
+
include TestDsl
|
5
|
+
|
6
|
+
def setup
|
7
|
+
Byebug.interface = TestInterface.new
|
8
|
+
Byebug.handler.display.clear
|
9
|
+
end
|
4
10
|
|
5
11
|
def self.temporary_change_hash hash, key, value
|
6
12
|
before do
|
@@ -36,15 +42,6 @@ module TestDsl
|
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
39
|
-
class TestCase < TestBase
|
40
|
-
include TestDsl
|
41
|
-
|
42
|
-
def setup
|
43
|
-
Byebug.interface = TestInterface.new
|
44
|
-
Byebug.handler.display.clear
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
45
|
##
|
49
46
|
# Expand fullpath of a given example file
|
50
47
|
#
|
@@ -83,7 +80,7 @@ module TestDsl
|
|
83
80
|
# debug "ex1" # ex1 should be placed in test/examples/ex1.rb
|
84
81
|
#
|
85
82
|
# enter 'b 4', 'cont'
|
86
|
-
# debug("ex1") { state.line.must_equal 4 }
|
83
|
+
# debug("ex1") { $state.line.must_equal 4 }
|
87
84
|
#
|
88
85
|
def debug_file(filename, &block)
|
89
86
|
is_test_block_called = false
|
@@ -148,12 +145,8 @@ module TestDsl
|
|
148
145
|
Byebug.handler.interface
|
149
146
|
end
|
150
147
|
|
151
|
-
def state
|
152
|
-
$byebug_state
|
153
|
-
end
|
154
|
-
|
155
148
|
def context
|
156
|
-
$
|
149
|
+
$state.context
|
157
150
|
end
|
158
151
|
|
159
152
|
def force_set_const(klass, const, value)
|
data/test/trace_test.rb
CHANGED
@@ -84,12 +84,12 @@ class TestTrace < TestDsl::TestCase
|
|
84
84
|
|
85
85
|
it 'must track global variable with stop' do
|
86
86
|
enter 'trace variable $bla stop', 'break 7', 'cont'
|
87
|
-
debug_file('trace') { state.line.must_equal 4 }
|
87
|
+
debug_file('trace') { $state.line.must_equal 4 }
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'must track global variable with nostop' do
|
91
91
|
enter 'trace variable $bla nostop', 'break 7', 'cont'
|
92
|
-
debug_file('trace') { state.line.must_equal 7 }
|
92
|
+
debug_file('trace') { $state.line.must_equal 7 }
|
93
93
|
end
|
94
94
|
|
95
95
|
describe 'errors' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: byebug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Rodríguez
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-07-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: columnize
|
@@ -163,8 +163,9 @@ files:
|
|
163
163
|
- test/display_test.rb
|
164
164
|
- test/edit_test.rb
|
165
165
|
- test/eval_test.rb
|
166
|
-
- test/examples/
|
166
|
+
- test/examples/breakpoint.rb
|
167
167
|
- test/examples/breakpoint2.rb
|
168
|
+
- test/examples/breakpoint_deep.rb
|
168
169
|
- test/examples/conditions.rb
|
169
170
|
- test/examples/continue.rb
|
170
171
|
- test/examples/display.rb
|
@@ -216,7 +217,6 @@ files:
|
|
216
217
|
- test/support/breakpoint.rb
|
217
218
|
- test/support/context.rb
|
218
219
|
- test/support/matchers.rb
|
219
|
-
- test/support/mocha_extensions.rb
|
220
220
|
- test/support/processor.rb
|
221
221
|
- test/support/test_dsl.rb
|
222
222
|
- test/support/test_interface.rb
|
@@ -254,8 +254,9 @@ test_files:
|
|
254
254
|
- test/display_test.rb
|
255
255
|
- test/edit_test.rb
|
256
256
|
- test/eval_test.rb
|
257
|
-
- test/examples/
|
257
|
+
- test/examples/breakpoint.rb
|
258
258
|
- test/examples/breakpoint2.rb
|
259
|
+
- test/examples/breakpoint_deep.rb
|
259
260
|
- test/examples/conditions.rb
|
260
261
|
- test/examples/continue.rb
|
261
262
|
- test/examples/display.rb
|
@@ -307,7 +308,6 @@ test_files:
|
|
307
308
|
- test/support/breakpoint.rb
|
308
309
|
- test/support/context.rb
|
309
310
|
- test/support/matchers.rb
|
310
|
-
- test/support/mocha_extensions.rb
|
311
311
|
- test/support/processor.rb
|
312
312
|
- test/support/test_dsl.rb
|
313
313
|
- test/support/test_interface.rb
|
@@ -1,71 +0,0 @@
|
|
1
|
-
module Mocha
|
2
|
-
|
3
|
-
class Expectation
|
4
|
-
# Allows to specify a block to execute when expectation will be matched.
|
5
|
-
# This way, we can specify dynamic values to return or just make some side effects
|
6
|
-
#
|
7
|
-
# Example:
|
8
|
-
# foo.expects(:bar).with('bla').calls { 2 + 3 }
|
9
|
-
# foo.bar('bla') # => 5
|
10
|
-
#
|
11
|
-
def calls(&block)
|
12
|
-
@calls ||= Call.new
|
13
|
-
@calls += Call.new(block)
|
14
|
-
self
|
15
|
-
end
|
16
|
-
|
17
|
-
def invoke_with_calls(arguments, &block)
|
18
|
-
invoke_without_calls(&block) || (@calls.next(arguments, &block) if @calls)
|
19
|
-
end
|
20
|
-
alias_method :invoke_without_calls, :invoke
|
21
|
-
alias_method :invoke, :invoke_with_calls
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
class Mock
|
26
|
-
# We monkey-patch that method to be able to pass arguments to
|
27
|
-
# Expectation#invoke method
|
28
|
-
def method_missing(symbol, *arguments, &block)
|
29
|
-
if @responder and not @responder.respond_to?(symbol)
|
30
|
-
raise NoMethodError,
|
31
|
-
"undefined method `#{symbol}' for #{self.mocha_inspect} which " \
|
32
|
-
"responds like #{@responder.mocha_inspect}"
|
33
|
-
end
|
34
|
-
if matching_expectation_allowing_invocation =
|
35
|
-
@expectations.match_allowing_invocation(symbol, *arguments)
|
36
|
-
# We change this line - added arguments
|
37
|
-
matching_expectation_allowing_invocation.invoke(arguments, &block)
|
38
|
-
elsif (matching_expectation = @expectations.match(symbol, *arguments)) ||
|
39
|
-
(!matching_expectation && !@everything_stubbed)
|
40
|
-
# We change this line - added arguments
|
41
|
-
matching_expectation.invoke(arguments, &block) if matching_expectation
|
42
|
-
message = UnexpectedInvocation.new(self, symbol, *arguments).to_s
|
43
|
-
require 'mocha/mockery'
|
44
|
-
message << Mockery.instance.mocha_inspect
|
45
|
-
raise ExpectationError.new(message, caller)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
class Call
|
52
|
-
attr_reader :blocks
|
53
|
-
|
54
|
-
def initialize(*blocks)
|
55
|
-
@blocks = [ *blocks ]
|
56
|
-
end
|
57
|
-
|
58
|
-
def next(arguments, &block)
|
59
|
-
case @blocks.length
|
60
|
-
when 0 then nil
|
61
|
-
when 1 then @blocks.first.call(*arguments, &block)
|
62
|
-
else @blocks.shift.call(*arguments, &block)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def +(other)
|
67
|
-
self.class.new(*(@blocks + other.blocks))
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|