From 7dac10bc53f4133a530897b41a00e1452b30ba01 Mon Sep 17 00:00:00 2001 From: Peter Chapman Date: Thu, 11 Jun 2026 12:59:54 +1200 Subject: [PATCH] Add tests for parsing Paratext project settings --- .gitignore | 3 ++ .../test_paratext_project_settings_parser.py | 41 +++++++++++++++++++ .../memory_paratext_project_file_handler.py | 6 +-- ...atext_project_quote_convention_detector.py | 4 +- ...memory_paratext_project_settings_parser.py | 17 ++++++++ .../memory_paratext_project_terms_parser.py | 2 +- ...xt_project_versification_error_detector.py | 2 +- 7 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 tests/corpora/test_paratext_project_settings_parser.py create mode 100644 tests/testutils/memory_paratext_project_settings_parser.py diff --git a/.gitignore b/.gitignore index 10b04fd7..318a6a87 100644 --- a/.gitignore +++ b/.gitignore @@ -136,3 +136,6 @@ out/ # Ignore dynaconf secret files .secrets.* + +# omit IDE data +.idea/ diff --git a/tests/corpora/test_paratext_project_settings_parser.py b/tests/corpora/test_paratext_project_settings_parser.py new file mode 100644 index 00000000..141f826b --- /dev/null +++ b/tests/corpora/test_paratext_project_settings_parser.py @@ -0,0 +1,41 @@ +from testutils.memory_paratext_project_settings_parser import MemoryParatextProjectSettingsParser + + +def test_translation_info_empty_values() -> None: + settings = _create_settings("") + + assert settings.translation_type == "Standard" + assert settings.parent_name is None + assert settings.parent_guid is None + + +def test_translation_info_no_parent_specified() -> None: + settings = _create_settings("BackTranslation::") + + assert settings.translation_type == "BackTranslation" + assert settings.parent_name is None + assert settings.parent_guid is None + + +def test_translation_info_specified() -> None: + settings = _create_settings("Daughter:DEF:22222222222222222222222222222222") + + assert settings.translation_type == "Daughter" + assert settings.parent_name == "DEF" + assert settings.parent_guid == "22222222222222222222222222222222" + + +def _create_settings(additional_settings_xml: str = ""): + files = { + "Settings.xml": ( + "" + "11111111111111111111111111111111" + "ABC" + "Test Project" + f"{additional_settings_xml}" + "" + ) + } + + parser = MemoryParatextProjectSettingsParser(files) + return parser.parse() diff --git a/tests/testutils/memory_paratext_project_file_handler.py b/tests/testutils/memory_paratext_project_file_handler.py index 89b7b5f6..8916e6cd 100644 --- a/tests/testutils/memory_paratext_project_file_handler.py +++ b/tests/testutils/memory_paratext_project_file_handler.py @@ -7,8 +7,8 @@ class MemoryParatextProjectFileHandler(ParatextProjectFileHandler): - def __init__(self, files: Dict[str, str]) -> None: - self.files = files + def __init__(self, files: Optional[Dict[str, str]]) -> None: + self.files = files or {} def exists(self, file_name: str) -> bool: return file_name in self.files @@ -29,7 +29,7 @@ def create_stylesheet(self, file_name: str) -> UsfmStylesheet: class MemoryParatextProjectTextUpdater(ParatextProjectTextUpdaterBase): - def __init__(self, files: Dict[str, str], settings: ParatextProjectSettings) -> None: + def __init__(self, files: Optional[Dict[str, str]], settings: ParatextProjectSettings) -> None: super().__init__(MemoryParatextProjectFileHandler(files), settings) diff --git a/tests/testutils/memory_paratext_project_quote_convention_detector.py b/tests/testutils/memory_paratext_project_quote_convention_detector.py index f8976e78..aa10eced 100644 --- a/tests/testutils/memory_paratext_project_quote_convention_detector.py +++ b/tests/testutils/memory_paratext_project_quote_convention_detector.py @@ -1,4 +1,4 @@ -from typing import Dict +from typing import Dict, Optional from machine.corpora import ParatextProjectSettings from machine.punctuation_analysis import ParatextProjectQuoteConventionDetector @@ -7,5 +7,5 @@ class MemoryParatextProjectQuoteConventionDetector(ParatextProjectQuoteConventionDetector): - def __init__(self, settings: ParatextProjectSettings, files: Dict[str, str]) -> None: + def __init__(self, settings: ParatextProjectSettings, files: Optional[Dict[str, str]]) -> None: super().__init__(MemoryParatextProjectFileHandler(files), settings or DefaultParatextProjectSettings()) diff --git a/tests/testutils/memory_paratext_project_settings_parser.py b/tests/testutils/memory_paratext_project_settings_parser.py new file mode 100644 index 00000000..ff25e64a --- /dev/null +++ b/tests/testutils/memory_paratext_project_settings_parser.py @@ -0,0 +1,17 @@ +from typing import Optional + +from machine.corpora import ParatextProjectSettings, ParatextProjectSettingsParserBase + +from .memory_paratext_project_file_handler import MemoryParatextProjectFileHandler + + +class MemoryParatextProjectSettingsParser(ParatextProjectSettingsParserBase): + def __init__( + self, + files: Optional[dict[str, str]] = None, + parent_settings: Optional[ParatextProjectSettings] = None, + ): + super().__init__( + MemoryParatextProjectFileHandler(files), + parent_settings, + ) diff --git a/tests/testutils/memory_paratext_project_terms_parser.py b/tests/testutils/memory_paratext_project_terms_parser.py index fd1dc31c..1bd33dce 100644 --- a/tests/testutils/memory_paratext_project_terms_parser.py +++ b/tests/testutils/memory_paratext_project_terms_parser.py @@ -6,5 +6,5 @@ class MemoryParatextProjectTermsParser(ParatextProjectTermsParserBase): - def __init__(self, files: Dict[str, str], settings: Optional[ParatextProjectSettings]) -> None: + def __init__(self, files: Optional[Dict[str, str]], settings: Optional[ParatextProjectSettings]) -> None: super().__init__(MemoryParatextProjectFileHandler(files), settings or DefaultParatextProjectSettings()) diff --git a/tests/testutils/memory_paratext_project_versification_error_detector.py b/tests/testutils/memory_paratext_project_versification_error_detector.py index 512ee930..3a710169 100644 --- a/tests/testutils/memory_paratext_project_versification_error_detector.py +++ b/tests/testutils/memory_paratext_project_versification_error_detector.py @@ -6,5 +6,5 @@ class MemoryParatextProjectVersificationErrorDetector(ParatextProjectVersificationErrorDetectorBase): - def __init__(self, settings: Optional[ParatextProjectSettings], files: Dict[str, str]) -> None: + def __init__(self, settings: Optional[ParatextProjectSettings], files: Optional[Dict[str, str]]) -> None: super().__init__(MemoryParatextProjectFileHandler(files), settings or DefaultParatextProjectSettings())