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())