summaryrefslogtreecommitdiff
path: root/spec/ruby/core/kernel/open_spec.rb
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2023-02-27 21:02:44 +0100
committerBenoit Daloze <eregontp@gmail.com>2023-02-27 21:02:44 +0100
commit18b4def471bb901d0baa4a1307185484cb05815f (patch)
tree779b24566144e9ee06c6f8de35bd2f7fd74ccdb4 /spec/ruby/core/kernel/open_spec.rb
parentde60139053fa7c561858c5c5556d61c82f361dd9 (diff)
Update to ruby/spec@e7dc804
Diffstat (limited to 'spec/ruby/core/kernel/open_spec.rb')
-rw-r--r--spec/ruby/core/kernel/open_spec.rb25
1 files changed, 23 insertions, 2 deletions
diff --git a/spec/ruby/core/kernel/open_spec.rb b/spec/ruby/core/kernel/open_spec.rb
index fa9299f9d4..bad2ae9d2c 100644
--- a/spec/ruby/core/kernel/open_spec.rb
+++ b/spec/ruby/core/kernel/open_spec.rb
@@ -72,6 +72,17 @@ describe "Kernel#open" do
-> { open }.should raise_error(ArgumentError)
end
+ ruby_version_is "3.0" do
+ it "accepts options as keyword arguments" do
+ @file = open(@name, "r", 0666, flags: File::CREAT)
+ @file.should be_kind_of(File)
+
+ -> {
+ open(@name, "r", 0666, {flags: File::CREAT})
+ }.should raise_error(ArgumentError, "wrong number of arguments (given 4, expected 1..3)")
+ end
+ end
+
describe "when given an object that responds to to_open" do
before :each do
ScratchPad.clear
@@ -109,11 +120,21 @@ describe "Kernel#open" do
it "passes its arguments onto #to_open" do
obj = mock('to_open')
- obj.should_receive(:to_open).with(1,2,3)
-
+ obj.should_receive(:to_open).with(1, 2, 3)
open(obj, 1, 2, 3)
end
+ it "passes keyword arguments onto #to_open as keyword arguments if to_open accepts them" do
+ obj = Object.new
+ def obj.to_open(*args, **kw)
+ ScratchPad << {args: args, kw: kw}
+ end
+
+ ScratchPad.record []
+ open(obj, 1, 2, 3, a: "b")
+ ScratchPad.recorded.should == [args: [1, 2, 3], kw: {a: "b"}]
+ end
+
it "passes the return value from #to_open to a block" do
obj = mock('to_open')
obj.should_receive(:to_open).and_return(:value)