Add any target-specific marks to parametrizations over target
(metafunc)
| 142 | |
| 143 | |
| 144 | def _add_target_specific_marks(metafunc): |
| 145 | """Add any target-specific marks to parametrizations over target""" |
| 146 | |
| 147 | def update_parametrize_target_arg( |
| 148 | mark, |
| 149 | argnames, |
| 150 | argvalues, |
| 151 | *args, |
| 152 | **kwargs, |
| 153 | ): |
| 154 | args = [arg.strip() for arg in argnames.split(",") if arg.strip()] |
| 155 | if "target" in args: |
| 156 | target_i = args.index("target") |
| 157 | |
| 158 | new_argvalues = [] |
| 159 | for argvalue in argvalues: |
| 160 | if isinstance(argvalue, _pytest.mark.structures.ParameterSet): |
| 161 | # The parametrized value is already a |
| 162 | # pytest.param, so track any marks already |
| 163 | # defined. |
| 164 | param_set = argvalue.values |
| 165 | target = param_set[target_i] |
| 166 | additional_marks = argvalue.marks |
| 167 | elif len(args) == 1: |
| 168 | # Single value parametrization, argvalue is a list of values. |
| 169 | target = argvalue |
| 170 | param_set = (target,) |
| 171 | additional_marks = [] |
| 172 | else: |
| 173 | # Multiple correlated parameters, argvalue is a list of tuple of values. |
| 174 | param_set = argvalue |
| 175 | target = param_set[target_i] |
| 176 | additional_marks = [] |
| 177 | |
| 178 | if mark in metafunc.definition.own_markers: |
| 179 | xfail_targets = getattr(metafunc.function, "tvm_known_failing_targets", []) |
| 180 | if isinstance(target, str): |
| 181 | target_kind = target.split()[0] |
| 182 | elif isinstance(target, dict): |
| 183 | target_kind = target["kind"] |
| 184 | else: |
| 185 | target_kind = target.kind.name |
| 186 | if target_kind in xfail_targets: |
| 187 | additional_marks.append( |
| 188 | pytest.mark.xfail( |
| 189 | reason=f'Known failing test for target "{target_kind}"' |
| 190 | ) |
| 191 | ) |
| 192 | |
| 193 | new_argvalues.append( |
| 194 | pytest.param( |
| 195 | *param_set, marks=_target_to_requirement(target) + additional_marks |
| 196 | ) |
| 197 | ) |
| 198 | |
| 199 | try: |
| 200 | argvalues[:] = new_argvalues |
| 201 | except TypeError as err: |
no test coverage detected
searching dependent graphs…