aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/core/hash/slice_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/hash/slice_spec.rb')
-rw-r--r--spec/ruby/core/hash/slice_spec.rb21
1 files changed, 20 insertions, 1 deletions
diff --git a/spec/ruby/core/hash/slice_spec.rb b/spec/ruby/core/hash/slice_spec.rb
index d414b1919f..f7717c9404 100644
--- a/spec/ruby/core/hash/slice_spec.rb
+++ b/spec/ruby/core/hash/slice_spec.rb
@@ -6,10 +6,11 @@ ruby_version_is "2.5" do
@hash = { a: 1, b: 2, c: 3 }
end
- it "returns new hash" do
+ it "returns a new empty hash without arguments" do
ret = @hash.slice
ret.should_not equal(@hash)
ret.should be_an_instance_of(Hash)
+ ret.should == {}
end
it "returns the requested subset" do
@@ -27,10 +28,28 @@ ruby_version_is "2.5" do
it "returns a Hash instance, even on subclasses" do
klass = Class.new(Hash)
h = klass.new
+ h[:bar] = 12
h[:foo] = 42
r = h.slice(:foo)
r.should == {foo: 42}
r.class.should == Hash
end
+
+ it "uses the regular Hash#[] method, even on subclasses that override it" do
+ ScratchPad.record []
+ klass = Class.new(Hash) do
+ def [](value)
+ ScratchPad << :used_subclassed_operator
+ super
+ end
+ end
+
+ h = klass.new
+ h[:bar] = 12
+ h[:foo] = 42
+ h.slice(:foo)
+
+ ScratchPad.recorded.should == []
+ end
end
end