~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_diff.py

  • Committer: Patch Queue Manager
  • Date: 2014-02-12 18:22:22 UTC
  • mfrom: (6589.2.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20140212182222-beouo25gaf1cny76
(vila) The XDG Base Directory Specification uses the XDG_CACHE_HOME,
 not XDG_CACHE_DIR. (Andrew Starr-Bochicchio)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2012 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
 
"""Black-box tests for bzr diff.
19
 
"""
 
18
"""Black-box tests for bzr diff."""
20
19
 
21
20
import os
22
21
import re
23
22
 
24
 
import bzrlib
25
 
from bzrlib import workingtree
26
 
from bzrlib.branch import Branch
27
 
from bzrlib.tests import TestSkipped
28
 
from bzrlib.tests.blackbox import ExternalBase
 
23
from bzrlib import (
 
24
    tests,
 
25
    workingtree,
 
26
    )
 
27
from bzrlib.diff import (
 
28
    DiffTree,
 
29
    format_registry as diff_format_registry,
 
30
    )
 
31
from bzrlib.tests import (
 
32
    features,
 
33
    )
29
34
 
30
35
 
31
36
def subst_dates(string):
34
39
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
35
40
 
36
41
 
37
 
class DiffBase(ExternalBase):
 
42
class DiffBase(tests.TestCaseWithTransport):
38
43
    """Base class with common setup method"""
39
44
 
40
45
    def make_example_branch(self):
133
138
        out, err = self.run_bzr('diff -r 1..23..123', retcode=3,
134
139
            error_regexes=('one or two revision specifiers',))
135
140
 
 
141
    def test_diff_using_and_format(self):
 
142
        out, err = self.run_bzr('diff --format=default --using=mydi', retcode=3,
 
143
            error_regexes=('are mutually exclusive',))
 
144
 
136
145
    def test_diff_nonexistent_revision(self):
137
146
        out, err = self.run_bzr('diff -r 123', retcode=3,
138
147
            error_regexes=("Requested revision: '123' does not "
278
287
        self.example_branch2()
279
288
        self.build_tree_contents([('branch1/file1', 'new line')])
280
289
        os.mkdir('branch1/dir1')
281
 
        os.chdir('branch1/dir1')
282
 
        output = self.run_bzr('diff -r 1..', retcode=1)
 
290
        output = self.run_bzr('diff -r 1..', retcode=1,
 
291
                              working_dir='branch1/dir1')
283
292
        self.assertContainsRe(output[0], '\n\\-original line\n\\+new line\n')
284
293
 
285
294
    def test_diff_across_rename(self):
298
307
        output = self.run_bzr('diff -r 1.. branch1', retcode=1)
299
308
        self.assertContainsRe(output[0], '\n\\-original line\n\\+repo line\n')
300
309
 
 
310
    def test_custom_format(self):
 
311
        class BooDiffTree(DiffTree):
 
312
 
 
313
            def show_diff(self, specific_files, extra_trees=None):
 
314
                self.to_file.write("BOO!\n")
 
315
                return super(BooDiffTree, self).show_diff(specific_files,
 
316
                    extra_trees)
 
317
 
 
318
        diff_format_registry.register("boo", BooDiffTree, "Scary diff format")
 
319
        self.addCleanup(diff_format_registry.remove, "boo")
 
320
        self.make_example_branch()
 
321
        self.build_tree_contents([('hello', 'hello world!\n')])
 
322
        output = self.run_bzr('diff --format=boo', retcode=1)
 
323
        self.assertTrue("BOO!" in output[0])
 
324
        output = self.run_bzr('diff -Fboo', retcode=1)
 
325
        self.assertTrue("BOO!" in output[0])
 
326
 
301
327
 
302
328
class TestCheckoutDiff(TestDiff):
303
329
 
315
341
        return tree
316
342
 
317
343
    def example_branches(self):
318
 
        branch1_tree, branch2_tree = super(TestCheckoutDiff, self).example_branches()
 
344
        branch1_tree, branch2_tree = super(TestCheckoutDiff,
 
345
                                           self).example_branches()
319
346
        os.mkdir('checkouts')
320
347
        branch1_tree = branch1_tree.branch.create_checkout('checkouts/branch1')
321
348
        branch2_tree = branch2_tree.branch.create_checkout('checkouts/branch2')
355
382
 
356
383
    def test_external_diff(self):
357
384
        """Test that we can spawn an external diff process"""
 
385
        self.disable_missing_extensions_warning()
358
386
        # We have to use run_bzr_subprocess, because we need to
359
387
        # test writing directly to stdout, (there was a bug in
360
388
        # subprocess.py that we had to workaround).
361
389
        # However, if 'diff' may not be available
362
390
        self.make_example_branch()
363
 
        orig_progress = os.environ.get('BZR_PROGRESS_BAR')
364
 
        try:
365
 
            os.environ['BZR_PROGRESS_BAR'] = 'none'
366
 
            out, err = self.run_bzr_subprocess('diff -r 1 --diff-options -ub',
367
 
                                               universal_newlines=True,
368
 
                                               retcode=None)
369
 
        finally:
370
 
            if orig_progress is None:
371
 
                del os.environ['BZR_PROGRESS_BAR']
372
 
            else:
373
 
                os.environ['BZR_PROGRESS_BAR'] = orig_progress
374
 
 
 
391
        out, err = self.run_bzr_subprocess(
 
392
            'diff -Oprogress_bar=none -r 1 --diff-options -ub',
 
393
            universal_newlines=True,
 
394
            retcode=None)
375
395
        if 'Diff is not installed on this machine' in err:
376
 
            raise TestSkipped("No external 'diff' is available")
 
396
            raise tests.TestSkipped("No external 'diff' is available")
377
397
        self.assertEqual('', err)
378
398
        # We have to skip the stuff in the middle, because it depends
379
399
        # on time.time()
383
403
        self.assertEndsWith(out, "\n@@ -0,0 +1 @@\n"
384
404
                                 "+baz\n\n")
385
405
 
 
406
    def test_external_diff_options_and_using(self):
 
407
        """Test that the options are passed correctly to an external diff process"""
 
408
        self.requireFeature(features.diff_feature)
 
409
        self.make_example_branch()
 
410
        self.build_tree_contents([('hello', 'Foo\n')])
 
411
        out, err = self.run_bzr('diff --diff-options -i --using diff',
 
412
                                    retcode=1)
 
413
        self.assertEquals("=== modified file 'hello'\n", out)
 
414
        self.assertEquals('', err)
 
415
 
386
416
 
387
417
class TestDiffOutput(DiffBase):
388
418