~jayvdb/testscenarios/0.4

« back to all changes in this revision

Viewing changes to lib/testscenarios/scenarios.py

  • Committer: Martin Pool
  • Date: 2010-10-12 04:50:57 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: mbp@sourcefrog.net-20101012045057-9hzwooq8tj8ckjse
Add multiply_scenarios

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
    'load_tests_apply_scenarios',
23
23
    ]
24
24
 
 
25
 
 
26
from itertools import (
 
27
    chain,
 
28
    product,
 
29
    )
25
30
import unittest
26
31
 
27
32
from testtools.testcase import clone_test_with_new_id
104
109
    result = loader.suiteClass()
105
110
    result.addTests(generate_scenarios(standard_tests))
106
111
    return result
 
112
 
 
113
 
 
114
def multiply_scenarios(*scenarios):
 
115
    """Multiply two or more iterables of scenarios.
 
116
 
 
117
    It is safe to pass scenario generators or iterators.
 
118
 
 
119
    :returns: A list of compound scenarios: the cross-product of all 
 
120
        scenarios, with the names concatenated and the parameters
 
121
        merged together.
 
122
    """
 
123
    r = []
 
124
    scenario_lists = map(list, scenarios)
 
125
    products = product(*scenario_lists)
 
126
    for combo in products:
 
127
        names, params = zip(*combo)
 
128
        for p in params:
 
129
            d.update(p.iteritems())
 
130
        r.append((','.join(names), d))
 
131
    return r