~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Michael Ellerman
  • Date: 2005-12-10 22:11:46 UTC
  • mto: This revision was merged to the branch mainline in revision 1528.
  • Revision ID: michael@ellerman.id.au-20051210221145-7765347ea4ca0093
Raise NoSuchFile when someone tries to add a non-existant file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 by Canonical Ltd
2
 
 
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
 
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
 
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
 
18
 
"""Black-box tests for bzr diff.
19
 
"""
20
 
 
21
 
import os
22
 
import re
23
 
 
24
 
import bzrlib
25
 
from bzrlib.branch import Branch
26
 
from bzrlib.tests.blackbox import ExternalBase
27
 
 
28
 
 
29
 
def subst_dates(string):
30
 
    """Replace date strings with constant values."""
31
 
    return re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-\+]\d{4}',
32
 
                  'YYYY-MM-DD HH:MM:SS +ZZZZ', string)
33
 
 
34
 
 
35
 
class TestDiff(ExternalBase):
36
 
 
37
 
    def make_example_branch(test):
38
 
        # FIXME: copied from test_too_much -- share elsewhere?
39
 
        test.runbzr('init')
40
 
        file('hello', 'wt').write('foo\n')
41
 
        test.runbzr('add hello')
42
 
        test.runbzr('commit -m setup hello')
43
 
        file('goodbye', 'wt').write('baz\n')
44
 
        test.runbzr('add goodbye')
45
 
        test.runbzr('commit -m setup goodbye')
46
 
 
47
 
    def test_diff(self):
48
 
        self.make_example_branch()
49
 
        file('hello', 'wt').write('hello world!')
50
 
        self.runbzr('commit -m fixing hello')
51
 
        output = self.runbzr('diff -r 2..3', backtick=1, retcode=1)
52
 
        self.assert_('\n+hello world!' in output)
53
 
        output = self.runbzr('diff -r last:3..last:1', backtick=1, retcode=1)
54
 
        self.assert_('\n+baz' in output)
55
 
        file('moo', 'wb').write('moo')
56
 
        self.runbzr('add moo')
57
 
        os.unlink('moo')
58
 
        self.runbzr('diff')
59
 
 
60
 
    def test_diff_prefix(self):
61
 
        """diff --prefix appends to filenames in output"""
62
 
        self.make_example_branch()
63
 
        file('hello', 'wt').write('hello world!\n')
64
 
        out, err = self.runbzr('diff --prefix old/:new/', retcode=1)
65
 
        self.assertEquals(err, '')
66
 
        self.assertEqualDiff(subst_dates(out), '''\
67
 
=== modified file 'hello'
68
 
--- old/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
69
 
+++ new/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
70
 
@@ -1,1 +1,1 @@
71
 
-foo
72
 
+hello world!
73
 
 
74
 
''')
75
 
 
76
 
    def test_diff_p1(self):
77
 
        """diff -p1 produces lkml-style diffs"""
78
 
        self.make_example_branch()
79
 
        file('hello', 'wt').write('hello world!\n')
80
 
        out, err = self.runbzr('diff -p1', retcode=1)
81
 
        self.assertEquals(err, '')
82
 
        self.assertEqualDiff(subst_dates(out), '''\
83
 
=== modified file 'hello'
84
 
--- old/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
85
 
+++ new/hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
86
 
@@ -1,1 +1,1 @@
87
 
-foo
88
 
+hello world!
89
 
 
90
 
''')
91
 
 
92
 
    def test_diff_p0(self):
93
 
        """diff -p0 produces diffs with no prefix"""
94
 
        self.make_example_branch()
95
 
        file('hello', 'wt').write('hello world!\n')
96
 
        out, err = self.runbzr('diff -p0', retcode=1)
97
 
        self.assertEquals(err, '')
98
 
        self.assertEqualDiff(subst_dates(out), '''\
99
 
=== modified file 'hello'
100
 
--- hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
101
 
+++ hello\tYYYY-MM-DD HH:MM:SS +ZZZZ
102
 
@@ -1,1 +1,1 @@
103
 
-foo
104
 
+hello world!
105
 
 
106
 
''')
107
 
 
108
 
    def test_diff_nonexistent(self):
109
 
        # Get an error from a file that does not exist at all
110
 
        # (Malone #3619)
111
 
        self.make_example_branch()
112
 
        out, err = self.runbzr('diff does-not-exist', retcode=3)
113
 
        self.assertContainsRe(err, 'not versioned.*does-not-exist')
114
 
 
115
 
    def test_diff_unversioned(self):
116
 
        # Get an error when diffing a non-versioned file.
117
 
        # (Malone #3619)
118
 
        self.make_example_branch()
119
 
        self.build_tree(['unversioned-file'])
120
 
        out, err = self.runbzr('diff unversioned-file', retcode=3)
121
 
        self.assertContainsRe(err, 'not versioned.*unversioned-file')
122
 
 
123
 
    # TODO: What should diff say for a file deleted in working tree?
124
 
 
125
 
    def example_branches(self):
126
 
        self.build_tree(['branch1/', 'branch1/file'], line_endings='binary')
