@@ -142,7 +142,7 @@ def expand(self, template_dir: str, target_dir: str) -> None:
142
142
test_source .build_destination ()
143
143
144
144
145
- @dataclass (frozen = True )
145
+ @dataclass (frozen = True , eq = True )
146
146
class TestDimension :
147
147
"""Test dimension."""
148
148
name : str
@@ -172,25 +172,26 @@ class TestSuitePatchDimension:
172
172
* None : no patch is applied.
173
173
* first : the first element in a dimension sequence is retained. All others are discarded.
174
174
* last : the last element in a dimension sequence is retained. All others are discarded.
175
- * <substring > : elements the contain the given <substring> are retained. All others are discarded .
175
+ * <string > : set the dim value to <string> and ignore other values .
176
176
"""
177
177
name : Optional [str ]
178
178
expr : Optional [str ]
179
179
180
- def patch_dimensions (self , dims : List [TestDimension ]) -> List [TestDimension ]:
180
+ def patch_dimensions (self , test_name : str , dims : List [TestDimension ]) -> List [TestDimension ]:
181
181
""""Patch the given dimensions according to expr attribute."""
182
182
result = []
183
183
for dim in dims :
184
184
if not self .name or self .name == dim .name :
185
+ patched_values = dim .values
185
186
if self .expr == 'last' :
186
187
patched_values = [dim .values [- 1 ]]
187
188
elif self .expr == 'first' :
188
189
patched_values = [dim .values [0 ]]
189
- elif self .expr is None :
190
- patched_values = dim . values
191
- else :
192
- patched_values = [
193
- v for v in dim .values if v . find ( self . expr ) != - 1 ]
190
+ elif self .expr :
191
+ patched_values = [ self . expr ]
192
+
193
+ logging . debug (
194
+ f"Patching dimension [ { test_name } ].[ { dim .name } ] value [ { patched_values } ]" )
194
195
result .append (TestDimension (
195
196
name = dim .name , values = patched_values ))
196
197
else :
@@ -226,9 +227,10 @@ def patch_dimensions(self, test_name: str, dims: List[TestDimension]) -> List[Te
226
227
f"Skipping patch for test { [self .test ]} for test [{ test_name } ]" )
227
228
228
229
if self ._may_patch (test_name ):
230
+ logging .debug (f"Patching test [{ test_name } ]" )
229
231
result = {}
230
232
for _pd in self .patches :
231
- for dim in _pd .patch_dimensions (dims ):
233
+ for dim in _pd .patch_dimensions (test_name , dims ):
232
234
result [dim .name ] = dim
233
235
return list (result .values ())
234
236
return dims
@@ -272,11 +274,23 @@ def select_tests(self, tests: List[TestDefinition]) -> List[TestDefinition]:
272
274
return tests
273
275
274
276
def patch_dimensions (self , test_name : str , dims : List [TestDimension ]) -> List [TestDimension ]:
277
+ """Apply all patches sequentially in the order they are defined. Each patch uses the resulting
278
+ dimensions of the previous patch
279
+
280
+ Arguments:
281
+ test_name (str) : Name of the test to apply the patches.
282
+ dims (list) : Initial dimensions as per test definition.
283
+
284
+ Return:
285
+ The dimensions after applying all patches.
286
+ """
275
287
if self .patches :
276
- result = []
277
- for patch in self .patches :
278
- result .extend (patch .patch_dimensions (test_name , dims ))
279
- return result
288
+ result = {p .name : p for p in self .patches [0 ].patch_dimensions (
289
+ test_name , dims )}
290
+ for patch in self .patches [1 :]:
291
+ result = {p .name : p for p in patch .patch_dimensions (
292
+ test_name , list (result .values ()))}
293
+ return list (result .values ())
280
294
return dims
281
295
282
296
@@ -354,8 +368,10 @@ def _resolve_effective_test_suites(
354
368
):
355
369
effective_test_suites = []
356
370
for suite in suites :
371
+ logging .debug (f"Resolving effective test suite [{ suite .name } ]" )
357
372
test_cases = []
358
373
for test in suite .select_tests (tests ):
374
+ logging .debug (f"Selected test [{ suite .name } ].[{ test .name } ]" )
359
375
used_dims = [d for d in dims if d .name in test .dimensions ]
360
376
effective_dimensions = suite .patch_dimensions (
361
377
test .name , used_dims )
@@ -364,8 +380,8 @@ def _resolve_effective_test_suites(
364
380
]
365
381
test_cases .extend (
366
382
[TestCase (name = test .name , values = dict (tc_dim )) for tc_dim in product (* expanded_test_dims )])
367
- effective_test_suites . append ( EffectiveTestSuite (
368
- name = suite . name , test_cases = test_cases ) )
383
+ ets = EffectiveTestSuite (name = suite . name , test_cases = test_cases )
384
+ effective_test_suites . append ( ets )
369
385
return effective_test_suites
370
386
371
387
0 commit comments