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