Files
bpf-developer-tutorial/scripts/test_generate_toc.py
2026-07-22 01:36:04 -07:00

52 lines
1.5 KiB
Python

import re
import unittest
from pathlib import Path
from scripts.generate_toc import generate_toc, generate_toc_cn
ROOT = Path(__file__).resolve().parent.parent
LINK_PATTERN = re.compile(r"\]\((src/.+?)/README(?:\.zh)?\.md\)")
TRACING_LESSONS = {
"src/30-sslsniff",
"src/31-goroutine",
"src/33-funclatency",
"src/37-uprobe-rust",
"src/39-nginx",
"src/40-mysql",
"src/48-energy",
"src/52-fsession-latency",
"src/57-oom-watch",
}
def lesson_links(markdown: str) -> set[str]:
return set(LINK_PATTERN.findall(markdown))
def subsection(markdown: str, heading: str, next_heading: str) -> str:
return markdown.split(f"\n\n{heading}:\n\n", 1)[1].split(
f"\n\n{next_heading}:\n\n", 1
)[0]
class TocParityTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.english = generate_toc(ROOT / "src", ROOT, ROOT)
cls.chinese = generate_toc_cn(ROOT / "src", ROOT, ROOT)
def test_english_and_chinese_indexes_contain_the_same_lessons(self):
self.assertSetEqual(lesson_links(self.english), lesson_links(self.chinese))
def test_chinese_tracing_subsection_contains_all_tracing_lessons(self):
english_tracing = lesson_links(subsection(self.english, "Tracing", "Security"))
chinese_tracing = lesson_links(subsection(self.chinese, "追踪", "安全"))
self.assertSetEqual(english_tracing, TRACING_LESSONS)
self.assertSetEqual(chinese_tracing, TRACING_LESSONS)
if __name__ == "__main__":
unittest.main()