Files
codex/scripts/test_setup_dev_execpolicy.py
T

88 lines
2.3 KiB
Python

#!/usr/bin/env python3
from contextlib import redirect_stdout
import io
from pathlib import Path
import sys
import unittest
from unittest.mock import patch
sys.path.insert(0, str(Path(__file__).resolve().parent))
import setup_dev_execpolicy
class SetupDevExecpolicyTest(unittest.TestCase):
def test_discovers_absolute_paths_without_resolving_them(self) -> None:
paths = {
"cargo": "/tools/bin/cargo",
"just": "/tools/bin/just",
}
self.assertEqual(
setup_dev_execpolicy.discover_host_executables(
tuple(paths),
which=paths.get,
),
{
"cargo": Path("/tools/bin/cargo"),
"just": Path("/tools/bin/just"),
},
)
def test_reports_all_missing_executables(self) -> None:
with self.assertRaisesRegex(
RuntimeError,
"missing required host executables on PATH: just, pnpm",
):
setup_dev_execpolicy.discover_host_executables(
("cargo", "just", "pnpm"),
which=lambda name: "/tools/bin/cargo" if name == "cargo" else None,
)
def test_renders_host_executable_rules(self) -> None:
self.assertEqual(
setup_dev_execpolicy.render_host_executable_rules(
{
"cargo": Path("/tools/bin/cargo"),
"bazel": Path("/tools/bin/bazel"),
}
),
"""# Generated by scripts/setup_dev_execpolicy.py. Do not edit.
host_executable(
name = "cargo",
paths = ["/tools/bin/cargo"],
)
host_executable(
name = "bazel",
paths = ["/tools/bin/bazel"],
)
""",
)
def test_main_prints_rules(self) -> None:
executables = {"cargo": Path("/tools/bin/cargo")}
stdout = io.StringIO()
with (
patch.object(
setup_dev_execpolicy,
"discover_host_executables",
return_value=executables,
),
redirect_stdout(stdout),
):
result = setup_dev_execpolicy.main()
self.assertEqual(result, 0)
self.assertEqual(
stdout.getvalue(),
setup_dev_execpolicy.render_host_executable_rules(executables),
)
if __name__ == "__main__":
unittest.main()