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