diff options
Diffstat (limited to 'run_unittests.py')
-rwxr-xr-x | run_unittests.py | 76 |
1 files changed, 44 insertions, 32 deletions
diff --git a/run_unittests.py b/run_unittests.py index b9dcd41..0249183 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -1274,39 +1274,54 @@ class DataTests(unittest.TestCase): self.assertIn(opt, md) self.assertNotIn('b_unknown', md) + @staticmethod + def _get_section_content(name, sections, md): + for section in sections: + if section and section.group(1) == name: + try: + next_section = next(sections) + end = next_section.start() + except StopIteration: + end = len(md) + # Extract the content for this section + return md[section.end():end] + raise RuntimeError('Could not find "{}" heading'.format(name)) + def test_builtin_options_documented(self): ''' Test that universal options and base options are documented in Builtin-Options.md. ''' + from itertools import tee md = None with open('docs/markdown/Builtin-options.md', encoding='utf-8') as f: md = f.read() self.assertIsNotNone(md) found_entries = set() - sections = list(re.finditer(r"^## (.+)$", md, re.MULTILINE)) + [None] - - for s1, s2 in zip(sections[:], sections[1:]): - if s1.group(1) == "Universal options": - # Extract the content for this section - end = s2.start() if s2 is not None else len(md) - content = md[s1.end():end] - subsections = list(re.finditer(r"^### (.+)$", content, re.MULTILINE)) + [None] - - for sub1, sub2 in zip(subsections[:], subsections[1:]): - if sub1.group(1) == "Directories" or sub1.group(1) == "Core options": - # Extract the content for this subsection - sub_end = sub2.start() if sub2 is not None else len(content) - subcontent = content[sub1.end():sub_end] - # Find the list entries - arches = [m.group(1) for m in re.finditer(r"^\| (\w+) .* \|", subcontent, re.MULTILINE)] - # Drop the header - arches = set(arches[1:]) - - self.assertEqual(len(found_entries & arches), 0) - found_entries |= arches - break + sections = re.finditer(r"^## (.+)$", md, re.MULTILINE) + # Extract the content for this section + content = self._get_section_content("Universal options", sections, md) + subsections = tee(re.finditer(r"^### (.+)$", content, re.MULTILINE)) + subcontent1 = self._get_section_content("Directories", subsections[0], content) + subcontent2 = self._get_section_content("Core options", subsections[1], content) + for subcontent in (subcontent1, subcontent2): + # Find the option names + options = set() + # Match either a table row or a table heading separator: | ------ | + rows = re.finditer(r"^\|(?: (\w+) .* | *-+ *)\|", subcontent, re.MULTILINE) + # Skip the header of the first table + next(rows) + # Skip the heading separator of the first table + next(rows) + for m in rows: + value = m.group(1) + # End when the `buildtype` table starts + if value is None: + break + options.add(value) + self.assertEqual(len(found_entries & options), 0) + found_entries |= options self.assertEqual(found_entries, set([ *mesonbuild.coredata.builtin_options.keys(), @@ -1318,16 +1333,13 @@ class DataTests(unittest.TestCase): md = f.read() self.assertIsNotNone(md) - sections = list(re.finditer(r"^## (.+)$", md, re.MULTILINE)) - for s1, s2 in zip(sections[::2], sections[1::2]): - if s1.group(1) == "CPU families": - # Extract the content for this section - content = md[s1.end():s2.start()] - # Find the list entries - arches = [m.group(1) for m in re.finditer(r"^\| (\w+) +\|", content, re.MULTILINE)] - # Drop the header - arches = set(arches[1:]) - self.assertEqual(arches, set(mesonbuild.environment.known_cpu_families)) + sections = re.finditer(r"^## (.+)$", md, re.MULTILINE) + content = self._get_section_content("CPU families", sections, md) + # Find the list entries + arches = [m.group(1) for m in re.finditer(r"^\| (\w+) +\|", content, re.MULTILINE)] + # Drop the header + arches = set(arches[1:]) + self.assertEqual(arches, set(mesonbuild.environment.known_cpu_families)) def test_markdown_files_in_sitemap(self): ''' |