From 383769068d83604f28fa56a094785a2e199ed4ca Mon Sep 17 00:00:00 2001 From: tenderlove Date: Wed, 19 May 2010 17:15:27 +0000 Subject: * ext/psych/emitter.c: output strings are automatically transcoded * test/psych/test_emitter.rb: supporting tests * test/psych/test_encoding.rb: more supporting tests git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/psych/test_encoding.rb | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'test/psych/test_encoding.rb') diff --git a/test/psych/test_encoding.rb b/test/psych/test_encoding.rb index bf8318a774..8e9766329d 100644 --- a/test/psych/test_encoding.rb +++ b/test/psych/test_encoding.rb @@ -24,9 +24,81 @@ module Psych def setup super + @buffer = StringIO.new @handler = EncodingCatcher.new @parser = Psych::Parser.new @handler @utf8 = Encoding.find('UTF-8') + @emitter = Psych::Emitter.new @buffer + end + + def test_emit_alias + @emitter.start_stream Psych::Parser::UTF8 + @emitter.start_document [], [], true + e = assert_raises(RuntimeError) do + @emitter.alias 'ドラえもん'.encode('EUC-JP') + end + assert_match(/alias value/, e.message) + end + + def test_start_mapping + foo = 'foo' + bar = 'バー' + + @emitter.start_stream Psych::Parser::UTF8 + @emitter.start_document [], [], true + @emitter.start_mapping( + foo.encode('Shift_JIS'), + bar.encode('UTF-16LE'), + false, Nodes::Sequence::ANY) + @emitter.end_mapping + @emitter.end_document false + @emitter.end_stream + + @parser.parse @buffer.string + assert_encodings @utf8, @handler.strings + assert_equal [foo, bar], @handler.strings + end + + def test_start_sequence + foo = 'foo' + bar = 'バー' + + @emitter.start_stream Psych::Parser::UTF8 + @emitter.start_document [], [], true + @emitter.start_sequence( + foo.encode('Shift_JIS'), + bar.encode('UTF-16LE'), + false, Nodes::Sequence::ANY) + @emitter.end_sequence + @emitter.end_document false + @emitter.end_stream + + @parser.parse @buffer.string + assert_encodings @utf8, @handler.strings + assert_equal [foo, bar], @handler.strings + end + + def test_doc_tag_encoding + key = '鍵' + @emitter.start_stream Psych::Parser::UTF8 + @emitter.start_document( + [1, 1], + [['!'.encode('EUC-JP'), key.encode('EUC-JP')]], + true + ) + @emitter.scalar 'foo', nil, nil, true, false, Nodes::Scalar::ANY + @emitter.end_document false + @emitter.end_stream + + @parser.parse @buffer.string + assert_encodings @utf8, @handler.strings + assert_equal key, @handler.strings[1] + end + + def test_emitter_encoding + str = "壁に耳あり、障子に目あり" + thing = Psych.load Psych.dump str.encode('EUC-JP') + assert_equal str, thing end def test_default_internal -- cgit v1.2.3