127
 
        self.capture('init branch1')
128
 
        self.capture('add branch1/file')
129
 
        self.run_bzr_captured(['commit', '-m', 'add file', 'branch1'])
130
 
        self.capture('branch branch1 branch2')
131
 
        print >> open('branch2/file', 'wb'), 'new content'
132
 
        self.run_bzr_captured(['commit', '-m', 'update file', 'branch2'])
133
 
 
134
 
    def test_diff_branches(self):
135
 
        self.example_branches()
136
 
        # should open branch1 and diff against branch2, 
137
 
        out, err = self.run_bzr_captured(['diff', '-r', 'branch:branch2', 
138
 
                                          'branch1'],
139
 
                                         retcode=1)
140
 
        self.assertEquals('', err)
141
 
        self.assertEquals("=== modified file 'file'\n"
142
 
                          "--- file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
143
 
                          "+++ file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
144
 
                          "@@ -1,1 +1,1 @@\n"
145
 
                          "-new content\n"
146
 
                          "+contents of branch1/file\n"
147
 
                          "\n", subst_dates(out))
148
 
        out, ett = self.run_bzr_captured(['diff', 'branch2', 'branch1'],
149
 
                                         retcode=1)
150
 
        self.assertEquals('', err)
151
 
        self.assertEqualDiff("=== modified file 'file'\n"
152
 
                              "--- file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
153
 
                              "+++ file\tYYYY-MM-DD HH:MM:SS +ZZZZ\n"
154
 
                              "@@ -1,1 +1,1 @@\n"
155
 
                              "-new content\n"
156
 
                              "+contents of branch1/file\n"
157
 
                              "\n", subst_dates(out))
158
 
 
159
 
    def example_branch2(self):
160
 
        self.build_tree(['branch1/', 'branch1/file1'], line_endings='binary')
161
 
        self.capture('init branch1')
162
 
        self.capture('add branch1/file1')
163
 
        print >> open('branch1/file1', 'wb'), 'original line'
164
 
        self.run_bzr_captured(['commit', '-m', 'first commit', 'branch1'])
165
 
        
166
 
        print >> open('branch1/file1', 'wb'), 'repo line'
167
 
        self.run_bzr_captured(['commit', '-m', 'second commit', 'branch1'])
168
 
 
169
 
    def test_diff_to_working_tree(self):
170
 
        self.example_branch2()
171
 
        
172
 
        print >> open('branch1/file1', 'wb'), 'new line'
173
 
        output = self.run_bzr_captured(['diff', '-r', '1..', 'branch1'], retcode=1)
174
 
        self.assertTrue('\n-original line\n+new line\n' in output[0])
175
 
 
176
 
 
177
 
class TestCheckoutDiff(TestDiff):
178
 
 
179
 
    def make_example_branch(self):
180
 
        super(TestCheckoutDiff, self).make_example_branch()
181
 
        self.runbzr('checkout . checkout')
182
 
        os.chdir('checkout')
183
 
 
184
 
    def example_branch2(self):
185
 
        super(TestCheckoutDiff, self).example_branch2()
186
 
        os.mkdir('checkouts')
187
 
        self.runbzr('checkout branch1 checkouts/branch1')
188
 
        os.chdir('checkouts')
189
 
 
190
 
    def example_branches(self):
191
 
        super(TestCheckoutDiff, self).example_branches()
192
 
        os.mkdir('checkouts')
193
 
        self.runbzr('checkout branch1 checkouts/branch1')
194
 
        self.runbzr('checkout branch2 checkouts/branch2')
195
 
        os.chdir('checkouts')
196
 
 
197
 
 
198
 
class TestDiffLabels(TestDiff):
199
 
 
200
 
    def test_diff_label_removed(self):
201
 
        super(TestDiffLabels, self).make_example_branch()
202
 
        self.runbzr('remove hello')
203
 
        diff = self.run_bzr_captured(['diff'], retcode=1)
204
 
        self.assertTrue("=== removed file 'hello'" in diff[0])
205
 
 
206
 
    def test_diff_label_added(self):
207
 
        super(TestDiffLabels, self).make_example_branch()
208
 
        file('barbar', 'wt').write('barbar')
209
 
        self.runbzr('add barbar')
210
 
        diff = self.run_bzr_captured(['diff'], retcode=1)
211
 
        self.assertTrue("=== added file 'barbar'" in diff[0])
212
 
 
213
 
    def test_diff_label_modified(self):
214
 
        super(TestDiffLabels, self).make_example_branch()
215
 
        file('hello', 'wt').write('barbar')
216
 
        diff = self.run_bzr_captured(['diff'], retcode=1)
217
 
        self.assertTrue("=== modified file 'hello'" in diff[0])
218
 
 
219
 
    def test_diff_label_renamed(self):
220
 
        super(TestDiffLabels, self).make_example_branch()
221
 
        self.runbzr('rename hello gruezi')
222
 
        diff = self.run_bzr_captured(['diff'], retcode=1)
223
 
        self.assertTrue("=== renamed file 'hello' => 'gruezi'" in diff[0])