/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2005-2012, 2016 Canonical Ltd
0.8.21 by John Arbash Meinel
Splitting up the version info code into a lazy factory style.
2
#
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
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.
0.8.21 by John Arbash Meinel
Splitting up the version info code into a lazy factory style.
7
#
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
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.
0.8.21 by John Arbash Meinel
Splitting up the version info code into a lazy factory style.
12
#
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
16
0.8.21 by John Arbash Meinel
Splitting up the version info code into a lazy factory style.
17
"""Tests for version_info"""
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
18
19
import os
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
20
import sys
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
21
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
22
from .. import (
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
23
    registry,
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
24
    tests,
25
    version_info_formats,
26
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
27
from ..sixish import (
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
28
    BytesIO,
7045.1.15 by Jelmer Vernooij
fix version info tests
29
    StringIO,
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
30
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
31
from . import TestCaseWithTransport
7045.1.15 by Jelmer Vernooij
fix version info tests
32
from ..rio import read_stanzas, read_stanzas_unicode
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
33
6734.1.17 by Jelmer Vernooij
Move format custom errors.
34
from ..version_info_formats.format_custom import (
35
    CustomVersionInfoBuilder,
36
    MissingTemplateVariable,
37
    NoTemplate,
38
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
39
from ..version_info_formats.format_rio import RioVersionInfoBuilder
40
from ..version_info_formats.format_python import PythonVersionInfoBuilder
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
41
42
6406.1.1 by Jelmer Vernooij
Split up version info tests.
43
class VersionInfoTestCase(TestCaseWithTransport):
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
44
45
    def create_branch(self):
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
46
        wt = self.make_branch_and_tree('branch')
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
47
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
48
        self.build_tree(['branch/a'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
49
        wt.add('a')
6855.4.1 by Jelmer Vernooij
Yet more bees.
50
        wt.commit('a', rev_id=b'r1')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
51
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
52
        self.build_tree(['branch/b'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
53
        wt.add('b')
6855.4.1 by Jelmer Vernooij
Yet more bees.
54
        wt.commit('b', rev_id=b'r2')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
55
6855.4.1 by Jelmer Vernooij
Yet more bees.
56
        self.build_tree_contents([('branch/a', b'new contents\n')])
57
        wt.commit(u'\xe52', rev_id=b'r3')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
58
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
59
        return wt
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
60
5967.11.4 by Benoît Pierre
Rename tests helper "create_tree_on_dotted_revno" to "create_tree_with_dotted_revno".
61
    def create_tree_with_dotted_revno(self):
5967.11.1 by Benoît Pierre
Update version-info tests.
62
        wt = self.make_branch_and_tree('branch')
63
        self.build_tree(['branch/a'])
64
        wt.add('a')
6855.4.1 by Jelmer Vernooij
Yet more bees.
65
        wt.commit('a', rev_id=b'r1')
5967.11.1 by Benoît Pierre
Update version-info tests.
66
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
67
        other = wt.controldir.sprout('other').open_workingtree()
5967.11.1 by Benoît Pierre
Update version-info tests.
68
        self.build_tree(['other/b.a'])
69
        other.add(['b.a'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
70
        other.commit('b.a', rev_id=b'o2')
5967.11.1 by Benoît Pierre
Update version-info tests.
71
72
        os.chdir('branch')
73
        self.run_bzr('merge ../other')
6855.4.1 by Jelmer Vernooij
Yet more bees.
74
        wt.commit('merge', rev_id=b'merge')
5967.11.1 by Benoît Pierre
Update version-info tests.
75
7045.1.13 by Jelmer Vernooij
Fix a few more tests.
76
        wt.update(revision=b'o2')
5967.11.1 by Benoît Pierre
Update version-info tests.
77
78
        return wt
79
6406.1.1 by Jelmer Vernooij
Split up version info tests.
80
81
class TestVersionInfoRio(VersionInfoTestCase):
82
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
83
    def test_rio_null(self):
84
        wt = self.make_branch_and_tree('branch')
85
7045.1.15 by Jelmer Vernooij
fix version info tests
86
        sio = StringIO()
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
87
        builder = RioVersionInfoBuilder(wt.branch, working_tree=wt)
88
        builder.generate(sio)
89
        val = sio.getvalue()
90
        self.assertContainsRe(val, 'build-date:')
91
        self.assertContainsRe(val, 'revno: 0')
92
5967.11.1 by Benoît Pierre
Update version-info tests.
93
    def test_rio_dotted_revno(self):
5967.11.4 by Benoît Pierre
Rename tests helper "create_tree_on_dotted_revno" to "create_tree_with_dotted_revno".
94
        wt = self.create_tree_with_dotted_revno()
5967.11.1 by Benoît Pierre
Update version-info tests.
95
7045.1.15 by Jelmer Vernooij
fix version info tests
96
        sio = StringIO()
5967.11.1 by Benoît Pierre
Update version-info tests.
97
        builder = RioVersionInfoBuilder(wt.branch, working_tree=wt)
98
        builder.generate(sio)
99
        val = sio.getvalue()
7045.1.15 by Jelmer Vernooij
fix version info tests
100
        self.assertContainsRe(val, 'revno: 1.1.1')
5967.11.1 by Benoît Pierre
Update version-info tests.
101
6406.1.1 by Jelmer Vernooij
Split up version info tests.
102
    def regen_text(self, wt, **kwargs):
7045.1.15 by Jelmer Vernooij
fix version info tests
103
        sio = StringIO()
6406.1.4 by Jelmer Vernooij
Fix some indentation.
104
        builder = RioVersionInfoBuilder(wt.branch, working_tree=wt, **kwargs)
6406.1.1 by Jelmer Vernooij
Split up version info tests.
105
        builder.generate(sio)
106
        val = sio.getvalue()
107
        return val
108
109
    def test_simple(self):
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
110
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
111
6406.1.1 by Jelmer Vernooij
Split up version info tests.
112
        val = self.regen_text(wt)
7045.1.15 by Jelmer Vernooij
fix version info tests
113
        self.assertContainsRe(val, 'build-date:')
114
        self.assertContainsRe(val, 'date:')
115
        self.assertContainsRe(val, 'revno: 3')
116
        self.assertContainsRe(val, 'revision-id: r3')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
117
6406.1.1 by Jelmer Vernooij
Split up version info tests.
118
    def test_clean(self):
119
        wt = self.create_branch()
120
        val = self.regen_text(wt, check_for_clean=True)
7045.1.15 by Jelmer Vernooij
fix version info tests
121
        self.assertContainsRe(val, 'clean: True')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
122
6406.1.1 by Jelmer Vernooij
Split up version info tests.
123
    def test_no_clean(self):
124
        wt = self.create_branch()
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
125
        self.build_tree(['branch/c'])
6406.1.1 by Jelmer Vernooij
Split up version info tests.
126
        val = self.regen_text(wt, check_for_clean=True)
7045.1.15 by Jelmer Vernooij
fix version info tests
127
        self.assertContainsRe(val, 'clean: False')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
128
129
    def test_history(self):
130
        wt = self.create_branch()
131
132
        val = self.regen_text(wt, include_revision_history=True)
7045.1.15 by Jelmer Vernooij
fix version info tests
133
        self.assertContainsRe(val, 'id: r1')
134
        self.assertContainsRe(val, 'message: a')
135
        self.assertContainsRe(val, 'id: r2')
136
        self.assertContainsRe(val, 'message: b')
137
        self.assertContainsRe(val, 'id: r3')
138
        self.assertContainsRe(val, 'message: \xe5')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
139
6406.1.1 by Jelmer Vernooij
Split up version info tests.
140
    def regen(self, wt, **kwargs):
7045.1.15 by Jelmer Vernooij
fix version info tests
141
        sio = StringIO()
6406.1.4 by Jelmer Vernooij
Fix some indentation.
142
        builder = RioVersionInfoBuilder(wt.branch, working_tree=wt, **kwargs)
6406.1.1 by Jelmer Vernooij
Split up version info tests.
143
        builder.generate(sio)
144
        sio.seek(0)
7045.1.15 by Jelmer Vernooij
fix version info tests
145
        stanzas = list(read_stanzas_unicode(sio))
6406.1.1 by Jelmer Vernooij
Split up version info tests.
146
        self.assertEqual(1, len(stanzas))
147
        return stanzas[0]
148
4216.4.1 by Jelmer Vernooij
Allow hooks to add new entries to version-info.
149
    def test_rio_version_hook(self):
150
        def update_stanza(rev, stanza):
151
            stanza.add('bla', 'bloe')
152
        RioVersionInfoBuilder.hooks.install_named_hook(
153
            'revision', update_stanza, None)
154
        wt = self.create_branch()
155
6406.1.1 by Jelmer Vernooij
Split up version info tests.
156
        stanza = self.regen(wt)
4216.4.1 by Jelmer Vernooij
Allow hooks to add new entries to version-info.
157
        self.assertEqual(['bloe'], stanza.get_all('bla'))
158
6406.1.1 by Jelmer Vernooij
Split up version info tests.
159
    def get_one_stanza(self, stanza, key):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
160
        new_stanzas = list(read_stanzas(BytesIO(stanza[key].encode('utf8'))))
6406.1.1 by Jelmer Vernooij
Split up version info tests.
161
        self.assertEqual(1, len(new_stanzas))
162
        return new_stanzas[0]
163
164
    def test_build_date(self):
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
165
        wt = self.create_branch()
6406.1.1 by Jelmer Vernooij
Split up version info tests.
166
        stanza = self.regen(wt)
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
167
        self.assertTrue('date' in stanza)
168
        self.assertTrue('build-date' in stanza)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
169
        self.assertEqual(['3'], stanza.get_all('revno'))
0.8.16 by John Arbash Meinel
Using revision-id for rio, and revision_id for python
170
        self.assertEqual(['r3'], stanza.get_all('revision-id'))
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
171
6406.1.1 by Jelmer Vernooij
Split up version info tests.
172
    def test_not_clean(self):
173
        wt = self.create_branch()
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
174
        self.build_tree(['branch/c'])
6406.1.1 by Jelmer Vernooij
Split up version info tests.
175
        stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
176
        self.assertEqual(['False'], stanza.get_all('clean'))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
177
6406.1.1 by Jelmer Vernooij
Split up version info tests.
178
    def test_file_revisions(self):
179
        wt = self.create_branch()
180
        self.build_tree(['branch/c'])
181
        stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
4599.4.2 by Robert Collins
Update test_version_info for rich root test data.
182
        # This assumes it's being run against a tree that does not update the
183
        # root revision on every commit.
6406.1.1 by Jelmer Vernooij
Split up version info tests.
184
        file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
185
        self.assertEqual(['', 'a', 'b', 'c'], file_rev_stanza.get_all('path'))
4599.4.2 by Robert Collins
Update test_version_info for rich root test data.
186
        self.assertEqual(['r1', 'r3', 'r2', 'unversioned'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
187
            file_rev_stanza.get_all('revision'))
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
188
6406.1.1 by Jelmer Vernooij
Split up version info tests.
189
    def test_revision_history(self):
190
        wt = self.create_branch()
191
        stanza = self.regen(wt, include_revision_history=True)
192
        revision_stanza = self.get_one_stanza(stanza, 'revisions')
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
193
        self.assertEqual(['r1', 'r2', 'r3'], revision_stanza.get_all('id'))
2030.1.2 by John Arbash Meinel
Change the version-info --format=rio to support unicode messages
194
        self.assertEqual(['a', 'b', u'\xe52'], revision_stanza.get_all('message'))
0.8.15 by John Arbash Meinel
Including the date stamp for all revisions.
195
        self.assertEqual(3, len(revision_stanza.get_all('date')))
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
196
6406.1.1 by Jelmer Vernooij
Split up version info tests.
197
    def test_file_revisions_with_rename(self):
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
198
        # a was modified, so it should show up modified again
6406.1.1 by Jelmer Vernooij
Split up version info tests.
199
        wt = self.create_branch()
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
200
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
201
        wt.add('c')
202
        wt.rename_one('b', 'd')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
203
        stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
204
        file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
205
        self.assertEqual(['', 'a', 'b', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
206
                          file_rev_stanza.get_all('path'))
4599.4.2 by Robert Collins
Update test_version_info for rich root test data.
207
        self.assertEqual(['r1', 'modified', 'renamed to d', 'new',
1731.1.50 by Aaron Bentley
Merge bzr.dev
208
                          'renamed from b'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
209
                         file_rev_stanza.get_all('revision'))
210
6406.1.1 by Jelmer Vernooij
Split up version info tests.
211
    def test_file_revisions_with_removal(self):
212
        wt = self.create_branch()
213
        self.build_tree(['branch/a', 'branch/c'])
214
        wt.add('c')
215
        wt.rename_one('b', 'd')
216
6855.4.1 by Jelmer Vernooij
Yet more bees.
217
        wt.commit('modified', rev_id=b'r4')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
218
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
219
        wt.remove(['c', 'd'])
220
        os.remove('branch/d')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
221
        stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
222
        file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
223
        self.assertEqual(['', 'a', 'c', 'd'], file_rev_stanza.get_all('path'))
4599.4.2 by Robert Collins
Update test_version_info for rich root test data.
224
        self.assertEqual(['r1', 'r4', 'unversioned', 'removed'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
225
                         file_rev_stanza.get_all('revision'))
226
6406.1.3 by Jelmer Vernooij
Fix version_info tree.
227
    def test_revision(self):
228
        wt = self.create_branch()
229
        self.build_tree(['branch/a', 'branch/c'])
230
        wt.add('c')
231
        wt.rename_one('b', 'd')
232
233
        stanza = self.regen(wt, check_for_clean=True,
234
            include_file_revisions=True, revision_id=wt.last_revision())
235
        file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
236
        self.assertEqual(['', 'a', 'b'], file_rev_stanza.get_all('path'))
237
        self.assertEqual(['r1', 'r3', 'r2'],
238
                         file_rev_stanza.get_all('revision'))
239
6406.1.1 by Jelmer Vernooij
Split up version info tests.
240
241
class PythonVersionInfoTests(VersionInfoTestCase):
242
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
243
    def test_python_null(self):
244
        wt = self.make_branch_and_tree('branch')
245
7045.1.15 by Jelmer Vernooij
fix version info tests
246
        sio = StringIO()
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
247
        builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt)
248
        builder.generate(sio)
249
        val = sio.getvalue()
250
        self.assertContainsRe(val, "'revision_id': None")
5967.11.1 by Benoît Pierre
Update version-info tests.
251
        self.assertContainsRe(val, "'revno': '0'")
5598.1.1 by Soren Hansen
Fix PEP-8 violation in PythonVersionInfoBuilder's output
252
        self.assertNotContainsString(val, '\n\n\n\n')
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
253
5967.11.1 by Benoît Pierre
Update version-info tests.
254
    def test_python_dotted_revno(self):
5967.11.4 by Benoît Pierre
Rename tests helper "create_tree_on_dotted_revno" to "create_tree_with_dotted_revno".
255
        wt = self.create_tree_with_dotted_revno()
5967.11.1 by Benoît Pierre
Update version-info tests.
256
7045.1.15 by Jelmer Vernooij
fix version info tests
257
        sio = StringIO()
5967.11.1 by Benoît Pierre
Update version-info tests.
258
        builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt)
259
        builder.generate(sio)
260
        val = sio.getvalue()
261
        self.assertContainsRe(val, "'revno': '1.1.1'")
262
6406.1.1 by Jelmer Vernooij
Split up version info tests.
263
    def regen(self, wt, **kwargs):
264
        """Create a test module, import and return it"""
7045.1.15 by Jelmer Vernooij
fix version info tests
265
        with open('test_version_information.py', 'w') as outf:
6406.1.1 by Jelmer Vernooij
Split up version info tests.
266
            builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt,
267
                                               **kwargs)
268
            builder.generate(outf)
6799 by Jelmer Vernooij
Merge lp:~jelmer/brz/escaping.
269
        import imp
6406.1.1 by Jelmer Vernooij
Split up version info tests.
270
        module_info = imp.find_module('test_version_information',
6619.3.26 by Martin
Fix fallout from 2to3 getcwdu transformation and other test uses
271
                                      [self.test_dir])
6406.1.1 by Jelmer Vernooij
Split up version info tests.
272
        tvi = imp.load_module('tvi', *module_info)
273
        # Make sure the module isn't cached
274
        sys.modules.pop('tvi', None)
275
        sys.modules.pop('test_version_information', None)
276
        # Delete the compiled versions, because we are generating
277
        # a new file fast enough that python doesn't detect it
278
        # needs to recompile, and using sleep() just makes the
279
        # test slow
280
        if os.path.exists('test_version_information.pyc'):
281
            os.remove('test_version_information.pyc')
282
        if os.path.exists('test_version_information.pyo'):
283
            os.remove('test_version_information.pyo')
284
        return tvi
285
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
286
    def test_python_version(self):
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
287
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
288
6406.1.1 by Jelmer Vernooij
Split up version info tests.
289
        tvi = self.regen(wt)
5967.11.1 by Benoît Pierre
Update version-info tests.
290
        self.assertEqual('3', tvi.version_info['revno'])
7045.1.15 by Jelmer Vernooij
fix version info tests
291
        self.assertEqual(b'r3', tvi.version_info['revision_id'])
6619.3.1 by Jelmer Vernooij
Apply 2to3 has_key fix.
292
        self.assertTrue('date' in tvi.version_info)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
293
        self.assertEqual(None, tvi.version_info['clean'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
294
6406.1.1 by Jelmer Vernooij
Split up version info tests.
295
        tvi = self.regen(wt, check_for_clean=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
296
        self.assertEqual(True, tvi.version_info['clean'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
297
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
298
        self.build_tree(['branch/c'])
6406.1.1 by Jelmer Vernooij
Split up version info tests.
299
        tvi = self.regen(wt, check_for_clean=True, include_file_revisions=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
300
        self.assertEqual(False, tvi.version_info['clean'])
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
301
        self.assertEqual(['', 'a', 'b', 'c'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
302
                         sorted(tvi.file_revisions.keys()))
7045.1.15 by Jelmer Vernooij
fix version info tests
303
        self.assertEqual(b'r3', tvi.file_revisions['a'])
304
        self.assertEqual(b'r2', tvi.file_revisions['b'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
305
        self.assertEqual('unversioned', tvi.file_revisions['c'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
306
        os.remove('branch/c')
307
6406.1.1 by Jelmer Vernooij
Split up version info tests.
308
        tvi = self.regen(wt, include_revision_history=True)
0.8.15 by John Arbash Meinel
Including the date stamp for all revisions.
309
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
310
        rev_info = [(rev, message) for rev, message, timestamp, timezone
311
                                   in tvi.revisions]
7045.1.15 by Jelmer Vernooij
fix version info tests
312
        self.assertEqual([(b'r1', 'a'), (b'r2', 'b'), (b'r3', u'\xe52')], rev_info)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
313
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
314
        # a was modified, so it should show up modified again
315
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
316
        wt.add('c')
317
        wt.rename_one('b', 'd')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
318
        tvi = self.regen(wt, check_for_clean=True, include_file_revisions=True)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
319
        self.assertEqual(['', 'a', 'b', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
320
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
321
        self.assertEqual('modified', tvi.file_revisions['a'])
322
        self.assertEqual('renamed to d', tvi.file_revisions['b'])
323
        self.assertEqual('new', tvi.file_revisions['c'])
324
        self.assertEqual('renamed from b', tvi.file_revisions['d'])
325
6855.4.1 by Jelmer Vernooij
Yet more bees.
326
        wt.commit('modified', rev_id=b'r4')
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
327
        wt.remove(['c', 'd'])
328
        os.remove('branch/d')
6406.1.1 by Jelmer Vernooij
Split up version info tests.
329
        tvi = self.regen(wt, check_for_clean=True, include_file_revisions=True)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
330
        self.assertEqual(['', 'a', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
331
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
332
        self.assertEqual('r4', tvi.file_revisions['a'])
333
        self.assertEqual('unversioned', tvi.file_revisions['c'])
334
        self.assertEqual('removed', tvi.file_revisions['d'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
335
6406.1.1 by Jelmer Vernooij
Split up version info tests.
336
337
class CustomVersionInfoTests(VersionInfoTestCase):
338
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
339
    def test_custom_null(self):
7045.1.15 by Jelmer Vernooij
fix version info tests
340
        sio = StringIO()
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
341
        wt = self.make_branch_and_tree('branch')
342
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
343
            template='revno: {revno}')
344
        builder.generate(sio)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
345
        self.assertEqual("revno: 0", sio.getvalue())
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
346
347
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt, 
348
            template='{revno} revid: {revision_id}')
349
        # revision_id is not available yet
6734.1.17 by Jelmer Vernooij
Move format custom errors.
350
        self.assertRaises(MissingTemplateVariable, builder.generate, sio)
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
351
5967.11.1 by Benoît Pierre
Update version-info tests.
352
    def test_custom_dotted_revno(self):
7045.1.15 by Jelmer Vernooij
fix version info tests
353
        sio = StringIO()
5967.11.4 by Benoît Pierre
Rename tests helper "create_tree_on_dotted_revno" to "create_tree_with_dotted_revno".
354
        wt = self.create_tree_with_dotted_revno()
5967.11.1 by Benoît Pierre
Update version-info tests.
355
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt, 
356
            template='{revno} revid: {revision_id}')
357
        builder.generate(sio)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
358
        self.assertEqual("1.1.1 revid: o2", sio.getvalue())
5967.11.1 by Benoît Pierre
Update version-info tests.
359
6406.1.1 by Jelmer Vernooij
Split up version info tests.
360
    def regen(self, wt, tpl, **kwargs):
7045.1.15 by Jelmer Vernooij
fix version info tests
361
        sio = StringIO()
6406.1.1 by Jelmer Vernooij
Split up version info tests.
362
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
363
                                           template=tpl, **kwargs)
364
        builder.generate(sio)
365
        val = sio.getvalue()
366
        return val
367
368
    def test_build_date(self):
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
369
        wt = self.create_branch()
370
6406.1.1 by Jelmer Vernooij
Split up version info tests.
371
        val = self.regen(wt, 'build-date: "{build_date}"\ndate: "{date}"')
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
372
        self.assertContainsRe(val, 'build-date: "[0-9-+: ]+"')
373
        self.assertContainsRe(val, 'date: "[0-9-+: ]+"')
374
6406.1.1 by Jelmer Vernooij
Split up version info tests.
375
    def test_revno(self):
376
        wt = self.create_branch()
377
        val = self.regen(wt, 'revno: {revno}')
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
378
        self.assertEqual(val, 'revno: 3')
379
6406.1.1 by Jelmer Vernooij
Split up version info tests.
380
    def test_revision_id(self):
381
        wt = self.create_branch()
382
        val = self.regen(wt, 'revision-id: {revision_id}')
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
383
        self.assertEqual(val, 'revision-id: r3')
384
6406.1.1 by Jelmer Vernooij
Split up version info tests.
385
    def test_clean(self):
386
        wt = self.create_branch()
387
        val = self.regen(wt, 'clean: {clean}', check_for_clean=True)
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
388
        self.assertEqual(val, 'clean: 1')
389
6406.1.1 by Jelmer Vernooij
Split up version info tests.
390
    def test_not_clean(self):
391
        wt = self.create_branch()
392
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
393
        self.build_tree(['branch/c'])
6406.1.1 by Jelmer Vernooij
Split up version info tests.
394
        val = self.regen(wt, 'clean: {clean}', check_for_clean=True)
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
395
        self.assertEqual(val, 'clean: 0')
396
        os.remove('branch/c')
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
397
3207.1.1 by Lukáš Lalinský
Raise a proper error when 'version-info --custom' is used without a template
398
    def test_custom_without_template(self):
399
        builder = CustomVersionInfoBuilder(None)
7045.1.15 by Jelmer Vernooij
fix version info tests
400
        sio = StringIO()
6734.1.17 by Jelmer Vernooij
Move format custom errors.
401
        self.assertRaises(NoTemplate, builder.generate, sio)
3207.1.1 by Lukáš Lalinský
Raise a proper error when 'version-info --custom' is used without a template
402
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
403
404
class TestBuilder(version_info_formats.VersionInfoBuilder):
405
    pass
406
407
408
class TestVersionInfoFormatRegistry(tests.TestCase):
409
410
    def setUp(self):
411
        super(TestVersionInfoFormatRegistry, self).setUp()
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
412
        self.overrideAttr(version_info_formats,
413
                          'format_registry', registry.Registry())
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
414
415
    def test_register_remove(self):
416
        registry = version_info_formats.format_registry
417
        registry.register('testbuilder',
418
            TestBuilder, 'a simple test builder')
419
        self.assertIs(TestBuilder, registry.get('testbuilder'))
420
        self.assertEqual('a simple test builder',
421
                         registry.get_help('testbuilder'))
422
        registry.remove('testbuilder')
423
        self.assertRaises(KeyError, registry.get, 'testbuilder')