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: emit strings tagged as
ascii-8bit as binary in YAML. * test/psych/test_string.rb: corresponding test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6e6feaf8da
commit
8659de2e0f
3 changed files with 22 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
Fri Sep 2 04:05:25 2011 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as
|
||||
ascii-8bit as binary in YAML.
|
||||
* test/psych/test_string.rb: corresponding test.
|
||||
|
||||
Fri Sep 2 01:07:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* numeric.c (flo_round): substitute machine dependent magic number.
|
||||
|
|
|
@ -214,12 +214,19 @@ module Psych
|
|||
end
|
||||
end
|
||||
|
||||
def binary? string
|
||||
string.encoding == Encoding::ASCII_8BIT ||
|
||||
string.index("\x00") ||
|
||||
string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3
|
||||
end
|
||||
private :binary?
|
||||
|
||||
def visit_String o
|
||||
plain = false
|
||||
quote = false
|
||||
style = Nodes::Scalar::ANY
|
||||
|
||||
if o.index("\x00") || o.count("\x00-\x7F", "^ -~\t\r\n").fdiv(o.length) > 0.3
|
||||
if binary?(o)
|
||||
str = [o].pack('m').chomp
|
||||
tag = '!binary' # FIXME: change to below when syck is removed
|
||||
#tag = 'tag:yaml.org,2002:binary'
|
||||
|
|
|
@ -2,6 +2,14 @@ require 'psych/helper'
|
|||
|
||||
module Psych
|
||||
class TestString < TestCase
|
||||
def test_tagged_binary_should_be_dumped_as_binary
|
||||
string = "hello world!"
|
||||
string.force_encoding 'ascii-8bit'
|
||||
yml = Psych.dump string
|
||||
assert_match(/binary/, yml)
|
||||
assert_equal string, Psych.load(yml)
|
||||
end
|
||||
|
||||
def test_binary_string_null
|
||||
string = "\x00"
|
||||
yml = Psych.dump string
|
||||
|
|
Loading…
Add table
Reference in a new issue