from pathlib import Path import subprocess import sys import tempfile import unittest sys.path.insert(0, str(Path(__file__).resolve().parents[1])) import check_skips TOOL = Path(__file__).resolve().parents[1] / "check_skips.py" class IntentionalSkipTests(unittest.TestCase): def check_real_skip(self, property_name, property_value, message, exit_code, expected): with tempfile.TemporaryDirectory() as directory: root = Path(directory) script = root / "skip.py" script.write_text(f"import sys\nprint({message!r})\nsys.exit({exit_code})\n", encoding="utf-8") (root / "CTestTestfile.cmake").write_text( f'add_test(gpu_skip "{Path(sys.executable).as_posix()}" "{script.as_posix()}")\n' f'set_tests_properties(gpu_skip PROPERTIES {property_name} "{property_value}")\n', encoding="utf-8") report = root / "report.xml" generated = subprocess.run(["ctest", "--test-dir", str(root), "--output-junit", str(report)], capture_output=True, text=True, timeout=10) self.assertEqual(generated.returncode, 0, generated.stdout + generated.stderr) xml = report.read_text(encoding="utf-8") self.assertIn('status="notrun"', xml) self.assertIn('', ''): with self.subTest(marker=marker), tempfile.TemporaryDirectory() as directory: report = Path(directory) / "report.xml" report.write_text(f'{marker}', encoding="utf-8") with self.assertRaisesRegex(ValueError, "notrun.*not run"): list(check_skips.skips(report)) def test_disabled_status_is_rejected_even_with_ctest_skip_marker(self): with tempfile.TemporaryDirectory() as directory: report = Path(directory) / "report.xml" report.write_text('skipped, no display', encoding="utf-8") with self.assertRaisesRegex(ValueError, "disabled.*not run"): list(check_skips.skips(report)) if __name__ == "__main__": unittest.main()