psych 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +18 -0
- data/.gemtest +0 -0
- data/CHANGELOG.rdoc +3 -0
- data/Manifest.txt +87 -0
- data/README.rdoc +50 -0
- data/Rakefile +66 -0
- data/ext/psych/emitter.c +517 -0
- data/ext/psych/emitter.h +8 -0
- data/ext/psych/extconf.rb +22 -0
- data/ext/psych/parser.c +384 -0
- data/ext/psych/parser.h +6 -0
- data/ext/psych/psych.c +34 -0
- data/ext/psych/psych.h +20 -0
- data/ext/psych/to_ruby.c +41 -0
- data/ext/psych/to_ruby.h +8 -0
- data/ext/psych/yaml_tree.c +24 -0
- data/ext/psych/yaml_tree.h +8 -0
- data/lib/psych.rb +263 -0
- data/lib/psych/coder.rb +94 -0
- data/lib/psych/core_ext.rb +39 -0
- data/lib/psych/deprecated.rb +82 -0
- data/lib/psych/handler.rb +221 -0
- data/lib/psych/json.rb +6 -0
- data/lib/psych/json/ruby_events.rb +19 -0
- data/lib/psych/json/stream.rb +15 -0
- data/lib/psych/json/tree_builder.rb +12 -0
- data/lib/psych/json/yaml_events.rb +29 -0
- data/lib/psych/nodes.rb +77 -0
- data/lib/psych/nodes/alias.rb +18 -0
- data/lib/psych/nodes/document.rb +60 -0
- data/lib/psych/nodes/mapping.rb +56 -0
- data/lib/psych/nodes/node.rb +52 -0
- data/lib/psych/nodes/scalar.rb +67 -0
- data/lib/psych/nodes/sequence.rb +81 -0
- data/lib/psych/nodes/stream.rb +37 -0
- data/lib/psych/omap.rb +4 -0
- data/lib/psych/parser.rb +47 -0
- data/lib/psych/scalar_scanner.rb +105 -0
- data/lib/psych/set.rb +4 -0
- data/lib/psych/stream.rb +36 -0
- data/lib/psych/streaming.rb +22 -0
- data/lib/psych/tree_builder.rb +94 -0
- data/lib/psych/visitors.rb +6 -0
- data/lib/psych/visitors/depth_first.rb +26 -0
- data/lib/psych/visitors/emitter.rb +44 -0
- data/lib/psych/visitors/json_tree.rb +21 -0
- data/lib/psych/visitors/to_ruby.rb +267 -0
- data/lib/psych/visitors/visitor.rb +19 -0
- data/lib/psych/visitors/yaml_tree.rb +373 -0
- data/test/psych/helper.rb +63 -0
- data/test/psych/json/test_stream.rb +109 -0
- data/test/psych/nodes/test_enumerable.rb +43 -0
- data/test/psych/test_alias_and_anchor.rb +26 -0
- data/test/psych/test_array.rb +19 -0
- data/test/psych/test_boolean.rb +36 -0
- data/test/psych/test_class.rb +17 -0
- data/test/psych/test_coder.rb +184 -0
- data/test/psych/test_date_time.rb +17 -0
- data/test/psych/test_deprecated.rb +210 -0
- data/test/psych/test_document.rb +46 -0
- data/test/psych/test_emitter.rb +94 -0
- data/test/psych/test_encoding.rb +179 -0
- data/test/psych/test_engine_manager.rb +57 -0
- data/test/psych/test_exception.rb +39 -0
- data/test/psych/test_hash.rb +30 -0
- data/test/psych/test_json_tree.rb +65 -0
- data/test/psych/test_merge_keys.rb +72 -0
- data/test/psych/test_nil.rb +18 -0
- data/test/psych/test_null.rb +19 -0
- data/test/psych/test_object.rb +27 -0
- data/test/psych/test_omap.rb +68 -0
- data/test/psych/test_parser.rb +297 -0
- data/test/psych/test_psych.rb +168 -0
- data/test/psych/test_scalar.rb +11 -0
- data/test/psych/test_scalar_scanner.rb +69 -0
- data/test/psych/test_serialize_subclasses.rb +38 -0
- data/test/psych/test_set.rb +49 -0
- data/test/psych/test_stream.rb +49 -0
- data/test/psych/test_string.rb +49 -0
- data/test/psych/test_struct.rb +51 -0
- data/test/psych/test_symbol.rb +17 -0
- data/test/psych/test_to_yaml_properties.rb +63 -0
- data/test/psych/test_tree_builder.rb +79 -0
- data/test/psych/test_yaml.rb +1256 -0
- data/test/psych/visitors/test_depth_first.rb +49 -0
- data/test/psych/visitors/test_emitter.rb +144 -0
- data/test/psych/visitors/test_to_ruby.rb +325 -0
- data/test/psych/visitors/test_yaml_tree.rb +155 -0
- metadata +232 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'psych/helper'
|
2
|
+
|
3
|
+
module Psych
|
4
|
+
module Visitors
|
5
|
+
class TestDepthFirst < TestCase
|
6
|
+
class Collector < Struct.new(:calls)
|
7
|
+
def initialize(calls = [])
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def call obj
|
12
|
+
calls << obj
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_scalar
|
17
|
+
collector = Collector.new
|
18
|
+
visitor = Visitors::DepthFirst.new collector
|
19
|
+
visitor.accept Psych.parse_stream '--- hello'
|
20
|
+
|
21
|
+
assert_equal 3, collector.calls.length
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_sequence
|
25
|
+
collector = Collector.new
|
26
|
+
visitor = Visitors::DepthFirst.new collector
|
27
|
+
visitor.accept Psych.parse_stream "---\n- hello"
|
28
|
+
|
29
|
+
assert_equal 4, collector.calls.length
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_mapping
|
33
|
+
collector = Collector.new
|
34
|
+
visitor = Visitors::DepthFirst.new collector
|
35
|
+
visitor.accept Psych.parse_stream "---\nhello: world"
|
36
|
+
|
37
|
+
assert_equal 5, collector.calls.length
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_alias
|
41
|
+
collector = Collector.new
|
42
|
+
visitor = Visitors::DepthFirst.new collector
|
43
|
+
visitor.accept Psych.parse_stream "--- &yay\n- foo\n- *yay\n"
|
44
|
+
|
45
|
+
assert_equal 5, collector.calls.length
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'psych/helper'
|
2
|
+
|
3
|
+
module Psych
|
4
|
+
module Visitors
|
5
|
+
class TestEmitter < TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@io = StringIO.new
|
9
|
+
@visitor = Visitors::Emitter.new @io
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_options
|
13
|
+
io = StringIO.new
|
14
|
+
visitor = Visitors::Emitter.new io, :indentation => 3
|
15
|
+
|
16
|
+
s = Nodes::Stream.new
|
17
|
+
doc = Nodes::Document.new
|
18
|
+
mapping = Nodes::Mapping.new
|
19
|
+
m2 = Nodes::Mapping.new
|
20
|
+
m2.children << Nodes::Scalar.new('a')
|
21
|
+
m2.children << Nodes::Scalar.new('b')
|
22
|
+
|
23
|
+
mapping.children << Nodes::Scalar.new('key')
|
24
|
+
mapping.children << m2
|
25
|
+
doc.children << mapping
|
26
|
+
s.children << doc
|
27
|
+
|
28
|
+
visitor.accept s
|
29
|
+
assert_match(/^[ ]{3}a/, io.string)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_stream
|
33
|
+
s = Nodes::Stream.new
|
34
|
+
@visitor.accept s
|
35
|
+
assert_equal '', @io.string
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_document
|
39
|
+
s = Nodes::Stream.new
|
40
|
+
doc = Nodes::Document.new [1,1]
|
41
|
+
scalar = Nodes::Scalar.new 'hello world'
|
42
|
+
|
43
|
+
doc.children << scalar
|
44
|
+
s.children << doc
|
45
|
+
|
46
|
+
@visitor.accept s
|
47
|
+
|
48
|
+
assert_match(/1.1/, @io.string)
|
49
|
+
assert_equal @io.string, s.to_yaml
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_document_implicit_end
|
53
|
+
s = Nodes::Stream.new
|
54
|
+
doc = Nodes::Document.new
|
55
|
+
mapping = Nodes::Mapping.new
|
56
|
+
mapping.children << Nodes::Scalar.new('key')
|
57
|
+
mapping.children << Nodes::Scalar.new('value')
|
58
|
+
doc.children << mapping
|
59
|
+
s.children << doc
|
60
|
+
|
61
|
+
@visitor.accept s
|
62
|
+
|
63
|
+
assert_match(/key: value/, @io.string)
|
64
|
+
assert_equal @io.string, s.to_yaml
|
65
|
+
assert(/\.\.\./ !~ s.to_yaml)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_scalar
|
69
|
+
s = Nodes::Stream.new
|
70
|
+
doc = Nodes::Document.new
|
71
|
+
scalar = Nodes::Scalar.new 'hello world'
|
72
|
+
|
73
|
+
doc.children << scalar
|
74
|
+
s.children << doc
|
75
|
+
|
76
|
+
@visitor.accept s
|
77
|
+
|
78
|
+
assert_match(/hello/, @io.string)
|
79
|
+
assert_equal @io.string, s.to_yaml
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_scalar_with_tag
|
83
|
+
s = Nodes::Stream.new
|
84
|
+
doc = Nodes::Document.new
|
85
|
+
scalar = Nodes::Scalar.new 'hello world', nil, '!str', false, false, 5
|
86
|
+
|
87
|
+
doc.children << scalar
|
88
|
+
s.children << doc
|
89
|
+
|
90
|
+
@visitor.accept s
|
91
|
+
|
92
|
+
assert_match(/str/, @io.string)
|
93
|
+
assert_match(/hello/, @io.string)
|
94
|
+
assert_equal @io.string, s.to_yaml
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_sequence
|
98
|
+
s = Nodes::Stream.new
|
99
|
+
doc = Nodes::Document.new
|
100
|
+
scalar = Nodes::Scalar.new 'hello world'
|
101
|
+
seq = Nodes::Sequence.new
|
102
|
+
|
103
|
+
seq.children << scalar
|
104
|
+
doc.children << seq
|
105
|
+
s.children << doc
|
106
|
+
|
107
|
+
@visitor.accept s
|
108
|
+
|
109
|
+
assert_match(/- hello/, @io.string)
|
110
|
+
assert_equal @io.string, s.to_yaml
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_mapping
|
114
|
+
s = Nodes::Stream.new
|
115
|
+
doc = Nodes::Document.new
|
116
|
+
mapping = Nodes::Mapping.new
|
117
|
+
mapping.children << Nodes::Scalar.new('key')
|
118
|
+
mapping.children << Nodes::Scalar.new('value')
|
119
|
+
doc.children << mapping
|
120
|
+
s.children << doc
|
121
|
+
|
122
|
+
@visitor.accept s
|
123
|
+
|
124
|
+
assert_match(/key: value/, @io.string)
|
125
|
+
assert_equal @io.string, s.to_yaml
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_alias
|
129
|
+
s = Nodes::Stream.new
|
130
|
+
doc = Nodes::Document.new
|
131
|
+
mapping = Nodes::Mapping.new
|
132
|
+
mapping.children << Nodes::Scalar.new('key', 'A')
|
133
|
+
mapping.children << Nodes::Alias.new('A')
|
134
|
+
doc.children << mapping
|
135
|
+
s.children << doc
|
136
|
+
|
137
|
+
@visitor.accept s
|
138
|
+
|
139
|
+
assert_match(/&A key: \*A/, @io.string)
|
140
|
+
assert_equal @io.string, s.to_yaml
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,325 @@
|
|
1
|
+
require 'psych/helper'
|
2
|
+
|
3
|
+
module Psych
|
4
|
+
module Visitors
|
5
|
+
class TestToRuby < TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@visitor = ToRuby.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_object
|
12
|
+
mapping = Nodes::Mapping.new nil, "!ruby/object"
|
13
|
+
mapping.children << Nodes::Scalar.new('foo')
|
14
|
+
mapping.children << Nodes::Scalar.new('bar')
|
15
|
+
|
16
|
+
o = mapping.to_ruby
|
17
|
+
assert_equal 'bar', o.instance_variable_get(:@foo)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_awesome
|
21
|
+
Psych.load('1900-01-01T00:00:00+00:00')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_legacy_struct
|
25
|
+
foo = Struct.new('AWESOME', :bar)
|
26
|
+
assert_equal foo.new('baz'), Psych.load(<<-eoyml)
|
27
|
+
!ruby/struct:AWESOME
|
28
|
+
bar: baz
|
29
|
+
eoyml
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_binary
|
33
|
+
gif = "GIF89a\f\x00\f\x00\x84\x00\x00\xFF\xFF\xF7\xF5\xF5\xEE\xE9\xE9\xE5fff\x00\x00\x00\xE7\xE7\xE7^^^\xF3\xF3\xED\x8E\x8E\x8E\xE0\xE0\xE0\x9F\x9F\x9F\x93\x93\x93\xA7\xA7\xA7\x9E\x9E\x9Eiiiccc\xA3\xA3\xA3\x84\x84\x84\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9\xFF\xFE\xF9!\xFE\x0EMade with GIMP\x00,\x00\x00\x00\x00\f\x00\f\x00\x00\x05, \x8E\x810\x9E\xE3@\x14\xE8i\x10\xC4\xD1\x8A\b\x1C\xCF\x80M$z\xEF\xFF0\x85p\xB8\xB01f\r\e\xCE\x01\xC3\x01\x1E\x10' \x82\n\x01\x00;"
|
34
|
+
|
35
|
+
hash = Psych.load(<<-'eoyaml')
|
36
|
+
canonical: !!binary "\
|
37
|
+
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\
|
38
|
+
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\
|
39
|
+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\
|
40
|
+
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
|
41
|
+
generic: !binary |
|
42
|
+
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
|
43
|
+
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
|
44
|
+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
|
45
|
+
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
|
46
|
+
description:
|
47
|
+
The binary value above is a tiny arrow encoded as a gif image.
|
48
|
+
eoyaml
|
49
|
+
assert_equal gif, hash['canonical']
|
50
|
+
assert_equal gif, hash['generic']
|
51
|
+
end
|
52
|
+
|
53
|
+
A = Struct.new(:foo)
|
54
|
+
|
55
|
+
def test_struct
|
56
|
+
s = A.new('bar')
|
57
|
+
|
58
|
+
mapping = Nodes::Mapping.new nil, "!ruby/struct:#{s.class}"
|
59
|
+
mapping.children << Nodes::Scalar.new('foo')
|
60
|
+
mapping.children << Nodes::Scalar.new('bar')
|
61
|
+
|
62
|
+
ruby = mapping.to_ruby
|
63
|
+
|
64
|
+
assert_equal s.class, ruby.class
|
65
|
+
assert_equal s.foo, ruby.foo
|
66
|
+
assert_equal s, ruby
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_anon_struct_legacy
|
70
|
+
s = Struct.new(:foo).new('bar')
|
71
|
+
|
72
|
+
mapping = Nodes::Mapping.new nil, '!ruby/struct:'
|
73
|
+
mapping.children << Nodes::Scalar.new('foo')
|
74
|
+
mapping.children << Nodes::Scalar.new('bar')
|
75
|
+
|
76
|
+
assert_equal s.foo, mapping.to_ruby.foo
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_anon_struct
|
80
|
+
s = Struct.new(:foo).new('bar')
|
81
|
+
|
82
|
+
mapping = Nodes::Mapping.new nil, '!ruby/struct'
|
83
|
+
mapping.children << Nodes::Scalar.new('foo')
|
84
|
+
mapping.children << Nodes::Scalar.new('bar')
|
85
|
+
|
86
|
+
assert_equal s.foo, mapping.to_ruby.foo
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_exception
|
90
|
+
exc = Exception.new 'hello'
|
91
|
+
|
92
|
+
mapping = Nodes::Mapping.new nil, '!ruby/exception'
|
93
|
+
mapping.children << Nodes::Scalar.new('message')
|
94
|
+
mapping.children << Nodes::Scalar.new('hello')
|
95
|
+
|
96
|
+
ruby = mapping.to_ruby
|
97
|
+
|
98
|
+
assert_equal exc.class, ruby.class
|
99
|
+
assert_equal exc.message, ruby.message
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_regexp
|
103
|
+
node = Nodes::Scalar.new('/foo/', nil, '!ruby/regexp')
|
104
|
+
assert_equal(/foo/, node.to_ruby)
|
105
|
+
|
106
|
+
node = Nodes::Scalar.new('/foo/m', nil, '!ruby/regexp')
|
107
|
+
assert_equal(/foo/m, node.to_ruby)
|
108
|
+
|
109
|
+
node = Nodes::Scalar.new('/foo/ix', nil, '!ruby/regexp')
|
110
|
+
assert_equal(/foo/ix, node.to_ruby)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_time
|
114
|
+
now = Time.now
|
115
|
+
zone = now.strftime('%z')
|
116
|
+
zone = " #{zone[0,3]}:#{zone[3,5]}"
|
117
|
+
|
118
|
+
formatted = now.strftime("%Y-%m-%d %H:%M:%S.%9N") + zone
|
119
|
+
|
120
|
+
assert_equal now, Nodes::Scalar.new(formatted).to_ruby
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_time_utc
|
124
|
+
now = Time.now.utc
|
125
|
+
formatted = now.strftime("%Y-%m-%d %H:%M:%S") +
|
126
|
+
".%09dZ" % [now.nsec]
|
127
|
+
|
128
|
+
assert_equal now, Nodes::Scalar.new(formatted).to_ruby
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_time_utc_no_z
|
132
|
+
now = Time.now.utc
|
133
|
+
formatted = now.strftime("%Y-%m-%d %H:%M:%S") +
|
134
|
+
".%09d" % [now.nsec]
|
135
|
+
|
136
|
+
assert_equal now, Nodes::Scalar.new(formatted).to_ruby
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_date
|
140
|
+
d = '1980-12-16'
|
141
|
+
actual = Date.strptime(d, '%Y-%m-%d')
|
142
|
+
|
143
|
+
date = Nodes::Scalar.new(d, nil, 'tag:yaml.org,2002:timestamp', false)
|
144
|
+
|
145
|
+
assert_equal actual, date.to_ruby
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_rational
|
149
|
+
mapping = Nodes::Mapping.new nil, '!ruby/object:Rational'
|
150
|
+
mapping.children << Nodes::Scalar.new('denominator')
|
151
|
+
mapping.children << Nodes::Scalar.new('2')
|
152
|
+
mapping.children << Nodes::Scalar.new('numerator')
|
153
|
+
mapping.children << Nodes::Scalar.new('1')
|
154
|
+
|
155
|
+
assert_equal Rational(1,2), mapping.to_ruby
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_complex
|
159
|
+
mapping = Nodes::Mapping.new nil, '!ruby/object:Complex'
|
160
|
+
mapping.children << Nodes::Scalar.new('image')
|
161
|
+
mapping.children << Nodes::Scalar.new('2')
|
162
|
+
mapping.children << Nodes::Scalar.new('real')
|
163
|
+
mapping.children << Nodes::Scalar.new('1')
|
164
|
+
|
165
|
+
assert_equal Complex(1,2), mapping.to_ruby
|
166
|
+
end
|
167
|
+
|
168
|
+
if RUBY_VERSION >= '1.9'
|
169
|
+
def test_complex_string
|
170
|
+
node = Nodes::Scalar.new '3+4i', nil, "!ruby/object:Complex"
|
171
|
+
assert_equal Complex(3, 4), node.to_ruby
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_rational_string
|
175
|
+
node = Nodes::Scalar.new '1/2', nil, "!ruby/object:Rational"
|
176
|
+
assert_equal Rational(1, 2), node.to_ruby
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_range_string
|
181
|
+
node = Nodes::Scalar.new '1..2', nil, "!ruby/range"
|
182
|
+
assert_equal 1..2, node.to_ruby
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_range_string_triple
|
186
|
+
node = Nodes::Scalar.new '1...3', nil, "!ruby/range"
|
187
|
+
assert_equal 1...3, node.to_ruby
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_integer
|
191
|
+
i = Nodes::Scalar.new('1', nil, 'tag:yaml.org,2002:int')
|
192
|
+
assert_equal 1, i.to_ruby
|
193
|
+
|
194
|
+
assert_equal 1, Nodes::Scalar.new('1').to_ruby
|
195
|
+
|
196
|
+
i = Nodes::Scalar.new('-1', nil, 'tag:yaml.org,2002:int')
|
197
|
+
assert_equal(-1, i.to_ruby)
|
198
|
+
|
199
|
+
assert_equal(-1, Nodes::Scalar.new('-1').to_ruby)
|
200
|
+
assert_equal 1, Nodes::Scalar.new('+1').to_ruby
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_int_ignore
|
204
|
+
['1,000', '1_000'].each do |num|
|
205
|
+
i = Nodes::Scalar.new(num, nil, 'tag:yaml.org,2002:int')
|
206
|
+
assert_equal 1000, i.to_ruby
|
207
|
+
|
208
|
+
assert_equal 1000, Nodes::Scalar.new(num).to_ruby
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def test_float_ignore
|
213
|
+
['1,000.3', '1_000.3'].each do |num|
|
214
|
+
i = Nodes::Scalar.new(num, nil, 'tag:yaml.org,2002:float')
|
215
|
+
assert_equal 1000.3, i.to_ruby
|
216
|
+
|
217
|
+
i = Nodes::Scalar.new(num, nil, '!float')
|
218
|
+
assert_equal 1000.3, i.to_ruby
|
219
|
+
|
220
|
+
assert_equal 1000.3, Nodes::Scalar.new(num).to_ruby
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# http://yaml.org/type/bool.html
|
225
|
+
def test_boolean_true
|
226
|
+
%w{ yes Yes YES true True TRUE on On ON }.each do |t|
|
227
|
+
i = Nodes::Scalar.new(t, nil, 'tag:yaml.org,2002:bool')
|
228
|
+
assert_equal true, i.to_ruby
|
229
|
+
assert_equal true, Nodes::Scalar.new(t).to_ruby
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# http://yaml.org/type/bool.html
|
234
|
+
def test_boolean_false
|
235
|
+
%w{ no No NO false False FALSE off Off OFF }.each do |t|
|
236
|
+
i = Nodes::Scalar.new(t, nil, 'tag:yaml.org,2002:bool')
|
237
|
+
assert_equal false, i.to_ruby
|
238
|
+
assert_equal false, Nodes::Scalar.new(t).to_ruby
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_float
|
243
|
+
i = Nodes::Scalar.new('12', nil, 'tag:yaml.org,2002:float')
|
244
|
+
assert_equal 12.0, i.to_ruby
|
245
|
+
|
246
|
+
i = Nodes::Scalar.new('1.2', nil, 'tag:yaml.org,2002:float')
|
247
|
+
assert_equal 1.2, i.to_ruby
|
248
|
+
|
249
|
+
i = Nodes::Scalar.new('1.2')
|
250
|
+
assert_equal 1.2, i.to_ruby
|
251
|
+
|
252
|
+
assert_equal 1, Nodes::Scalar.new('.Inf').to_ruby.infinite?
|
253
|
+
assert_equal 1, Nodes::Scalar.new('.inf').to_ruby.infinite?
|
254
|
+
assert_equal 1, Nodes::Scalar.new('.Inf', nil, 'tag:yaml.org,2002:float').to_ruby.infinite?
|
255
|
+
|
256
|
+
assert_equal(-1, Nodes::Scalar.new('-.inf').to_ruby.infinite?)
|
257
|
+
assert_equal(-1, Nodes::Scalar.new('-.Inf').to_ruby.infinite?)
|
258
|
+
assert_equal(-1, Nodes::Scalar.new('-.Inf', nil, 'tag:yaml.org,2002:float').to_ruby.infinite?)
|
259
|
+
|
260
|
+
assert Nodes::Scalar.new('.NaN').to_ruby.nan?
|
261
|
+
assert Nodes::Scalar.new('.NaN', nil, 'tag:yaml.org,2002:float').to_ruby.nan?
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_exp_float
|
265
|
+
exp = 1.2e+30
|
266
|
+
|
267
|
+
i = Nodes::Scalar.new(exp.to_s, nil, 'tag:yaml.org,2002:float')
|
268
|
+
assert_equal exp, i.to_ruby
|
269
|
+
|
270
|
+
assert_equal exp, Nodes::Scalar.new(exp.to_s).to_ruby
|
271
|
+
end
|
272
|
+
|
273
|
+
def test_scalar
|
274
|
+
scalar = Nodes::Scalar.new('foo')
|
275
|
+
assert_equal 'foo', @visitor.accept(scalar)
|
276
|
+
assert_equal 'foo', scalar.to_ruby
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_sequence
|
280
|
+
seq = Nodes::Sequence.new
|
281
|
+
seq.children << Nodes::Scalar.new('foo')
|
282
|
+
seq.children << Nodes::Scalar.new('bar')
|
283
|
+
|
284
|
+
assert_equal %w{ foo bar }, seq.to_ruby
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_mapping
|
288
|
+
mapping = Nodes::Mapping.new
|
289
|
+
mapping.children << Nodes::Scalar.new('foo')
|
290
|
+
mapping.children << Nodes::Scalar.new('bar')
|
291
|
+
assert_equal({'foo' => 'bar'}, mapping.to_ruby)
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_document
|
295
|
+
doc = Nodes::Document.new
|
296
|
+
doc.children << Nodes::Scalar.new('foo')
|
297
|
+
assert_equal 'foo', doc.to_ruby
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_stream
|
301
|
+
a = Nodes::Document.new
|
302
|
+
a.children << Nodes::Scalar.new('foo')
|
303
|
+
|
304
|
+
b = Nodes::Document.new
|
305
|
+
b.children << Nodes::Scalar.new('bar')
|
306
|
+
|
307
|
+
stream = Nodes::Stream.new
|
308
|
+
stream.children << a
|
309
|
+
stream.children << b
|
310
|
+
|
311
|
+
assert_equal %w{ foo bar }, stream.to_ruby
|
312
|
+
end
|
313
|
+
|
314
|
+
def test_alias
|
315
|
+
seq = Nodes::Sequence.new
|
316
|
+
seq.children << Nodes::Scalar.new('foo', 'A')
|
317
|
+
seq.children << Nodes::Alias.new('A')
|
318
|
+
|
319
|
+
list = seq.to_ruby
|
320
|
+
assert_equal %w{ foo foo }, list
|
321
|
+
assert_equal list[0].object_id, list[1].object_id
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|