~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

Merge the fancy-rename change

Show diffs side-by-side

added added

removed removed

Lines of Context:
120
120
 
121
121
class TestRename(tests.TestCaseInTempDir):
122
122
 
 
123
    def create_file(self, filename, content):
 
124
        f = open(filename, 'wb')
 
125
        try:
 
126
            f.write(content)
 
127
        finally:
 
128
            f.close()
 
129
 
 
130
    def _fancy_rename(self, a, b):
 
131
        osutils.fancy_rename(a, b, rename_func=os.rename,
 
132
                             unlink_func=os.unlink)
 
133
 
123
134
    def test_fancy_rename(self):
124
135
        # This should work everywhere
125
 
        def rename(a, b):
126
 
            osutils.fancy_rename(a, b,
127
 
                    rename_func=os.rename,
128
 
                    unlink_func=os.unlink)
129
 
 
130
 
        open('a', 'wb').write('something in a\n')
131
 
        rename('a', 'b')
 
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')
135
141
 
136
 
        open('a', 'wb').write('new something in a\n')
137
 
        rename('b', 'a')
 
142
        self.create_file('a', 'new something in a\n')
 
143
        self._fancy_rename('b', 'a')
138
144
 
139
145
        self.check_file_contents('a', 'something in a\n')
140
146
 
 
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')
 
154
 
 
155
    def test_fancy_rename_fails_if_source_and_target_missing(self):
 
156
        self.assertRaises((IOError, OSError), self._fancy_rename,
 
157
                          'missingsource', 'missingtarget')
 
158
 
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')
148
166
 
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')
151
169
 
152
170
        self.check_file_contents('a', 'something in a\n')