summaryrefslogtreecommitdiff
path: root/spec/ruby/shared
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/shared')
-rw-r--r--spec/ruby/shared/complex/Complex.rb12
-rw-r--r--spec/ruby/shared/complex/hash.rb16
-rw-r--r--spec/ruby/shared/fiber/resume.rb11
-rw-r--r--spec/ruby/shared/hash/key_error.rb25
4 files changed, 39 insertions, 25 deletions
diff --git a/spec/ruby/shared/complex/Complex.rb b/spec/ruby/shared/complex/Complex.rb
index 15feb65754..0bed5c1a36 100644
--- a/spec/ruby/shared/complex/Complex.rb
+++ b/spec/ruby/shared/complex/Complex.rb
@@ -35,7 +35,7 @@ describe :kernel_Complex, shared: true do
end
end
- describe "when passed [Integer]" do
+ describe "when passed [Integer/Float]" do
it "returns a new Complex number with 0 as the imaginary component" do
# Guard against the Mathn library
conflicts_with :Prime do
@@ -62,7 +62,7 @@ describe :kernel_Complex, shared: true do
it "needs to be reviewed for spec completeness"
end
- describe "when passed an Objectc which responds to #to_c" do
+ describe "when passed an Object which responds to #to_c" do
it "returns the passed argument" do
obj = Object.new; def obj.to_c; 1i end
Complex(obj).should == Complex(0, 1)
@@ -130,4 +130,12 @@ describe :kernel_Complex, shared: true do
lambda { Complex.send(@method, 0, :sym) }.should raise_error(TypeError)
end
end
+
+ describe "when passed nil" do
+ it "raises TypeError" do
+ lambda { Complex(nil) }.should raise_error(TypeError, "can't convert nil into Complex")
+ lambda { Complex(0, nil) }.should raise_error(TypeError, "can't convert nil into Complex")
+ lambda { Complex(nil, 0) }.should raise_error(TypeError, "can't convert nil into Complex")
+ end
+ end
end
diff --git a/spec/ruby/shared/complex/hash.rb b/spec/ruby/shared/complex/hash.rb
deleted file mode 100644
index 26ca59aeaf..0000000000
--- a/spec/ruby/shared/complex/hash.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require File.expand_path('../../../spec_helper', __FILE__)
-
-describe :complex_hash, shared: true do
- it "is static" do
- Complex(1).hash.should == Complex(1).hash
- Complex(1, 0).hash.should == Complex(1).hash
- Complex(1, 1).hash.should == Complex(1, 1).hash
- end
-
- it "is different for different instances" do
- Complex(1, 2).hash.should_not == Complex(1, 1).hash
- Complex(2, 1).hash.should_not == Complex(1, 1).hash
-
- Complex(1, 2).hash.should_not == Complex(2, 1).hash
- end
-end
diff --git a/spec/ruby/shared/fiber/resume.rb b/spec/ruby/shared/fiber/resume.rb
index 058ef4e15a..e2d30d781b 100644
--- a/spec/ruby/shared/fiber/resume.rb
+++ b/spec/ruby/shared/fiber/resume.rb
@@ -4,19 +4,16 @@ describe :fiber_resume, shared: true do
fiber.send(@method).should == :fiber
end
- it "raises a FiberError if the Fiber tries to resume itself" do
- fiber = Fiber.new { fiber.resume }
- -> { fiber.resume }.should raise_error(FiberError, /double resume/)
- end
-
it "raises a FiberError if invoked from a different Thread" do
fiber = Fiber.new { 42 }
Thread.new do
-> {
- fiber.resume
+ fiber.send(@method)
}.should raise_error(FiberError)
end.join
- fiber.resume.should == 42
+
+ # Check the Fiber can still be used
+ fiber.send(@method).should == 42
end
it "passes control to the beginning of the block on first invocation" do
diff --git a/spec/ruby/shared/hash/key_error.rb b/spec/ruby/shared/hash/key_error.rb
new file mode 100644
index 0000000000..061c88c483
--- /dev/null
+++ b/spec/ruby/shared/hash/key_error.rb
@@ -0,0 +1,25 @@
+describe :key_error, shared: true do
+ it "raises a KeyError" do
+ -> {
+ @method.call(@object, 'foo')
+ }.should raise_error(KeyError)
+ end
+
+ ruby_version_is "2.5" do
+ it "sets the Hash as the receiver of KeyError" do
+ -> {
+ @method.call(@object, 'foo')
+ }.should raise_error(KeyError) { |err|
+ err.receiver.should equal(@object)
+ }
+ end
+
+ it "sets the unmatched key as the key of KeyError" do
+ -> {
+ @method.call(@object, 'foo')
+ }.should raise_error(KeyError) { |err|
+ err.key.to_s.should == 'foo'
+ }
+ end
+ end
+end