aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/shared
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/shared')
-rw-r--r--spec/ruby/shared/enumerator/enum_for.rb7
-rw-r--r--spec/ruby/shared/kernel/raise.rb45
2 files changed, 41 insertions, 11 deletions
diff --git a/spec/ruby/shared/enumerator/enum_for.rb b/spec/ruby/shared/enumerator/enum_for.rb
index 9030ffbd7d..a67a76c461 100644
--- a/spec/ruby/shared/enumerator/enum_for.rb
+++ b/spec/ruby/shared/enumerator/enum_for.rb
@@ -12,6 +12,13 @@ describe :enum_for, shared: true do
enum.map { |v| v }.should == [1,2].each { |v| v }
end
+ it "sets regexp matches in the caller" do
+ "wawa".send(@method, :scan, /./).map {|o| $& }.should == ["w", "a", "w", "a"]
+ a = []
+ "wawa".send(@method, :scan, /./).each {|o| a << $& }
+ a.should == ["w", "a", "w", "a"]
+ end
+
it "exposes multi-arg yields as an array" do
o = Object.new
def o.each
diff --git a/spec/ruby/shared/kernel/raise.rb b/spec/ruby/shared/kernel/raise.rb
index 7d9954e29a..f00a6ef294 100644
--- a/spec/ruby/shared/kernel/raise.rb
+++ b/spec/ruby/shared/kernel/raise.rb
@@ -50,20 +50,43 @@ describe :kernel_raise, shared: true do
end
it "re-raises a previously rescued exception without overwriting the backtrace" do
- begin
- initial_raise_line = __LINE__; @object.raise 'raised'
- rescue => raised
- begin
- raise_again_line = __LINE__; @object.raise raised
- rescue => raised_again
- # This spec is written using #backtrace and matching the line number
- # from the string, as backtrace_locations is a more advanced
- # method that is not always supported by implementations.
+ # This spec is written using #backtrace and matching the line number
+ # from the string, as backtrace_locations is a more advanced
+ # method that is not always supported by implementations.
+ #
+ initial_raise_line = nil
+ raise_again_line = nil
+ raised_again = nil
- raised_again.backtrace.first.should include("#{__FILE__}:#{initial_raise_line}:")
- raised_again.backtrace.first.should_not include("#{__FILE__}:#{raise_again_line}:")
+ if defined?(FiberSpecs::NewFiberToRaise) and @object == FiberSpecs::NewFiberToRaise
+ fiber = Fiber.new do
+ begin
+ initial_raise_line = __LINE__; Fiber.yield
+ rescue => raised
+ begin
+ raise_again_line = __LINE__; Fiber.yield raised
+ rescue => raised_again
+ raised_again
+ end
+ end
+ end
+ fiber.resume
+ raised = fiber.raise 'raised'
+ raised_again = fiber.raise raised
+ else
+ begin
+ initial_raise_line = __LINE__; @object.raise 'raised'
+ rescue => raised
+ begin
+ raise_again_line = __LINE__; @object.raise raised
+ rescue => raised_again
+ raised_again
+ end
end
end
+
+ raised_again.backtrace.first.should include("#{__FILE__}:#{initial_raise_line}:")
+ raised_again.backtrace.first.should_not include("#{__FILE__}:#{raise_again_line}:")
end
it "allows Exception, message, and backtrace parameters" do