mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
110 lines
2.6 KiB
Ruby
110 lines
2.6 KiB
Ruby
require_relative '../../spec_helper'
|
|
require_relative 'fixtures/classes'
|
|
|
|
describe :io_readchar_internal_encoding, shared: true do
|
|
it "returns a transcoded String" do
|
|
@io.readchar.should == "あ"
|
|
end
|
|
|
|
it "sets the String encoding to the internal encoding" do
|
|
@io.readchar.encoding.should equal(Encoding::UTF_8)
|
|
end
|
|
end
|
|
|
|
describe "IO#readchar" do
|
|
before :each do
|
|
@io = IOSpecs.io_fixture "lines.txt"
|
|
end
|
|
|
|
after :each do
|
|
@io.close unless @io.closed?
|
|
end
|
|
|
|
it "returns the next string from the stream" do
|
|
@io.readchar.should == 'V'
|
|
@io.readchar.should == 'o'
|
|
@io.readchar.should == 'i'
|
|
# read the rest of line
|
|
@io.readline.should == "ci la ligne une.\n"
|
|
@io.readchar.should == 'Q'
|
|
end
|
|
|
|
it "raises an EOFError when invoked at the end of the stream" do
|
|
@io.read
|
|
-> { @io.readchar }.should raise_error(EOFError)
|
|
end
|
|
|
|
it "raises IOError on closed stream" do
|
|
-> { IOSpecs.closed_io.readchar }.should raise_error(IOError)
|
|
end
|
|
end
|
|
|
|
describe "IO#readchar with internal encoding" do
|
|
after :each do
|
|
@io.close if @io
|
|
end
|
|
|
|
describe "not specified" do
|
|
before :each do
|
|
@io = IOSpecs.io_fixture "read_euc_jp.txt", "r:euc-jp"
|
|
end
|
|
|
|
it "does not transcode the String" do
|
|
@io.readchar.should == ("あ").encode(Encoding::EUC_JP)
|
|
end
|
|
|
|
it "sets the String encoding to the external encoding" do
|
|
@io.readchar.encoding.should equal(Encoding::EUC_JP)
|
|
end
|
|
end
|
|
|
|
describe "specified by open mode" do
|
|
before :each do
|
|
@io = IOSpecs.io_fixture "read_euc_jp.txt", "r:euc-jp:utf-8"
|
|
end
|
|
|
|
it_behaves_like :io_readchar_internal_encoding, nil
|
|
end
|
|
|
|
describe "specified by mode: option" do
|
|
before :each do
|
|
@io = IOSpecs.io_fixture "read_euc_jp.txt", mode: "r:euc-jp:utf-8"
|
|
end
|
|
|
|
it_behaves_like :io_readchar_internal_encoding, nil
|
|
end
|
|
|
|
describe "specified by internal_encoding: option" do
|
|
before :each do
|
|
options = { mode: "r",
|
|
internal_encoding: "utf-8",
|
|
external_encoding: "euc-jp" }
|
|
@io = IOSpecs.io_fixture "read_euc_jp.txt", options
|
|
end
|
|
|
|
it_behaves_like :io_readchar_internal_encoding, nil
|
|
end
|
|
|
|
describe "specified by encoding: option" do
|
|
before :each do
|
|
options = { mode: "r", encoding: "euc-jp:utf-8" }
|
|
@io = IOSpecs.io_fixture "read_euc_jp.txt", options
|
|
end
|
|
|
|
it_behaves_like :io_readchar_internal_encoding, nil
|
|
end
|
|
end
|
|
|
|
describe "IO#readchar" do
|
|
before :each do
|
|
@io = IOSpecs.io_fixture "empty.txt"
|
|
end
|
|
|
|
after :each do
|
|
@io.close unless @io.closed?
|
|
end
|
|
|
|
it "raises EOFError on empty stream" do
|
|
-> { @io.readchar }.should raise_error(EOFError)
|
|
end
|
|
end
|