~bzr-pqm/bzr/bzr.dev

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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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
2022.1.3 by John Arbash Meinel
Remove unused imports
24
from bzrlib.tests import TestCaseWithTransport
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
25
from bzrlib.rio import read_stanzas
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
26
2022.1.1 by John Arbash Meinel
[merge] version-info plugin, and cleanup for layout in bzr
27
from bzrlib.version_info_formats.format_rio import RioVersionInfoBuilder
28
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.
29
30
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
31
class TestVersionInfo(TestCaseWithTransport):
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
32
33
    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.
34
        wt = self.make_branch_and_tree('branch')
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
35
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
36
        self.build_tree(['branch/a'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
37
        wt.add('a')
38
        wt.commit('a', rev_id='r1')
39
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
40
        self.build_tree(['branch/b'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
41
        wt.add('b')
42
        wt.commit('b', rev_id='r2')
43
2022.1.4 by John Arbash Meinel
test feedback from Robert.
44
        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
45
        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
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
        return wt
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
48
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
49
    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.
50
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
51
52
        def regen(**kwargs):
53
            sio = StringIO()
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
54
            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.
55
                                            **kwargs)
56
            builder.generate(sio)
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
57
            val = sio.getvalue()
58
            return val
59
60
        val = regen()
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
61
        self.assertContainsRe(val, 'build-date:')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
62
        self.assertContainsRe(val, 'date:')
63
        self.assertContainsRe(val, 'revno: 3')
0.8.16 by John Arbash Meinel
Using revision-id for rio, and revision_id for python
64
        self.assertContainsRe(val, 'revision-id: r3')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
65
66
        val = regen(check_for_clean=True)
67
        self.assertContainsRe(val, 'clean: True')
68
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
69
        self.build_tree(['branch/c'])
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
70
        val = regen(check_for_clean=True)
71
        self.assertContainsRe(val, 'clean: False')
72
        os.remove('branch/c')
73
74
        val = regen(include_revision_history=True)
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
75
        self.assertContainsRe(val, 'id: r1')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
76
        self.assertContainsRe(val, 'message: a')
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
77
        self.assertContainsRe(val, 'id: r2')
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
78
        self.assertContainsRe(val, 'message: b')
0.8.6 by John Arbash Meinel
Updated the blackbox tests.
79
        self.assertContainsRe(val, 'id: r3')
2030.1.2 by John Arbash Meinel
Change the version-info --format=rio to support unicode messages
80
        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
81
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
82
    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.
83
        wt = self.create_branch()
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
84
85
        def regen(**kwargs):
86
            sio = StringIO()
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
87
            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.
88
                                            **kwargs)
89
            builder.generate(sio)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
90
            sio.seek(0)
91
            stanzas = list(read_stanzas(sio))
92
            self.assertEqual(1, len(stanzas))
93
            return stanzas[0]
94
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
95
        def get_one_stanza(stanza, key):
2022.1.1 by John Arbash Meinel
[merge] version-info plugin, and cleanup for layout in bzr
96
            new_stanzas = list(read_stanzas(
97
                                StringIO(stanza[key].encode('utf8'))))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
98
            self.assertEqual(1, len(new_stanzas))
99
            return new_stanzas[0]
100
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
101
        stanza = regen()
102
        self.failUnless('date' in stanza)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
103
        self.failUnless('build-date' in stanza)
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
104
        self.assertEqual(['3'], stanza.get_all('revno'))
0.8.16 by John Arbash Meinel
Using revision-id for rio, and revision_id for python
105
        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.
106
107
        stanza = regen(check_for_clean=True)
108
        self.assertEqual(['True'], stanza.get_all('clean'))
109
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
110
        self.build_tree(['branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
111
        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.
112
        self.assertEqual(['False'], stanza.get_all('clean'))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
113
114
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
115
        self.assertEqual(['', 'a', 'b', 'c'], file_rev_stanza.get_all('path'))
116
        self.assertEqual(['r3', 'r3', 'r2', 'unversioned'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
117
            file_rev_stanza.get_all('revision'))
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
118
        os.remove('branch/c')
119
120
        stanza = regen(include_revision_history=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
121
        revision_stanza = get_one_stanza(stanza, 'revisions')
0.8.7 by John Arbash Meinel
Adding tests for parsing the rio text back into rio.
122
        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
123
        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.
124
        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.
125
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
126
        # a was modified, so it should show up modified again
127
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
128
        wt.add('c')
129
        wt.rename_one('b', 'd')
130
        stanza = regen(check_for_clean=True, include_file_revisions=True)
131
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
132
        self.assertEqual(['', 'a', 'b', 'c', 'd'], 
133
                          file_rev_stanza.get_all('path'))
134
        self.assertEqual(['r3', 'modified', 'renamed to d', 'new', 
135
                          'renamed from b'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
136
                         file_rev_stanza.get_all('revision'))
137
138
        wt.commit('modified', rev_id='r4')
139
        wt.remove(['c', 'd'])
140
        os.remove('branch/d')
141
        stanza = regen(check_for_clean=True, include_file_revisions=True)
142
        file_rev_stanza = get_one_stanza(stanza, 'file-revisions')
1731.1.50 by Aaron Bentley
Merge bzr.dev
143
        self.assertEqual(['', 'a', 'c', 'd'], file_rev_stanza.get_all('path'))
144
        self.assertEqual(['r4', 'r4', 'unversioned', 'removed'],
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
145
                         file_rev_stanza.get_all('revision'))
146
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
147
    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.
148
        wt = self.create_branch()
0.8.5 by John Arbash Meinel
Adding some whitebox tests for the output of generate_version_info
149
150
        def regen(**kwargs):
2022.1.4 by John Arbash Meinel
test feedback from Robert.
151
            """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
152
            outf = open('test_version_information.py', 'wb')
2022.1.4 by John Arbash Meinel
test feedback from Robert.
153
            try:
154
                builder = PythonVersionInfoBuilder(wt.branch, working_tree=wt,
155
                                                   **kwargs)
156
                builder.generate(outf)
157
            finally:
158
                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.
159
            module_info = imp.find_module('test_version_information',
160
                                          [os.getcwdu()])
161
            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
162
            # Make sure the module isn't cached
163
            sys.modules.pop('tvi', None)
164
            sys.modules.pop('test_version_information', None)
165
            # Delete the compiled versions, because we are generating
166
            # a new file fast enough that python doesn't detect it
167
            # needs to recompile, and using sleep() just makes the
168
            # test slow
169
            if os.path.exists('test_version_information.pyc'):
170
                os.remove('test_version_information.pyc')
171
            if os.path.exists('test_version_information.pyo'):
172
                os.remove('test_version_information.pyo')
173
            return tvi
174
175
        tvi = regen()
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
176
        self.assertEqual(3, tvi.version_info['revno'])
177
        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
178
        self.failUnless(tvi.version_info.has_key('date'))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
179
        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
180
181
        tvi = regen(check_for_clean=True)
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
182
        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
183
0.8.20 by John Arbash Meinel
Updated version-info to the latest bzr.dev codebase. Changed to using VersionInfoBuilder, and made tests pass.
184
        self.build_tree(['branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
185
        tvi = regen(check_for_clean=True, include_file_revisions=True)
186
        self.assertEqual(False, tvi.version_info['clean'])
1731.1.50 by Aaron Bentley
Merge bzr.dev
187
        self.assertEqual(['', 'a', 'b', 'c'], 
188
                         sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
189
        self.assertEqual('r3', tvi.file_revisions['a'])
190
        self.assertEqual('r2', tvi.file_revisions['b'])
191
        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
192
        os.remove('branch/c')
193
194
        tvi = regen(include_revision_history=True)
0.8.15 by John Arbash Meinel
Including the date stamp for all revisions.
195
0.8.23 by John Arbash Meinel
whitespace and formatting cleanups.
196
        rev_info = [(rev, message) for rev, message, timestamp, timezone
197
                                   in tvi.revisions]
2030.1.2 by John Arbash Meinel
Change the version-info --format=rio to support unicode messages
198
        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.
199
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
201
        self.build_tree(['branch/a', 'branch/c'])
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
202
        wt.add('c')
203
        wt.rename_one('b', 'd')
204
        tvi = regen(check_for_clean=True, include_file_revisions=True)
1731.1.50 by Aaron Bentley
Merge bzr.dev
205
        self.assertEqual(['', 'a', 'b', 'c', 'd'], 
206
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
207
        self.assertEqual('modified', tvi.file_revisions['a'])
208
        self.assertEqual('renamed to d', tvi.file_revisions['b'])
209
        self.assertEqual('new', tvi.file_revisions['c'])
210
        self.assertEqual('renamed from b', tvi.file_revisions['d'])
211
212
        wt.commit('modified', rev_id='r4')
213
        wt.remove(['c', 'd'])
214
        os.remove('branch/d')
215
        tvi = regen(check_for_clean=True, include_file_revisions=True)
1731.1.50 by Aaron Bentley
Merge bzr.dev
216
        self.assertEqual(['', 'a', 'c', 'd'], 
217
                          sorted(tvi.file_revisions.keys()))
0.8.13 by John Arbash Meinel
Including file-revisions fields, updated test suite.
218
        self.assertEqual('r4', tvi.file_revisions['a'])
219
        self.assertEqual('unversioned', tvi.file_revisions['c'])
220
        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
221
0.8.1 by John Arbash Meinel
Creating a plugin to ease generating version information from a tree.
222