~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/scenarios.py

merge merge tweaks from aaron, which includes latest .dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2010 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
 
 
18
 
"""Generate multiple variations in different scenarios.
19
 
 
20
 
For a class whose tests should be repeated in varying scenarios, set a
21
 
`scenarios` member to a list of scenarios where it should be repeated.
22
 
 
23
 
This is similar to the interface provided by
24
 
<http://launchpad.net/testscenarios/>.
25
 
"""
26
 
 
27
 
 
28
 
from bzrlib.tests import (
29
 
    iter_suite_tests,
30
 
    multiply_scenarios,
31
 
    multiply_tests,
32
 
    )
33
 
 
34
 
 
35
 
def load_tests_apply_scenarios(standard_tests, module, loader):
36
 
    """Multiply tests depending on their 'scenarios' attribute.
37
 
 
38
 
    This can be assigned to 'load_tests' in any test module to make this
39
 
    automatically work across tests in the module.
40
 
    """
41
 
    result = loader.suiteClass()
42
 
    multiply_tests_by_their_scenarios(standard_tests, result)
43
 
    return result
44
 
 
45
 
 
46
 
def multiply_tests_by_their_scenarios(some_tests, into_suite):
47
 
    """Multiply the tests in the given suite by their declared scenarios.
48
 
 
49
 
    Each test must have a 'scenarios' attribute which is a list of 
50
 
    (name, params) pairs.
51
 
 
52
 
    :param some_tests: TestSuite or Test.
53
 
    :param into_suite: A TestSuite into which the resulting tests will be
54
 
        inserted.
55
 
    """
56
 
    for test in iter_suite_tests(some_tests):
57
 
        scenarios = getattr(test, 'scenarios', None)
58
 
        if scenarios is None:
59
 
            into_suite.addTest(test)
60
 
        else:
61
 
            multiply_tests(test, test.scenarios, into_suite)