diff options
Diffstat (limited to 'spec/ruby/core/io/set_encoding_spec.rb')
| -rw-r--r-- | spec/ruby/core/io/set_encoding_spec.rb | 79 |
1 files changed, 63 insertions, 16 deletions
diff --git a/spec/ruby/core/io/set_encoding_spec.rb b/spec/ruby/core/io/set_encoding_spec.rb index 5aec6a96c3..237251de5b 100644 --- a/spec/ruby/core/io/set_encoding_spec.rb +++ b/spec/ruby/core/io/set_encoding_spec.rb @@ -1,12 +1,25 @@ require_relative '../../spec_helper' describe :io_set_encoding_write, shared: true do - it "sets the encodings to nil" do + it "sets the encodings to nil when they were set previously" do @io = new_io @name, "#{@object}:ibm437:ibm866" @io.set_encoding nil, nil - @io.external_encoding.should be_nil - @io.internal_encoding.should be_nil + @io.external_encoding.should == nil + @io.internal_encoding.should == nil + end + + it "sets the encodings to nil when the IO is built with no explicit encoding" do + @io = new_io @name, @object + + # Checking our assumptions first + @io.external_encoding.should == nil + @io.internal_encoding.should == nil + + @io.set_encoding nil, nil + + @io.external_encoding.should == nil + @io.internal_encoding.should == nil end it "prevents the encodings from changing when Encoding defaults are changed" do @@ -16,8 +29,8 @@ describe :io_set_encoding_write, shared: true do Encoding.default_external = Encoding::IBM437 Encoding.default_internal = Encoding::IBM866 - @io.external_encoding.should be_nil - @io.internal_encoding.should be_nil + @io.external_encoding.should == nil + @io.internal_encoding.should == nil end it "sets the encodings to the current Encoding defaults" do @@ -38,6 +51,7 @@ describe "IO#set_encoding when passed nil, nil" do @external = Encoding.default_external @internal = Encoding.default_internal + # The defaults Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = nil @@ -61,8 +75,8 @@ describe "IO#set_encoding when passed nil, nil" do Encoding.default_internal = Encoding::IBM866 @io.set_encoding nil, nil - @io.external_encoding.should equal(Encoding::IBM437) - @io.internal_encoding.should equal(Encoding::IBM866) + @io.external_encoding.should.equal?(Encoding::IBM437) + @io.internal_encoding.should.equal?(Encoding::IBM866) end it "prevents the #internal_encoding from changing when Encoding.default_internal is changed" do @@ -71,7 +85,7 @@ describe "IO#set_encoding when passed nil, nil" do Encoding.default_internal = Encoding::IBM437 - @io.internal_encoding.should be_nil + @io.internal_encoding.should == nil end it "allows the #external_encoding to change when Encoding.default_external is changed" do @@ -80,17 +94,17 @@ describe "IO#set_encoding when passed nil, nil" do Encoding.default_external = Encoding::IBM437 - @io.external_encoding.should equal(Encoding::IBM437) + @io.external_encoding.should.equal?(Encoding::IBM437) end end describe "with 'rb' mode" do it "returns Encoding.default_external" do @io = new_io @name, "rb" - @io.external_encoding.should equal(Encoding::BINARY) + @io.external_encoding.should.equal?(Encoding::BINARY) @io.set_encoding nil, nil - @io.external_encoding.should equal(Encoding.default_external) + @io.external_encoding.should.equal?(Encoding.default_external) end end @@ -113,6 +127,22 @@ describe "IO#set_encoding when passed nil, nil" do describe "with 'a+' mode" do it_behaves_like :io_set_encoding_write, nil, "a+" end + + describe "with standard IOs" do + it "correctly resets them" do + STDOUT.external_encoding.should == nil + STDOUT.internal_encoding.should == nil + + begin + STDOUT.set_encoding(Encoding::US_ASCII, Encoding::ISO_8859_1) + ensure + STDOUT.set_encoding(nil, nil) + end + + STDOUT.external_encoding.should == nil + STDOUT.internal_encoding.should == nil + end + end end describe "IO#set_encoding" do @@ -128,13 +158,13 @@ describe "IO#set_encoding" do end it "returns self" do - @io.set_encoding(Encoding::UTF_8).should equal(@io) + @io.set_encoding(Encoding::UTF_8).should.equal?(@io) end it "sets the external encoding when passed an Encoding argument" do @io.set_encoding(Encoding::UTF_8) @io.external_encoding.should == Encoding::UTF_8 - @io.internal_encoding.should be_nil + @io.internal_encoding.should == nil end it "sets the external and internal encoding when passed two Encoding arguments" do @@ -146,19 +176,19 @@ describe "IO#set_encoding" do it "sets the external encoding when passed the name of an Encoding" do @io.set_encoding("utf-8") @io.external_encoding.should == Encoding::UTF_8 - @io.internal_encoding.should be_nil + @io.internal_encoding.should == nil end it "ignores the internal encoding if the same as external when passed Encoding objects" do @io.set_encoding(Encoding::UTF_8, Encoding::UTF_8) @io.external_encoding.should == Encoding::UTF_8 - @io.internal_encoding.should be_nil + @io.internal_encoding.should == nil end it "ignores the internal encoding if the same as external when passed encoding names separated by ':'" do @io.set_encoding("utf-8:utf-8") @io.external_encoding.should == Encoding::UTF_8 - @io.internal_encoding.should be_nil + @io.internal_encoding.should == nil end it "sets the external and internal encoding when passed the names of Encodings separated by ':'" do @@ -188,4 +218,21 @@ describe "IO#set_encoding" do @io.external_encoding.should == Encoding::UTF_8 @io.internal_encoding.should == Encoding::UTF_16BE end + + it "saves encoding options passed as a hash in the last argument" do + File.write(@name, "\xff") + io = File.open(@name) + io.set_encoding(Encoding::EUC_JP, Encoding::SHIFT_JIS, invalid: :replace, replace: ".") + io.read.should == "." + ensure + io.close + end + + it "raises ArgumentError when no arguments are given" do + -> { @io.set_encoding() }.should.raise(ArgumentError) + end + + it "raises ArgumentError when too many arguments are given" do + -> { @io.set_encoding(1, 2, 3) }.should.raise(ArgumentError) + end end |
