psych 2.1.0-java → 2.1.1-java
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.
- checksums.yaml +4 -4
- data/.gitignore +14 -0
- data/Gemfile +3 -0
- data/Mavenfile +7 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/ext/java/PsychEmitter.java +345 -0
- data/ext/java/PsychLibrary.java +93 -0
- data/ext/java/PsychParser.java +399 -0
- data/ext/java/PsychToRuby.java +79 -0
- data/ext/java/PsychYamlTree.java +55 -0
- data/ext/psych/.gitignore +11 -0
- data/lib/psych.rb +2 -2
- data/lib/psych/visitors/to_ruby.rb +2 -2
- data/psych.gemspec +39 -0
- metadata +19 -53
- data/test/psych/handlers/test_recorder.rb +0 -26
- data/test/psych/helper.rb +0 -122
- data/test/psych/json/test_stream.rb +0 -110
- data/test/psych/nodes/test_enumerable.rb +0 -44
- data/test/psych/test_alias_and_anchor.rb +0 -97
- data/test/psych/test_array.rb +0 -58
- data/test/psych/test_boolean.rb +0 -37
- data/test/psych/test_class.rb +0 -37
- data/test/psych/test_coder.rb +0 -207
- data/test/psych/test_date_time.rb +0 -39
- data/test/psych/test_deprecated.rb +0 -215
- data/test/psych/test_document.rb +0 -47
- data/test/psych/test_emitter.rb +0 -112
- data/test/psych/test_encoding.rb +0 -269
- data/test/psych/test_exception.rb +0 -158
- data/test/psych/test_hash.rb +0 -95
- data/test/psych/test_json_tree.rb +0 -66
- data/test/psych/test_merge_keys.rb +0 -181
- data/test/psych/test_nil.rb +0 -19
- data/test/psych/test_null.rb +0 -20
- data/test/psych/test_numeric.rb +0 -46
- data/test/psych/test_object.rb +0 -45
- data/test/psych/test_object_references.rb +0 -72
- data/test/psych/test_omap.rb +0 -76
- data/test/psych/test_parser.rb +0 -340
- data/test/psych/test_psych.rb +0 -184
- data/test/psych/test_safe_load.rb +0 -98
- data/test/psych/test_scalar.rb +0 -12
- data/test/psych/test_scalar_scanner.rb +0 -111
- data/test/psych/test_serialize_subclasses.rb +0 -39
- data/test/psych/test_set.rb +0 -50
- data/test/psych/test_stream.rb +0 -94
- data/test/psych/test_string.rb +0 -231
- data/test/psych/test_struct.rb +0 -50
- data/test/psych/test_symbol.rb +0 -26
- data/test/psych/test_tainted.rb +0 -131
- data/test/psych/test_to_yaml_properties.rb +0 -64
- data/test/psych/test_tree_builder.rb +0 -80
- data/test/psych/test_yaml.rb +0 -1293
- data/test/psych/test_yamldbm.rb +0 -193
- data/test/psych/test_yamlstore.rb +0 -86
- data/test/psych/visitors/test_depth_first.rb +0 -50
- data/test/psych/visitors/test_emitter.rb +0 -145
- data/test/psych/visitors/test_to_ruby.rb +0 -332
- data/test/psych/visitors/test_yaml_tree.rb +0 -180
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
require_relative 'helper'
|
3
|
-
require 'date'
|
4
|
-
|
5
|
-
module Psych
|
6
|
-
class TestDateTime < TestCase
|
7
|
-
def test_negative_year
|
8
|
-
time = Time.utc -1, 12, 16
|
9
|
-
assert_cycle time
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_new_datetime
|
13
|
-
assert_cycle DateTime.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_invalid_date
|
17
|
-
assert_cycle "2013-10-31T10:40:07-000000000000033"
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_string_tag
|
21
|
-
dt = DateTime.now
|
22
|
-
yaml = Psych.dump dt
|
23
|
-
assert_match(/DateTime/, yaml)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_round_trip
|
27
|
-
dt = DateTime.now
|
28
|
-
assert_cycle dt
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_alias_with_time
|
32
|
-
t = Time.now
|
33
|
-
h = {:a => t, :b => t}
|
34
|
-
yaml = Psych.dump h
|
35
|
-
assert_match('&', yaml)
|
36
|
-
assert_match('*', yaml)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,215 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
require_relative 'helper'
|
3
|
-
|
4
|
-
module Psych
|
5
|
-
class TestDeprecated < TestCase
|
6
|
-
def teardown
|
7
|
-
$VERBOSE = @orig_verbose
|
8
|
-
Psych.domain_types.clear
|
9
|
-
end
|
10
|
-
|
11
|
-
class QuickEmitter
|
12
|
-
attr_reader :name
|
13
|
-
attr_reader :value
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@name = 'hello!!'
|
17
|
-
@value = 'Friday!'
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_yaml opts = {}
|
21
|
-
Psych.quick_emit object_id, opts do |out|
|
22
|
-
out.map taguri, to_yaml_style do |map|
|
23
|
-
map.add 'name', @name
|
24
|
-
map.add 'value', nil
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def setup
|
31
|
-
@qe = QuickEmitter.new
|
32
|
-
@orig_verbose, $VERBOSE = $VERBOSE, false
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_quick_emit
|
36
|
-
qe2 = Psych.load @qe.to_yaml
|
37
|
-
assert_equal @qe.name, qe2.name
|
38
|
-
assert_instance_of QuickEmitter, qe2
|
39
|
-
assert_nil qe2.value
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_recursive_quick_emit
|
43
|
-
hash = { :qe => @qe }
|
44
|
-
hash2 = Psych.load Psych.dump hash
|
45
|
-
qe = hash2[:qe]
|
46
|
-
|
47
|
-
assert_equal @qe.name, qe.name
|
48
|
-
assert_instance_of QuickEmitter, qe
|
49
|
-
assert_nil qe.value
|
50
|
-
end
|
51
|
-
|
52
|
-
class QuickEmitterEncodeWith
|
53
|
-
attr_reader :name
|
54
|
-
attr_reader :value
|
55
|
-
|
56
|
-
def initialize
|
57
|
-
@name = 'hello!!'
|
58
|
-
@value = 'Friday!'
|
59
|
-
end
|
60
|
-
|
61
|
-
def encode_with coder
|
62
|
-
coder.map do |map|
|
63
|
-
map.add 'name', @name
|
64
|
-
map.add 'value', nil
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def to_yaml opts = {}
|
69
|
-
raise
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
###
|
74
|
-
# An object that defines both to_yaml and encode_with should only call
|
75
|
-
# encode_with.
|
76
|
-
def test_recursive_quick_emit_encode_with
|
77
|
-
qeew = QuickEmitterEncodeWith.new
|
78
|
-
hash = { :qe => qeew }
|
79
|
-
hash2 = Psych.load Psych.dump hash
|
80
|
-
qe = hash2[:qe]
|
81
|
-
|
82
|
-
assert_equal qeew.name, qe.name
|
83
|
-
assert_instance_of QuickEmitterEncodeWith, qe
|
84
|
-
assert_nil qe.value
|
85
|
-
end
|
86
|
-
|
87
|
-
class YamlInit
|
88
|
-
attr_reader :name
|
89
|
-
attr_reader :value
|
90
|
-
|
91
|
-
def initialize
|
92
|
-
@name = 'hello!!'
|
93
|
-
@value = 'Friday!'
|
94
|
-
end
|
95
|
-
|
96
|
-
def yaml_initialize tag, vals
|
97
|
-
vals.each { |ivar, val| instance_variable_set "@#{ivar}", 'TGIF!' }
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_yaml_initialize
|
102
|
-
hash = { :yi => YamlInit.new }
|
103
|
-
hash2 = Psych.load Psych.dump hash
|
104
|
-
yi = hash2[:yi]
|
105
|
-
|
106
|
-
assert_equal 'TGIF!', yi.name
|
107
|
-
assert_equal 'TGIF!', yi.value
|
108
|
-
assert_instance_of YamlInit, yi
|
109
|
-
end
|
110
|
-
|
111
|
-
class YamlInitAndInitWith
|
112
|
-
attr_reader :name
|
113
|
-
attr_reader :value
|
114
|
-
|
115
|
-
def initialize
|
116
|
-
@name = 'shaners'
|
117
|
-
@value = 'Friday!'
|
118
|
-
end
|
119
|
-
|
120
|
-
def init_with coder
|
121
|
-
coder.map.each { |ivar, val| instance_variable_set "@#{ivar}", 'TGIF!' }
|
122
|
-
end
|
123
|
-
|
124
|
-
def yaml_initialize tag, vals
|
125
|
-
raise
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
###
|
130
|
-
# An object that implements both yaml_initialize and init_with should not
|
131
|
-
# receive the yaml_initialize call.
|
132
|
-
def test_yaml_initialize_and_init_with
|
133
|
-
hash = { :yi => YamlInitAndInitWith.new }
|
134
|
-
hash2 = Psych.load Psych.dump hash
|
135
|
-
yi = hash2[:yi]
|
136
|
-
|
137
|
-
assert_equal 'TGIF!', yi.name
|
138
|
-
assert_equal 'TGIF!', yi.value
|
139
|
-
assert_instance_of YamlInitAndInitWith, yi
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_coder_scalar
|
143
|
-
coder = Psych::Coder.new 'foo'
|
144
|
-
coder.scalar('tag', 'some string', :plain)
|
145
|
-
assert_equal 'tag', coder.tag
|
146
|
-
assert_equal 'some string', coder.scalar
|
147
|
-
assert_equal :scalar, coder.type
|
148
|
-
end
|
149
|
-
|
150
|
-
class YamlAs
|
151
|
-
TestCase.suppress_warning do
|
152
|
-
psych_yaml_as 'helloworld' # this should be yaml_as but to avoid syck
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_yaml_as
|
157
|
-
assert_match(/helloworld/, Psych.dump(YamlAs.new))
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_ruby_type
|
161
|
-
types = []
|
162
|
-
appender = lambda { |*args| types << args }
|
163
|
-
|
164
|
-
Psych.add_ruby_type('foo', &appender)
|
165
|
-
Psych.load <<-eoyml
|
166
|
-
- !ruby.yaml.org,2002/foo bar
|
167
|
-
eoyml
|
168
|
-
|
169
|
-
assert_equal [["tag:ruby.yaml.org,2002:foo", "bar"]], types
|
170
|
-
end
|
171
|
-
|
172
|
-
def test_detect_implicit
|
173
|
-
assert_equal '', Psych.detect_implicit(nil)
|
174
|
-
assert_equal '', Psych.detect_implicit(Object.new)
|
175
|
-
assert_equal '', Psych.detect_implicit(1.2)
|
176
|
-
assert_equal 'null', Psych.detect_implicit('')
|
177
|
-
assert_equal 'string', Psych.detect_implicit('foo')
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_private_type
|
181
|
-
types = []
|
182
|
-
Psych.add_private_type('foo') { |*args| types << args }
|
183
|
-
Psych.load <<-eoyml
|
184
|
-
- !x-private:foo bar
|
185
|
-
eoyml
|
186
|
-
|
187
|
-
assert_equal [["x-private:foo", "bar"]], types
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_tagurize
|
191
|
-
assert_nil Psych.tagurize nil
|
192
|
-
assert_equal Psych, Psych.tagurize(Psych)
|
193
|
-
assert_equal 'tag:yaml.org,2002:foo', Psych.tagurize('foo')
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_read_type_class
|
197
|
-
things = Psych.read_type_class 'tag:yaml.org,2002:int:Psych::TestDeprecated::QuickEmitter', Object
|
198
|
-
assert_equal 'int', things.first
|
199
|
-
assert_equal Psych::TestDeprecated::QuickEmitter, things.last
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_read_type_class_no_class
|
203
|
-
things = Psych.read_type_class 'tag:yaml.org,2002:int', Object
|
204
|
-
assert_equal 'int', things.first
|
205
|
-
assert_equal Object, things.last
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_object_maker
|
209
|
-
thing = Psych.object_maker(Object, { 'a' => 'b', 'c' => 'd' })
|
210
|
-
assert_instance_of(Object, thing)
|
211
|
-
assert_equal 'b', thing.instance_variable_get(:@a)
|
212
|
-
assert_equal 'd', thing.instance_variable_get(:@c)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
data/test/psych/test_document.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
require_relative 'helper'
|
3
|
-
|
4
|
-
module Psych
|
5
|
-
class TestDocument < TestCase
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
@stream = Psych.parse_stream(<<-eoyml)
|
9
|
-
%YAML 1.1
|
10
|
-
%TAG ! tag:tenderlovemaking.com,2009:
|
11
|
-
--- !fun
|
12
|
-
eoyml
|
13
|
-
@doc = @stream.children.first
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_parse_tag
|
17
|
-
assert_equal([['!', 'tag:tenderlovemaking.com,2009:']],
|
18
|
-
@doc.tag_directives)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_emit_tag
|
22
|
-
assert_match('%TAG ! tag:tenderlovemaking.com,2009:', @stream.yaml)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_emit_multitag
|
26
|
-
@doc.tag_directives << ['!!', 'foo.com,2009:']
|
27
|
-
yaml = @stream.yaml
|
28
|
-
assert_match('%TAG ! tag:tenderlovemaking.com,2009:', yaml)
|
29
|
-
assert_match('%TAG !! foo.com,2009:', yaml)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_emit_bad_tag
|
33
|
-
assert_raises(RuntimeError) do
|
34
|
-
@doc.tag_directives = [['!']]
|
35
|
-
@stream.yaml
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_parse_version
|
40
|
-
assert_equal([1,1], @doc.version)
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_emit_version
|
44
|
-
assert_match('%YAML 1.1', @stream.yaml)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
data/test/psych/test_emitter.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# frozen_string_literal: false
|
3
|
-
|
4
|
-
require_relative 'helper'
|
5
|
-
|
6
|
-
module Psych
|
7
|
-
class TestEmitter < TestCase
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@out = StringIO.new('')
|
11
|
-
@emitter = Psych::Emitter.new @out
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_line_width
|
15
|
-
@emitter.line_width = 10
|
16
|
-
assert_equal 10, @emitter.line_width
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_set_canonical
|
20
|
-
@emitter.canonical = true
|
21
|
-
assert_equal true, @emitter.canonical
|
22
|
-
|
23
|
-
@emitter.canonical = false
|
24
|
-
assert_equal false, @emitter.canonical
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_indentation_set
|
28
|
-
assert_equal 2, @emitter.indentation
|
29
|
-
@emitter.indentation = 5
|
30
|
-
assert_equal 5, @emitter.indentation
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_emit_utf_8
|
34
|
-
@emitter.start_stream Psych::Nodes::Stream::UTF8
|
35
|
-
@emitter.start_document [], [], false
|
36
|
-
@emitter.scalar '日本語', nil, nil, false, true, 1
|
37
|
-
@emitter.end_document true
|
38
|
-
@emitter.end_stream
|
39
|
-
assert_match('日本語', @out.string)
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_start_stream_arg_error
|
43
|
-
assert_raises(TypeError) do
|
44
|
-
@emitter.start_stream 'asdfasdf'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_start_doc_arg_error
|
49
|
-
@emitter.start_stream Psych::Nodes::Stream::UTF8
|
50
|
-
|
51
|
-
[
|
52
|
-
[nil, [], false],
|
53
|
-
[[nil, nil], [], false],
|
54
|
-
[[], 'foo', false],
|
55
|
-
[[], ['foo'], false],
|
56
|
-
[[], [nil,nil], false],
|
57
|
-
[[1,1], [[nil, "tag:TALOS"]], 0],
|
58
|
-
].each do |args|
|
59
|
-
assert_raises(TypeError) do
|
60
|
-
@emitter.start_document(*args)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_scalar_arg_error
|
66
|
-
@emitter.start_stream Psych::Nodes::Stream::UTF8
|
67
|
-
@emitter.start_document [], [], false
|
68
|
-
|
69
|
-
[
|
70
|
-
[:foo, nil, nil, false, true, 1],
|
71
|
-
['foo', Object.new, nil, false, true, 1],
|
72
|
-
['foo', nil, Object.new, false, true, 1],
|
73
|
-
['foo', nil, nil, false, true, :foo],
|
74
|
-
[nil, nil, nil, false, true, 1],
|
75
|
-
].each do |args|
|
76
|
-
assert_raises(TypeError) do
|
77
|
-
@emitter.scalar(*args)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_start_sequence_arg_error
|
83
|
-
@emitter.start_stream Psych::Nodes::Stream::UTF8
|
84
|
-
@emitter.start_document [], [], false
|
85
|
-
|
86
|
-
assert_raises(TypeError) do
|
87
|
-
@emitter.start_sequence(nil, Object.new, true, 1)
|
88
|
-
end
|
89
|
-
|
90
|
-
assert_raises(TypeError) do
|
91
|
-
@emitter.start_sequence(nil, nil, true, :foo)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_resizing_tags
|
96
|
-
@emitter.start_stream Psych::Nodes::Stream::UTF8
|
97
|
-
|
98
|
-
tags = []
|
99
|
-
version = [1,1]
|
100
|
-
obj = Object.new
|
101
|
-
obj.instance_variable_set(:@tags, tags)
|
102
|
-
def obj.to_str
|
103
|
-
(1..10).map{|x| @tags.push(["AAAA","BBBB"])}
|
104
|
-
return "x"
|
105
|
-
end
|
106
|
-
|
107
|
-
tags.push([obj, "tag:TALOS"])
|
108
|
-
@emitter.start_document(version, tags, 0)
|
109
|
-
assert(true)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/test/psych/test_encoding.rb
DELETED
@@ -1,269 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# frozen_string_literal: false
|
3
|
-
|
4
|
-
require_relative 'helper'
|
5
|
-
|
6
|
-
module Psych
|
7
|
-
class TestEncoding < TestCase
|
8
|
-
class EncodingCatcher < Handler
|
9
|
-
attr_reader :strings
|
10
|
-
def initialize
|
11
|
-
@strings = []
|
12
|
-
end
|
13
|
-
|
14
|
-
(Handler.instance_methods(true) -
|
15
|
-
Object.instance_methods).each do |m|
|
16
|
-
class_eval %{
|
17
|
-
def #{m} *args
|
18
|
-
@strings += args.flatten.find_all { |a|
|
19
|
-
String === a
|
20
|
-
}
|
21
|
-
end
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def setup
|
27
|
-
super
|
28
|
-
@buffer = StringIO.new
|
29
|
-
@handler = EncodingCatcher.new
|
30
|
-
@parser = Psych::Parser.new @handler
|
31
|
-
@utf8 = Encoding.find('UTF-8')
|
32
|
-
@emitter = Psych::Emitter.new @buffer
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_dump_load_encoding_object
|
36
|
-
assert_cycle Encoding::US_ASCII
|
37
|
-
assert_cycle Encoding::UTF_8
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_transcode_shiftjis
|
41
|
-
str = "こんにちは!"
|
42
|
-
loaded = Psych.load("--- こんにちは!".encode('SHIFT_JIS'))
|
43
|
-
assert_equal str, loaded
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_transcode_utf16le
|
47
|
-
str = "こんにちは!"
|
48
|
-
loaded = Psych.load("--- こんにちは!".encode('UTF-16LE'))
|
49
|
-
assert_equal str, loaded
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_transcode_utf16be
|
53
|
-
str = "こんにちは!"
|
54
|
-
loaded = Psych.load("--- こんにちは!".encode('UTF-16BE'))
|
55
|
-
assert_equal str, loaded
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_io_shiftjis
|
59
|
-
Tempfile.create(['shiftjis', 'yml'], :encoding => 'SHIFT_JIS') {|t|
|
60
|
-
t.write '--- こんにちは!'
|
61
|
-
t.close
|
62
|
-
|
63
|
-
# If the external encoding isn't utf8, utf16le, or utf16be, we cannot
|
64
|
-
# process the file.
|
65
|
-
File.open(t.path, 'r', :encoding => 'SHIFT_JIS') do |f|
|
66
|
-
assert_raises Psych::SyntaxError do
|
67
|
-
Psych.load(f)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
}
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_io_utf16le
|
74
|
-
Tempfile.create(['utf16le', 'yml']) {|t|
|
75
|
-
t.binmode
|
76
|
-
t.write '--- こんにちは!'.encode('UTF-16LE')
|
77
|
-
t.close
|
78
|
-
|
79
|
-
File.open(t.path, 'rb', :encoding => 'UTF-16LE') do |f|
|
80
|
-
assert_equal "こんにちは!", Psych.load(f)
|
81
|
-
end
|
82
|
-
}
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_io_utf16be
|
86
|
-
Tempfile.create(['utf16be', 'yml']) {|t|
|
87
|
-
t.binmode
|
88
|
-
t.write '--- こんにちは!'.encode('UTF-16BE')
|
89
|
-
t.close
|
90
|
-
|
91
|
-
File.open(t.path, 'rb', :encoding => 'UTF-16BE') do |f|
|
92
|
-
assert_equal "こんにちは!", Psych.load(f)
|
93
|
-
end
|
94
|
-
}
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_io_utf8
|
98
|
-
Tempfile.create(['utf8', 'yml']) {|t|
|
99
|
-
t.binmode
|
100
|
-
t.write '--- こんにちは!'.encode('UTF-8')
|
101
|
-
t.close
|
102
|
-
|
103
|
-
File.open(t.path, 'rb', :encoding => 'UTF-8') do |f|
|
104
|
-
assert_equal "こんにちは!", Psych.load(f)
|
105
|
-
end
|
106
|
-
}
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_emit_alias
|
110
|
-
@emitter.start_stream Psych::Parser::UTF8
|
111
|
-
@emitter.start_document [], [], true
|
112
|
-
e = assert_raises(RuntimeError) do
|
113
|
-
@emitter.alias 'ドラえもん'.encode('EUC-JP')
|
114
|
-
end
|
115
|
-
assert_match(/alias value/, e.message)
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_to_yaml_is_valid
|
119
|
-
with_default_external(Encoding::US_ASCII) do
|
120
|
-
with_default_internal(nil) do
|
121
|
-
s = "こんにちは!"
|
122
|
-
# If no encoding is specified, use UTF-8
|
123
|
-
assert_equal Encoding::UTF_8, Psych.dump(s).encoding
|
124
|
-
assert_equal s, Psych.load(Psych.dump(s))
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_start_mapping
|
130
|
-
foo = 'foo'
|
131
|
-
bar = 'バー'
|
132
|
-
|
133
|
-
@emitter.start_stream Psych::Parser::UTF8
|
134
|
-
@emitter.start_document [], [], true
|
135
|
-
@emitter.start_mapping(
|
136
|
-
foo.encode('Shift_JIS'),
|
137
|
-
bar.encode('UTF-16LE'),
|
138
|
-
false, Nodes::Sequence::ANY)
|
139
|
-
@emitter.end_mapping
|
140
|
-
@emitter.end_document false
|
141
|
-
@emitter.end_stream
|
142
|
-
|
143
|
-
@parser.parse @buffer.string
|
144
|
-
assert_encodings @utf8, @handler.strings
|
145
|
-
assert_equal [foo, bar], @handler.strings
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_start_sequence
|
149
|
-
foo = 'foo'
|
150
|
-
bar = 'バー'
|
151
|
-
|
152
|
-
@emitter.start_stream Psych::Parser::UTF8
|
153
|
-
@emitter.start_document [], [], true
|
154
|
-
@emitter.start_sequence(
|
155
|
-
foo.encode('Shift_JIS'),
|
156
|
-
bar.encode('UTF-16LE'),
|
157
|
-
false, Nodes::Sequence::ANY)
|
158
|
-
@emitter.end_sequence
|
159
|
-
@emitter.end_document false
|
160
|
-
@emitter.end_stream
|
161
|
-
|
162
|
-
@parser.parse @buffer.string
|
163
|
-
assert_encodings @utf8, @handler.strings
|
164
|
-
assert_equal [foo, bar], @handler.strings
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_doc_tag_encoding
|
168
|
-
key = '鍵'
|
169
|
-
@emitter.start_stream Psych::Parser::UTF8
|
170
|
-
@emitter.start_document(
|
171
|
-
[1, 1],
|
172
|
-
[['!'.encode('EUC-JP'), key.encode('EUC-JP')]],
|
173
|
-
true
|
174
|
-
)
|
175
|
-
@emitter.scalar 'foo', nil, nil, true, false, Nodes::Scalar::ANY
|
176
|
-
@emitter.end_document false
|
177
|
-
@emitter.end_stream
|
178
|
-
|
179
|
-
@parser.parse @buffer.string
|
180
|
-
assert_encodings @utf8, @handler.strings
|
181
|
-
assert_equal key, @handler.strings[1]
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_emitter_encoding
|
185
|
-
str = "壁に耳あり、障子に目あり"
|
186
|
-
thing = Psych.load Psych.dump str.encode('EUC-JP')
|
187
|
-
assert_equal str, thing
|
188
|
-
end
|
189
|
-
|
190
|
-
def test_default_internal
|
191
|
-
with_default_internal(Encoding::EUC_JP) do
|
192
|
-
str = "壁に耳あり、障子に目あり"
|
193
|
-
assert_equal @utf8, str.encoding
|
194
|
-
|
195
|
-
@parser.parse str
|
196
|
-
assert_encodings Encoding::EUC_JP, @handler.strings
|
197
|
-
assert_equal str, @handler.strings.first.encode('UTF-8')
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_scalar
|
202
|
-
@parser.parse("--- a")
|
203
|
-
assert_encodings @utf8, @handler.strings
|
204
|
-
end
|
205
|
-
|
206
|
-
def test_alias
|
207
|
-
@parser.parse(<<-eoyml)
|
208
|
-
%YAML 1.1
|
209
|
-
---
|
210
|
-
!!seq [
|
211
|
-
!!str "Without properties",
|
212
|
-
&A !!str "Anchored",
|
213
|
-
!!str "Tagged",
|
214
|
-
*A,
|
215
|
-
!!str "",
|
216
|
-
]
|
217
|
-
eoyml
|
218
|
-
assert_encodings @utf8, @handler.strings
|
219
|
-
end
|
220
|
-
|
221
|
-
def test_list_anchor
|
222
|
-
list = %w{ a b }
|
223
|
-
list << list
|
224
|
-
@parser.parse(Psych.dump(list))
|
225
|
-
assert_encodings @utf8, @handler.strings
|
226
|
-
end
|
227
|
-
|
228
|
-
def test_map_anchor
|
229
|
-
h = {}
|
230
|
-
h['a'] = h
|
231
|
-
@parser.parse(Psych.dump(h))
|
232
|
-
assert_encodings @utf8, @handler.strings
|
233
|
-
end
|
234
|
-
|
235
|
-
def test_map_tag
|
236
|
-
@parser.parse(<<-eoyml)
|
237
|
-
%YAML 1.1
|
238
|
-
---
|
239
|
-
!!map { a : b }
|
240
|
-
eoyml
|
241
|
-
assert_encodings @utf8, @handler.strings
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_doc_tag
|
245
|
-
@parser.parse(<<-eoyml)
|
246
|
-
%YAML 1.1
|
247
|
-
%TAG ! tag:tenderlovemaking.com,2009:
|
248
|
-
--- !fun
|
249
|
-
eoyml
|
250
|
-
assert_encodings @utf8, @handler.strings
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_dump_non_ascii_string_to_file
|
254
|
-
Tempfile.create(['utf8', 'yml'], :encoding => 'UTF-8') do |t|
|
255
|
-
h = {'one' => 'いち'}
|
256
|
-
Psych.dump(h, t)
|
257
|
-
t.close
|
258
|
-
assert_equal h, Psych.load_file(t.path)
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
private
|
263
|
-
def assert_encodings encoding, strings
|
264
|
-
strings.each do |str|
|
265
|
-
assert_equal encoding, str.encoding, str
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|