1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
require_relative 'helper'
module Psych
class TestDeprecated < TestCase
def teardown
$VERBOSE = @orig_verbose
Psych.domain_types.clear
end
class QuickEmitter
attr_reader :name
attr_reader :value
def initialize
@name = 'hello!!'
@value = 'Friday!'
end
def to_yaml opts = {}
Psych.quick_emit object_id, opts do |out|
out.map taguri, to_yaml_style do |map|
map.add 'name', @name
map.add 'value', nil
end
end
end
end
def setup
@qe = QuickEmitter.new
@orig_verbose, $VERBOSE = $VERBOSE, false
end
def test_quick_emit
qe2 = Psych.load @qe.to_yaml
assert_equal @qe.name, qe2.name
assert_instance_of QuickEmitter, qe2
assert_nil qe2.value
end
def test_recursive_quick_emit
hash = { :qe => @qe }
hash2 = Psych.load Psych.dump hash
qe = hash2[:qe]
assert_equal @qe.name, qe.name
assert_instance_of QuickEmitter, qe
assert_nil qe.value
end
class QuickEmitterEncodeWith
attr_reader :name
attr_reader :value
def initialize
@name = 'hello!!'
@value = 'Friday!'
end
def encode_with coder
coder.map do |map|
map.add 'name', @name
map.add 'value', nil
end
end
def to_yaml opts = {}
raise
end
end
###
# An object that defines both to_yaml and encode_with should only call
# encode_with.
def test_recursive_quick_emit_encode_with
qeew = QuickEmitterEncodeWith.new
hash = { :qe => qeew }
hash2 = Psych.load Psych.dump hash
qe = hash2[:qe]
assert_equal qeew.name, qe.name
assert_instance_of QuickEmitterEncodeWith, qe
assert_nil qe.value
end
class YamlInit
attr_reader :name
attr_reader :value
def initialize
@name = 'hello!!'
@value = 'Friday!'
end
def yaml_initialize tag, vals
vals.each { |ivar, val| instance_variable_set "@#{ivar}", 'TGIF!' }
end
end
def test_yaml_initialize
hash = { :yi => YamlInit.new }
hash2 = Psych.load Psych.dump hash
yi = hash2[:yi]
assert_equal 'TGIF!', yi.name
assert_equal 'TGIF!', yi.value
assert_instance_of YamlInit, yi
end
class YamlInitAndInitWith
attr_reader :name
attr_reader :value
def initialize
@name = 'shaners'
@value = 'Friday!'
end
def init_with coder
coder.map.each { |ivar, val| instance_variable_set "@#{ivar}", 'TGIF!' }
end
def yaml_initialize tag, vals
raise
end
end
###
# An object that implements both yaml_initialize and init_with should not
# receive the yaml_initialize call.
def test_yaml_initialize_and_init_with
hash = { :yi => YamlInitAndInitWith.new }
hash2 = Psych.load Psych.dump hash
yi = hash2[:yi]
assert_equal 'TGIF!', yi.name
assert_equal 'TGIF!', yi.value
assert_instance_of YamlInitAndInitWith, yi
end
def test_coder_scalar
coder = Psych::Coder.new 'foo'
coder.scalar('tag', 'some string', :plain)
assert_equal 'tag', coder.tag
assert_equal 'some string', coder.scalar
assert_equal :scalar, coder.type
end
class YamlAs
TestCase.suppress_warning do
psych_yaml_as 'helloworld' # this should be yaml_as but to avoid syck
end
end
def test_yaml_as
assert_match(/helloworld/, Psych.dump(YamlAs.new))
end
def test_ruby_type
types = []
appender = lambda { |*args| types << args }
Psych.add_ruby_type('foo', &appender)
Psych.load <<-eoyml
- !ruby.yaml.org,2002/foo bar
eoyml
assert_equal [["tag:ruby.yaml.org,2002:foo", "bar"]], types
end
def test_detect_implicit
assert_equal '', Psych.detect_implicit(nil)
assert_equal '', Psych.detect_implicit(Object.new)
assert_equal '', Psych.detect_implicit(1.2)
assert_equal 'null', Psych.detect_implicit('')
assert_equal 'string', Psych.detect_implicit('foo')
end
def test_private_type
types = []
Psych.add_private_type('foo') { |*args| types << args }
Psych.load <<-eoyml
- !x-private:foo bar
eoyml
assert_equal [["x-private:foo", "bar"]], types
end
def test_tagurize
assert_nil Psych.tagurize nil
assert_equal Psych, Psych.tagurize(Psych)
assert_equal 'tag:yaml.org,2002:foo', Psych.tagurize('foo')
end
def test_read_type_class
things = Psych.read_type_class 'tag:yaml.org,2002:int:Psych::TestDeprecated::QuickEmitter', Object
assert_equal 'int', things.first
assert_equal Psych::TestDeprecated::QuickEmitter, things.last
end
def test_read_type_class_no_class
things = Psych.read_type_class 'tag:yaml.org,2002:int', Object
assert_equal 'int', things.first
assert_equal Object, things.last
end
def test_object_maker
thing = Psych.object_maker(Object, { 'a' => 'b', 'c' => 'd' })
assert_instance_of(Object, thing)
assert_equal 'b', thing.instance_variable_get(:@a)
assert_equal 'd', thing.instance_variable_get(:@c)
end
end
end
|