def test_file(self): """ Check that File.copy yields the proper content in the destination file in all situations that trigger different code paths: - different content - different content of the same size - same content - long content """ src = self.tmppath("src") dest = self.tmppath("dest") for content in samples: with open(src, "wb") as tmp: tmp.write(content) # Ensure the destination file, when it exists, is older than the # source if os.path.exists(dest): time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) f = File(src) f.copy(dest) self.assertEqual(content, open(dest, "rb").read()) self.assertEqual(content, f.open().read()) self.assertEqual(content, f.open().read())
def test_file(self): ''' Check that File.copy yields the proper content in the destination file in all situations that trigger different code paths: - different content - different content of the same size - same content - long content ''' src = self.tmppath('src') dest = self.tmppath('dest') for content in samples: with open(src, 'wb') as tmp: tmp.write(content) # Ensure the destination file, when it exists, is older than the # source if os.path.exists(dest): time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) f = File(src) f.copy(dest) self.assertEqual(content, open(dest, 'rb').read()) self.assertEqual(content, f.open().read()) self.assertEqual(content, f.open().read())
def test_file_dest(self): """ Similar to test_file, but for a destination object instead of a destination file. This ensures the destination object is being used properly by File.copy, ensuring that other subclasses of Dest will work. """ src = self.tmppath("src") dest = MockDest() for content in samples: with open(src, "wb") as tmp: tmp.write(content) f = File(src) f.copy(dest) self.assertEqual(content, dest.getvalue())
def test_file_dest(self): ''' Similar to test_file, but for a destination object instead of a destination file. This ensures the destination object is being used properly by File.copy, ensuring that other subclasses of Dest will work. ''' src = self.tmppath('src') dest = MockDest() for content in samples: with open(src, 'wb') as tmp: tmp.write(content) f = File(src) f.copy(dest) self.assertEqual(content, dest.getvalue())
def test_file_no_write(self): """ Test various conditions where File.copy is expected not to write in the destination file. """ src = self.tmppath("src") dest = self.tmppath("dest") with open(src, "wb") as tmp: tmp.write(b"test") # Initial copy f = File(src) f.copy(dest) # Ensure subsequent copies won't trigger writes f.copy(DestNoWrite(dest)) self.assertEqual(b"test", open(dest, "rb").read()) # When the source file is newer, but with the same content, no copy # should occur time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) f.copy(DestNoWrite(dest)) self.assertEqual(b"test", open(dest, "rb").read()) # When the source file is older than the destination file, even with # different content, no copy should occur. with open(src, "wb") as tmp: tmp.write(b"fooo") time = os.path.getmtime(dest) - 1 os.utime(src, (time, time)) f.copy(DestNoWrite(dest)) self.assertEqual(b"test", open(dest, "rb").read()) # Double check that under conditions where a copy occurs, we would get # an exception. time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) self.assertRaises(RuntimeError, f.copy, DestNoWrite(dest)) # skip_if_older=False is expected to force a copy in this situation. f.copy(dest, skip_if_older=False) self.assertEqual(b"fooo", open(dest, "rb").read())
def test_file_no_write(self): ''' Test various conditions where File.copy is expected not to write in the destination file. ''' src = self.tmppath('src') dest = self.tmppath('dest') with open(src, 'wb') as tmp: tmp.write('test') # Initial copy f = File(src) f.copy(dest) # Ensure subsequent copies won't trigger writes f.copy(DestNoWrite(dest)) self.assertEqual('test', open(dest, 'rb').read()) # When the source file is newer, but with the same content, no copy # should occur time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) f.copy(DestNoWrite(dest)) self.assertEqual('test', open(dest, 'rb').read()) # When the source file is older than the destination file, even with # different content, no copy should occur. with open(src, 'wb') as tmp: tmp.write('fooo') time = os.path.getmtime(dest) - 1 os.utime(src, (time, time)) f.copy(DestNoWrite(dest)) self.assertEqual('test', open(dest, 'rb').read()) # Double check that under conditions where a copy occurs, we would get # an exception. time = os.path.getmtime(src) - 1 os.utime(dest, (time, time)) self.assertRaises(RuntimeError, f.copy, DestNoWrite(dest)) # skip_if_older=False is expected to force a copy in this situation. f.copy(dest, skip_if_older=False) self.assertEqual('fooo', open(dest, 'rb').read())