diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-23 21:43:23 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-23 21:43:23 +0300 |
| commit | a66f4c64e9d1591f042a94d6f3bef3b4298a4d1c (patch) | |
| tree | 747de08b6ada4300afb4124da9feff0cc66b96a7 /scripts/test_vendor_portable_pty.py | |
| parent | 5981ba426e8ed8f6785195a03cc0d8a190173e61 (diff) | |
fix: force system conpty on windows
refs #761
Diffstat (limited to 'scripts/test_vendor_portable_pty.py')
| -rw-r--r-- | scripts/test_vendor_portable_pty.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/test_vendor_portable_pty.py b/scripts/test_vendor_portable_pty.py new file mode 100644 index 00000000..8a6d4ca1 --- /dev/null +++ b/scripts/test_vendor_portable_pty.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +import json +import subprocess +import unittest +from pathlib import Path + + +class VendorPortablePtyTests(unittest.TestCase): + def test_vendored_tree_contains_required_upstream_files(self) -> None: + root = Path(__file__).resolve().parent.parent / "vendor" / "portable-pty" + required = [ + root / "Cargo.toml", + root / "LICENSE.md", + root / "src" / "lib.rs", + root / "src" / "win" / "psuedocon.rs", + ] + + missing = [str(path.relative_to(root)) for path in required if not path.exists()] + self.assertEqual(missing, []) + + def test_cargo_patch_points_at_vendored_tree(self) -> None: + project_root = Path(__file__).resolve().parent.parent + cargo_toml = (project_root / "Cargo.toml").read_text() + + self.assertIn('portable-pty = "=0.9.0"', cargo_toml) + self.assertIn("[patch.crates-io]", cargo_toml) + self.assertIn('portable-pty = { path = "vendor/portable-pty" }', cargo_toml) + + def test_cargo_metadata_resolves_portable_pty_to_vendored_tree(self) -> None: + project_root = Path(__file__).resolve().parent.parent + result = subprocess.run( + ["cargo", "metadata", "--locked", "--format-version", "1"], + cwd=project_root, + text=True, + capture_output=True, + ) + self.assertEqual( + result.returncode, + 0, + f"cargo metadata failed:\nstdout:\n{result.stdout}\nstderr:\n{result.stderr}", + ) + + metadata = json.loads(result.stdout) + packages = [ + package + for package in metadata["packages"] + if package["name"] == "portable-pty" and package["version"] == "0.9.0" + ] + self.assertEqual(len(packages), 1) + + manifest_path = Path(packages[0]["manifest_path"]).resolve() + expected = (project_root / "vendor" / "portable-pty" / "Cargo.toml").resolve() + self.assertEqual(manifest_path, expected) + + def test_local_vendor_patches_are_listed_in_patch_index(self) -> None: + project_root = Path(__file__).resolve().parent.parent + index = project_root / "vendor" / "portable-pty.patches.md" + patch_dir = project_root / "vendor" / "patches" / "portable-pty" + patches = sorted(patch_dir.glob("*.patch")) + + if not patches: + return + + self.assertTrue(index.exists()) + text = index.read_text() + missing = [ + str(path.relative_to(project_root)) + for path in patches + if str(path.relative_to(project_root)) not in text + ] + self.assertEqual(missing, []) + + def test_local_vendor_patches_are_applied_to_vendored_tree(self) -> None: + project_root = Path(__file__).resolve().parent.parent + patch_dir = project_root / "vendor" / "patches" / "portable-pty" + + for patch in sorted(patch_dir.glob("*.patch")): + result = subprocess.run( + ["git", "apply", "--check", "--reverse", str(patch.relative_to(project_root))], + cwd=project_root, + text=True, + capture_output=True, + ) + self.assertEqual( + result.returncode, + 0, + f"{patch.relative_to(project_root)} is not applied cleanly:\n" + f"stdout:\n{result.stdout}\n" + f"stderr:\n{result.stderr}", + ) + + def test_windows_conpty_loader_does_not_probe_path_conpty_dll(self) -> None: + project_root = Path(__file__).resolve().parent.parent + source = project_root / "vendor" / "portable-pty" / "src" / "win" / "psuedocon.rs" + text = source.read_text() + + self.assertIn('ConPtyFuncs::open(Path::new("kernel32.dll"))', text) + self.assertNotIn('Path::new("conpty.dll")', text) + + +if __name__ == "__main__": + unittest.main() |
