48 lines
1.5 KiB
Python
Executable File
48 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import importlib.util
|
|
from pathlib import Path
|
|
import unittest
|
|
|
|
|
|
MODULE_PATH = Path(__file__).with_name("build_progress.py")
|
|
SPEC = importlib.util.spec_from_file_location("build_progress", MODULE_PATH)
|
|
assert SPEC is not None and SPEC.loader is not None
|
|
BUILD_PROGRESS = importlib.util.module_from_spec(SPEC)
|
|
SPEC.loader.exec_module(BUILD_PROGRESS)
|
|
|
|
|
|
class BuildProgressTests(unittest.TestCase):
|
|
def test_unique_crates_deduplicates_repeated_tree_entries(self) -> None:
|
|
output = "editor v0.1.0\nserde v1.0.0\nserde v1.0.0\n"
|
|
self.assertEqual(
|
|
BUILD_PROGRESS.unique_crates(output),
|
|
{"editor v0.1.0", "serde v1.0.0"},
|
|
)
|
|
|
|
def test_completed_crate_counts_each_package_once(self) -> None:
|
|
completed: set[str] = set()
|
|
message = {
|
|
"reason": "compiler-artifact",
|
|
"package_id": "path+file:///workspace#editor@0.1.0",
|
|
"target": {"name": "editor"},
|
|
}
|
|
self.assertEqual(
|
|
BUILD_PROGRESS.completed_crate(message, completed), (True, "editor")
|
|
)
|
|
self.assertEqual(
|
|
BUILD_PROGRESS.completed_crate(message, completed), (False, "")
|
|
)
|
|
|
|
def test_non_artifact_does_not_advance_progress(self) -> None:
|
|
completed: set[str] = set()
|
|
self.assertEqual(
|
|
BUILD_PROGRESS.completed_crate({"reason": "build-script-executed"}, completed),
|
|
(False, ""),
|
|
)
|
|
self.assertFalse(completed)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|