(tool, env_name=None)
| 233 | |
| 234 | |
| 235 | def requires_tool(tool, env_name=None): |
| 236 | assert not callable(tool) |
| 237 | |
| 238 | def decorate(func): |
| 239 | assert callable(func) |
| 240 | |
| 241 | @wraps(func) |
| 242 | def decorated(self, *args, **kwargs): |
| 243 | if env_name: |
| 244 | env_var = f'EMTEST_SKIP_{env_name}' |
| 245 | else: |
| 246 | env_var = f'EMTEST_SKIP_{tool.upper()}' |
| 247 | if not shutil.which(tool): |
| 248 | if env_var in os.environ: |
| 249 | self.skipTest(f'test requires ccache and {env_var} is set') |
| 250 | else: |
| 251 | self.fail(f'{tool} required to run this test. Use {env_var} to skip') |
| 252 | return func(self, *args, **kwargs) |
| 253 | |
| 254 | return decorated |
| 255 | |
| 256 | return decorate |
| 257 | |
| 258 | |
| 259 | def requires_ninja(func): |
no outgoing calls
no test coverage detected