public void TestLandedTitleFilesIntegrity() { List <string> files = FileProvider.GetFilesInDirectory(ApplicationPaths.LandedTitlesDirectory).ToList(); foreach (string file in files) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); List <string> lines = FileProvider .ReadAllLines(FileEncoding.Windows1252, file) .ToList(); IEnumerable <LandedTitle> landedTitles = LandedTitlesFile .ReadAllTitles(file) .ToDomainModels(); string content = string.Join(Environment.NewLine, lines); int openingBrackets = content.Count(x => x == '{'); int closingBrackets = content.Count(x => x == '}'); Assert.AreEqual(openingBrackets, closingBrackets, $"There are mismatching brackets in {fileName}"); AssertLandedTitlesQuotes(lines, file); AssertLandedTitlesEqualSigns(lines, file); AssertLandedTitleDynamicNames(landedTitles, file); } }
public void TestLocalisationFilesIntegrity() { List <string> files = FileProvider.GetFilesInDirectory(ApplicationPaths.LocalisationDirectory).ToList(); foreach (string file in files) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); List <string> lines = FileProvider.ReadAllLines(FileEncoding.Windows1252, file).ToList(); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; if (string.IsNullOrWhiteSpace(line)) { continue; } string[] fields = line.Split(';'); Assert.IsFalse(string.IsNullOrWhiteSpace(fields[0]), $"Localisation code is undefined in {fileName} at line {lineNumber}"); Assert.IsFalse(string.IsNullOrWhiteSpace(fields[1]), $"English localisation is undefined in {fileName} at line {lineNumber}"); Assert.IsFalse(string.IsNullOrWhiteSpace(fields[2]), $"French localisation is undefined in {fileName} at line {lineNumber}"); Assert.IsFalse(string.IsNullOrWhiteSpace(fields[3]), $"German localisation is undefined in {fileName} at line {lineNumber}"); Assert.IsFalse(string.IsNullOrWhiteSpace(fields[5]), $"Spanish localisation is undefined in {fileName} at line {lineNumber}"); } } }
public void TestCultureFilesIntegrity() { List <string> files = FileProvider.GetFilesInDirectory(ApplicationPaths.CulturesDirectory).ToList(); foreach (string file in files) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); List <string> lines = FileProvider .ReadAllLines(FileEncoding.Windows1252, file) .ToList(); IEnumerable <Culture> cultures = CultureFile .ReadAllCultures(file) .ToDomainModels(); string content = string.Join(Environment.NewLine, lines); int openingBrackets = content.Count(x => x == '{'); int closingBrackets = content.Count(x => x == '}'); Assert.AreEqual(openingBrackets, closingBrackets, $"There are mismatching brackets in {fileName}"); AssertCultureChanceValues(cultures, file); } }
void AssertSpacingsAroundEquals(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; Assert.IsFalse(Regex.IsMatch(line, invalidEqualsSpacingPattern), $"Invalid spacing around '=' in the '{fileName}' file, at line {lineNumber}"); } }
void AssertTrailingWhitespaces(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; Assert.IsFalse(Regex.IsMatch(line, trailingWhitespacePattern), $"The '{fileName}' file contains trailing whitespaces , at line {lineNumber}"); } }
void AssertLandedTitlesEqualSigns(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; Assert.IsFalse(Regex.IsMatch(line, MissingEquaitySignPattern), $"The '{fileName}' file has a missing equality sign, at line {lineNumber}"); } }
void AssertLandedTitlesQuotes(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; Assert.IsFalse(Regex.IsMatch(line, InvalidQuotesPattern), $"The '{fileName}' file contains invalid quotes, at line {lineNumber}"); } }
void AssertIndentation(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; Assert.IsFalse(line.Contains("\t"), $"The '{fileName}' contains tabs, at line {lineNumber}"); Assert.IsFalse(Regex.IsMatch(line, invalidIndentationPattern), $"Invalid indentation in the '{fileName}' file, at line {lineNumber}"); } }
public void TestLocalisationFileNamingConventions() { if (!Directory.Exists(ApplicationPaths.LocalisationDirectory)) { return; } List <string> files = FileProvider.GetFilesInDirectory(ApplicationPaths.LocalisationDirectory).ToList(); foreach (string file in files) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); Assert.IsTrue(Regex.IsMatch(file, localisationFileNamePattern), $"The '{fileName}' file's name does not respect the conventions"); } }
void AssertLandedTitleDynamicNames(IEnumerable <LandedTitle> landedTitles, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); foreach (LandedTitle title in landedTitles) { Assert.IsTrue( title.DynamicNames.Keys.SequenceEqual(title.DynamicNames.Keys.OrderBy(x => x)), $"The '{fileName}' file contains unsorted dynamic names for {title.Id}"); if (title.Children.Count > 0) { AssertLandedTitleDynamicNames(title.Children, file); } } }
public void AssertEncodings() { List <string> landedTitlesFiles = FileProvider.GetFilesInDirectory(ApplicationPaths.LandedTitlesDirectory).ToList(); foreach (string file in landedTitlesFiles) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); List <string> lines = FileProvider.ReadAllLines(FileEncoding.Windows1252, file).ToList(); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; int charNumber = 0; foreach (char c in line) { Assert.IsTrue(EncodingChecker.IsWindows1252(c), $"The '{file}' file contains a non-WINDOWS-1252 character at line {lineNumber}, position {charNumber}"); } } } }
void AssertLandedTitleDynamicNames(IEnumerable <LandedTitle> landedTitles, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); foreach (LandedTitle title in landedTitles) { Assert.AreEqual( 1, landedTitles.Count(x => x.Id == title.Id), $"The '{fileName}' file contains a duplicated landed title '{title.Id}'"); foreach (string culture in title.DynamicNames.Keys) { Assert.IsFalse( Regex.IsMatch(title.DynamicNames[culture], InvalidSpacingPattern), $"The '{fileName}' file contains invalid spacing in the {culture} dynamic name of {title.Id}"); } if (title.Children.Count > 0) { AssertLandedTitleDynamicNames(title.Children, file); } } }
void AssertRepeatedBlankLines(IEnumerable <string> lines, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); int lineNumber = 0; foreach (string line in lines) { lineNumber += 1; bool lastWasBlank = false; bool currentIsBlank = string.IsNullOrWhiteSpace(line); if (currentIsBlank && lineNumber > 1) { if (string.IsNullOrWhiteSpace(lines.ElementAt(lineNumber - 2))) { lastWasBlank = true; } } Assert.IsFalse(currentIsBlank && lastWasBlank, $"The '{fileName}' file contains repeated blank lines, at line {lineNumber}"); } }
void AssertCultureChanceValues(IEnumerable <Culture> cultures, string file) { string fileName = PathExt.GetFileNameWithoutRootDirectory(file); foreach (Culture culture in cultures) { Assert.AreEqual( 1, cultures.Count(x => x.Id == culture.Id), $"The '{fileName}' file contains a duplicated culture '{culture.Id}'"); int maleNameInheritanceChance = culture.PatrilinealGrandfatherNameChance + culture.MatrilinealGrandfatherNameChance + culture.FatherNameChance; int femaleNameInheritanceChance = culture.PatrilinealGrandmotherNameChance + culture.MatrilinealGrandmotherNameChance + culture.MotherNameChance; Assert.IsTrue(maleNameInheritanceChance <= 100, $"The '{culture.Id}' culture's total name inheritance chance for males cannot exceed 100"); Assert.IsTrue(femaleNameInheritanceChance <= 100, $"The '{culture.Id}' culture's total name inheritance chance for females cannot exceed 100"); } }