diff options
-rw-r--r-- | lib/psych.rb | 2 | ||||
-rw-r--r-- | test/psych/helper.rb | 9 | ||||
-rw-r--r-- | test/psych/test_yamldbm.rb | 190 | ||||
-rw-r--r-- | test/psych/test_yamlstore.rb | 87 |
4 files changed, 279 insertions, 9 deletions
diff --git a/lib/psych.rb b/lib/psych.rb index 46a6837..24f90b0 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -90,7 +90,7 @@ require 'psych/json' module Psych # The version is Psych you're using - VERSION = '1.2.2.rc1' + VERSION = '1.2.1' # The version of libyaml Psych is using LIBYAML_VERSION = Psych.libyaml_version.join '.' diff --git a/test/psych/helper.rb b/test/psych/helper.rb index 61049d6..fd23c3b 100644 --- a/test/psych/helper.rb +++ b/test/psych/helper.rb @@ -2,6 +2,7 @@ require 'minitest/autorun' require 'stringio' require 'tempfile' require 'date' +require 'psych' module Psych class TestCase < MiniTest::Unit::TestCase @@ -53,11 +54,3 @@ module Psych end end end - -require 'psych' - -# FIXME: remove this when syck is removed -o = Object.new -a = o.method(:psych_to_yaml) -b = o.method(:to_yaml) -raise "psych should define to_yaml" unless a == b diff --git a/test/psych/test_yamldbm.rb b/test/psych/test_yamldbm.rb new file mode 100644 index 0000000..165125f --- /dev/null +++ b/test/psych/test_yamldbm.rb @@ -0,0 +1,190 @@ +# -*- coding: UTF-8 -*- +require 'test/unit' +require 'yaml/dbm' +require 'tmpdir' +Psych::DBM = YAML::DBM unless defined?(Psych::DBM) + +module Psych + class YAMLDBMTest < Test::Unit::TestCase + def setup + @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'psych' + @dir = Dir.mktmpdir("rubytest-file") + File.chown(-1, Process.gid, @dir) + @yamldbm_file = make_tmp_filename("yamldbm") + @yamldbm = YAML::DBM.new(@yamldbm_file) + end + + def teardown + YAML::ENGINE.yamler = @engine + @yamldbm.clear + @yamldbm.close + FileUtils.remove_entry_secure @dir + end + + def make_tmp_filename(prefix) + @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test" + end + + def test_store + @yamldbm.store('a','b') + @yamldbm.store('c','d') + assert_equal 'b', @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_nil @yamldbm['e'] + end + + def test_store_using_carret + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal 'b', @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_nil @yamldbm['e'] + end + + def test_to_a + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal([['a','b'],['c','d']], @yamldbm.to_a) + end + + def test_to_hash + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal({'a'=>'b','c'=>'d'}, @yamldbm.to_hash) + end + + def test_has_value? + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal true, @yamldbm.has_value?('b') + assert_equal true, @yamldbm.has_value?('d') + assert_equal false, @yamldbm.has_value?('f') + end + + # Note: + # YAML::DBM#index makes warning from internal of ::DBM#index. + # It says 'DBM#index is deprecated; use DBM#key', but DBM#key + # behaves not same as DBM#index. + # + # def test_index + # @yamldbm['a'] = 'b' + # @yamldbm['c'] = 'd' + # assert_equal 'a', @yamldbm.index('b') + # assert_equal 'c', @yamldbm.index('d') + # assert_nil @yamldbm.index('f') + # end + + def test_key + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal 'a', @yamldbm.key('b') + assert_equal 'c', @yamldbm.key('d') + assert_nil @yamldbm.key('f') + end + + def test_fetch + assert_equal('bar', @yamldbm['foo']='bar') + assert_equal('bar', @yamldbm.fetch('foo')) + assert_nil @yamldbm.fetch('bar') + assert_equal('baz', @yamldbm.fetch('bar', 'baz')) + assert_equal('foobar', @yamldbm.fetch('bar') {|key| 'foo' + key }) + end + + def test_shift + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal(['a','b'], @yamldbm.shift) + assert_equal(['c','d'], @yamldbm.shift) + assert_nil @yamldbm.shift + end + + def test_invert + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal({'b'=>'a','d'=>'c'}, @yamldbm.invert) + end + + def test_update + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm.update({'c'=>'d','e'=>'f'}) + assert_equal 'b', @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_equal 'f', @yamldbm['e'] + end + + def test_replace + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm.replace({'c'=>'d','e'=>'f'}) + assert_nil @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_equal 'f', @yamldbm['e'] + end + + def test_delete + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal 'b', @yamldbm.delete('a') + assert_nil @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_nil @yamldbm.delete('e') + end + + def test_delete_if + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm['e'] = 'f' + + @yamldbm.delete_if {|k,v| k == 'a'} + assert_nil @yamldbm['a'] + assert_equal 'd', @yamldbm['c'] + assert_equal 'f', @yamldbm['e'] + + @yamldbm.delete_if {|k,v| v == 'd'} + assert_nil @yamldbm['c'] + assert_equal 'f', @yamldbm['e'] + + @yamldbm.delete_if {|k,v| false } + assert_equal 'f', @yamldbm['e'] + end + + def test_reject + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm['e'] = 'f' + assert_equal({'c'=>'d','e'=>'f'}, @yamldbm.reject {|k,v| k == 'a'}) + assert_equal({'a'=>'b','e'=>'f'}, @yamldbm.reject {|k,v| v == 'd'}) + assert_equal({'a'=>'b','c'=>'d','e'=>'f'}, @yamldbm.reject {false}) + end + + def test_values + assert_equal [], @yamldbm.values + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal ['b','d'], @yamldbm.values + end + + def test_values_at + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + assert_equal ['b','d'], @yamldbm.values_at('a','c') + end + + def test_selsct + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm['e'] = 'f' + assert_equal(['b','d'], @yamldbm.select('a','c')) + end + + def test_selsct_with_block + @yamldbm['a'] = 'b' + @yamldbm['c'] = 'd' + @yamldbm['e'] = 'f' + assert_equal([['a','b']], @yamldbm.select {|k,v| k == 'a'}) + assert_equal([['c','d']], @yamldbm.select {|k,v| v == 'd'}) + assert_equal([], @yamldbm.select {false}) + end + end +end diff --git a/test/psych/test_yamlstore.rb b/test/psych/test_yamlstore.rb new file mode 100644 index 0000000..d607013 --- /dev/null +++ b/test/psych/test_yamlstore.rb @@ -0,0 +1,87 @@ +require 'test/unit' +require 'yaml/store' +require 'tmpdir' + +Psych::Store = YAML::Store unless defined?(Psych::Store) + +module Psych + class YAMLStoreTest < Test::Unit::TestCase + def setup + @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'psych' + @dir = Dir.mktmpdir("rubytest-file") + File.chown(-1, Process.gid, @dir) + @yamlstore_file = make_tmp_filename("yamlstore") + @yamlstore = YAML::Store.new(@yamlstore_file) + end + + def teardown + YAML::ENGINE.yamler = @engine + FileUtils.remove_entry_secure @dir + end + + def make_tmp_filename(prefix) + @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test" + end + + def test_opening_new_file_in_readonly_mode_should_result_in_empty_values + @yamlstore.transaction(true) do + assert_nil @yamlstore[:foo] + assert_nil @yamlstore[:bar] + end + end + + def test_opening_new_file_in_readwrite_mode_should_result_in_empty_values + @yamlstore.transaction do + assert_nil @yamlstore[:foo] + assert_nil @yamlstore[:bar] + end + end + + def test_data_should_be_loaded_correctly_when_in_readonly_mode + @yamlstore.transaction do + @yamlstore[:foo] = "bar" + end + @yamlstore.transaction(true) do + assert_equal "bar", @yamlstore[:foo] + end + end + + def test_data_should_be_loaded_correctly_when_in_readwrite_mode + @yamlstore.transaction do + @yamlstore[:foo] = "bar" + end + @yamlstore.transaction do + assert_equal "bar", @yamlstore[:foo] + end + end + + def test_changes_after_commit_are_discarded + @yamlstore.transaction do + @yamlstore[:foo] = "bar" + @yamlstore.commit + @yamlstore[:foo] = "baz" + end + @yamlstore.transaction(true) do + assert_equal "bar", @yamlstore[:foo] + end + end + + def test_changes_are_not_written_on_abort + @yamlstore.transaction do + @yamlstore[:foo] = "bar" + @yamlstore.abort + end + @yamlstore.transaction(true) do + assert_nil @yamlstore[:foo] + end + end + + def test_writing_inside_readonly_transaction_raises_error + assert_raise(PStore::Error) do + @yamlstore.transaction(true) do + @yamlstore[:foo] = "bar" + end + end + end + end +end |