Fix frontend tests running
This commit is contained in:
parent
3acd390f2b
commit
34b3fe715c
@ -1,2 +1,5 @@
|
|||||||
PUSHD %~dp0..
|
PUSHD %~dp0..
|
||||||
dotnet test common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter Name~SpellCheckTest -l:html -r TestsResults
|
set dir=%~dp0..
|
||||||
|
echo %dir%
|
||||||
|
|
||||||
|
dotnet test common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter Name~SpellCheckTest -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%/TestsResults"
|
8
build/run.translations.spellcheck.test.sh
Executable file
8
build/run.translations.spellcheck.test.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
rd="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
echo "Run script directory:" $dir
|
||||||
|
|
||||||
|
dir=$(builtin cd $rd/../; pwd)
|
||||||
|
|
||||||
|
echo "Root directory:" $dir
|
||||||
|
|
||||||
|
dotnet test $dir/common/Tests/Frontend.Translations.Tests/Frontend.Translations.Tests.csproj --filter Name~SpellCheckTest -l:html --results-directory "$dir/TestsResults" --environment "BASE_DIR=$dir"
|
@ -1,4 +1,4 @@
|
|||||||
PUSHD %~dp0..
|
PUSHD %~dp0..
|
||||||
set dir=%~dp0..
|
set dir=%~dp0..
|
||||||
echo %dir%
|
echo %dir%
|
||||||
dotnet test common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=FastRunning" -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%/TestsResults"
|
dotnet test common\Tests\Frontend.Translations.Tests\Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%/TestsResults"
|
@ -5,4 +5,4 @@ dir=$(builtin cd $rd/../; pwd)
|
|||||||
|
|
||||||
echo "Root directory:" $dir
|
echo "Root directory:" $dir
|
||||||
|
|
||||||
dotnet test $dir/common/Tests/Frontend.Translations.Tests/Frontend.Translations.Tests.csproj --filter "TestCategory=FastRunning" -l:html --results-directory "$dir/TestsResults" --environment "BASE_DIR=$dir"
|
dotnet test $dir/common/Tests/Frontend.Translations.Tests/Frontend.Translations.Tests.csproj --filter "TestCategory=Locales" -l:html --results-directory "$dir/TestsResults" --environment "BASE_DIR=$dir"
|
@ -181,7 +181,7 @@ public class ImagesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Images")]
|
||||||
public void ParseMd5Test()
|
public void ParseMd5Test()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(0, HashErrorFiles.Count, string.Join("\r\n",
|
Assert.AreEqual(0, HashErrorFiles.Count, string.Join("\r\n",
|
||||||
@ -189,7 +189,7 @@ public class ImagesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Images")]
|
||||||
public void DublicatesFilesByMD5HashTest()
|
public void DublicatesFilesByMD5HashTest()
|
||||||
{
|
{
|
||||||
var duplicatesByMD5 = ImageFiles
|
var duplicatesByMD5 = ImageFiles
|
||||||
@ -205,7 +205,7 @@ public class ImagesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Images")]
|
||||||
public void DublicatesFilesByFileNameButDifferentByMD5HashTest()
|
public void DublicatesFilesByFileNameButDifferentByMD5HashTest()
|
||||||
{
|
{
|
||||||
var duplicatesByNameWithDifMD5 = ImageFiles
|
var duplicatesByNameWithDifMD5 = ImageFiles
|
||||||
@ -222,7 +222,7 @@ public class ImagesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Images")]
|
||||||
public void UselessImagesTest()
|
public void UselessImagesTest()
|
||||||
{
|
{
|
||||||
var usedImages = SourceImageFiles
|
var usedImages = SourceImageFiles
|
||||||
@ -371,487 +371,5 @@ public class ImagesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
Assert.AreEqual(0, 0);
|
Assert.AreEqual(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void NotTranslatedKeysTest()
|
|
||||||
{
|
|
||||||
var message = $"Next languages are not equal 'en' by translated keys count:\r\n\r\n";
|
|
||||||
|
|
||||||
var exists = false;
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
foreach (var module in ModuleFolders)
|
|
||||||
{
|
|
||||||
if (module.AvailableLanguages == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var enLanguages = module.AvailableLanguages.Where(l => l.Language == "en").ToList();
|
|
||||||
|
|
||||||
var otherLanguages = module.AvailableLanguages.Where(l => l.Language != "en").ToList();
|
|
||||||
|
|
||||||
foreach (var lng in otherLanguages)
|
|
||||||
{
|
|
||||||
var lngKeys = lng.Translations.Select(f => f.Key).ToList();
|
|
||||||
|
|
||||||
var enKeys = enLanguages.Where(l => l.Path == lng.Path.Replace(Utils.ConvertPathToOS($"/{lng.Language}/"), Utils.ConvertPathToOS("/en/")))
|
|
||||||
.SelectMany(l => l.Translations.Select(f => f.Key))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var notFoundKeys = enKeys.Except(lngKeys).ToList();
|
|
||||||
|
|
||||||
if (!notFoundKeys.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
exists = true;
|
|
||||||
|
|
||||||
message += $"{++i}. Language ('{lng.Language}'={notFoundKeys.Count}/'en'={enKeys.Count}). Path '{lng.Path}' " +
|
|
||||||
$"Not found keys:\r\n\r\n";
|
|
||||||
|
|
||||||
message += string.Join("\r\n", notFoundKeys) + "\r\n\r\n";
|
|
||||||
|
|
||||||
// Save empty not found keys
|
|
||||||
//SaveNotFoundKeys(lng.Path, notFoundKeys);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(false, exists, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void NotFoundKeysTest()
|
|
||||||
{
|
|
||||||
var allEnKeys = TranslationFiles
|
|
||||||
.Where(file => file.Language == "en")
|
|
||||||
.SelectMany(item => item.Translations)
|
|
||||||
.Select(item => item.Key);
|
|
||||||
|
|
||||||
var allJsTranslationKeys = JavaScriptFiles
|
|
||||||
.Where(f => !f.Path.Contains("Banner.js")) // skip Banner.js (translations from firebase)
|
|
||||||
.SelectMany(j => j.TranslationKeys)
|
|
||||||
.Select(k => k.Substring(k.IndexOf(":") + 1))
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
var notFoundJsKeys = allJsTranslationKeys.Except(allEnKeys);
|
|
||||||
|
|
||||||
Assert.AreEqual(0, notFoundJsKeys.Count(),
|
|
||||||
"Some i18n-keys are not exist in translations in 'en' language: Keys:\r\n{0}",
|
|
||||||
string.Join("\r\n", notFoundJsKeys));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void UselessTranslationKeysTest()
|
|
||||||
{
|
|
||||||
var allEnKeys = TranslationFiles
|
|
||||||
.Where(file => file.Language == "en")
|
|
||||||
.SelectMany(item => item.Translations)
|
|
||||||
.Select(item => item.Key)
|
|
||||||
.Where(k => !k.StartsWith("Culture_"))
|
|
||||||
.OrderBy(t => t);
|
|
||||||
|
|
||||||
var allJsTranslationKeys = JavaScriptFiles
|
|
||||||
.SelectMany(j => j.TranslationKeys)
|
|
||||||
.Select(k => k.Substring(k.IndexOf(":") + 1))
|
|
||||||
.Where(k => !k.StartsWith("Culture_"))
|
|
||||||
.Distinct()
|
|
||||||
.OrderBy(t => t);
|
|
||||||
|
|
||||||
var notFoundi18nKeys = allEnKeys.Except(allJsTranslationKeys);
|
|
||||||
|
|
||||||
Assert.AreEqual(0, notFoundi18nKeys.Count(),
|
|
||||||
"Some i18n-keys are not found in js keys:\r\n{0}",
|
|
||||||
string.Join("\r\n", notFoundi18nKeys));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void UselessModuleTranslationKeysTest()
|
|
||||||
{
|
|
||||||
var notFoundi18nKeys = new List<KeyValuePair<string, List<string>>>();
|
|
||||||
|
|
||||||
var message = $"Some i18n-keys are not found in Module or Common translations: \r\nKeys: \r\n\r\n";
|
|
||||||
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < ModuleFolders.Count; i++)
|
|
||||||
{
|
|
||||||
var module = ModuleFolders[i];
|
|
||||||
|
|
||||||
if (module.AppliedJsTranslationKeys == null && module.AvailableLanguages != null)
|
|
||||||
{
|
|
||||||
message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' NOT USED\r\n";
|
|
||||||
|
|
||||||
var list = module.AvailableLanguages
|
|
||||||
.SelectMany(l => l.Translations.Select(t => t.Key).ToList())
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
notFoundi18nKeys.Add(new KeyValuePair<string, List<string>>("ANY LANGUAGES", list));
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var notCommonKeys = module.AppliedJsTranslationKeys
|
|
||||||
.Where(k => !k.StartsWith("Common:"))
|
|
||||||
.OrderBy(t => t)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var onlyCommonKeys = module.AppliedJsTranslationKeys
|
|
||||||
.Except(notCommonKeys)
|
|
||||||
.Select(k => k.Replace("Common:", ""))
|
|
||||||
.OrderBy(t => t)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
notCommonKeys = notCommonKeys.Select(k => k.Substring(k.IndexOf(":") + 1)).ToList();
|
|
||||||
|
|
||||||
if (onlyCommonKeys.Any())
|
|
||||||
{
|
|
||||||
foreach (var lng in CommonTranslations)
|
|
||||||
{
|
|
||||||
var list = onlyCommonKeys
|
|
||||||
.Except(lng.Translations.Select(t => t.Key))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (!list.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n";
|
|
||||||
|
|
||||||
notFoundi18nKeys.Add(new KeyValuePair<string, List<string>>(lng.Language, list));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (module.AvailableLanguages == null)
|
|
||||||
{
|
|
||||||
if (notCommonKeys.Any())
|
|
||||||
{
|
|
||||||
message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' \r\n {string.Join("\r\n", notCommonKeys)} \r\n";
|
|
||||||
|
|
||||||
notFoundi18nKeys.Add(new KeyValuePair<string, List<string>>("ANY LANGUAGES", notCommonKeys));
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var lng in module.AvailableLanguages)
|
|
||||||
{
|
|
||||||
var list = lng.Translations
|
|
||||||
.Select(t => t.Key)
|
|
||||||
.Except(notCommonKeys)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (!list.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n";
|
|
||||||
|
|
||||||
notFoundi18nKeys.Add(new KeyValuePair<string, List<string>>(lng.Language, list));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(0, notFoundi18nKeys.Count, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void NotTranslatedCommonKeysTest()
|
|
||||||
{
|
|
||||||
var message = $"Some i18n-keys are not found in COMMON translations: \r\nKeys: \r\n\r\n";
|
|
||||||
|
|
||||||
var enLanguageKeys = CommonTranslations
|
|
||||||
.Where(l => l.Language == "en")
|
|
||||||
.FirstOrDefault()
|
|
||||||
.Translations
|
|
||||||
.Select(k => k.Key)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var otherCommonLanguages = CommonTranslations.Where(l => l.Language != "en");
|
|
||||||
|
|
||||||
var exists = false;
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
foreach (var lng in otherCommonLanguages)
|
|
||||||
{
|
|
||||||
var list = enLanguageKeys
|
|
||||||
.Except(lng.Translations.Select(t => t.Key))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (!list.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
message += $"{++i}. '{lng.Language}' Keys: \r\n {string.Join("\r\n", list)} \r\n";
|
|
||||||
|
|
||||||
exists = true;
|
|
||||||
|
|
||||||
// Save empty not found keys
|
|
||||||
//SaveNotFoundKeys(lng.Path, list);
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(false, exists, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void UpdateKeys(string pathToJson, List<TranslationItem> newKeys)
|
|
||||||
{
|
|
||||||
if (!File.Exists(pathToJson) || !newKeys.Any())
|
|
||||||
return;
|
|
||||||
|
|
||||||
var jsonTranslation = JObject.Parse(File.ReadAllText(pathToJson));
|
|
||||||
|
|
||||||
var keys = newKeys.Select(k => k.Key).ToList();
|
|
||||||
|
|
||||||
var properties = jsonTranslation.Properties().ToList();
|
|
||||||
|
|
||||||
properties.ForEach(p =>
|
|
||||||
{
|
|
||||||
var newKey = newKeys.Where(k => k.Key == p.Name).FirstOrDefault();
|
|
||||||
if (newKey != null)
|
|
||||||
p.Value = newKey.Value;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
var result = new JObject(properties);
|
|
||||||
|
|
||||||
var sortedJsonString = JsonConvert.SerializeObject(result, Formatting.Indented);
|
|
||||||
|
|
||||||
File.WriteAllText(pathToJson, sortedJsonString, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveEmptyKeys(string pathToJson, List<string> emptyKeys)
|
|
||||||
{
|
|
||||||
if (!File.Exists(pathToJson) || !emptyKeys.Any())
|
|
||||||
return;
|
|
||||||
|
|
||||||
var jsonTranslation = JObject.Parse(File.ReadAllText(pathToJson));
|
|
||||||
|
|
||||||
var properties = jsonTranslation.Properties().Where(p => !emptyKeys.Contains(p.Name)).ToList();
|
|
||||||
|
|
||||||
var result = new JObject(properties);
|
|
||||||
|
|
||||||
var sortedJsonString = JsonConvert.SerializeObject(result, Formatting.Indented);
|
|
||||||
|
|
||||||
File.WriteAllText(pathToJson, sortedJsonString, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetWorkspace(string path)
|
|
||||||
{
|
|
||||||
var folderName = Directory.GetParent(Path.GetDirectoryName(path)).Name;
|
|
||||||
|
|
||||||
switch (folderName)
|
|
||||||
{
|
|
||||||
case "Client":
|
|
||||||
return Workspaces.Find(w => w.Contains("client"));
|
|
||||||
case "Editor":
|
|
||||||
return Workspaces.Find(w => w.Contains("editor"));
|
|
||||||
case "Login":
|
|
||||||
return Workspaces.Find(w => w.Contains("login"));
|
|
||||||
default:
|
|
||||||
return Path.Combine(BasePath, Utils.ConvertPathToOS("public\\locales"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void EmptyValueKeysTest()
|
|
||||||
{
|
|
||||||
var message = $"Next files have empty keys:\r\n\r\n";
|
|
||||||
|
|
||||||
var exists = false;
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
foreach (var module in ModuleFolders)
|
|
||||||
{
|
|
||||||
if (module.AvailableLanguages == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
foreach (var lng in module.AvailableLanguages)
|
|
||||||
{
|
|
||||||
var emptyTranslationItems = lng.Translations.Where(f => string.IsNullOrEmpty(f.Value)).ToList();
|
|
||||||
|
|
||||||
if (!emptyTranslationItems.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
exists = true;
|
|
||||||
|
|
||||||
message += $"{++i}. Language '{lng.Language}' (Count: {emptyTranslationItems.Count}). Path '{lng.Path}' " +
|
|
||||||
$"Empty keys:\r\n\r\n";
|
|
||||||
|
|
||||||
var emptyKeys = emptyTranslationItems.Select(t => t.Key).ToList();
|
|
||||||
|
|
||||||
message += string.Join("\r\n", emptyKeys) + "\r\n\r\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var lng in CommonTranslations)
|
|
||||||
{
|
|
||||||
var emptyTranslationItems = lng.Translations.Where(f => string.IsNullOrEmpty(f.Value)).ToList();
|
|
||||||
|
|
||||||
if (!emptyTranslationItems.Any())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
exists = true;
|
|
||||||
|
|
||||||
message += $"{++i}. Language '{lng.Language}' (Count: {emptyTranslationItems.Count}). Path '{lng.Path}' " +
|
|
||||||
$"Empty keys:\r\n\r\n";
|
|
||||||
|
|
||||||
var emptyKeys = emptyTranslationItems.Select(t => t.Key).ToList();
|
|
||||||
|
|
||||||
message += string.Join("\r\n", emptyKeys) + "\r\n\r\n";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(false, exists, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void LanguageTranslatedPercentTest()
|
|
||||||
{
|
|
||||||
var message = $"Next languages translated less then 100%:\r\n\r\n";
|
|
||||||
|
|
||||||
var groupedByLng = TranslationFiles
|
|
||||||
.GroupBy(t => t.Language)
|
|
||||||
.Select(g => new
|
|
||||||
{
|
|
||||||
Language = g.Key,
|
|
||||||
AllTranslated = g.ToList()
|
|
||||||
.SelectMany(t => t.Translations)
|
|
||||||
.ToList()
|
|
||||||
})
|
|
||||||
.Select(t => new
|
|
||||||
{
|
|
||||||
t.Language,
|
|
||||||
TotalKeysCount = t.AllTranslated.LongCount(),
|
|
||||||
EmptyKeysCount = t.AllTranslated
|
|
||||||
.Where(t => string.IsNullOrEmpty(t.Value))
|
|
||||||
.LongCount()
|
|
||||||
})
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
var exists = false;
|
|
||||||
|
|
||||||
var expectedTotalKeysCount = groupedByLng.Where(t => t.Language == "en").Single().TotalKeysCount;
|
|
||||||
|
|
||||||
foreach (var lng in groupedByLng)
|
|
||||||
{
|
|
||||||
if (lng.EmptyKeysCount == 0 && lng.TotalKeysCount == expectedTotalKeysCount)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
exists = true;
|
|
||||||
|
|
||||||
var translated = lng.TotalKeysCount == expectedTotalKeysCount
|
|
||||||
? Math.Round(100f - (lng.EmptyKeysCount * 100f / expectedTotalKeysCount), 1)
|
|
||||||
: Math.Round(lng.TotalKeysCount * 100f / expectedTotalKeysCount, 1);
|
|
||||||
|
|
||||||
message += $"{++i}. Language '{lng.Language}' translated by '{translated}%'\r\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(false, exists, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void NotTranslatedToastsTest()
|
|
||||||
{
|
|
||||||
var message = $"Next text not translated in toasts:\r\n\r\n";
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
NotTranslatedToasts.GroupBy(t => t.Key)
|
|
||||||
.Select(g => new
|
|
||||||
{
|
|
||||||
FilePath = g.Key,
|
|
||||||
Values = g.ToList()
|
|
||||||
})
|
|
||||||
.ToList()
|
|
||||||
.ForEach(t =>
|
|
||||||
{
|
|
||||||
message += $"{++i}. Path='{t.FilePath}'\r\n\r\n{string.Join("\r\n", t.Values.Select(v => v.Value))}\r\n\r\n";
|
|
||||||
});
|
|
||||||
|
|
||||||
Assert.AreEqual(0, NotTranslatedToasts.Count, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
[Category("FastRunning")]
|
|
||||||
public void WrongTranslationVariablesTest()
|
|
||||||
{
|
|
||||||
var message = $"Next keys have wrong variables:\r\n\r\n";
|
|
||||||
var regVariables = new Regex("\\{\\{([^\\{].?[^\\}]+)\\}\\}", RegexOptions.Compiled | RegexOptions.Multiline);
|
|
||||||
|
|
||||||
var groupedByLng = TranslationFiles
|
|
||||||
.GroupBy(t => t.Language)
|
|
||||||
.Select(g => new
|
|
||||||
{
|
|
||||||
Language = g.Key,
|
|
||||||
TranslationsWithVariables = g.ToList()
|
|
||||||
.SelectMany(t => t.Translations)
|
|
||||||
.Where(k => k.Value.IndexOf("{{") != -1)
|
|
||||||
.Select(t => new
|
|
||||||
{
|
|
||||||
t.Key,
|
|
||||||
t.Value,
|
|
||||||
Variables = regVariables.Matches(t.Value)
|
|
||||||
.Select(m => m.Groups[1]?.Value?.Trim().Replace(", lowercase", ""))
|
|
||||||
.ToList()
|
|
||||||
})
|
|
||||||
.ToList()
|
|
||||||
})
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var enWithVariables = groupedByLng
|
|
||||||
.Where(t => t.Language == "en")
|
|
||||||
.SelectMany(t => t.TranslationsWithVariables)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var otherLanguagesWithVariables = groupedByLng
|
|
||||||
.Where(t => t.Language != "en")
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
var errorsCount = 0;
|
|
||||||
|
|
||||||
foreach (var lng in otherLanguagesWithVariables)
|
|
||||||
{
|
|
||||||
foreach (var t in lng.TranslationsWithVariables)
|
|
||||||
{
|
|
||||||
var enKey = enWithVariables
|
|
||||||
.Where(en => en.Key == t.Key)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
if (enKey == null)
|
|
||||||
{
|
|
||||||
// wrong
|
|
||||||
message += $"{++i}. lng='{lng.Language}' key='{t.Key}' has no 'en' language variant (!!!useless key!!!)\r\n\r\n";
|
|
||||||
errorsCount++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enKey.Variables.Count != t.Variables.Count)
|
|
||||||
{
|
|
||||||
// wrong
|
|
||||||
message += $"{++i}. lng='{lng.Language}' key='{t.Key}' has less variables then 'en' language have " +
|
|
||||||
$"(en={enKey.Variables.Count}|{lng.Language}={t.Variables.Count})\r\n" +
|
|
||||||
$"'en': '{enKey.Value}'\r\n'{lng.Language}': '{t.Value}'\r\n\r\n";
|
|
||||||
errorsCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!t.Variables.All(v => enKey.Variables.Contains(v)))
|
|
||||||
{
|
|
||||||
// wrong
|
|
||||||
errorsCount++;
|
|
||||||
message += $"{++i}. lng='{lng.Language}' key='{t.Key}' has not equals variables of 'en' language have\r\n\r\n" +
|
|
||||||
$"Have to be:\r\n'{enKey.Value}'\r\n\r\n{string.Join("\r\n", enKey.Variables)}\r\n\r\n" +
|
|
||||||
$"But in real:\r\n'{t.Value}'\r\n\r\n{string.Join("\r\n", t.Variables)} \r\n\r\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.AreEqual(0, errorsCount, message);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
}
|
@ -174,6 +174,7 @@ public class LocalesTest
|
|||||||
let clientDir = Path.Combine(BasePath, wsPath)
|
let clientDir = Path.Combine(BasePath, wsPath)
|
||||||
from filePath in Utils.GetFiles(clientDir, searchPatern, SearchOption.AllDirectories)
|
from filePath in Utils.GetFiles(clientDir, searchPatern, SearchOption.AllDirectories)
|
||||||
where !filePath.Contains(Utils.ConvertPathToOS("dist/"))
|
where !filePath.Contains(Utils.ConvertPathToOS("dist/"))
|
||||||
|
&& !filePath.Contains(Utils.ConvertPathToOS("storybook-static/"))
|
||||||
&& !filePath.Contains(".test.js")
|
&& !filePath.Contains(".test.js")
|
||||||
&& !filePath.Contains(".stories.js")
|
&& !filePath.Contains(".stories.js")
|
||||||
&& !filePath.Contains(".test.ts")
|
&& !filePath.Contains(".test.ts")
|
||||||
@ -316,12 +317,12 @@ public class LocalesTest
|
|||||||
|
|
||||||
TestContext.Progress.WriteLine($"Found CommonTranslations = {CommonTranslations.Count()}. First path is '{CommonTranslations.FirstOrDefault()?.Path}'");
|
TestContext.Progress.WriteLine($"Found CommonTranslations = {CommonTranslations.Count()}. First path is '{CommonTranslations.FirstOrDefault()?.Path}'");
|
||||||
|
|
||||||
TestContext.Progress.WriteLine($"Found _md5Excludes = {_md5Excludes.Count()} Path to file '{_md5ExcludesPath}'");
|
TestContext.Progress.WriteLine($"Found _md5Excludes = {_md5Excludes.Count()} Path to file '{_md5ExcludesPath}'");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void ParseJsonTest()
|
public void ParseJsonTest()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(0, ParseJsonErrors.Count, string.Join("\r\n", ParseJsonErrors.Select(e => $"File path = '{e.Path}' failed to parse with error: '{e.Exception.Message}'")));
|
Assert.AreEqual(0, ParseJsonErrors.Count, string.Join("\r\n", ParseJsonErrors.Select(e => $"File path = '{e.Path}' failed to parse with error: '{e.Exception.Message}'")));
|
||||||
@ -350,7 +351,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("LongRunning")]
|
[Category("SpellCheck")]
|
||||||
public void SpellCheckTest()
|
public void SpellCheckTest()
|
||||||
{
|
{
|
||||||
var i = 0;
|
var i = 0;
|
||||||
@ -425,7 +426,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void SingleKeyFilesTest()
|
public void SingleKeyFilesTest()
|
||||||
{
|
{
|
||||||
var singleKeyTranslationFiles = TranslationFiles
|
var singleKeyTranslationFiles = TranslationFiles
|
||||||
@ -436,7 +437,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void DublicatesFilesByMD5HashTest()
|
public void DublicatesFilesByMD5HashTest()
|
||||||
{
|
{
|
||||||
var duplicatesByMD5 = TranslationFiles
|
var duplicatesByMD5 = TranslationFiles
|
||||||
@ -452,7 +453,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void FullEnDublicatesTest()
|
public void FullEnDublicatesTest()
|
||||||
{
|
{
|
||||||
var fullEnDuplicates = TranslationFiles
|
var fullEnDuplicates = TranslationFiles
|
||||||
@ -469,7 +470,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void EnDublicatesByContentTest()
|
public void EnDublicatesByContentTest()
|
||||||
{
|
{
|
||||||
var allRuTranslations = TranslationFiles
|
var allRuTranslations = TranslationFiles
|
||||||
@ -548,7 +549,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void NotAllLanguageTranslatedTest()
|
public void NotAllLanguageTranslatedTest()
|
||||||
{
|
{
|
||||||
var groupedByLng = TranslationFiles
|
var groupedByLng = TranslationFiles
|
||||||
@ -625,7 +626,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void NotTranslatedKeysTest()
|
public void NotTranslatedKeysTest()
|
||||||
{
|
{
|
||||||
var message = $"Next languages are not equal 'en' by translated keys count:\r\n\r\n";
|
var message = $"Next languages are not equal 'en' by translated keys count:\r\n\r\n";
|
||||||
@ -672,7 +673,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void NotFoundKeysTest()
|
public void NotFoundKeysTest()
|
||||||
{
|
{
|
||||||
var allEnKeys = TranslationFiles
|
var allEnKeys = TranslationFiles
|
||||||
@ -694,7 +695,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void UselessTranslationKeysTest()
|
public void UselessTranslationKeysTest()
|
||||||
{
|
{
|
||||||
var allEnKeys = TranslationFiles
|
var allEnKeys = TranslationFiles
|
||||||
@ -719,7 +720,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void UselessModuleTranslationKeysTest()
|
public void UselessModuleTranslationKeysTest()
|
||||||
{
|
{
|
||||||
var notFoundi18nKeys = new List<KeyValuePair<string, List<string>>>();
|
var notFoundi18nKeys = new List<KeyValuePair<string, List<string>>>();
|
||||||
@ -807,7 +808,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void NotTranslatedCommonKeysTest()
|
public void NotTranslatedCommonKeysTest()
|
||||||
{
|
{
|
||||||
var message = $"Some i18n-keys are not found in COMMON translations: \r\nKeys: \r\n\r\n";
|
var message = $"Some i18n-keys are not found in COMMON translations: \r\nKeys: \r\n\r\n";
|
||||||
@ -904,7 +905,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void EmptyValueKeysTest()
|
public void EmptyValueKeysTest()
|
||||||
{
|
{
|
||||||
// Uncomment if new keys are available
|
// Uncomment if new keys are available
|
||||||
@ -1008,7 +1009,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void LanguageTranslatedPercentTest()
|
public void LanguageTranslatedPercentTest()
|
||||||
{
|
{
|
||||||
var message = $"Next languages translated less then 100%:\r\n\r\n";
|
var message = $"Next languages translated less then 100%:\r\n\r\n";
|
||||||
@ -1055,7 +1056,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void NotTranslatedToastsTest()
|
public void NotTranslatedToastsTest()
|
||||||
{
|
{
|
||||||
var message = $"Next text not translated in toasts:\r\n\r\n";
|
var message = $"Next text not translated in toasts:\r\n\r\n";
|
||||||
@ -1078,7 +1079,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
[Category("FastRunning")]
|
[Category("Locales")]
|
||||||
public void WrongTranslationVariablesTest()
|
public void WrongTranslationVariablesTest()
|
||||||
{
|
{
|
||||||
var message = $"Next keys have wrong variables:\r\n\r\n";
|
var message = $"Next keys have wrong variables:\r\n\r\n";
|
||||||
@ -1156,7 +1157,7 @@ public class LocalesTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
//[Test]
|
//[Test]
|
||||||
//[Category("FastRunning")]
|
//[Category("Locales")]
|
||||||
//public void TranslationsEncodingTest()
|
//public void TranslationsEncodingTest()
|
||||||
//{
|
//{
|
||||||
// /*//Convert to UTF-8
|
// /*//Convert to UTF-8
|
||||||
|
Loading…
Reference in New Issue
Block a user