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