aboutsummaryrefslogtreecommitdiffstats
path: root/test/psych
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-27 03:11:18 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-27 03:11:18 +0000
commitb613a2c5ae03c425bc94771e4eced1b80e4e80d0 (patch)
treea2bd8c92dbafcc5897e4105682517df190e35f3f /test/psych
parent33201294eb59f10ccb98752207c2cc9d1c8757cc (diff)
downloadruby-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.rb12
-rw-r--r--test/psych/test_parser.rb62
-rw-r--r--test/psych/test_psych.rb18
-rw-r--r--test/psych/test_string.rb7
-rw-r--r--test/psych/test_tree_builder.rb14
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