Repository navigation
Expand file tree
/
Copy pathtest_check_localization_updates.py
More file actions
87 lines (71 loc) · 2.96 KB
/
Copy pathtest_check_localization_updates.py
File metadata and controls
87 lines (71 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python3
from __future__ import annotations
import importlib.util
import json
import tempfile
import unittest
from pathlib import Path
SCRIPT = Path(__file__).with_name("check_localization_updates.py")
SPEC = importlib.util.spec_from_file_location("check_localization_updates", SCRIPT)
assert SPEC and SPEC.loader
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
class StaleLocalizationSourcesTests(unittest.TestCase):
def setUp(self) -> None:
self.temp_dir = tempfile.TemporaryDirectory()
self.root = Path(self.temp_dir.name)
(self.root / "workshop").mkdir()
(self.root / "localizations" / "ko-kr").mkdir(parents=True)
(self.root / ".github" / "skills" / "localizations" / "rules").mkdir(
parents=True
)
(self.root / ".github" / "skills" / "localizations" / "rules" / "ko-kr.md").write_text(
"Korean rules\n",
encoding="utf-8",
)
def tearDown(self) -> None:
self.temp_dir.cleanup()
def write_state(self, files: dict[str, dict[str, str]]) -> None:
state = {"version": 1, "files": files}
(self.root / "localizations" / "ko-kr" / ".localization-state.json").write_text(
json.dumps(state),
encoding="utf-8",
)
def source_hash(self, path: str) -> str:
return MODULE.normalized_sha256(self.root / path)
def test_later_batch_keeps_earlier_unlocalized_source(self) -> None:
source_a = self.root / "workshop" / "a.md"
source_b = self.root / "workshop" / "b.md"
source_a.write_text("A baseline\n", encoding="utf-8")
source_b.write_text("B baseline\n", encoding="utf-8")
self.write_state(
{
"workshop/a.md": {"source_sha256": self.source_hash("workshop/a.md")},
"workshop/b.md": {"source_sha256": self.source_hash("workshop/b.md")},
}
)
source_a.write_text("A changed by push A\n", encoding="utf-8")
self.assertEqual(
MODULE.stale_localization_sources(self.root),
["workshop/a.md"],
)
source_b.write_text("B changed by push B\n", encoding="utf-8")
self.assertEqual(
MODULE.stale_localization_sources(self.root),
["workshop/a.md", "workshop/b.md"],
)
def test_new_and_deleted_sources_are_stale(self) -> None:
deleted = self.root / "workshop" / "deleted.md"
deleted.write_text("old\n", encoding="utf-8")
deleted_hash = self.source_hash("workshop/deleted.md")
deleted.unlink()
(self.root / "workshop" / "new.md").write_text("new\n", encoding="utf-8")
self.write_state(
{"workshop/deleted.md": {"source_sha256": deleted_hash}}
)
self.assertEqual(
MODULE.stale_localization_sources(self.root),
["workshop/deleted.md", "workshop/new.md"],
)
if __name__ == "__main__":
unittest.main()