diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-11-27 03:11:18 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-11-27 03:11:18 +0000 |
commit | b613a2c5ae03c425bc94771e4eced1b80e4e80d0 (patch) | |
tree | a2bd8c92dbafcc5897e4105682517df190e35f3f /test/psych | |
parent | 33201294eb59f10ccb98752207c2cc9d1c8757cc (diff) | |
download | ruby-b613a2c5ae03c425bc94771e4eced1b80e4e80d0.tar.gz |
Merge psych-3.0.0.beta4 from upstream.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/psych')
-rw-r--r-- | test/psych/test_encoding.rb | 12 | ||||
-rw-r--r-- | test/psych/test_parser.rb | 62 | ||||
-rw-r--r-- | test/psych/test_psych.rb | 18 | ||||
-rw-r--r-- | test/psych/test_string.rb | 7 | ||||
-rw-r--r-- | test/psych/test_tree_builder.rb | 14 |
5 files changed, 108 insertions, 5 deletions
diff --git a/test/psych/test_encoding.rb b/test/psych/test_encoding.rb index a4f9f036fd..ef6653142f 100644 --- a/test/psych/test_encoding.rb +++ b/test/psych/test_encoding.rb @@ -106,6 +106,18 @@ module Psych } end + def test_io_utf8_read_as_binary + Tempfile.create(['utf8', 'yml']) {|t| + t.binmode + t.write '--- こんにちは!'.encode('UTF-8') + t.close + + File.open(t.path, 'rb', :encoding => 'ascii-8bit') do |f| + assert_equal "こんにちは!", Psych.load(f) + end + } + end + def test_emit_alias @emitter.start_stream Psych::Parser::UTF8 @emitter.start_document [], [], true diff --git a/test/psych/test_parser.rb b/test/psych/test_parser.rb index 6b554cedf0..e8225dabb6 100644 --- a/test/psych/test_parser.rb +++ b/test/psych/test_parser.rb @@ -87,13 +87,22 @@ module Psych assert_equal 0, @parser.mark.line @parser.parse "---\n- hello\n- world" line_calls = @handler.marks.map(&:line).zip(@handler.calls.map(&:first)) - assert_equal [[0, :start_stream], + assert_equal [ + [0, :event_location], + [0, :start_stream], + [0, :event_location], [0, :start_document], + [1, :event_location], [1, :start_sequence], + [2, :event_location], [2, :scalar], + [3, :event_location], [3, :scalar], + [3, :event_location], [3, :end_sequence], + [3, :event_location], [3, :end_document], + [3, :event_location], [3, :end_stream]], line_calls assert_equal 3, @parser.mark.line @@ -103,13 +112,22 @@ module Psych assert_equal 0, @parser.mark.column @parser.parse "---\n- hello\n- world" col_calls = @handler.marks.map(&:column).zip(@handler.calls.map(&:first)) - assert_equal [[0, :start_stream], + assert_equal [ + [0, :event_location], + [0, :start_stream], + [3, :event_location], [3, :start_document], + [1, :event_location], [1, :start_sequence], + [0, :event_location], [0, :scalar], + [0, :event_location], [0, :scalar], + [0, :event_location], [0, :end_sequence], + [0, :event_location], [0, :end_document], + [0, :event_location], [0, :end_stream]], col_calls assert_equal 0, @parser.mark.column @@ -119,13 +137,22 @@ module Psych assert_equal 0, @parser.mark.index @parser.parse "---\n- hello\n- world" idx_calls = @handler.marks.map(&:index).zip(@handler.calls.map(&:first)) - assert_equal [[0, :start_stream], + assert_equal [ + [0, :event_location], + [0, :start_stream], + [3, :event_location], [3, :start_document], + [5, :event_location], [5, :start_sequence], + [12, :event_location], [12, :scalar], + [19, :event_location], [19, :scalar], + [19, :event_location], [19, :end_sequence], + [19, :event_location], [19, :end_document], + [19, :event_location], [19, :end_stream]], idx_calls assert_equal 19, @parser.mark.index @@ -137,7 +164,7 @@ module Psych # BOM + text yml = "\uFEFF#{tadpole}".encode('UTF-16LE') @parser.parse yml - assert_equal tadpole, @parser.handler.calls[2][1].first + assert_equal tadpole, @parser.handler.calls.find { |method, args| method == :scalar }[1].first end def test_external_encoding @@ -145,7 +172,7 @@ module Psych @parser.external_encoding = Psych::Parser::UTF16LE @parser.parse tadpole.encode 'UTF-16LE' - assert_equal tadpole, @parser.handler.calls[2][1].first + assert_equal tadpole, @parser.handler.calls.find { |method, args| method == :scalar }[1].first end def test_bogus_io @@ -324,6 +351,31 @@ module Psych assert_called :start_document, [[], [['!yaml!', 'tag:yaml.org,2002']], false] end + def test_event_location + @parser.parse "foo:\n" \ + " barbaz: [1, 2]" + + events = @handler.calls.each_slice(2).map do |location, event| + [event[0], location[1]] + end + + assert_equal [ + [:start_stream, [0, 0, 0, 0]], + [:start_document, [0, 0, 0, 0]], + [:start_mapping, [0, 0, 0, 0]], + [:scalar, [0, 0, 0, 3]], + [:start_mapping, [1, 2, 1, 2]], + [:scalar, [1, 2, 1, 8]], + [:start_sequence, [1, 10, 1, 11]], + [:scalar, [1, 11, 1, 12]], + [:scalar, [1, 14, 1, 15]], + [:end_sequence, [1, 15, 1, 16]], + [:end_mapping, [2, 0, 2, 0]], + [:end_mapping, [2, 0, 2, 0]], + [:end_document, [2, 0, 2, 0]], + [:end_stream, [2, 0, 2, 0]]], events + end + def assert_called call, with = nil, parser = @parser if with call = parser.handler.calls.find { |x| diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb index d0de95627e..ff5ffbafc6 100644 --- a/test/psych/test_psych.rb +++ b/test/psych/test_psych.rb @@ -182,4 +182,22 @@ class TestPsych < Psych::TestCase ["tag:example.com,2002:foo", "bar"] ], types end + + def test_symbolize_names + result = Psych.load(<<-eoyml) +foo: + bar: baz +hoge: + - fuga: piyo + eoyml + assert_equal result, { "foo" => { "bar" => "baz"}, "hoge" => [{ "fuga" => "piyo" }] } + + result = Psych.load(<<-eoyml, symbolize_names: true) +foo: + bar: baz +hoge: + - fuga: piyo + eoyml + assert_equal result, { foo: { bar: "baz" }, hoge: [{ fuga: "piyo" }] } + end end diff --git a/test/psych/test_string.rb b/test/psych/test_string.rb index 973f38b9c2..e80d19194b 100644 --- a/test/psych/test_string.rb +++ b/test/psych/test_string.rb @@ -37,6 +37,13 @@ module Psych assert_equal str, Psych.load(yaml) end + def test_doublequotes_when_there_are_single_quotes_only + str = "psych: Please don't escape ' with ' here." + yaml = Psych.dump str + assert_equal "--- \"psych: Please don't escape ' with ' here.\"\n", yaml + assert_equal str, Psych.load(yaml) + end + def test_plain_when_shorten_than_line_width_and_no_final_line_break str = "Lorem ipsum" yaml = Psych.dump str, line_width: 12 diff --git a/test/psych/test_tree_builder.rb b/test/psych/test_tree_builder.rb index 3e35788e35..dfb5da9892 100644 --- a/test/psych/test_tree_builder.rb +++ b/test/psych/test_tree_builder.rb @@ -21,6 +21,7 @@ module Psych def test_stream assert_instance_of Nodes::Stream, @tree + assert_location 0, 0, 8, 0, @tree end def test_documents @@ -31,6 +32,7 @@ module Psych assert_equal [1,1], doc.version assert_equal [], doc.tag_directives assert_equal false, doc.implicit + assert_location 0, 0, 8, 0, doc end def test_sequence @@ -43,6 +45,7 @@ module Psych assert_nil seq.tag assert_equal true, seq.implicit assert_equal Nodes::Sequence::BLOCK, seq.style + assert_location 2, 0, 8, 0, seq end def test_scalar @@ -58,6 +61,7 @@ module Psych assert_equal true, scalar.plain assert_equal false, scalar.quoted assert_equal Nodes::Scalar::PLAIN, scalar.style + assert_location 2, 2, 2, 5, scalar end def test_mapping @@ -66,6 +70,7 @@ module Psych map = seq.children[1] assert_instance_of Nodes::Mapping, map + assert_location 3, 2, 6, 1, map end def test_alias @@ -75,6 +80,15 @@ module Psych al = seq.children[2] assert_instance_of Nodes::Alias, al assert_equal 'A', al.anchor + assert_location 7, 2, 7, 4, al + end + + private + def assert_location(start_line, start_column, end_line, end_column, node) + assert_equal start_line, node.start_line + assert_equal start_column, node.start_column + assert_equal end_line, node.end_line + assert_equal end_column, node.end_column end end end |