# Author: cirakg & claude ai # Summary: Tests for tools/check_resources.py (schema validation and the settings cross-check). """Tests for tools/check_resources.py.""" from __future__ import annotations from pathlib import Path import check_resources as cr import xmlschema TINY_XSD = """ """ PROPERTIES = """ 1 0 """ SETTINGS = """ @Strings.Zero @Strings.Missing """ STRINGS = 'TK0' def write(folder: Path, name: str, text: str) -> Path: path = folder / name path.parent.mkdir(parents=True, exist_ok=True) path.write_text(text, encoding="utf-8") return path def test_cross_check_finds_every_kind_of_mismatch(tmp_path: Path) -> None: settings = write(tmp_path, "settings.xml", SETTINGS) properties = write(tmp_path, "properties.xml", PROPERTIES) strings = write(tmp_path, "strings.xml", STRINGS) problems = cr.cross_check(settings, properties, [strings]) assert problems == [ "settings.xml: @Strings.Missing is not defined", "settings.xml: @Properties.ghost is not defined in properties.xml", "kind: default '1' is not one of the list values ['0', '2']", "count: read-only settings must be string properties, not number", "settings.xml: count appears 2 times", "properties.xml: orphan is not in the settings form", ] def test_validate_reports_schema_errors(tmp_path: Path) -> None: schema = xmlschema.XMLSchema(TINY_XSD) good = write(tmp_path, "resources/strings/strings.xml", STRINGS) bad = write(tmp_path, "resources/strings/bad.xml", "no id") assert cr.resource_files(tmp_path) == [bad, good] problems = cr.validate(schema, [bad, good], tmp_path) assert len(problems) == 1 assert problems[0].startswith("resources/strings/bad.xml: ") assert "id" in problems[0] def test_main_needs_the_schema(tmp_path: Path) -> None: assert cr.main([str(tmp_path), "--xsd", str(tmp_path / "missing.xsd")]) == cr.EXIT_NO_SCHEMA def test_cross_check_accepts_a_consistent_form(tmp_path: Path) -> None: properties = write( tmp_path, "properties.xml", '0' ) settings = write( tmp_path, "settings.xml", '' '@Strings.Zero', ) assert cr.cross_check(settings, properties, [write(tmp_path, "strings.xml", STRINGS)]) == []