diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-11 15:35:35 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-11 15:35:35 +0300 |
| commit | 2778411b6cc31ff804655753c2dee3efe78ad413 (patch) | |
| tree | 9955c3b5d7ff40cd552e0b2b84d402aceaa3539c /scripts/test_windows_cross.py | |
| parent | 03457913816b0e22e5fb7de5c83d199ee5ae7c51 (diff) | |
chore: add one-time windows cross-check setup
Diffstat (limited to 'scripts/test_windows_cross.py')
| -rw-r--r-- | scripts/test_windows_cross.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/test_windows_cross.py b/scripts/test_windows_cross.py new file mode 100644 index 00000000..4f8f0fe4 --- /dev/null +++ b/scripts/test_windows_cross.py @@ -0,0 +1,82 @@ +import os +from pathlib import Path +import tempfile +import unittest +from unittest.mock import patch + +from scripts import windows_cross + + +class WindowsCrossTests(unittest.TestCase): + def test_libc_configuration_matches_xwin_layout(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + for relative in ( + "sdk/include/ucrt/stdlib.h", "crt/include/vcruntime.h", + "sdk/lib/ucrt/x86_64/ucrt.lib", "crt/lib/x86_64/vcruntime.lib", + "sdk/lib/um/x86_64/kernel32.lib", + ): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.touch() + contents = windows_cross.libc_contents(root) + self.assertIn(f"include_dir={root}/sdk/include/ucrt\n", contents) + self.assertIn(f"msvc_lib_dir={root}/crt/lib/x86_64\n", contents) + self.assertTrue(contents.endswith("gcc_dir=\n")) + (root / "crt/include/vcruntime.h").unlink() + with self.assertRaisesRegex(ValueError, "missing .*vcruntime.h"): + windows_cross.libc_contents(root) + + def test_persistent_configuration_and_explicit_override(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + default = root / "libc.txt" + override = root / "custom.txt" + default.touch() + override.touch() + with patch.object(windows_cross, "SDK_ROOT", root), patch.dict(os.environ, {}, clear=True): + self.assertEqual(windows_cross.libc_path(), default) + with patch.dict(os.environ, {windows_cross.LIBC_ENV: str(override)}): + self.assertEqual(windows_cross.libc_path(), override) + override.unlink() + with self.assertRaisesRegex(ValueError, "just setup-windows-cross"): + windows_cross.libc_path() + + def test_missing_setup_does_not_run_build_or_download(self): + with tempfile.TemporaryDirectory() as directory: + with patch.object(windows_cross, "SDK_ROOT", Path(directory)), \ + patch.dict(os.environ, {}, clear=True), \ + patch.object(windows_cross.subprocess, "run") as run: + with self.assertRaisesRegex(ValueError, "just setup-windows-cross"): + windows_cross.lint() + run.assert_not_called() + + def test_lint_passes_sdk_to_cargo_without_changing_parent_environment(self): + with patch.object(windows_cross, "libc_path", return_value=Path("/sdk/libc.txt")), \ + patch.dict(os.environ, {"KEEP_ME": "yes"}, clear=True), \ + patch.object(windows_cross.subprocess, "run") as run: + windows_cross.lint() + self.assertEqual(run.call_count, 2) + cargo = run.call_args + self.assertEqual(cargo.args[0][:2], ["cargo", "clippy"]) + self.assertEqual(cargo.kwargs["env"][windows_cross.LIBC_ENV], "/sdk/libc.txt") + self.assertEqual(cargo.kwargs["env"]["KEEP_ME"], "yes") + self.assertNotIn(windows_cross.LIBC_ENV, os.environ) + + def test_license_acceptance_is_only_forwarded_when_explicit(self): + with tempfile.TemporaryDirectory() as directory: + with patch.object(windows_cross, "SDK_ROOT", Path(directory)), \ + patch.object(windows_cross.shutil, "which", return_value="tool"), \ + patch.object(windows_cross, "libc_contents", return_value="configuration"), \ + patch.object(windows_cross.subprocess, "run") as run: + for accepted in (False, True): + run.reset_mock() + windows_cross.setup(accepted) + command = run.call_args_list[0].args[0] + self.assertEqual("--accept-license" in command, accepted) + self.assertEqual(command[0], "xwin") + self.assertIn("--copy", command) + + +if __name__ == "__main__": + unittest.main() |
