/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/blackbox/test_version.py

  • Committer: Jelmer Vernooij
  • Date: 2019-05-29 03:22:34 UTC
  • mfrom: (7303 work)
  • mto: This revision was merged to the branch mainline in revision 7306.
  • Revision ID: jelmer@jelmer.uk-20190529032234-mt3fuws8gq03tapi
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007-2012, 2016 Canonical Ltd
 
2
#
 
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.
 
7
#
 
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.
 
12
#
 
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
 
17
"""Black-box tests for brz version."""
 
18
 
 
19
import os
 
20
import sys
 
21
 
 
22
import breezy
 
23
from breezy import osutils, trace
 
24
from breezy.sixish import PY3
 
25
from breezy.tests import (
 
26
    probe_unicode_in_user_encoding,
 
27
    TestCase,
 
28
    TestCaseInTempDir,
 
29
    TestSkipped,
 
30
    )
 
31
 
 
32
 
 
33
class TestVersion(TestCase):
 
34
 
 
35
    def test_main_version(self):
 
36
        """Check output from version command and master option is reasonable"""
 
37
        # output is intentionally passed through to stdout so that we
 
38
        # can see the version being tested
 
39
        self.permit_source_tree_branch_repo()
 
40
        output = self.run_bzr('version')[0]
 
41
        self.log('brz version output:')
 
42
        self.log(output)
 
43
        self.assertTrue(output.startswith('Breezy (brz) '))
 
44
        self.assertNotEqual(output.index('Canonical'), -1)
 
45
        # make sure --version is consistent
 
46
        tmp_output = self.run_bzr('--version')[0]
 
47
        self.assertEqual(output, tmp_output)
 
48
 
 
49
    def test_version(self):
 
50
        self.permit_source_tree_branch_repo()
 
51
        out = self.run_bzr("version")[0]
 
52
        self.assertTrue(len(out) > 0)
 
53
        self.assertEqualDiff(out.splitlines()[0],
 
54
                             "Breezy (brz) %s" % breezy.__version__)
 
55
        self.assertContainsRe(out, r"(?m)^  Python interpreter:")
 
56
        self.assertContainsRe(out, r"(?m)^  Python standard library:")
 
57
        self.assertContainsRe(out, r"(?m)^  breezy:")
 
58
        self.assertContainsRe(out, r"(?m)^  Breezy configuration:")
 
59
        self.assertContainsRe(out, r'(?m)^  Breezy log file:.*\.brz\.log')
 
60
 
 
61
    def test_version_short(self):
 
62
        self.permit_source_tree_branch_repo()
 
63
        out = self.run_bzr(["version", "--short"])[0]
 
64
        self.assertEqualDiff(out, breezy.version_string + '\n')
 
65
 
 
66
 
 
67
class TestVersionUnicodeOutput(TestCaseInTempDir):
 
68
 
 
69
    def _check(self, args):
 
70
        self.permit_source_tree_branch_repo()
 
71
        # Even though trace._brz_log_filename variable
 
72
        # is used only to keep actual log filename
 
73
        # and changing this variable in selftest
 
74
        # don't change main .brz.log location,
 
75
        # and therefore pretty safe,
 
76
        # but we run these tests in separate temp dir
 
77
        # with relative unicoded path
 
78
        old_trace_file = trace._brz_log_filename
 
79
        trace._brz_log_filename = u'\u1234/.brz.log'
 
80
        try:
 
81
            out = self.run_bzr(args)[0]
 
82
        finally:
 
83
            trace._brz_log_filename = old_trace_file
 
84
        self.assertTrue(len(out) > 0)
 
85
        self.assertContainsRe(out, r'(?m)^  Breezy log file:.*brz\.log')
 
86
 
 
87
    def test_command(self):
 
88
        self._check("version")
 
89
 
 
90
    def test_flag(self):
 
91
        self._check("--version")
 
92
 
 
93
    def test_unicode_bzr_home(self):
 
94
        uni_val, str_val = probe_unicode_in_user_encoding()
 
95
        if uni_val is None:
 
96
            raise TestSkipped('Cannot find a unicode character that works in'
 
97
                              ' encoding %s' % (osutils.get_user_encoding(),))
 
98
 
 
99
        if PY3:
 
100
            self.overrideEnv('BRZ_HOME', uni_val)
 
101
        else:
 
102
            self.overrideEnv('BRZ_HOME', str_val)
 
103
        self.permit_source_tree_branch_repo()
 
104
        out = self.run_bzr_raw("version")[0]
 
105
        self.assertTrue(len(out) > 0)
 
106
        self.assertContainsRe(out, br"(?m)^  Breezy configuration: " + str_val)
 
107
 
 
108
 
 
109
class TestVersionBzrLogLocation(TestCaseInTempDir):
 
110
 
 
111
    def test_simple(self):
 
112
        brz_log = 'my.brz.log'
 
113
        self.overrideEnv('BRZ_LOG', brz_log)
 
114
        default_log = os.path.join(os.environ['BRZ_HOME'], '.brz.log')
 
115
        self.assertPathDoesNotExist([default_log, brz_log])
 
116
        out = self.run_bzr_subprocess('version')[0]
 
117
        self.assertTrue(len(out) > 0)
 
118
        self.assertContainsRe(
 
119
            out, br"(?m)^  Breezy log file: " + brz_log.encode('ascii'))
 
120
        self.assertPathDoesNotExist(default_log)
 
121
        self.assertPathExists(brz_log)
 
122
 
 
123
    def test_dev_null(self):
 
124
        # This test uses a subprocess to cause the log opening logic to
 
125
        # execute. It would be better to just execute that logic directly.
 
126
        if sys.platform == 'win32':
 
127
            brz_log = 'NUL'
 
128
        else:
 
129
            brz_log = '/dev/null'
 
130
        self.overrideEnv('BRZ_LOG', brz_log)
 
131
        default_log = os.path.join(os.environ['BRZ_HOME'], '.brz.log')
 
132
        self.assertPathDoesNotExist(default_log)
 
133
        out = self.run_bzr_subprocess('version')[0]
 
134
        self.assertTrue(len(out) > 0)
 
135
        self.assertContainsRe(
 
136
            out, br"(?m)^  Breezy log file: " + brz_log.encode('ascii'))
 
137
        self.assertPathDoesNotExist(default_log)
 
138
 
 
139
    def test_unicode_brz_log(self):
 
140
        uni_val = u"\xa7"
 
141
        enc = osutils.get_user_encoding()
 
142
        try:
 
143
            str_val = uni_val.encode(enc)
 
144
        except UnicodeEncodeError:
 
145
            self.skipTest(
 
146
                "Test string %r unrepresentable in user encoding %s" % (
 
147
                    uni_val, enc))
 
148
        self.overrideEnv('BRZ_HOME', self.test_base_dir)
 
149
        brz_log = os.path.join(self.test_base_dir, uni_val)
 
150
        if PY3:
 
151
            self.overrideEnv("BRZ_LOG", brz_log)
 
152
        else:
 
153
            self.overrideEnv("BRZ_LOG", brz_log.encode(enc))
 
154
        out, err = self.run_bzr_subprocess("version")
 
155
        uni_out = out.decode(enc)
 
156
        self.assertContainsRe(uni_out, u"(?m)^  Breezy log file: .*/\xa7$")