/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.8.21 by John Arbash Meinel
Splitting up the version info code into a lazy factory style.
1
# Copyright (C) 2005, 2006 Canonical Ltd
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
2022.1.1 by John Arbash Meinel
[merge] version-info plugin, and cleanup for layout in bzr
19
from cStringIO import StringIO
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
20
import imp
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
21
import os
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
22
import sys
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
23
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
24
from bzrlib import (
3207.1.1 by Lukáš Lalinský
Raise a proper error when 'version-info --custom' is used without a template
25
    errors,
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
26
    symbol_versioning,
27
    tests,
28
    version_info_formats,
29
    )
2022.1.3 by John Arbash Meinel
Remove unused imports
30
from bzrlib.tests import TestCaseWithTransport
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
31
from bzrlib.rio import read_stanzas
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
32
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
33
from bzrlib.version_info_formats.format_custom import CustomVersionInfoBuilder
2022.1.1 by John Arbash Meinel
[merge] version-info plugin, and cleanup for layout in bzr
34
from bzrlib.version_info_formats.format_rio import RioVersionInfoBuilder
35
from bzrlib.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.
36
37
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
38
class TestVersionInfo(TestCaseWithTransport):
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
39
40
    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.
41
        wt = self.make_branch_and_tree('branch')
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
42
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
        self.build_tree(['branch/a'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
44
        wt.add('a')
45
        wt.commit('a', rev_id='r1')
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/b'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
48
        wt.add('b')
49
        wt.commit('b', rev_id='r2')
50
2022.1.4 by John Arbash Meinel
test feedback from Robert.
51
        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
52
        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
53
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
54
        return wt
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
55
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
56
    def test_rio_null(self):
57
        wt = self.make_branch_and_tree('branch')
58
59
        sio = StringIO()
60
        builder = RioVersionInfoBuilder(wt.branch, working_tree=wt)
61
        builder.generate(sio)
62
        val = sio.getvalue()
63
        self.assertContainsRe(val, 'build-date:')
64
        self.assertContainsRe(val, 'revno: 0')
65
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
66
    def test_rio_version_text(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.
67
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
68
69
        def regen(**kwargs):
70
            sio = StringIO()
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
71
            builder = RioVersionInfoBuilder(wt.branch, working_tree=wt,
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
72
                                            **kwargs)
73
            builder.generate(sio)
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
74
            val = sio.getvalue()
75
            return val
76
77
        val = regen()
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
78
        self.assertContainsRe(val, 'build-date:')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
79
        self.assertContainsRe(val, 'date:')
80
        self.assertContainsRe(val, 'revno: 3')
0.8.16 by John Arbash Meinel
Using revision-id for rio, and revision_id for python
81
        self.assertContainsRe(val, 'revision-id: r3')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
82
83
        val = regen(check_for_clean=True)
84
        self.assertContainsRe(val, 'clean: True')
85
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
86
        self.build_tree(['branch/c'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
87
        val = regen(check_for_clean=True)
88
        self.assertContainsRe(val, 'clean: False')
89
        os.remove('branch/c')
90
91
        val = regen(include_revision_history=True)
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
92
        self.assertContainsRe(val, 'id: r1')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
93
        self.assertContainsRe(val, 'message: a')
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
94
        self.assertContainsRe(val, 'id: r2')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
95
        self.assertContainsRe(val, 'message: b')
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
96
        self.assertContainsRe(val, 'id: r3')
2030.1.2 by John Arbash Meinel
Change the version-info --format=rio to support unicode messages
97
        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
98
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
99
    def test_rio_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.
100
        wt = self.create_branch()
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
101
102
        def regen(**kwargs):
103
            sio = StringIO()
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
104
            builder = RioVersionInfoBuilder(wt.branch, working_tree=wt,
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
105
                                            **kwargs)
106
            builder.generate(sio)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
107
            sio.seek(0)
108
            stanzas = list(read_stanzas(sio))
109
            self.assertEqual(1, len(stanzas))
110
            return stanzas[0]
111
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
112
        def get_one_stanza(stanza, key):
2022.1.1 by John Arbash Meinel
[merge] version-info plugin, and cleanup for layout in bzr
113
            new_stanzas = list(read_stanzas(
114
                                StringIO(stanza[key].encode('utf8'))))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
115
            self.assertEqual(1, len(new_stanzas))
116
            return new_stanzas[0]
117
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
118
        stanza = regen()
119
        self.failUnless('date' in stanza)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
120
        self.failUnless('build-date' in stanza)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
121
        self.assertEqual(['3'], stanza.get_all('revno'))
0.8.16 by John Arbash Meinel
Using revision-id for rio, and revision_id for python
122
        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.
123
124
        stanza = regen(check_for_clean=True)
125
        self.assertEqual(['True'], stanza.get_all('clean'))
126
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
127
        self.build_tree(['branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
128
        stanza = regen(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.
129
        self.assertEqual(['False'], stanza.get_all('clean'))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
130
2903.2.9 by Martin Pool
Review cleanups, mostly documentation
131
        # XXX: This assumes it's being run against a repository that updates
132
        # the root revision on every commit.  Newer ones that use
2903.2.2 by Martin Pool
doc
133
        # RootCommitBuilder won't update it on each commit.
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
134
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
135
        self.assertEqual(['', 'a', 'b', 'c'], file_rev_stanza.get_all('path'))
136
        self.assertEqual(['r3', 'r3', 'r2', 'unversioned'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
137
            file_rev_stanza.get_all('revision'))
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
138
        os.remove('branch/c')
139
140
        stanza = regen(include_revision_history=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
141
        revision_stanza = get_one_stanza(stanza, 'revisions')
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
142
        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
143
        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.
144
        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.
145
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
146
        # a was modified, so it should show up modified again
147
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
148
        wt.add('c')
149
        wt.rename_one('b', 'd')
150
        stanza = regen(check_for_clean=True, include_file_revisions=True)
151
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
152
        self.assertEqual(['', 'a', 'b', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
153
                          file_rev_stanza.get_all('path'))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
154
        self.assertEqual(['r3', 'modified', 'renamed to d', 'new',
1731.1.50 by Aaron Bentley
Merge bzr.dev
155
                          'renamed from b'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
156
                         file_rev_stanza.get_all('revision'))
157
158
        wt.commit('modified', rev_id='r4')
159
        wt.remove(['c', 'd'])
160
        os.remove('branch/d')
161
        stanza = regen(check_for_clean=True, include_file_revisions=True)
162
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
163
        self.assertEqual(['', 'a', 'c', 'd'], file_rev_stanza.get_all('path'))
164
        self.assertEqual(['r4', 'r4', 'unversioned', 'removed'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
165
                         file_rev_stanza.get_all('revision'))
166
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
167
    def test_python_null(self):
168
        wt = self.make_branch_and_tree('branch')
169
170
        sio = StringIO()
171
        builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt)
172
        builder.generate(sio)
173
        val = sio.getvalue()
174
        self.assertContainsRe(val, "'revision_id': None")
175
        self.assertContainsRe(val, "'revno': 0")
176
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
177
    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.
178
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
179
180
        def regen(**kwargs):
2022.1.4 by John Arbash Meinel
test feedback from Robert.
181
            """Create a test module, import and return it"""
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
182
            outf = open('test_version_information.py', 'wb')
2022.1.4 by John Arbash Meinel
test feedback from Robert.
183
            try:
184
                builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt,
185
                                                   **kwargs)
186
                builder.generate(outf)
187
            finally:
188
                outf.close()
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
189
            module_info = imp.find_module('test_version_information',
190
                                          [os.getcwdu()])
191
            tvi = imp.load_module('tvi', *module_info)
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
192
            # Make sure the module isn't cached
193
            sys.modules.pop('tvi', None)
194
            sys.modules.pop('test_version_information', None)
195
            # Delete the compiled versions, because we are generating
196
            # a new file fast enough that python doesn't detect it
197
            # needs to recompile, and using sleep() just makes the
198
            # test slow
199
            if os.path.exists('test_version_information.pyc'):
200
                os.remove('test_version_information.pyc')
201
            if os.path.exists('test_version_information.pyo'):
202
                os.remove('test_version_information.pyo')
203
            return tvi
204
205
        tvi = regen()
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
206
        self.assertEqual(3, tvi.version_info['revno'])
207
        self.assertEqual('r3', tvi.version_info['revision_id'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
208
        self.failUnless(tvi.version_info.has_key('date'))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
209
        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
210
211
        tvi = regen(check_for_clean=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
212
        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
213
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
214
        self.build_tree(['branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
215
        tvi = regen(check_for_clean=True, include_file_revisions=True)
216
        self.assertEqual(False, tvi.version_info['clean'])
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
217
        self.assertEqual(['', 'a', 'b', 'c'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
218
                         sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
219
        self.assertEqual('r3', tvi.file_revisions['a'])
220
        self.assertEqual('r2', tvi.file_revisions['b'])
221
        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
222
        os.remove('branch/c')
223
224
        tvi = regen(include_revision_history=True)
0.8.15 by John Arbash Meinel
Including the date stamp for all revisions.
225
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
226
        rev_info = [(rev, message) for rev, message, timestamp, timezone
227
                                   in tvi.revisions]
2030.1.2 by John Arbash Meinel
Change the version-info --format=rio to support unicode messages
228
        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.
229
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
230
        # a was modified, so it should show up modified again
231
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
232
        wt.add('c')
233
        wt.rename_one('b', 'd')
234
        tvi = regen(check_for_clean=True, include_file_revisions=True)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
235
        self.assertEqual(['', 'a', 'b', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
236
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
237
        self.assertEqual('modified', tvi.file_revisions['a'])
238
        self.assertEqual('renamed to d', tvi.file_revisions['b'])
239
        self.assertEqual('new', tvi.file_revisions['c'])
240
        self.assertEqual('renamed from b', tvi.file_revisions['d'])
241
242
        wt.commit('modified', rev_id='r4')
243
        wt.remove(['c', 'd'])
244
        os.remove('branch/d')
245
        tvi = regen(check_for_clean=True, include_file_revisions=True)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
246
        self.assertEqual(['', 'a', 'c', 'd'],
1731.1.50 by Aaron Bentley
Merge bzr.dev
247
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
248
        self.assertEqual('r4', tvi.file_revisions['a'])
249
        self.assertEqual('unversioned', tvi.file_revisions['c'])
250
        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
251
4250.1.1 by Jelmer Vernooij
Fix version-info in empty branches.
252
    def test_custom_null(self):
253
        sio = StringIO()
254
        wt = self.make_branch_and_tree('branch')
255
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
256
            template='revno: {revno}')
257
        builder.generate(sio)
258
        self.assertEquals("revno: 0", sio.getvalue())
259
260
        builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt, 
261
            template='{revno} revid: {revision_id}')
262
        # revision_id is not available yet
263
        self.assertRaises(errors.MissingTemplateVariable, 
264
            builder.generate, sio)
265
2948.4.1 by Lukáš Lalinský
Custom template-based version info formatter.
266
    def test_custom_version_text(self):
267
        wt = self.create_branch()
268
269
        def regen(tpl, **kwargs):
270
            sio = StringIO()
271
            builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
272
                                               template=tpl, **kwargs)
273
            builder.generate(sio)
274
            val = sio.getvalue()
275
            return val
276
277
        val = regen('build-date: "{build_date}"\ndate: "{date}"')
278
        self.assertContainsRe(val, 'build-date: "[0-9-+: ]+"')
279
        self.assertContainsRe(val, 'date: "[0-9-+: ]+"')
280
281
        val = regen('revno: {revno}')
282
        self.assertEqual(val, 'revno: 3')
283
284
        val = regen('revision-id: {revision_id}')
285
        self.assertEqual(val, 'revision-id: r3')
286
287
        val = regen('clean: {clean}', check_for_clean=True)
288
        self.assertEqual(val, 'clean: 1')
289
290
        self.build_tree(['branch/c'])
291
        val = regen('clean: {clean}', check_for_clean=True)
292
        self.assertEqual(val, 'clean: 0')
293
        os.remove('branch/c')
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
294
3207.1.1 by Lukáš Lalinský
Raise a proper error when 'version-info --custom' is used without a template
295
    def test_custom_without_template(self):
296
        builder = CustomVersionInfoBuilder(None)
297
        sio = StringIO()
298
        self.assertRaises(errors.NoTemplate, builder.generate, sio)
299
3138.1.1 by John Arbash Meinel
Fix bug #175886: version_info deprecated functions should be tested to still work.
300
301
class TestBuilder(version_info_formats.VersionInfoBuilder):
302
    pass
303
304
305
class TestVersionInfoFormatRegistry(tests.TestCase):
306
307
    def setUp(self):
308
        super(TestVersionInfoFormatRegistry, self).setUp()
309
        registry = version_info_formats.format_registry
310
        self._default_key = registry._default_key
311
        self._dict = registry._dict.copy()
312
        self._help_dict = registry._help_dict.copy()
313
        self._info_dict = registry._info_dict.copy()
314
        self.addCleanup(self._cleanup)
315
316
    def _cleanup(self):
317
        # Restore the registry to pristine state after the test runs
318
        registry = version_info_formats.format_registry
319
        registry._default_key = self._default_key
320
        registry._dict = self._dict
321
        registry._help_dict = self._help_dict
322
        registry._info_dict = self._info_dict
323
324
    def test_register_remove(self):
325
        registry = version_info_formats.format_registry
326
        registry.register('testbuilder',
327
            TestBuilder, 'a simple test builder')
328
        self.assertIs(TestBuilder, registry.get('testbuilder'))
329
        self.assertEqual('a simple test builder',
330
                         registry.get_help('testbuilder'))
331
        registry.remove('testbuilder')
332
        self.assertRaises(KeyError, registry.get, 'testbuilder')