diff options
Diffstat (limited to 'spec/ruby/core/env/fetch_spec.rb')
| -rw-r--r-- | spec/ruby/core/env/fetch_spec.rb | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/spec/ruby/core/env/fetch_spec.rb b/spec/ruby/core/env/fetch_spec.rb index 708ee91c39..a2ec79c62b 100644 --- a/spec/ruby/core/env/fetch_spec.rb +++ b/spec/ruby/core/env/fetch_spec.rb @@ -1,35 +1,63 @@ -require File.expand_path('../../../spec_helper', __FILE__) +require_relative '../../spec_helper' +require_relative '../../shared/hash/key_error' +require_relative 'fixtures/common' describe "ENV.fetch" do + before :each do + @foo_saved = ENV.delete("foo") + end + after :each do + ENV["foo"] = @saved_foo + end + it "returns a value" do ENV["foo"] = "bar" ENV.fetch("foo").should == "bar" - ENV.delete "foo" end it "raises a TypeError if the key is not a String" do - lambda { ENV.fetch :should_never_be_set }.should raise_error(TypeError) + -> { ENV.fetch Object.new }.should.raise(TypeError, "no implicit conversion of Object into String") end - it "raises a KeyError if the key is not found" do - lambda { ENV.fetch "should_never_be_set" }.should raise_error(KeyError) + context "when the key is not found" do + it_behaves_like :key_error, -> obj, key { obj.fetch(key) }, ENV + + it "formats the object with #inspect in the KeyError message" do + -> { + ENV.fetch('foo') + }.should.raise(KeyError, 'key not found: "foo"') + end end it "provides the given default parameter" do - ENV.fetch("should_never_be_set", "default").should == "default" + ENV.fetch("foo", "default").should == "default" + end + + it "does not insist that the default be a String" do + ENV.fetch("foo", :default).should == :default end it "provides a default value from a block" do - ENV.fetch("should_never_be_set") { |k| "wanted #{k}" }.should == "wanted should_never_be_set" + ENV.fetch("foo") { |k| "wanted #{k}" }.should == "wanted foo" + end + + it "does not insist that the block return a String" do + ENV.fetch("foo") { |k| k.to_sym }.should == :foo end it "warns on block and default parameter given" do - lambda do - ENV.fetch("should_never_be_set", "default") { 1 }.should == 1 + -> do + ENV.fetch("foo", "default") { "bar" }.should == "bar" end.should complain(/block supersedes default value argument/) end + it "does not evaluate the block when key found" do + ENV["foo"] = "bar" + ENV.fetch("foo") { fail "should not get here"}.should == "bar" + end + it "uses the locale encoding" do - ENV.fetch(ENV.keys.first).encoding.should == Encoding.find('locale') + ENV["foo"] = "bar" + ENV.fetch("foo").encoding.should == ENVSpecs.encoding end end |
