diff --git a/test/yaml/test_array.rb b/test/yaml/test_array.rb new file mode 100644 index 0000000000..95ff94b959 --- /dev/null +++ b/test/yaml/test_array.rb @@ -0,0 +1,18 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestArray < Test::Unit::TestCase + def setup + @list = [{ :a => 'b' }, 'foo'] + end + + def test_to_yaml + assert_equal @list, YAML.load(@list.to_yaml) + end + + def test_dump + assert_equal @list, YAML.load(YAML.dump(@list)) + end + end +end diff --git a/test/yaml/test_class.rb b/test/yaml/test_class.rb new file mode 100644 index 0000000000..9ea9db3096 --- /dev/null +++ b/test/yaml/test_class.rb @@ -0,0 +1,18 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestClass < Test::Unit::TestCase + def test_to_yaml + assert_raises(::TypeError) do + TestClass.to_yaml + end + end + + def test_dump + assert_raises(::TypeError) do + YAML.dump TestClass + end + end + end +end diff --git a/test/yaml/test_exception.rb b/test/yaml/test_exception.rb new file mode 100644 index 0000000000..f9354ffe2b --- /dev/null +++ b/test/yaml/test_exception.rb @@ -0,0 +1,46 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestException < Test::Unit::TestCase + class Wups < Exception + attr_reader :foo, :bar + def initialize *args + super + @foo = 1 + @bar = 2 + end + end + + def setup + @wups = Wups.new + end + + def test_to_yaml + w = YAML.load(@wups.to_yaml) + assert_equal @wups, w + assert_equal 1, w.foo + assert_equal 2, w.bar + end + + def test_dump + w = YAML.load(@wups.to_yaml) + assert_equal @wups, w + assert_equal 1, w.foo + assert_equal 2, w.bar + end + + def test_to_yaml_properties + class << @wups + def to_yaml_properties + [:@foo] + end + end + + w = YAML.load(YAML.dump(@wups)) + assert_equal @wups, w + assert_equal 1, w.foo + assert_nil w.bar + end + end +end diff --git a/test/yaml/test_hash.rb b/test/yaml/test_hash.rb new file mode 100644 index 0000000000..afcdcaca7b --- /dev/null +++ b/test/yaml/test_hash.rb @@ -0,0 +1,18 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestHash < Test::Unit::TestCase + def setup + @hash = { :a => 'b' } + end + + def test_to_yaml + assert_equal @hash, YAML.load(@hash.to_yaml) + end + + def test_dump + assert_equal @hash, YAML.load(YAML.dump(@hash)) + end + end +end diff --git a/test/yaml/test_string.rb b/test/yaml/test_string.rb new file mode 100644 index 0000000000..26229a62f5 --- /dev/null +++ b/test/yaml/test_string.rb @@ -0,0 +1,45 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestString < Test::Unit::TestCase + def test_binary_string_null + string = "\x00" + yml = YAML.dump string + assert_match(/binary/, yml) + assert_equal string, YAML.load(yml) + end + + def test_binary_string + string = binary_string + yml = YAML.dump string + assert_match(/binary/, yml) + assert_equal string, YAML.load(yml) + end + + def test_non_binary_string + string = binary_string(0.29) + yml = YAML.dump string + refute_match(/binary/, yml) + assert_equal string, YAML.load(yml) + end + + def test_string_with_ivars + food = "is delicious" + ivar = "on rock and roll" + food.instance_variable_set(:@we_built_this_city, ivar) + + str = YAML.load YAML.dump food + assert_equal ivar, food.instance_variable_get(:@we_built_this_city) + end + + def binary_string percentage = 0.31, length = 100 + string = '' + (percentage * length).to_i.times do |i| + string << "\b" + end + string << 'a' * (length - string.length) + string + end + end +end diff --git a/test/yaml/test_symbol.rb b/test/yaml/test_symbol.rb new file mode 100644 index 0000000000..c5358aa19d --- /dev/null +++ b/test/yaml/test_symbol.rb @@ -0,0 +1,22 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestSymbol < Test::Unit::TestCase + def test_to_yaml + assert_equal :a, YAML.load(:a.to_yaml) + end + + def test_dump + assert_equal :a, YAML.load(YAML.dump(:a)) + end + + def test_stringy + assert_equal :"1", YAML.load(YAML.dump(:"1")) + end + + def test_load_quoted + assert_equal :"1", YAML.load("--- :'1'\n") + end + end +end diff --git a/test/yaml/test_yaml_properties.rb b/test/yaml/test_yaml_properties.rb new file mode 100644 index 0000000000..48bb878a01 --- /dev/null +++ b/test/yaml/test_yaml_properties.rb @@ -0,0 +1,64 @@ +require 'test/unit' +require 'yaml' + +module YAML + class TestYamlProperties < Test::Unit::TestCase + class Foo + attr_reader :a, :b, :c + def initialize + @a = 1 + @b = 2 + @c = 3 + end + + def to_yaml_properties + [:@a, :@b] + end + end + + def test_object_dump_yaml_properties + foo = YAML.load(YAML.dump(Foo.new)) + assert_equal 1, foo.a + assert_equal 2, foo.b + assert_nil foo.c + end + + class Bar < Struct.new(:foo, :bar) + attr_reader :baz + def initialize *args + super + @baz = 'hello' + end + + def to_yaml_properties + [] + end + end + + def test_struct_dump_yaml_properties + bar = YAML.load(YAML.dump(Bar.new('a', 'b'))) + assert_equal 'a', bar.foo + assert_equal 'b', bar.bar + assert_nil bar.baz + end + + def test_string_dump + string = "okonomiyaki" + class << string + def to_yaml_properties + [:@tastes] + end + end + + string.instance_variable_set(:@tastes, 'delicious') + v = YAML.load YAML.dump string + assert_equal 'delicious', v.instance_variable_get(:@tastes) + end + + def test_string_load + str = YAML.load("--- !str \nstr: okonomiyaki\n:@tastes: delicious\n") + assert_equal 'okonomiyaki', str + assert_equal 'delicious', str.instance_variable_get(:@tastes) + end + end +end