32
33
def test_commit(self):
33
34
f = atomicfile.AtomicFile('test')
34
35
self.assertPathDoesNotExist('test')
38
39
self.assertEqual(['test'], os.listdir('.'))
39
self.check_file_contents('test', b'foo\n')
40
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.commit)
41
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.abort)
40
self.check_file_contents('test', 'foo\n')
41
self.assertRaises(errors.AtomicFileAlreadyClosed, f.commit)
42
self.assertRaises(errors.AtomicFileAlreadyClosed, f.abort)
42
43
# close is re-entrant safe
45
46
def test_abort(self):
46
47
f = atomicfile.AtomicFile('test')
49
50
self.assertEqual([], os.listdir('.'))
51
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.abort)
52
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.commit)
52
self.assertRaises(errors.AtomicFileAlreadyClosed, f.abort)
53
self.assertRaises(errors.AtomicFileAlreadyClosed, f.commit)
54
55
# close is re-entrant safe
57
58
def test_close(self):
58
59
f = atomicfile.AtomicFile('test')
60
61
# close on an open file is an abort
62
63
self.assertEqual([], os.listdir('.'))
64
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.abort)
65
self.assertRaises(atomicfile.AtomicFileAlreadyClosed, f.commit)
65
self.assertRaises(errors.AtomicFileAlreadyClosed, f.abort)
66
self.assertRaises(errors.AtomicFileAlreadyClosed, f.commit)
67
68
# close is re-entrant safe
70
71
def test_text_mode(self):
71
72
f = atomicfile.AtomicFile('test', mode='wt')
75
76
contents = open('test', 'rb').read()
76
77
if sys.platform == 'win32':
77
self.assertEqual(b'foo\r\n', contents)
78
self.assertEqual('foo\r\n', contents)
79
self.assertEqual(b'foo\n', contents)
80
self.assertEqual('foo\n', contents)
81
82
def can_sys_preserve_mode(self):
82
83
# PLATFORM DEFICIENCY/ TestSkipped
118
119
# The default file permissions should be based on umask
119
120
umask = osutils.get_umask()
120
121
f = atomicfile.AtomicFile('test', mode='wb')
123
124
st = os.lstat('test')
124
125
self.assertEqualMode(0o666 & ~umask, stat.S_IMODE(st.st_mode))
126
def test_context_manager_commit(self):
127
with atomicfile.AtomicFile('test') as f:
128
self.assertPathDoesNotExist('test')
131
self.assertEqual(['test'], os.listdir('.'))
132
self.check_file_contents('test', b'foo\n')
134
def test_context_manager_abort(self):
136
with atomicfile.AtomicFile('test') as f:
139
self.assertRaises(AssertionError, abort)
140
self.assertEqual([], os.listdir('.'))