mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/psych/lib/psych/visitors/yaml_tree.rb: ascii only binary strings
will be dumped as unicode. Thanks Paul Kunysch! * test/psych/test_string.rb: appropriate test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38753 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
113c81219d
commit
ac8b1869c0
3 changed files with 31 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
Thu Jan 10 03:38:40 2013 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/lib/psych/visitors/yaml_tree.rb: ascii only binary strings
|
||||
will be dumped as unicode. Thanks Paul Kunysch!
|
||||
|
||||
* test/psych/test_string.rb: appropriate test
|
||||
|
||||
Thu Jan 10 03:29:55 2013 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* compile.c (compile_array_): modify wrong optimization.
|
||||
|
|
|
@ -221,9 +221,10 @@ module Psych
|
|||
end
|
||||
|
||||
def binary? string
|
||||
string.encoding == Encoding::ASCII_8BIT ||
|
||||
(string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?) ||
|
||||
string.index("\x00") ||
|
||||
string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3
|
||||
string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3 ||
|
||||
string.class != String
|
||||
end
|
||||
private :binary?
|
||||
|
||||
|
|
|
@ -9,6 +9,12 @@ module Psych
|
|||
attr_accessor :val
|
||||
end
|
||||
|
||||
class Z < String
|
||||
def initialize
|
||||
force_encoding Encoding::US_ASCII
|
||||
end
|
||||
end
|
||||
|
||||
def test_another_subclass_with_attributes
|
||||
y = Psych.load Psych.dump Y.new("foo").tap {|y| y.val = 1}
|
||||
assert_equal "foo", y
|
||||
|
@ -28,6 +34,12 @@ module Psych
|
|||
assert_equal X, x.class
|
||||
end
|
||||
|
||||
def test_empty_character_subclass
|
||||
assert_match "!ruby/string:#{Z}", Psych.dump(Z.new)
|
||||
x = Psych.load Psych.dump Z.new
|
||||
assert_equal Z, x.class
|
||||
end
|
||||
|
||||
def test_subclass_with_attributes
|
||||
y = Psych.load Psych.dump Y.new.tap {|y| y.val = 1}
|
||||
assert_equal Y, y.class
|
||||
|
@ -40,8 +52,8 @@ module Psych
|
|||
assert_equal '01:03:05', Psych.load(yaml)
|
||||
end
|
||||
|
||||
def test_tagged_binary_should_be_dumped_as_binary
|
||||
string = "hello world!"
|
||||
def test_nonascii_string_as_binary
|
||||
string = "hello \x80 world!"
|
||||
string.force_encoding 'ascii-8bit'
|
||||
yml = Psych.dump string
|
||||
assert_match(/binary/, yml)
|
||||
|
@ -69,6 +81,13 @@ module Psych
|
|||
assert_equal string, Psych.load(yml)
|
||||
end
|
||||
|
||||
def test_ascii_only_8bit_string
|
||||
string = "abc".encode(Encoding::ASCII_8BIT)
|
||||
yml = Psych.dump string
|
||||
refute_match(/binary/, yml)
|
||||
assert_equal string, Psych.load(yml)
|
||||
end
|
||||
|
||||
def test_string_with_ivars
|
||||
food = "is delicious"
|
||||
ivar = "on rock and roll"
|
||||
|
|
Loading…
Add table
Reference in a new issue