~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_diff.py

  • Committer: Aaron Bentley
  • Date: 2008-02-24 16:42:13 UTC
  • mfrom: (3234 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3235.
  • Revision ID: aaron@aaronbentley.com-20080224164213-eza1lzru5bwuwmmj
Merge with bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
import os
 
18
import os.path
18
19
from cStringIO import StringIO
19
20
import errno
20
21
import subprocess
21
22
from tempfile import TemporaryFile
22
23
 
 
24
from bzrlib import tests
23
25
from bzrlib.diff import (
24
 
    internal_diff,
25
 
    external_diff,
 
26
    DiffFromTool,
26
27
    DiffPath,
27
 
    show_diff_trees,
28
28
    DiffSymlink,
29
29
    DiffTree,
30
30
    DiffText,
 
31
    external_diff,
 
32
    internal_diff,
 
33
    show_diff_trees,
31
34
    )
32
 
from bzrlib.errors import BinaryFile, NoDiff
 
35
from bzrlib.errors import BinaryFile, NoDiff, ExecutableMissing
33
36
import bzrlib.osutils as osutils
34
37
import bzrlib.patiencediff
35
38
import bzrlib._patiencediff_py
662
665
             ' \@\@\n-old\n\+new\n\n')
663
666
 
664
667
    def test_diff_kind_change(self):
 
668
        self.requireFeature(tests.SymlinkFeature)
665
669
        self.build_tree_contents([('old-tree/olddir/',),
666
670
                                  ('old-tree/olddir/oldfile', 'old\n')])
667
671
        self.old_tree.add('olddir')
1233
1237
            from bzrlib._patiencediff_py import recurse_matches_py
1234
1238
            self.assertIs(recurse_matches_py,
1235
1239
                          bzrlib.patiencediff.recurse_matches)
 
1240
 
 
1241
 
 
1242
class TestDiffFromTool(TestCaseWithTransport):
 
1243
 
 
1244
    def test_from_string(self):
 
1245
        diff_obj = DiffFromTool.from_string('diff', None, None, None)
 
1246
        self.addCleanup(diff_obj.finish)
 
1247
        self.assertEqual(['diff', '%(old_path)s', '%(new_path)s'],
 
1248
            diff_obj.command_template)
 
1249
 
 
1250
    def test_from_string_u5(self):
 
1251
        diff_obj = DiffFromTool.from_string('diff -u\\ 5', None, None, None)
 
1252
        self.addCleanup(diff_obj.finish)
 
1253
        self.assertEqual(['diff', '-u 5', '%(old_path)s', '%(new_path)s'],
 
1254
                         diff_obj.command_template)
 
1255
        self.assertEqual(['diff', '-u 5', 'old-path', 'new-path'],
 
1256
                         diff_obj._get_command('old-path', 'new-path'))
 
1257
 
 
1258
    def test_execute(self):
 
1259
        output = StringIO()
 
1260
        diff_obj = DiffFromTool(['python', '-c',
 
1261
                                 'print "%(old_path)s %(new_path)s"'],
 
1262
                                None, None, output)
 
1263
        self.addCleanup(diff_obj.finish)
 
1264
        diff_obj._execute('old', 'new')
 
1265
        self.assertEqual(output.getvalue().rstrip(), 'old new')
 
1266
 
 
1267
    def test_excute_missing(self):
 
1268
        diff_obj = DiffFromTool(['a-tool-which-is-unlikely-to-exist'],
 
1269
                                None, None, None)
 
1270
        self.addCleanup(diff_obj.finish)
 
1271
        e = self.assertRaises(ExecutableMissing, diff_obj._execute, 'old',
 
1272
                              'new')
 
1273
        self.assertEqual('a-tool-which-is-unlikely-to-exist could not be found'
 
1274
                         ' on this machine', str(e))
 
1275
 
 
1276
    def test_prepare_files(self):
 
1277
        output = StringIO()
 
1278
        tree = self.make_branch_and_tree('tree')
 
1279
        self.build_tree_contents([('tree/oldname', 'oldcontent')])
 
1280
        tree.add('oldname', 'file-id')
 
1281
        tree.commit('old tree', timestamp=0)
 
1282
        tree.rename_one('oldname', 'newname')
 
1283
        self.build_tree_contents([('tree/newname', 'newcontent')])
 
1284
        old_tree = tree.basis_tree()
 
1285
        old_tree.lock_read()
 
1286
        self.addCleanup(old_tree.unlock)
 
1287
        tree.lock_read()
 
1288
        self.addCleanup(tree.unlock)
 
1289
        diff_obj = DiffFromTool(['python', '-c',
 
1290
                                 'print "%(old_path)s %(new_path)s"'],
 
1291
                                old_tree, tree, output)
 
1292
        self.addCleanup(diff_obj.finish)
 
1293
        self.assertContainsRe(diff_obj._root, 'bzr-diff-[^/]*')
 
1294
        old_path, new_path = diff_obj._prepare_files('file-id', 'oldname',
 
1295
                                                     'newname')
 
1296
        self.assertContainsRe(old_path, 'old/oldname$')
 
1297
        self.assertEqual(0, os.stat(old_path).st_mtime)
 
1298
        self.assertContainsRe(new_path, 'new/newname$')
 
1299
        self.assertFileEqual('oldcontent', old_path)
 
1300
        self.assertFileEqual('newcontent', new_path)
 
1301
        if osutils.has_symlinks():
 
1302
            self.assertTrue(os.path.samefile('tree/newname', new_path))
 
1303
        # make sure we can create files with the same parent directories
 
1304
        diff_obj._prepare_files('file-id', 'oldname2', 'newname2')