127
127
class TestRename(tests.TestCaseInTempDir):
129
def create_file(self, filename, content):
130
f = open(filename, 'wb')
136
def _fancy_rename(self, a, b):
137
osutils.fancy_rename(a, b, rename_func=os.rename,
138
unlink_func=os.unlink)
129
140
def test_fancy_rename(self):
130
141
# This should work everywhere
132
osutils.fancy_rename(a, b,
133
rename_func=os.rename,
134
unlink_func=os.unlink)
136
open('a', 'wb').write('something in a\n')
142
self.create_file('a', 'something in a\n')
143
self._fancy_rename('a', 'b')
138
144
self.failIfExists('a')
139
145
self.failUnlessExists('b')
140
146
self.check_file_contents('b', 'something in a\n')
142
open('a', 'wb').write('new something in a\n')
148
self.create_file('a', 'new something in a\n')
149
self._fancy_rename('b', 'a')
145
151
self.check_file_contents('a', 'something in a\n')
153
def test_fancy_rename_fails_source_missing(self):
154
# An exception should be raised, and the target should be left in place
155
self.create_file('target', 'data in target\n')
156
self.assertRaises((IOError, OSError), self._fancy_rename,
157
'missingsource', 'target')
158
self.failUnlessExists('target')
159
self.check_file_contents('target', 'data in target\n')
161
def test_fancy_rename_fails_if_source_and_target_missing(self):
162
self.assertRaises((IOError, OSError), self._fancy_rename,
163
'missingsource', 'missingtarget')
147
165
def test_rename(self):
148
166
# Rename should be semi-atomic on all platforms
149
open('a', 'wb').write('something in a\n')
167
self.create_file('a', 'something in a\n')
150
168
osutils.rename('a', 'b')
151
169
self.failIfExists('a')
152
170
self.failUnlessExists('b')
153
171
self.check_file_contents('b', 'something in a\n')
155
open('a', 'wb').write('new something in a\n')
173
self.create_file('a', 'new something in a\n')
156
174
osutils.rename('b', 'a')
158
176
self.check_file_contents('a', 'something in a\n')