зеркало из https://github.com/github/ruby.git
[ruby/stringio] StringIO#initialize default to the source string encoding
[Bug #16497] https://github.com/ruby/stringio/commit/4958a5ccab
This commit is contained in:
Родитель
d79890cbfa
Коммит
e257c08f2e
|
@ -363,7 +363,12 @@ strio_init(int argc, VALUE *argv, struct StringIO *ptr, VALUE self)
|
||||||
rb_str_resize(string, 0);
|
rb_str_resize(string, 0);
|
||||||
}
|
}
|
||||||
ptr->string = string;
|
ptr->string = string;
|
||||||
|
if (argc == 1) {
|
||||||
|
ptr->enc = rb_enc_get(string);
|
||||||
|
}
|
||||||
|
else {
|
||||||
ptr->enc = convconfig.enc;
|
ptr->enc = convconfig.enc;
|
||||||
|
}
|
||||||
ptr->pos = 0;
|
ptr->pos = 0;
|
||||||
ptr->lineno = 0;
|
ptr->lineno = 0;
|
||||||
if (ptr->flags & FMODE_SETENC_BY_BOM) set_encoding_by_bom(ptr);
|
if (ptr->flags & FMODE_SETENC_BY_BOM) set_encoding_by_bom(ptr);
|
||||||
|
@ -1759,9 +1764,6 @@ strio_set_encoding_by_bom(VALUE self)
|
||||||
{
|
{
|
||||||
struct StringIO *ptr = StringIO(self);
|
struct StringIO *ptr = StringIO(self);
|
||||||
|
|
||||||
if (ptr->enc) {
|
|
||||||
rb_raise(rb_eArgError, "encoding conversion is set");
|
|
||||||
}
|
|
||||||
if (!set_encoding_by_bom(ptr)) return Qnil;
|
if (!set_encoding_by_bom(ptr)) return Qnil;
|
||||||
return rb_enc_from_encoding(ptr->enc);
|
return rb_enc_from_encoding(ptr->enc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,11 +187,14 @@ end
|
||||||
describe "StringIO#initialize sets the encoding to" do
|
describe "StringIO#initialize sets the encoding to" do
|
||||||
before :each do
|
before :each do
|
||||||
@external = Encoding.default_external
|
@external = Encoding.default_external
|
||||||
|
@internal = Encoding.default_internal
|
||||||
Encoding.default_external = Encoding::ISO_8859_2
|
Encoding.default_external = Encoding::ISO_8859_2
|
||||||
|
Encoding.default_internal = Encoding::ISO_8859_2
|
||||||
end
|
end
|
||||||
|
|
||||||
after :each do
|
after :each do
|
||||||
Encoding.default_external = @external
|
Encoding.default_external = @external
|
||||||
|
Encoding.default_internal = @internal
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Encoding.default_external when passed no arguments" do
|
it "Encoding.default_external when passed no arguments" do
|
||||||
|
|
|
@ -797,6 +797,18 @@ class TestStringIO < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_binary_encoding_read_and_default_internal
|
||||||
|
verbose, $VERBOSE = $VERBOSE, nil
|
||||||
|
default_internal = Encoding.default_internal
|
||||||
|
Encoding.default_internal = Encoding::UTF_8
|
||||||
|
$VERBOSE = verbose
|
||||||
|
assert_equal Encoding::BINARY, StringIO.new("Hello".b).read.encoding
|
||||||
|
ensure
|
||||||
|
$VERBOSE = nil
|
||||||
|
Encoding.default_internal = default_internal
|
||||||
|
$VERBOSE = verbose
|
||||||
|
end
|
||||||
|
|
||||||
def assert_string(content, encoding, str, mesg = nil)
|
def assert_string(content, encoding, str, mesg = nil)
|
||||||
assert_equal([content, encoding], [str, str.encoding], mesg)
|
assert_equal([content, encoding], [str, str.encoding], mesg)
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче