5452.4.3
by John Arbash Meinel
Merge bzr.dev to resolve bzr-2.3.txt (aka NEWS) |
1 |
# Copyright (C) 2010 Canonical Ltd
|
5462.3.4
by Martin Pool
Add unite tests for variations |
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 |
||
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
17 |
|
18 |
"""Tests for generating multiple tests for scenarios."""
|
|
19 |
||
5462.3.4
by Martin Pool
Add unite tests for variations |
20 |
from bzrlib.tests import ( |
21 |
TestCase, |
|
22 |
TestLoader, |
|
23 |
iter_suite_tests, |
|
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
24 |
multiply_tests, |
5462.3.4
by Martin Pool
Add unite tests for variations |
25 |
)
|
26 |
||
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
27 |
from bzrlib.tests.scenarios import ( |
5462.3.21
by Martin Pool
Rename to load_tests_apply_scenarios |
28 |
load_tests_apply_scenarios, |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
29 |
multiply_scenarios, |
30 |
multiply_tests_by_their_scenarios, |
|
5462.3.4
by Martin Pool
Add unite tests for variations |
31 |
)
|
32 |
||
33 |
||
5462.3.8
by Martin Pool
Split out reusable load_tests_from_their_variations |
34 |
# There aren't any actually parameterized tests here, but this exists as a
|
35 |
# demonstration; so that you can interactively observe them being multiplied;
|
|
36 |
# and so that we check everything hooks up properly.
|
|
5462.3.21
by Martin Pool
Rename to load_tests_apply_scenarios |
37 |
load_tests = load_tests_apply_scenarios |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
38 |
|
39 |
||
40 |
def vary_by_color(): |
|
41 |
"""Very simple static variation example"""
|
|
42 |
for color in ['red', 'green', 'blue']: |
|
43 |
yield (color, {'color': color}) |
|
44 |
||
45 |
||
46 |
def vary_named_attribute(attr_name): |
|
47 |
"""More sophisticated: vary a named parameter"""
|
|
48 |
yield ('a', {attr_name: 'a'}) |
|
49 |
yield ('b', {attr_name: 'b'}) |
|
5462.3.4
by Martin Pool
Add unite tests for variations |
50 |
|
51 |
||
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
52 |
def get_generated_test_attributes(suite, attr_name): |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
53 |
"""Return the `attr_name` attribute from all tests in the suite"""
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
54 |
return sorted([ |
55 |
getattr(t, attr_name) for t in iter_suite_tests(suite)]) |
|
56 |
||
57 |
||
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
58 |
class TestTestScenarios(TestCase): |
5462.3.4
by Martin Pool
Add unite tests for variations |
59 |
|
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
60 |
def test_multiply_tests(self): |
5462.3.4
by Martin Pool
Add unite tests for variations |
61 |
loader = TestLoader() |
62 |
suite = loader.suiteClass() |
|
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
63 |
multiply_tests( |
5462.3.4
by Martin Pool
Add unite tests for variations |
64 |
self, |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
65 |
vary_by_color(), |
5462.3.4
by Martin Pool
Add unite tests for variations |
66 |
suite) |
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
67 |
self.assertEquals( |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
68 |
['blue', 'green', 'red'], |
69 |
get_generated_test_attributes(suite, 'color')) |
|
70 |
||
71 |
def test_multiply_scenarios_from_generators(self): |
|
72 |
"""It's safe to multiply scenarios that come from generators"""
|
|
73 |
s = multiply_scenarios( |
|
74 |
vary_named_attribute('one'), |
|
75 |
vary_named_attribute('two'), |
|
76 |
)
|
|
77 |
self.assertEquals( |
|
78 |
2*2, |
|
79 |
len(s), |
|
80 |
s) |
|
81 |
||
82 |
def test_multiply_tests_by_their_scenarios(self): |
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
83 |
loader = TestLoader() |
84 |
suite = loader.suiteClass() |
|
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
85 |
test_instance = PretendVaryingTest('test_nothing') |
86 |
multiply_tests_by_their_scenarios( |
|
87 |
test_instance, |
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
88 |
suite) |
89 |
self.assertEquals( |
|
5462.3.10
by Martin Pool
Code style cleanups |
90 |
['a', 'a', 'b', 'b'], |
91 |
get_generated_test_attributes(suite, 'value')) |
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
92 |
|
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
93 |
def test_multiply_tests_no_scenarios(self): |
94 |
"""Tests with no scenarios attribute aren't multiplied"""
|
|
5462.3.6
by Martin Pool
Test multiple varations, and no variations |
95 |
suite = TestLoader().suiteClass() |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
96 |
multiply_tests_by_their_scenarios(self, |
5462.3.6
by Martin Pool
Test multiple varations, and no variations |
97 |
suite) |
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
98 |
self.assertLength(1, list(iter_suite_tests(suite))) |
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
99 |
|
5462.3.7
by Martin Pool
Add demonstration load_tests to test_variations |
100 |
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
101 |
class PretendVaryingTest(TestCase): |
102 |
||
5462.3.14
by Martin Pool
Unify varations with scenario protocol |
103 |
scenarios = multiply_scenarios( |
104 |
vary_named_attribute('value'), |
|
105 |
vary_named_attribute('other'), |
|
106 |
)
|
|
5462.3.5
by Martin Pool
Add multiply_tests_by_their_variations and test |
107 |
|
108 |
def test_nothing(self): |
|
109 |
"""This test exists just so it can be multiplied"""
|
|
110 |
pass
|