diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2017-09-10 20:17:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-10 20:17:05 -0700 |
commit | bbdd6637e37d4b821a8c7075e9ccd17ea0e07569 (patch) | |
tree | 2d43a27216316f248533ab6e3e36aa47ef733166 /test | |
parent | b572261900893df0352d3ad71c17dfa81ab17ccc (diff) | |
parent | 00d1ab44a9ede3f016c640659a1202de701d6648 (diff) | |
download | psych-bbdd6637e37d4b821a8c7075e9ccd17ea0e07569.zip |
Merge pull request #326 from asterite/feature/scalar_location
Add Psych::Handler#event_location
Diffstat (limited to 'test')
-rw-r--r-- | test/psych/test_parser.rb | 62 | ||||
-rw-r--r-- | test/psych/test_tree_builder.rb | 14 |
2 files changed, 71 insertions, 5 deletions
diff --git a/test/psych/test_parser.rb b/test/psych/test_parser.rb index 6b554ce..e8225da 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_tree_builder.rb b/test/psych/test_tree_builder.rb index 3e35788..dfb5da9 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 |