diff --git a/pyfakefs/fake_filesystem.py b/pyfakefs/fake_filesystem.py index c9367248..a6230bd1 100644 --- a/pyfakefs/fake_filesystem.py +++ b/pyfakefs/fake_filesystem.py @@ -4549,7 +4549,6 @@ def truncate_wrapper(*args, **kwargs): if self._append: self._io.seek(self._read_seek, self._read_whence) size = io_attr(*args, **kwargs) - self.flush() if not self.is_stream: self.file_object.SetSize(size) buffer_size = len(self._io.getvalue()) @@ -4559,6 +4558,7 @@ def truncate_wrapper(*args, **kwargs): self.file_object.SetContents( self._io.getvalue(), self._encoding) self._flush_pos = size + self.flush() if not IS_PY2: return size diff --git a/pyfakefs/tests/fake_open_test.py b/pyfakefs/tests/fake_open_test.py index 99741f9e..b67fb0a9 100644 --- a/pyfakefs/tests/fake_open_test.py +++ b/pyfakefs/tests/fake_open_test.py @@ -769,6 +769,17 @@ def test_update_other_instances_of_same_file_on_flush(self): f1.flush() self.assertEqual(4, self.os.path.getsize(file_path)) + def test_getsize_after_truncate(self): + # Regression test for #412 + file_path = self.make_path('foo') + with self.open(file_path, 'a') as f: + f.write('a') + f.seek(0) + f.truncate() + f.write('b') + f.truncate() + self.assertEqual(1, self.os.path.getsize(file_path)) + def test_that_read_over_end_does_not_reset_position(self): # Regression test for #286 file_path = self.make_path('baz')