diff --git a/src/SIL.Machine/Corpora/ParatextProjectSettingsParserBase.cs b/src/SIL.Machine/Corpora/ParatextProjectSettingsParserBase.cs index b2b25e55..f570f464 100644 --- a/src/SIL.Machine/Corpora/ParatextProjectSettingsParserBase.cs +++ b/src/SIL.Machine/Corpora/ParatextProjectSettingsParserBase.cs @@ -123,12 +123,12 @@ public ParatextProjectSettings Parse() string translationType = "Standard"; string parentName = null; string parentGuid = null; - if (translationInfoSetting != null) + string[] translationInfoSettingParts = translationInfoSetting?.Split(':'); + if (translationInfoSettingParts?.Length == 3) { - string[] translationInfoSettingParts = translationInfoSetting.Split(':'); translationType = translationInfoSettingParts[0]; - parentName = translationInfoSettingParts[1] != "" ? translationInfoSettingParts[1] : null; - parentGuid = translationInfoSettingParts[2] != "" ? translationInfoSettingParts[2] : null; + parentName = translationInfoSettingParts[1] != string.Empty ? translationInfoSettingParts[1] : null; + parentGuid = translationInfoSettingParts[2] != string.Empty ? translationInfoSettingParts[2] : null; } var settings = new ParatextProjectSettings( diff --git a/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectFileHandler.cs b/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectFileHandler.cs index 5bf1b1d1..b0858686 100644 --- a/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectFileHandler.cs +++ b/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectFileHandler.cs @@ -9,6 +9,8 @@ public class MemoryParatextProjectFileHandler(IDictionary? files public UsfmStylesheet CreateStylesheet(string fileName) { + if (fileName is "usfm.sty" or "usfm_sb.sty") + return new UsfmStylesheet(fileName); throw new NotImplementedException(); } diff --git a/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectSettingsParser.cs b/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectSettingsParser.cs new file mode 100644 index 00000000..b467f710 --- /dev/null +++ b/tests/SIL.Machine.Tests/Corpora/MemoryParatextProjectSettingsParser.cs @@ -0,0 +1,6 @@ +namespace SIL.Machine.Corpora; + +public class MemoryParatextProjectSettingsParser( + IDictionary? files = null, + ParatextProjectSettings? parentSettings = null +) : ParatextProjectSettingsParserBase(new MemoryParatextProjectFileHandler(files), parentSettings); diff --git a/tests/SIL.Machine.Tests/Corpora/ParatextProjectSettingsParserTests.cs b/tests/SIL.Machine.Tests/Corpora/ParatextProjectSettingsParserTests.cs new file mode 100644 index 00000000..f23a438d --- /dev/null +++ b/tests/SIL.Machine.Tests/Corpora/ParatextProjectSettingsParserTests.cs @@ -0,0 +1,61 @@ +using NUnit.Framework; + +namespace SIL.Machine.Corpora; + +[TestFixture] +public class ParatextProjectSettingsParserTests +{ + [Test] + public void TranslationInfoEmptyValues() + { + ParatextProjectSettings settings = CreateSettings(""); + using (Assert.EnterMultipleScope()) + { + Assert.That(settings.TranslationType, Is.EqualTo("Standard")); + Assert.That(settings.ParentName, Is.Null); + Assert.That(settings.ParentGuid, Is.Null); + } + } + + [Test] + public void TranslationInfoNoParentSpecified() + { + ParatextProjectSettings settings = CreateSettings("BackTranslation::"); + using (Assert.EnterMultipleScope()) + { + Assert.That(settings.TranslationType, Is.EqualTo("BackTranslation")); + Assert.That(settings.ParentName, Is.Null); + Assert.That(settings.ParentGuid, Is.Null); + } + } + + [Test] + public void TranslationInfoSpecified() + { + ParatextProjectSettings settings = CreateSettings( + "Daughter:DEF:22222222222222222222222222222222" + ); + using (Assert.EnterMultipleScope()) + { + Assert.That(settings.TranslationType, Is.EqualTo("Daughter")); + Assert.That(settings.ParentName, Is.EqualTo("DEF")); + Assert.That(settings.ParentGuid, Is.EqualTo("22222222222222222222222222222222")); + } + } + + private static ParatextProjectSettings CreateSettings(string additionalSettingsXml = "") + { + var files = new Dictionary + { + ["Settings.xml"] = + "" + + "11111111111111111111111111111111" + + "ABC" + + "Test Project" + + additionalSettingsXml + + "", + }; + var parser = new MemoryParatextProjectSettingsParser(files); + return parser.Parse(); + } +}