From a42d14e3b82b8a0ea945724e9f16ec628678cf7d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 27 Jan 2022 15:39:09 -0800 Subject: [PATCH] Fix incorrect language three-letter code --- CHANGELIST.md | 1 + MPF.Test/RedumpLib/ExtensionsTests.cs | 82 +++++++++++++++++++++++++++ RedumpLib/Data/Enumerations.cs | 2 +- RedumpLib/Data/Extensions.cs | 6 +- 4 files changed, 87 insertions(+), 4 deletions(-) diff --git a/CHANGELIST.md b/CHANGELIST.md index 93d16f8e..0ca6bebf 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -58,6 +58,7 @@ - Better helper method organization - Start supporting ordered tags and non-tags - Add more non-tag support; rearrange info window +- Fix incorrect language three-letter code ### 2.2 (2021-12-30) - Fix Saturn header finding diff --git a/MPF.Test/RedumpLib/ExtensionsTests.cs b/MPF.Test/RedumpLib/ExtensionsTests.cs index 7d3db19c..a68ddbae 100644 --- a/MPF.Test/RedumpLib/ExtensionsTests.cs +++ b/MPF.Test/RedumpLib/ExtensionsTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using RedumpLib.Data; using Xunit; @@ -250,6 +251,87 @@ namespace MPF.Test.RedumpLib Assert.NotNull(actual); } + /// + /// Ensure that every Language that has an ISO 639-1 code is unique + /// + [Fact] + public void NoDuplicateTwoLetterCodeTest() + { + var fullLanguages = Enum.GetValues(typeof(Language)).Cast().ToList(); + var filteredLanguages = new Dictionary(); + + int totalCount = 0; + foreach (Language? language in fullLanguages) + { + string code = language.TwoLetterCode(); + if (string.IsNullOrWhiteSpace(code)) + continue; + + // Throw if the code already exists + if (filteredLanguages.ContainsKey(code)) + throw new DuplicateNameException($"Code {code} already in dictionary"); + + filteredLanguages[code] = language; + totalCount++; + } + + Assert.Equal(totalCount, filteredLanguages.Count); + } + + /// + /// Ensure that every Language that has a standard/bibliographic ISO 639-2 code is unique + /// + [Fact] + public void NoDuplicateThreeLetterCodeTest() + { + var fullLanguages = Enum.GetValues(typeof(Language)).Cast().ToList(); + var filteredLanguages = new Dictionary(); + + int totalCount = 0; + foreach (Language? language in fullLanguages) + { + string code = language.ThreeLetterCode(); + if (string.IsNullOrWhiteSpace(code)) + continue; + + // Throw if the code already exists + if (filteredLanguages.ContainsKey(code)) + throw new DuplicateNameException($"Code {code} already in dictionary"); + + filteredLanguages[code] = language; + totalCount++; + } + + Assert.Equal(totalCount, filteredLanguages.Count); + } + + /// + /// Ensure that every Language that has a terminology ISO 639-2 code is unique + /// + [Fact] + public void NoDuplicateThreeLetterCodeAltTest() + { + var fullLanguages = Enum.GetValues(typeof(Language)).Cast().ToList(); + var filteredLanguages = new Dictionary(); + + int totalCount = 0; + foreach (Language? language in fullLanguages) + { + string code = language.ThreeLetterCodeAlt(); + if (string.IsNullOrWhiteSpace(code)) + continue; + + // Throw if the code already exists + if (filteredLanguages.ContainsKey(code)) + throw new DuplicateNameException($"Code {code} already in dictionary"); + + filteredLanguages[code] = language; + totalCount++; + } + + Assert.Equal(totalCount, filteredLanguages.Count); + } + /// /// Generate a test set of Language values /// diff --git a/RedumpLib/Data/Enumerations.cs b/RedumpLib/Data/Enumerations.cs index c204e2c0..72a31a66 100644 --- a/RedumpLib/Data/Enumerations.cs +++ b/RedumpLib/Data/Enumerations.cs @@ -842,7 +842,7 @@ namespace RedumpLib.Data [Language(LongName = "Lozi", ThreeLetterCode = "loz")] Lozi, - [Language(LongName = "Luba-Katanga", TwoLetterCode = "lu", ThreeLetterCode = "loz")] + [Language(LongName = "Luba-Katanga", TwoLetterCode = "lu", ThreeLetterCode = "lub")] LubaKatanga, [Language(LongName = "Luba-Lulua", ThreeLetterCode = "lua")] diff --git a/RedumpLib/Data/Extensions.cs b/RedumpLib/Data/Extensions.cs index b31e8fd6..bb968ae9 100644 --- a/RedumpLib/Data/Extensions.cs +++ b/RedumpLib/Data/Extensions.cs @@ -970,21 +970,21 @@ namespace RedumpLib.Data /// /// /// - private static string ThreeLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCode; + public static string ThreeLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCode; /// /// Get the ISO 639-2 alternate code for each known language /// /// /// - private static string ThreeLetterCodeAlt(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCodeAlt; + public static string ThreeLetterCodeAlt(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.ThreeLetterCodeAlt; /// /// Get the ISO 639-1 code for each known language /// /// /// - private static string TwoLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.TwoLetterCode; + public static string TwoLetterCode(this Language? language) => ((LanguageAttribute)AttributeHelper.GetAttribute(language))?.TwoLetterCode; #endregion