Rev 3653: selftest --starting-with now accepts multiple values. in file:///v/home/vila/src/bzr/experimental/faster-selftest/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Sun Aug 31 11:46:57 BST 2008
At file:///v/home/vila/src/bzr/experimental/faster-selftest/
------------------------------------------------------------
revno: 3653
revision-id: v.ladeuil+lp at free.fr-20080831104654-15d4mljmyyuakwx1
parent: v.ladeuil+lp at free.fr-20080830083535-8qdpr48ehdxp7cjh
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest-multiple-start
timestamp: Sun 2008-08-31 12:46:54 +0200
message:
selftest --starting-with now accepts multiple values.
* bzrlib/tests/test_selftest.py:
(TestSelftestFiltering.test_condition_id_startswith)
(TestSelftestFiltering.test_filter_suite_by_id_startswith): Updated.
* bzrlib/tests/blackbox/test_selftest.py:
(TestSelftestStartingWith): Add test for multiple arguments.
* bzrlib/tests/__init__.py:
(condition_id_startswith, filter_suite_by_id_startswith): Now
accepts a list of strings to start with.
(test_suite): 'starting_with' is now a list.
* bzrlib/builtins.py:
(cmd_selftest): Allows multiple --starting-with option.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS 2008-08-29 16:09:36 +0000
+++ b/NEWS 2008-08-31 10:46:54 +0000
@@ -76,6 +76,9 @@
prefixes so that one can say ``bzr selftest -s bp.loom`` instead of
``bzr selftest -s bzrlib.plugins.loom``. (Vincent Ladeuil)
+ * ``selftest``'s ``--starting-with`` option now accepts multiple values.
+ (Vincent Ladeuil)
+
INTERNALS:
* A new plugin interface, ``bzrlib.log.log_adapters``, has been added.
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2008-08-23 18:54:47 +0000
+++ b/bzrlib/builtins.py 2008-08-31 10:46:54 +0000
@@ -2661,9 +2661,10 @@
help='Load a test id list from a text file.'),
ListOption('debugflag', type=str, short_name='E',
help='Turn on a selftest debug flag.'),
- Option('starting-with', type=str, argname='TESTID',
- short_name='s',
- help='Load only the tests starting with TESTID.'),
+ ListOption('starting-with', type=str, argname='TESTID',
+ param_name='starting_with', short_name='s',
+ help=
+ 'Load only the tests starting with TESTID.'),
]
encoding_type = 'replace'
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py 2008-08-30 08:35:35 +0000
+++ b/bzrlib/tests/__init__.py 2008-08-31 10:46:54 +0000
@@ -2303,15 +2303,18 @@
return condition
-def condition_id_startswith(start):
+def condition_id_startswith(starts):
"""Create a condition filter verifying that test's id starts with a string.
- :param start: A string.
- :return: A callable that returns True if the test's id starts with the
- given string.
+ :param starts: A list of string.
+ :return: A callable that returns True if the test's id starts with one of
+ the given strings.
"""
def condition(test):
- return test.id().startswith(start)
+ for start in starts:
+ if test.id().startswith(start):
+ return True
+ return False
return condition
@@ -2339,7 +2342,7 @@
test case which should be included in the result.
:return: A suite which contains the tests found in suite that pass
condition.
- """
+ """
result = []
for test in iter_suite_tests(suite):
if condition(test):
@@ -2353,7 +2356,7 @@
:param suite: the source suite
:param pattern: pattern that names must match
:returns: the newly created suite
- """
+ """
condition = condition_id_re(pattern)
result_suite = filter_suite_by_condition(suite, condition)
return result_suite
@@ -2375,7 +2378,7 @@
"""Create a test suite by filtering another one.
:param suite: The source suite.
- :param start: A string the test id must start with.
+ :param start: A list of string the test id must start with one of.
:returns: the newly created suite
"""
condition = condition_id_startswith(start)
@@ -2428,7 +2431,7 @@
suite matching the condition, and the second contains the remainder
from suite. The order within each output suite is the same as it was in
suite.
- """
+ """
matched = []
did_not_match = []
for test in iter_suite_tests(suite):
@@ -2450,7 +2453,7 @@
suite matching pattern, and the second contains the remainder from
suite. The order within each output suite is the same as it was in
suite.
- """
+ """
return split_suite_by_condition(suite, condition_id_re(pattern))
@@ -2891,17 +2894,21 @@
loader = TestUtil.TestLoader()
- if starting_with is not None:
- starting_with = test_prefix_alias_registry.resolve_alias(starting_with)
+ if starting_with:
+ starting_with = [test_prefix_alias_registry.resolve_alias(start)
+ for start in starting_with]
# We take precedence over keep_only because *at loading time* using
# both options means we will load less tests for the same final result.
def interesting_module(name):
- return (
- # Either the module name starts with the specified string
- name.startswith(starting_with)
- # or it may contain tests starting with the specified string
- or starting_with.startswith(name)
- )
+ for start in starting_with:
+ if (
+ # Either the module name starts with the specified string
+ name.startswith(start)
+ # or it may contain tests starting with the specified string
+ or start.startswith(name)
+ ):
+ return True
+ return False
loader = TestUtil.FilteredByModuleTestLoader(interesting_module)
elif keep_only is not None:
@@ -2967,7 +2974,7 @@
reload(sys)
sys.setdefaultencoding(default_encoding)
- if starting_with is not None:
+ if starting_with:
suite = filter_suite_by_id_startswith(suite, starting_with)
if keep_only is not None:
@@ -2976,7 +2983,7 @@
suite = filter_suite_by_id_list(suite, id_filter)
# Do some sanity checks on the id_list filtering
not_found, duplicates = suite_matches_id_list(suite, keep_only)
- if starting_with is not None:
+ if starting_with:
# The tester has used both keep_only and starting_with, so he is
# already aware that some tests are excluded from the list, there
# is no need to tell him which.
=== modified file 'bzrlib/tests/blackbox/test_selftest.py'
--- a/bzrlib/tests/blackbox/test_selftest.py 2008-07-19 15:00:27 +0000
+++ b/bzrlib/tests/blackbox/test_selftest.py 2008-08-31 10:46:54 +0000
@@ -572,9 +572,18 @@
class TestSelftestStartingWith(TestCase):
- def test_starting_with(self):
+ def test_starting_with_single_argument(self):
out, err = self.run_bzr(
['selftest', '--starting-with', self.id(), '--list'])
self.assertContainsRe(out, "Listed 1 test in")
self.assertContainsRe(out, self.id())
+ def test_starting_with_multiple_argument(self):
+ out, err = self.run_bzr(
+ ['selftest',
+ '--starting-with', self.id(),
+ '--starting-with', 'bzrlib.tests.test_sampler',
+ '--list'])
+ self.assertContainsRe(out, "Listed 2 tests in")
+ self.assertContainsRe(out, self.id())
+ self.assertContainsRe(out, 'bzrlib.tests.test_sampler')
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2008-08-29 16:09:36 +0000
+++ b/bzrlib/tests/test_selftest.py 2008-08-31 10:46:54 +0000
@@ -1784,13 +1784,14 @@
def test_condition_id_startswith(self):
klass = 'bzrlib.tests.test_selftest.TestSelftestFiltering.'
- start = klass + 'test_condition_id_starts'
- test_names = [klass + 'test_condition_id_startswith']
+ start1 = klass + 'test_condition_id_starts'
+ start2 = klass + 'test_condition_id_in'
+ test_names = [ klass + 'test_condition_id_in_list',
+ klass + 'test_condition_id_startswith',
+ ]
filtered_suite = filter_suite_by_condition(
- self.suite, tests.condition_id_startswith(start))
- my_pattern = 'TestSelftestFiltering.*test_condition_id_startswith'
- re_filtered = filter_suite_by_re(self.suite, my_pattern)
- self.assertEqual(_test_ids(re_filtered), _test_ids(filtered_suite))
+ self.suite, tests.condition_id_startswith([start1, start2]))
+ self.assertEqual(test_names, _test_ids(filtered_suite))
def test_condition_isinstance(self):
filtered_suite = filter_suite_by_condition(self.suite,
@@ -1849,16 +1850,19 @@
def test_filter_suite_by_id_startswith(self):
# By design this test may fail if another test is added whose name also
- # begins with the start value used.
+ # begins with one of the start value used.
klass = 'bzrlib.tests.test_selftest.TestSelftestFiltering.'
- start = klass + 'test_filter_suite_by_id_starts'
- test_list = [klass + 'test_filter_suite_by_id_startswith']
- filtered_suite = tests.filter_suite_by_id_startswith(self.suite, start)
- filtered_names = _test_ids(filtered_suite)
+ start1 = klass + 'test_filter_suite_by_id_starts'
+ start2 = klass + 'test_filter_suite_by_id_li'
+ test_list = [klass + 'test_filter_suite_by_id_list',
+ klass + 'test_filter_suite_by_id_startswith',
+ ]
+ filtered_suite = tests.filter_suite_by_id_startswith(
+ self.suite, [start1, start2])
self.assertEqual(
- filtered_names,
- ['bzrlib.tests.test_selftest.'
- 'TestSelftestFiltering.test_filter_suite_by_id_startswith'])
+ test_list,
+ _test_ids(filtered_suite),
+ )
def test_preserve_input(self):
# NB: Surely this is something in the stdlib to do this?
More information about the bazaar-commits
mailing list