aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/core/tracepoint
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-01 15:41:50 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-12-01 15:41:50 +0000
commit4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4 (patch)
tree8d712e18a619a9720d181d0d44e8cc2474ff31ee /spec/ruby/core/tracepoint
parent821d9a2d30f2e0d3f9009dc001b4b49aaa63c66e (diff)
downloadruby-4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4.tar.gz
Update to ruby/spec@bacedc5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/core/tracepoint')
-rw-r--r--spec/ruby/core/tracepoint/binding_spec.rb19
-rw-r--r--spec/ruby/core/tracepoint/defined_class_spec.rb26
-rw-r--r--spec/ruby/core/tracepoint/disable_spec.rb64
-rw-r--r--spec/ruby/core/tracepoint/enable_spec.rb92
-rw-r--r--spec/ruby/core/tracepoint/enabled_spec.rb14
-rw-r--r--spec/ruby/core/tracepoint/event_spec.rb21
-rw-r--r--spec/ruby/core/tracepoint/fixtures/classes.rb28
-rw-r--r--spec/ruby/core/tracepoint/inspect_spec.rb8
-rw-r--r--spec/ruby/core/tracepoint/lineno_spec.rb10
-rw-r--r--spec/ruby/core/tracepoint/method_id_spec.rb13
-rw-r--r--spec/ruby/core/tracepoint/new_spec.rb68
-rw-r--r--spec/ruby/core/tracepoint/path_spec.rb18
-rw-r--r--spec/ruby/core/tracepoint/raised_exception_spec.rb16
-rw-r--r--spec/ruby/core/tracepoint/return_value_spec.rb13
-rw-r--r--spec/ruby/core/tracepoint/self_spec.rb10
-rw-r--r--spec/ruby/core/tracepoint/trace_spec.rb9
16 files changed, 428 insertions, 1 deletions
diff --git a/spec/ruby/core/tracepoint/binding_spec.rb b/spec/ruby/core/tracepoint/binding_spec.rb
new file mode 100644
index 0000000000..6d327fb693
--- /dev/null
+++ b/spec/ruby/core/tracepoint/binding_spec.rb
@@ -0,0 +1,19 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#binding' do
+ def test
+ secret = 42
+ end
+
+ it 'return the generated binding object from event' do
+ bindings = []
+ TracePoint.new(:return) { |tp|
+ bindings << tp.binding
+ }.enable {
+ test
+ }
+ bindings.size.should == 1
+ bindings[0].should be_kind_of(Binding)
+ bindings[0].local_variables.should == [:secret]
+ end
+end
diff --git a/spec/ruby/core/tracepoint/defined_class_spec.rb b/spec/ruby/core/tracepoint/defined_class_spec.rb
new file mode 100644
index 0000000000..c5a93c6e04
--- /dev/null
+++ b/spec/ruby/core/tracepoint/defined_class_spec.rb
@@ -0,0 +1,26 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe 'TracePoint#defined_class' do
+ it 'returns class or module of the method being called' do
+ last_class_name = nil
+ TracePoint.new(:call) do |tp|
+ last_class_name = tp.defined_class
+ end.enable do
+ TracePointSpec::B.new.foo
+ last_class_name.should equal(TracePointSpec::B)
+
+ TracePointSpec::B.new.bar
+ last_class_name.should equal(TracePointSpec::A)
+
+ c = TracePointSpec::C.new
+ last_class_name.should equal(TracePointSpec::C)
+
+ c.foo
+ last_class_name.should equal(TracePointSpec::B)
+
+ c.bar
+ last_class_name.should equal(TracePointSpec::A)
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/disable_spec.rb b/spec/ruby/core/tracepoint/disable_spec.rb
new file mode 100644
index 0000000000..7da644621b
--- /dev/null
+++ b/spec/ruby/core/tracepoint/disable_spec.rb
@@ -0,0 +1,64 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#disable' do
+ def test; end
+ it 'returns true if trace was enabled' do
+ event_name, method_name = nil
+ trace = TracePoint.new(:call) do |tp|
+ event_name = tp.event
+ method_name = tp.method_id
+ end
+
+ trace.enable
+ trace.disable.should be_true
+ event_name, method_name = nil
+ test
+ method_name.equal?(:test).should be_false
+ event_name.should equal(nil)
+ end
+
+ it 'returns false if trace was disabled' do
+ event_name, method_name = nil
+ trace = TracePoint.new(:call) do |tp|
+ event_name = tp.event
+ method_name = tp.method_id
+ end
+
+ trace.disable.should be_false
+ event_name, method_name = nil
+ test
+ method_name.equal?(:test).should be_false
+ event_name.should equal(nil)
+ end
+
+ it 'is disabled within a block & is enabled outside the block' do
+ enabled = nil
+ trace = TracePoint.new(:line) {}
+ trace.enable
+ trace.disable { enabled = trace.enabled? }
+ enabled.should be_false
+ trace.enabled?.should be_true
+ trace.disable
+ end
+
+ it 'is disabled within a block & also returns false when its called with a block' do
+ trace = TracePoint.new(:line) {}
+ trace.enable
+ trace.disable { trace.enabled? }.should == false
+ trace.enabled?.should equal(true)
+ trace.disable
+ end
+
+ ruby_bug "#14057", "2.0"..."2.5" do
+ it 'can accept param within a block but it should not yield arguments' do
+ event_name = nil
+ trace = TracePoint.new(:line) {}
+ trace.enable
+ trace.disable do |*args|
+ args.should == []
+ end
+ trace.enabled?.should be_true
+ trace.disable
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/enable_spec.rb b/spec/ruby/core/tracepoint/enable_spec.rb
new file mode 100644
index 0000000000..675f9939c1
--- /dev/null
+++ b/spec/ruby/core/tracepoint/enable_spec.rb
@@ -0,0 +1,92 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#enable' do
+ def test; end
+
+ describe 'without a block' do
+ it 'returns true if trace was enabled' do
+ event_name, method_name = nil, nil
+ method_name = []
+ trace = TracePoint.new(:call) do |tp|
+ event_name = tp.event
+ method_name << tp.method_id
+ end
+
+ test
+ event_name.should == nil
+
+ trace.enable
+ test
+ event_name.should equal(:call)
+ trace.disable
+ end
+
+ it 'returns false if trace was disabled' do
+ event_name, method_name = nil, nil
+ trace = TracePoint.new(:call) do |tp|
+ event_name = tp.event
+ method_name = tp.method_id
+ end
+
+ trace.enable.should be_false
+ event_name.should equal(:call)
+ test
+ method_name.equal?(:test).should be_true
+
+ trace.disable
+ event_name, method_name = nil
+ test
+ method_name.equal?(:test).should be_false
+ event_name.should equal(nil)
+
+ trace.enable.should be_false
+ event_name.should equal(:call)
+ test
+ method_name.equal?(:test).should be_true
+ trace.disable
+ end
+ end
+
+ describe 'with a block' do
+ it 'enables the trace object within a block' do
+ event_name = nil
+ TracePoint.new(:line) do |tp|
+ event_name = tp.event
+ end.enable { event_name.should equal(:line) }
+ end
+
+ ruby_bug "#14057", "2.0"..."2.5" do
+ it 'can accept arguments within a block but it should not yield arguments' do
+ event_name = nil
+ trace = TracePoint.new(:line) { |tp| event_name = tp.event }
+ trace.enable do |*args|
+ event_name.should equal(:line)
+ args.should == []
+ end
+ trace.enabled?.should be_false
+ end
+ end
+
+ it 'enables trace object on calling with a block if it was already enabled' do
+ enabled = nil
+ trace = TracePoint.new(:line) {}
+ trace.enable
+ trace.enable { enabled = trace.enabled? }
+ enabled.should == true
+ trace.disable
+ end
+
+ it 'returns value returned by the block' do
+ trace = TracePoint.new(:line) {}
+ trace.enable { true; 'test' }.should == 'test'
+ end
+
+ it 'disables the trace object outside the block' do
+ event_name = nil
+ trace = TracePoint.new(:line) { |tp|event_name = tp.event }
+ trace.enable { '2 + 2' }
+ event_name.should equal(:line)
+ trace.enabled?.should be_false
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/enabled_spec.rb b/spec/ruby/core/tracepoint/enabled_spec.rb
new file mode 100644
index 0000000000..0b5130979f
--- /dev/null
+++ b/spec/ruby/core/tracepoint/enabled_spec.rb
@@ -0,0 +1,14 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#enabled?' do
+ it 'returns true when current status of the trace is enable' do
+ trace = TracePoint.new(:call) {}
+ trace.enable do
+ trace.enabled?.should be_true
+ end
+ end
+
+ it 'returns false when current status of the trace is disabled' do
+ TracePoint.new(:call) {}.enabled?.should be_false
+ end
+end
diff --git a/spec/ruby/core/tracepoint/event_spec.rb b/spec/ruby/core/tracepoint/event_spec.rb
new file mode 100644
index 0000000000..46bc7a0d50
--- /dev/null
+++ b/spec/ruby/core/tracepoint/event_spec.rb
@@ -0,0 +1,21 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe 'TracePoint#event' do
+ it 'returns the type of event' do
+ event_name = nil
+ TracePoint.new(:end, :call) do |tp|
+ event_name = tp.event
+ end.enable do
+ TracePointSpec.test
+ event_name.should equal(:call)
+
+ TracePointSpec::B.new.foo
+ event_name.should equal(:call)
+
+ class TracePointSpec::B; end
+ event_name.should equal(:end)
+ end
+
+ end
+end
diff --git a/spec/ruby/core/tracepoint/fixtures/classes.rb b/spec/ruby/core/tracepoint/fixtures/classes.rb
index fd22ac319d..49c70e1915 100644
--- a/spec/ruby/core/tracepoint/fixtures/classes.rb
+++ b/spec/ruby/core/tracepoint/fixtures/classes.rb
@@ -4,5 +4,31 @@ module TracePointSpec
end
alias_method :m_alias, :m
end
-end
+ module A
+ def bar; end
+ end
+
+ class B
+ include A
+
+ def foo; end;
+ end
+
+ class C < B
+ def initialize
+ end
+
+ def foo
+ super
+ end
+
+ def bar
+ super
+ end
+ end
+
+ def self.test
+ 'test'
+ end
+end
diff --git a/spec/ruby/core/tracepoint/inspect_spec.rb b/spec/ruby/core/tracepoint/inspect_spec.rb
new file mode 100644
index 0000000000..3902872ab5
--- /dev/null
+++ b/spec/ruby/core/tracepoint/inspect_spec.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#inspect' do
+ it 'returns a string containing a human-readable TracePoint status' do
+ TracePoint.new(:call) {}.inspect.should ==
+ '#<TracePoint:disabled>'
+ end
+end
diff --git a/spec/ruby/core/tracepoint/lineno_spec.rb b/spec/ruby/core/tracepoint/lineno_spec.rb
new file mode 100644
index 0000000000..49be6f8116
--- /dev/null
+++ b/spec/ruby/core/tracepoint/lineno_spec.rb
@@ -0,0 +1,10 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#lineno' do
+ it 'returns the line number of the event' do
+ lineno = nil
+ TracePoint.new(:line) { |tp| lineno = tp.lineno }.enable do
+ lineno.should == 7
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/method_id_spec.rb b/spec/ruby/core/tracepoint/method_id_spec.rb
new file mode 100644
index 0000000000..4b18ba696d
--- /dev/null
+++ b/spec/ruby/core/tracepoint/method_id_spec.rb
@@ -0,0 +1,13 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#method_id' do
+ def test; end
+
+ it 'returns the name at the definition of the method being called' do
+ method_name = nil
+ TracePoint.new(:call) { |tp| method_name = tp.method_id}.enable do
+ test
+ method_name.should equal(:test)
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/new_spec.rb b/spec/ruby/core/tracepoint/new_spec.rb
new file mode 100644
index 0000000000..c3f6d60f5c
--- /dev/null
+++ b/spec/ruby/core/tracepoint/new_spec.rb
@@ -0,0 +1,68 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+require File.expand_path('../fixtures/classes', __FILE__)
+
+describe 'TracePoint.new' do
+ it 'returns a new TracePoint object, not enabled by default' do
+ TracePoint.new(:call) {}.enabled?.should be_false
+ end
+
+ it 'includes :line event when event is not specified' do
+ event_name = nil
+ TracePoint.new() { |tp| event_name = tp.event }.enable do
+ event_name.should equal(:line)
+
+ event_name = nil
+ TracePointSpec.test
+ event_name.should equal(:line)
+
+ event_name = nil
+ TracePointSpec::B.new.foo
+ event_name.should equal(:line)
+ end
+ end
+
+ it 'converts given event name as string into symbol using to_sym' do
+ event_name = nil
+ (o = mock('return')).should_receive(:to_sym).and_return(:return)
+
+ TracePoint.new(o) { |tp| event_name = tp.event}.enable do
+ event_name.should equal(nil)
+ TracePointSpec.test
+ event_name.should equal(:return)
+ end
+ end
+
+ it 'includes multiple events when multiple event names are passed as params' do
+ event_name = nil
+ TracePoint.new(:end, :call) do |tp|
+ event_name = tp.event
+ end.enable do
+ TracePointSpec.test
+ event_name.should equal(:call)
+
+ TracePointSpec::B.new.foo
+ event_name.should equal(:call)
+
+ class TracePointSpec::B; end
+ event_name.should equal(:end)
+ end
+ end
+
+ it 'raises a TypeError when the given object is not a string/symbol' do
+ o = mock('123')
+ -> { TracePoint.new(o) {}}.should raise_error(TypeError)
+
+ o.should_receive(:to_sym).and_return(123)
+ -> { TracePoint.new(o) {}}.should raise_error(TypeError)
+ end
+
+ ruby_bug "#140740", "2.0"..."2.5" do
+ it 'expects to be called with a block' do
+ -> { TracePoint.new(:line) }.should raise_error(ArgumentError)
+ end
+ end
+
+ it "raises a Argument error when the give argument doesn't match an event name" do
+ -> { TracePoint.new(:test) }.should raise_error(ArgumentError)
+ end
+end
diff --git a/spec/ruby/core/tracepoint/path_spec.rb b/spec/ruby/core/tracepoint/path_spec.rb
new file mode 100644
index 0000000000..61592f5106
--- /dev/null
+++ b/spec/ruby/core/tracepoint/path_spec.rb
@@ -0,0 +1,18 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#path' do
+ it 'returns the path of the file being run' do
+ path = nil
+ TracePoint.new(:line) { |tp| path = tp.path }.enable do
+ path.should == "#{__FILE__}"
+ end
+ end
+
+ it 'equals (eval) inside an eval for :end event' do
+ path = nil
+ TracePoint.new(:end) { |tp| path = tp.path }.enable do
+ eval("class A; end")
+ path.should == '(eval)'
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/raised_exception_spec.rb b/spec/ruby/core/tracepoint/raised_exception_spec.rb
new file mode 100644
index 0000000000..6c81431b25
--- /dev/null
+++ b/spec/ruby/core/tracepoint/raised_exception_spec.rb
@@ -0,0 +1,16 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#raised_exception' do
+ it 'returns value from exception raised on the :raise event' do
+ raised_exception, error_result = nil
+ trace = TracePoint.new(:raise) { |tp| raised_exception = tp.raised_exception }
+ trace.enable do
+ begin
+ raise StandardError
+ rescue => e
+ error_result = e
+ end
+ raised_exception.should equal(error_result)
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/return_value_spec.rb b/spec/ruby/core/tracepoint/return_value_spec.rb
new file mode 100644
index 0000000000..c9cfe091cd
--- /dev/null
+++ b/spec/ruby/core/tracepoint/return_value_spec.rb
@@ -0,0 +1,13 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#return_value' do
+ def test; 'test' end
+
+ it 'returns value from :return event' do
+ trace_value = nil
+ TracePoint.new(:return) { |tp| trace_value = tp.return_value}.enable do
+ test
+ trace_value.should == 'test'
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/self_spec.rb b/spec/ruby/core/tracepoint/self_spec.rb
new file mode 100644
index 0000000000..9d33aa7477
--- /dev/null
+++ b/spec/ruby/core/tracepoint/self_spec.rb
@@ -0,0 +1,10 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint#self' do
+ it 'return the trace object from event' do
+ trace = nil
+ TracePoint.new(:line) { |tp| trace = tp.self }.enable do
+ trace.equal?(self).should be_true
+ end
+ end
+end
diff --git a/spec/ruby/core/tracepoint/trace_spec.rb b/spec/ruby/core/tracepoint/trace_spec.rb
new file mode 100644
index 0000000000..9279348026
--- /dev/null
+++ b/spec/ruby/core/tracepoint/trace_spec.rb
@@ -0,0 +1,9 @@
+require File.expand_path('../../../spec_helper', __FILE__)
+
+describe 'TracePoint.trace' do
+ it 'activates the trace automatically' do
+ trace = TracePoint.trace(:call) {}
+ trace.enabled?.should be_true
+ trace.disable
+ end
+end