~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils.py

Also handle the case when source *and* target does not exist.

Show diffs side-by-side

added added

removed removed

Lines of Context:
133
133
        finally:
134
134
            f.close()
135
135
 
 
136
    def _fancy_rename(self, a, b):
 
137
        osutils.fancy_rename(a, b, rename_func=os.rename,
 
138
                             unlink_func=os.unlink)
 
139
 
136
140
    def test_fancy_rename(self):
137
141
        # This should work everywhere
138
 
        def rename(a, b):
139
 
            osutils.fancy_rename(a, b,
140
 
                    rename_func=os.rename,
141
 
                    unlink_func=os.unlink)
142
 
 
143
142
        self.create_file('a', 'something in a\n')
144
 
        rename('a', 'b')
 
143
        self._fancy_rename('a', 'b')
145
144
        self.failIfExists('a')
146
145
        self.failUnlessExists('b')
147
146
        self.check_file_contents('b', 'something in a\n')
148
147
 
149
148
        self.create_file('a', 'new something in a\n')
150
 
        rename('b', 'a')
 
149
        self._fancy_rename('b', 'a')
151
150
 
152
151
        self.check_file_contents('a', 'something in a\n')
153
152
 
154
153
    def test_fancy_rename_fails_source_missing(self):
155
 
        def rename(a, b):
156
 
            osutils.fancy_rename(a, b,
157
 
                    rename_func=os.rename,
158
 
                    unlink_func=os.unlink)
159
 
 
160
154
        # An exception should be raised, and the target should be left in place
161
155
        self.create_file('target', 'data in target\n')
162
 
        self.assertRaises((IOError, OSError), rename,
 
156
        self.assertRaises((IOError, OSError), self._fancy_rename,
163
157
                          'missingsource', 'target')
164
158
        self.failUnlessExists('target')
165
159
        self.check_file_contents('target', 'data in target\n')
166
160
 
 
161
    def test_fancy_rename_fails_if_source_and_target_missing(self):
 
162
        self.assertRaises((IOError, OSError), self._fancy_rename,
 
163
                          'missingsource', 'missingtarget')
 
164
 
167
165
    def test_rename(self):
168
166
        # Rename should be semi-atomic on all platforms
169
167
        self.create_file('a', 'something in a\n')