Commits

Kirill Simonov committed cfb8595

Fixed another encoding issue.

Comments (0)

Files changed (3)

         self.stream = stream
         self.dump_unicode = 0
         if PY_MAJOR_VERSION < 3:
-            if hasattr(stream, 'encoding'):
+            if getattr3(stream, 'encoding', None):
                 self.dump_unicode = 1
         else:
             if hasattr(stream, u'encoding'):

tests/lib/test_input_output.py

 
 import yaml
-import codecs, StringIO
+import codecs, StringIO, tempfile, os, os.path
 
 def _unicode_open(file, encoding, errors='strict'):
     info = codecs.lookup(encoding)
 
 test_unicode_output.unittest = ['.unicode']
 
+def test_file_output(unicode_filename, verbose=False):
+    data = open(unicode_filename, 'rb').read().decode('utf-8')
+    handle, filename = tempfile.mkstemp()
+    try:
+        stream = StringIO.StringIO()
+        yaml.dump(data, stream, allow_unicode=True)
+        data1 = stream.getvalue()
+        stream = open(filename, 'wb')
+        yaml.dump(data, stream, allow_unicode=True)
+        stream.close()
+        data2 = open(filename, 'rb').read()
+        stream = open(filename, 'wb')
+        yaml.dump(data, stream, encoding='utf-16-le', allow_unicode=True)
+        stream.close()
+        data3 = open(filename, 'rb').read().decode('utf-16-le')[1:].encode('utf-8')
+        stream = _unicode_open(open(filename, 'wb'), 'utf-8')
+        yaml.dump(data, stream, allow_unicode=True)
+        stream.close()
+        data4 = open(filename, 'rb').read()
+        assert data1 == data2, (data1, data2)
+        assert data1 == data3, (data1, data3)
+        assert data1 == data4, (data1, data4)
+    finally:
+        if os.path.exists(filename):
+            os.unlink(filename)
+
+test_file_output.unittest = ['.unicode']
+
 def test_unicode_transfer(unicode_filename, verbose=False):
     data = open(unicode_filename, 'rb').read().decode('utf-8')
     for encoding in [None, 'utf-8', 'utf-16-be', 'utf-16-le']:

tests/lib3/test_input_output.py

 
 import yaml
-import codecs, io
+import codecs, io, tempfile, os, os.path
 
 def test_unicode_input(unicode_filename, verbose=False):
     data = open(unicode_filename, 'rb').read().decode('utf-8')
 
 test_unicode_output.unittest = ['.unicode']
 
+def test_file_output(unicode_filename, verbose=False):
+    data = open(unicode_filename, 'rb').read().decode('utf-8')
+    handle, filename = tempfile.mkstemp()
+    try:
+        stream = io.StringIO()
+        yaml.dump(data, stream, allow_unicode=True)
+        data1 = stream.getvalue()
+        stream = io.BytesIO()
+        yaml.dump(data, stream, encoding='utf-16-le', allow_unicode=True)
+        data2 = stream.getvalue().decode('utf-16-le')[1:]
+        stream = open(filename, 'w', encoding='utf-16-le')
+        yaml.dump(data, stream, allow_unicode=True)
+        stream.close()
+        data3 = open(filename, 'r', encoding='utf-16-le').read()
+        stream = open(filename, 'wb')
+        yaml.dump(data, stream, encoding='utf-8', allow_unicode=True)
+        stream.close()
+        data4 = open(filename, 'r', encoding='utf-8').read()
+        assert data1 == data2, (data1, data2)
+        assert data1 == data3, (data1, data3)
+        assert data1 == data4, (data1, data4)
+    finally:
+        if os.path.exists(filename):
+            os.unlink(filename)
+
+test_file_output.unittest = ['.unicode']
+
 def test_unicode_transfer(unicode_filename, verbose=False):
     data = open(unicode_filename, 'rb').read().decode('utf-8')
     for encoding in [None, 'utf-8', 'utf-16-be', 'utf-16-le']:
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.