diff --git a/fake_filesystem.py b/fake_filesystem.py index 2eac281..7a35b48 100644 --- a/fake_filesystem.py +++ b/fake_filesystem.py @@ -89,6 +89,8 @@ import sys import time import warnings +import binascii + try: import cStringIO as io # pylint: disable-msg=C6204 except ImportError: @@ -224,7 +226,7 @@ def SetContents(self, contents): """ # convert a byte array to a string if sys.version_info >= (3, 0) and isinstance(contents, bytes): - contents = ''.join(chr(i) for i in contents) + contents = binascii.hexlify(contents).decode('ascii') self.contents = contents self.st_size = len(contents) self.epoch += 1 @@ -1968,7 +1970,7 @@ def __init__(self, file_object, update=False, read=False, append=False, if sys.version_info >= (3, 0) and binary: io_class = io.BytesIO if contents and isinstance(contents, str): - contents = bytes(contents, 'ascii') + contents = binascii.unhexlify(contents) if contents: if update: self._io = io_class(**newline_arg) diff --git a/fake_filesystem_test.py b/fake_filesystem_test.py old mode 100644 new mode 100755 index 0e32d81..eb9a702 --- a/fake_filesystem_test.py +++ b/fake_filesystem_test.py @@ -23,6 +23,7 @@ import sys import time import unittest +import binascii import fake_filesystem @@ -2492,7 +2493,7 @@ def setUp(self): self.file = fake_filesystem.FakeFileOpen(self.filesystem) self.os = fake_filesystem.FakeOsModule(self.filesystem) self.file_path = 'some_file' - self.file_contents = b'binary contents' + self.file_contents = b'real binary contents: \x1f\x8b' self.filesystem.CreateFile(self.file_path, contents=self.file_contents) def OpenFakeFile(self, mode): @@ -2520,7 +2521,10 @@ def testWriteBinary(self): # reopen the file in text mode fake_file = self.OpenFakeFile('wb') fake_file = self.WriteAndReopenFile(fake_file, mode='r') - self.assertEqual(self.file_contents.decode('ascii'), fake_file.read()) + if sys.version_info >= (3, 0): + self.assertEqual(binascii.hexlify(self.file_contents).decode('ascii'), fake_file.read()) + else: + self.assertEqual(self.file_contents, fake_file.read()) def testWriteAndReadBinary(self): fake_file = self.OpenFileAndSeek('w+b')