1332
1324
if message is None:
1333
1325
message = "texts not equal:\n"
1334
if a + ('\n' if isinstance(a, text_type) else b'\n') == b:
1326
if a + ('\n' if isinstance(a, str) else b'\n') == b:
1335
1327
message = 'first string is missing a final newline.\n'
1336
if a == b + ('\n' if isinstance(b, text_type) else b'\n'):
1328
if a == b + ('\n' if isinstance(b, str) else b'\n'):
1337
1329
message = 'second string is missing a final newline.\n'
1338
1330
raise AssertionError(message
1339
1331
+ self._ndiff_strings(
1340
a if isinstance(a, text_type) else a.decode(),
1341
b if isinstance(b, text_type) else b.decode()))
1332
a if isinstance(a, str) else a.decode(),
1333
b if isinstance(b, str) else b.decode()))
1343
1335
def assertEqualMode(self, mode, mode_test):
1344
1336
self.assertEqual(mode, mode_test,
1556
1548
def assertPathExists(self, path):
1557
1549
"""Fail unless path or paths, which may be abs or relative, exist."""
1558
1550
# TODO(jelmer): Clean this up for pad.lv/1696545
1559
if not isinstance(path, (bytes, str, text_type)):
1551
if not isinstance(path, (bytes, str)):
1561
1553
self.assertPathExists(p)
1566
1558
def assertPathDoesNotExist(self, path):
1567
1559
"""Fail if path or paths, which may be abs or relative, exist."""
1568
if not isinstance(path, (str, text_type)):
1560
if not isinstance(path, (str, str)):
1570
1562
self.assertPathDoesNotExist(p)
1941
1933
self.log('run brz: %r', args)
1944
self._last_cmd_stdout = stdout
1945
self._last_cmd_stderr = stderr
1947
self._last_cmd_stdout = codecs.getwriter(encoding)(stdout)
1948
self._last_cmd_stderr = codecs.getwriter(encoding)(stderr)
1935
self._last_cmd_stdout = stdout
1936
self._last_cmd_stderr = stderr
1950
1938
old_ui_factory = ui.ui_factory
1951
1939
ui.ui_factory = ui_testing.TestUIFactory(
2005
1993
:keyword error_regexes: A list of expected error messages. If
2006
1994
specified they must be seen in the error output of the command.
2008
if isinstance(args, string_types):
1996
if isinstance(args, str):
2009
1997
args = shlex.split(args)
2011
1999
if encoding is None:
2012
2000
encoding = osutils.get_user_encoding()
2014
if sys.version_info[0] == 2:
2015
wrapped_stdout = stdout = ui_testing.BytesIOWithEncoding()
2016
wrapped_stderr = stderr = ui_testing.BytesIOWithEncoding()
2017
stdout.encoding = stderr.encoding = encoding
2019
# FIXME: don't call into logging here
2020
handler = trace.EncodedStreamHandler(
2021
stderr, errors="replace")
2025
wrapped_stdout = TextIOWrapper(stdout, encoding)
2026
wrapped_stderr = TextIOWrapper(stderr, encoding)
2027
handler = logging.StreamHandler(wrapped_stderr)
2004
wrapped_stdout = TextIOWrapper(stdout, encoding)
2005
wrapped_stderr = TextIOWrapper(stderr, encoding)
2006
handler = logging.StreamHandler(wrapped_stderr)
2028
2007
handler.setLevel(logging.INFO)
2030
2009
logger = logging.getLogger('')
2088
2066
:keyword error_regexes: A list of expected error messages. If
2089
2067
specified they must be seen in the error output of the command.
2091
if isinstance(args, string_types):
2069
if isinstance(args, str):
2092
2070
args = shlex.split(args)
2094
2072
if encoding is None:
2095
2073
encoding = osutils.get_user_encoding()
2097
if sys.version_info[0] == 2:
2098
stdout = ui_testing.BytesIOWithEncoding()
2099
stderr = ui_testing.BytesIOWithEncoding()
2100
stdout.encoding = stderr.encoding = encoding
2101
# FIXME: don't call into logging here
2102
handler = trace.EncodedStreamHandler(
2103
stderr, errors="replace")
2105
stdout = ui_testing.StringIOWithEncoding()
2106
stderr = ui_testing.StringIOWithEncoding()
2107
stdout.encoding = stderr.encoding = encoding
2108
handler = logging.StreamHandler(stream=stderr)
2075
stdout = ui_testing.StringIOWithEncoding()
2076
stderr = ui_testing.StringIOWithEncoding()
2077
stdout.encoding = stderr.encoding = encoding
2078
handler = logging.StreamHandler(stream=stderr)
2109
2079
handler.setLevel(logging.INFO)
2111
2081
logger = logging.getLogger('')
2819
2783
def overrideEnvironmentForTesting(self):
2820
2784
test_home_dir = self.test_home_dir
2821
if not PY3 and isinstance(test_home_dir, text_type):
2822
test_home_dir = test_home_dir.encode(sys.getfilesystemencoding())
2823
2785
self.overrideEnv('HOME', test_home_dir)
2824
2786
self.overrideEnv('BRZ_HOME', test_home_dir)
2825
2787
self.overrideEnv('GNUPGHOME', os.path.join(test_home_dir, '.gnupg'))
4000
3962
def _test_suite_testmod_names():
4001
3963
"""Return the standard list of test module names to test."""
3965
'breezy.bzr.tests.test_dirstate',
3966
'breezy.bzr.tests.per_bzrdir',
3967
'breezy.bzr.tests.per_inventory',
3968
'breezy.bzr.tests.per_pack_repository',
3969
'breezy.bzr.tests.per_repository_chk',
3970
'breezy.bzr.tests.per_repository_vf',
3971
'breezy.bzr.tests.per_versionedfile',
3972
'breezy.bzr.tests.test_groupcompress',
3973
'breezy.bzr.tests.test_btree_index',
3974
'breezy.bzr.tests.test_chk_map',
3975
'breezy.bzr.tests.test_chk_serializer',
3976
'breezy.bzr.tests.test_generate_ids',
3977
'breezy.bzr.tests.test_index',
3978
'breezy.bzr.tests.test_inv',
3979
'breezy.bzr.tests.test_inventory_delta',
3980
'breezy.bzr.tests.test_knit',
3981
'breezy.bzr.tests.test_matchers',
3982
'breezy.bzr.tests.test_pack',
3983
'breezy.bzr.tests.test_remote',
3984
'breezy.bzr.tests.test_repository',
3985
'breezy.bzr.tests.test_smart',
3986
'breezy.bzr.tests.test_smart_request',
3987
'breezy.bzr.tests.test_smart_signals',
3988
'breezy.bzr.tests.test_smart_transport',
3989
'breezy.bzr.tests.test_versionedfile',
3990
'breezy.bzr.tests.test_serializer',
3991
'breezy.bzr.tests.test_tag',
3992
'breezy.bzr.tests.test_testament',
3993
'breezy.bzr.tests.test_weave',
3994
'breezy.bzr.tests.test_workingtree_4',
3995
'breezy.bzr.tests.test_xml',
3996
'breezy.bzr.tests.test__btree_serializer',
3997
'breezy.bzr.tests.test__chk_map',
3998
'breezy.bzr.tests.test__dirstate_helpers',
3999
'breezy.bzr.tests.test__groupcompress',
4003
4000
'breezy.git.tests.test_blackbox',
4004
4001
'breezy.git.tests.test_builder',
4005
4002
'breezy.git.tests.test_branch',
4025
4022
'breezy.tests.blackbox',
4026
4023
'breezy.tests.commands',
4027
4024
'breezy.tests.per_branch',
4028
'breezy.tests.per_bzrdir',
4029
4025
'breezy.tests.per_controldir',
4030
4026
'breezy.tests.per_controldir_colo',
4031
4027
'breezy.tests.per_foreign_vcs',
4032
4028
'breezy.tests.per_interrepository',
4033
4029
'breezy.tests.per_intertree',
4034
'breezy.tests.per_inventory',
4035
4030
'breezy.tests.per_interbranch',
4036
4031
'breezy.tests.per_lock',
4037
4032
'breezy.tests.per_merger',
4038
4033
'breezy.tests.per_transport',
4039
4034
'breezy.tests.per_tree',
4040
'breezy.tests.per_pack_repository',
4041
4035
'breezy.tests.per_repository',
4042
'breezy.tests.per_repository_chk',
4043
4036
'breezy.tests.per_repository_reference',
4044
'breezy.tests.per_repository_vf',
4045
4037
'breezy.tests.per_uifactory',
4046
'breezy.tests.per_versionedfile',
4047
4038
'breezy.tests.per_workingtree',
4048
4039
'breezy.tests.test__annotator',
4049
4040
'breezy.tests.test__bencode',
4050
'breezy.tests.test__btree_serializer',
4051
'breezy.tests.test__chk_map',
4052
'breezy.tests.test__dirstate_helpers',
4053
'breezy.tests.test__groupcompress',
4054
4041
'breezy.tests.test__known_graph',
4055
'breezy.tests.test__rio',
4056
4042
'breezy.tests.test__simple_set',
4057
4043
'breezy.tests.test__static_tuple',
4058
4044
'breezy.tests.test__walkdirs_win32',
4064
4050
'breezy.tests.test_bisect_multi',
4065
4051
'breezy.tests.test_branch',
4066
4052
'breezy.tests.test_branchbuilder',
4067
'breezy.tests.test_btree_index',
4068
4053
'breezy.tests.test_bugtracker',
4069
4054
'breezy.tests.test_bundle',
4070
4055
'breezy.tests.test_bzrdir',
4071
4056
'breezy.tests.test__chunks_to_lines',
4072
4057
'breezy.tests.test_cache_utf8',
4073
'breezy.tests.test_chk_map',
4074
'breezy.tests.test_chk_serializer',
4075
4058
'breezy.tests.test_chunk_writer',
4076
4059
'breezy.tests.test_clean_tree',
4077
'breezy.tests.test_cleanup',
4078
4060
'breezy.tests.test_cmdline',
4079
4061
'breezy.tests.test_commands',
4080
4062
'breezy.tests.test_commit',
4090
4072
'breezy.tests.test_debug',
4091
4073
'breezy.tests.test_diff',
4092
4074
'breezy.tests.test_directory_service',
4093
'breezy.tests.test_dirstate',
4094
4075
'breezy.tests.test_email_message',
4095
4076
'breezy.tests.test_eol_filters',
4096
4077
'breezy.tests.test_errors',
4107
4088
'breezy.tests.test_filter_tree',
4108
4089
'breezy.tests.test_foreign',
4109
4090
'breezy.tests.test_generate_docs',
4110
'breezy.tests.test_generate_ids',
4111
4091
'breezy.tests.test_globbing',
4112
4092
'breezy.tests.test_gpg',
4113
4093
'breezy.tests.test_graph',
4114
4094
'breezy.tests.test_grep',
4115
'breezy.tests.test_groupcompress',
4116
4095
'breezy.tests.test_hashcache',
4117
4096
'breezy.tests.test_help',
4118
4097
'breezy.tests.test_hooks',
4123
4102
'breezy.tests.test_i18n',
4124
4103
'breezy.tests.test_identitymap',
4125
4104
'breezy.tests.test_ignores',
4126
'breezy.tests.test_index',
4127
4105
'breezy.tests.test_import_tariff',
4128
4106
'breezy.tests.test_info',
4129
'breezy.tests.test_inv',
4130
'breezy.tests.test_inventory_delta',
4131
'breezy.tests.test_knit',
4132
4107
'breezy.tests.test_lazy_import',
4133
4108
'breezy.tests.test_lazy_regex',
4134
4109
'breezy.tests.test_library_state',
4157
4132
'breezy.tests.test_options',
4158
4133
'breezy.tests.test_osutils',
4159
4134
'breezy.tests.test_osutils_encodings',
4160
'breezy.tests.test_pack',
4161
4135
'breezy.tests.test_patch',
4162
4136
'breezy.tests.test_patches',
4163
4137
'breezy.tests.test_permissions',
4169
4143
'breezy.tests.test_reconcile',
4170
4144
'breezy.tests.test_reconfigure',
4171
4145
'breezy.tests.test_registry',
4172
'breezy.tests.test_remote',
4173
4146
'breezy.tests.test_rename_map',
4174
'breezy.tests.test_repository',
4175
4147
'breezy.tests.test_revert',
4176
4148
'breezy.tests.test_revision',
4177
4149
'breezy.tests.test_revisionspec',
4178
4150
'breezy.tests.test_revisiontree',
4179
4151
'breezy.tests.test_rio',
4152
'breezy.tests.test__rio',
4180
4153
'breezy.tests.test_rules',
4181
4154
'breezy.tests.test_url_policy_open',
4182
4155
'breezy.tests.test_sampler',
4183
4156
'breezy.tests.test_scenarios',
4184
4157
'breezy.tests.test_script',
4185
4158
'breezy.tests.test_selftest',
4186
'breezy.tests.test_serializer',
4187
4159
'breezy.tests.test_setup',
4188
4160
'breezy.tests.test_sftp_transport',
4189
4161
'breezy.tests.test_shelf',
4190
4162
'breezy.tests.test_shelf_ui',
4191
'breezy.tests.test_smart',
4192
4163
'breezy.tests.test_smart_add',
4193
'breezy.tests.test_smart_request',
4194
'breezy.tests.test_smart_signals',
4195
'breezy.tests.test_smart_transport',
4196
4164
'breezy.tests.test_smtp_connection',
4197
4165
'breezy.tests.test_source',
4198
4166
'breezy.tests.test_ssh_transport',
4203
4171
'breezy.tests.test_symbol_versioning',
4204
4172
'breezy.tests.test_tag',
4205
4173
'breezy.tests.test_test_server',
4206
'breezy.tests.test_testament',
4207
4174
'breezy.tests.test_textfile',
4208
4175
'breezy.tests.test_textmerge',
4209
4176
'breezy.tests.test_cethread',
4227
4194
'breezy.tests.test_utextwrap',
4228
4195
'breezy.tests.test_version',
4229
4196
'breezy.tests.test_version_info',
4230
'breezy.tests.test_versionedfile',
4231
4197
'breezy.tests.test_vf_search',
4232
4198
'breezy.tests.test_views',
4233
'breezy.tests.test_weave',
4234
4199
'breezy.tests.test_whitebox',
4235
4200
'breezy.tests.test_win32utils',
4236
4201
'breezy.tests.test_workingtree',
4237
'breezy.tests.test_workingtree_4',
4238
4202
'breezy.tests.test_wsgi',
4239
'breezy.tests.test_xml',
4310
4273
# modules building their suite with loadTestsFromModuleNames
4311
4274
suite.addTest(loader.loadTestsFromModuleNames(_test_suite_testmod_names()))
4314
suite.addTest(loader.loadTestsFromModuleNames(['breezy.doc']))
4276
suite.addTest(loader.loadTestsFromModuleNames(['breezy.doc']))
4316
# It's pretty much impossible to write readable doctests that work on
4317
# both Python 2 and Python 3 because of their overreliance on
4318
# consistent repr() return values.
4319
# For now, just run doctests on Python 2 so we now they haven't broken.
4320
for mod in _test_suite_modules_to_doctest():
4321
if not interesting_module(mod):
4322
# No tests to keep here, move along
4325
# note that this really does mean "report only" -- doctest
4326
# still runs the rest of the examples
4327
doc_suite = IsolatedDocTestSuite(
4328
mod, optionflags=doctest.REPORT_ONLY_FIRST_FAILURE)
4329
except ValueError as e:
4330
print('**failed to get doctest for: %s\n%s' % (mod, e))
4332
if len(doc_suite._tests) == 0:
4333
raise errors.BzrError("no doctests found in %s" % (mod,))
4334
suite.addTest(doc_suite)
4278
for mod in _test_suite_modules_to_doctest():
4279
if not interesting_module(mod):
4280
# No tests to keep here, move along
4283
# note that this really does mean "report only" -- doctest
4284
# still runs the rest of the examples
4285
doc_suite = IsolatedDocTestSuite(
4286
mod, optionflags=doctest.REPORT_ONLY_FIRST_FAILURE)
4287
except ValueError as e:
4288
print('**failed to get doctest for: %s\n%s' % (mod, e))
4290
if len(doc_suite._tests) == 0:
4291
raise errors.BzrError("no doctests found in %s" % (mod,))
4292
suite.addTest(doc_suite)
4336
4294
default_encoding = sys.getdefaultencoding()
4337
4295
for name, plugin in _mod_plugin.plugins().items():
4526
4485
if feature.available():
4527
4486
scenarios.append(('C', {'module': feature.module}))
4529
# the compiled module isn't available, so we add a failing test
4530
4488
class FailWithoutFeature(TestCase):
4490
return ext_module_name + '.' + super(FailWithoutFeature, self).id()
4531
4491
def test_fail(self):
4532
4492
self.requireFeature(feature)
4493
# the compiled module isn't available, so we add a failing test
4533
4494
suite.addTest(loader.loadTestsFromTestCase(FailWithoutFeature))
4534
4495
result = multiply_tests(standard_tests, scenarios, suite)
4535
4496
return result, feature