From cdc6b2725ffbf5a3d1128b90c3387fd21113416f Mon Sep 17 00:00:00 2001 From: Nikolaj Olsson Date: Tue, 17 Sep 2019 16:15:59 +0200 Subject: [PATCH] A few unit tests + refacts --- libse/TextEncodingExtensions.cs | 4 +- src/Forms/Settings.cs | 2 +- src/Test/Core/CharUtilsTest.cs | 45 +++++++++++++ src/Test/Core/SeJsonParserTest.cs | 107 ++++++++++++++++++++++++++++-- src/Test/Test.csproj | 1 + 5 files changed, 149 insertions(+), 10 deletions(-) create mode 100644 src/Test/Core/CharUtilsTest.cs diff --git a/libse/TextEncodingExtensions.cs b/libse/TextEncodingExtensions.cs index 5b26eb473..5f65ee662 100644 --- a/libse/TextEncodingExtensions.cs +++ b/libse/TextEncodingExtensions.cs @@ -7,7 +7,7 @@ namespace Nikse.SubtitleEdit.Core public static class TextEncodingExtensions { // IANA registered EBCDIC character sets (https://www.iana.org/assignments/character-sets/character-sets.xml) - private static readonly HashSet _ebcdicNames = new HashSet(StringComparer.OrdinalIgnoreCase) + private static readonly HashSet EbcdicNames = new HashSet(StringComparer.OrdinalIgnoreCase) { "IBM037", "IBM500", "IBM870", "cp875", "IBM1026", "IBM01140", "IBM01141", "IBM01142", "IBM01143", "IBM01144", "IBM01145", "IBM01146", "IBM01147", "IBM01148", "IBM01149", "IBM273", "IBM277", "IBM278", "IBM280", "IBM284", "IBM285", "IBM290", "IBM297", "IBM420", "IBM423", "IBM424", "x-EBCDIC-KoreanExtended", "IBM-Thai", "IBM871", "IBM880", "IBM905", "cp1025", "IBM01047", "OSD_EBCDIC_DF04_15", @@ -27,7 +27,7 @@ namespace Nikse.SubtitleEdit.Core public static bool IsEbcdic(this Encoding encoding) { - return _ebcdicNames.Contains(encoding.WebName); + return EbcdicNames.Contains(encoding.WebName); } } diff --git a/src/Forms/Settings.cs b/src/Forms/Settings.cs index 9102ce4fc..a583f5c46 100644 --- a/src/Forms/Settings.cs +++ b/src/Forms/Settings.cs @@ -3017,7 +3017,7 @@ namespace Nikse.SubtitleEdit.Forms } } - private bool _editProfileOn = false; + private bool _editProfileOn; private void comboBoxRulesProfileName_SelectedIndexChanged(object sender, EventArgs e) { _editProfileOn = true; diff --git a/src/Test/Core/CharUtilsTest.cs b/src/Test/Core/CharUtilsTest.cs new file mode 100644 index 000000000..9a34d1e04 --- /dev/null +++ b/src/Test/Core/CharUtilsTest.cs @@ -0,0 +1,45 @@ +using Nikse.SubtitleEdit.Core; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Test.Core +{ + [TestClass] + public class CharUtilsTest + { + [TestMethod] + public void IsDigit() + { + Assert.AreEqual(true, CharUtils.IsDigit('0')); + Assert.AreEqual(true, CharUtils.IsDigit('1')); + Assert.AreEqual(true, CharUtils.IsDigit('2')); + Assert.AreEqual(true, CharUtils.IsDigit('3')); + Assert.AreEqual(true, CharUtils.IsDigit('4')); + Assert.AreEqual(true, CharUtils.IsDigit('5')); + Assert.AreEqual(true, CharUtils.IsDigit('6')); + Assert.AreEqual(true, CharUtils.IsDigit('7')); + Assert.AreEqual(true, CharUtils.IsDigit('8')); + Assert.AreEqual(true, CharUtils.IsDigit('9')); + + Assert.AreEqual(false, CharUtils.IsDigit('.')); + Assert.AreEqual(false, CharUtils.IsDigit('A')); + Assert.AreEqual(false, CharUtils.IsDigit(' ')); + Assert.AreEqual(false, CharUtils.IsDigit('z')); + } + + [TestMethod] + public void IsEnglishAlphabet() + { + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('a')); + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('b')); + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('z')); + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('A')); + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('Y')); + Assert.AreEqual(true, CharUtils.IsEnglishAlphabet('Z')); + + Assert.AreEqual(false, CharUtils.IsEnglishAlphabet('æ')); + Assert.AreEqual(false, CharUtils.IsEnglishAlphabet('ü')); + Assert.AreEqual(false, CharUtils.IsEnglishAlphabet('2')); + Assert.AreEqual(false, CharUtils.IsEnglishAlphabet('!')); + } + } +} diff --git a/src/Test/Core/SeJsonParserTest.cs b/src/Test/Core/SeJsonParserTest.cs index 0b69e8083..71899a500 100644 --- a/src/Test/Core/SeJsonParserTest.cs +++ b/src/Test/Core/SeJsonParserTest.cs @@ -38,12 +38,12 @@ namespace Test.Core { var parser = new SeJsonParser(); var result = parser.GetAllTagsByNameAsStrings("{" + Environment.NewLine + - "\"name\":\"John\"," + Environment.NewLine + - "\"age\":30," + Environment.NewLine + - "\"cars\": [" + Environment.NewLine + - "{ \"name\":\"Ford\", \"content\":\"Fiesta\" }," + Environment.NewLine + - "{ \"name\":\"BMW\", \"content\": \"X3\"}," + Environment.NewLine + - "{ \"name\":\"Fiat\", \"content\": \"500\" } ]}", "content"); + "\"name\":\"John\"," + Environment.NewLine + + "\"age\":30," + Environment.NewLine + + "\"cars\": [" + Environment.NewLine + + "{ \"name\":\"Ford\", \"content\":\"Fiesta\" }," + Environment.NewLine + + "{ \"name\":\"BMW\", \"content\": \"X3\"}," + Environment.NewLine + + "{ \"name\":\"Fiat\", \"content\": \"500\" } ]}", "content"); Assert.AreEqual("Fiesta", result[0]); Assert.AreEqual("X3", result[1]); Assert.AreEqual("500", result[2]); @@ -80,5 +80,98 @@ namespace Test.Core var result = parser.GetAllTagsByNameAsStrings("[{ \"content\" : null }]", "content"); Assert.AreEqual("null", result[0]); } + + + [TestMethod] + public void GetArrayElementsByName_Simple() + { + var parser = new SeJsonParser(); + var result = parser.GetArrayElementsByName("{ \"items\": [ { \"name\" : \"Joe1\" },{ \"name\" : \"Joe2\" } ] }", "items"); + Assert.AreEqual(2, result.Count); + Assert.AreEqual("{ \"name\" : \"Joe1\" }", result[0].Trim()); + Assert.AreEqual("{ \"name\" : \"Joe2\" }", result[1].Trim()); + } + + [TestMethod] + public void GetArrayElementsByName_Simple_Compact() + { + var parser = new SeJsonParser(); + var result = parser.GetArrayElementsByName("{\"items\":[{\"name\":\"Joe1\"},{\"name\":\"Joe2\"}]}", "items"); + Assert.AreEqual(2, result.Count); + Assert.AreEqual("{\"name\":\"Joe1\"}", result[0].Trim()); + Assert.AreEqual("{\"name\":\"Joe2\"}", result[1].Trim()); + } + + [TestMethod] + public void GetArrayElementsByName_Empty_Array() + { + var parser = new SeJsonParser(); + var result = parser.GetArrayElementsByName("{ \"start_time\": \"118.64\", \"items\": [] }", "items"); + Assert.AreEqual(1, result.Count); + Assert.AreEqual("", result[0].Trim()); + } + + [TestMethod] + public void GetArrayElementsByName_Advanced() + { + var parser = new SeJsonParser(); + var result = parser.GetArrayElementsByName(@"{ + 'results': { + 'transcripts': [ + { + 'transcript': 'em águas brasileiras estão achado mais antigo que o homem. Pré sal pré sal começa a se formar há mais de cem milhões de Jonas com Regina. Salas ainda habitavam até os postos são de altíssima produtividade. As grandes reservas de petróleo foram descobertas em dois mil e seis. Dois anos depois, o Brasil já começava a produzir petróleo retirado do pré sal. E hoje, quando a gente olha para trás, era muito desconhecido. Já são dez anos, vem sendo desafios para isso. As equipes contam com tecnologia especialmente desenvolvida para o pré sal. Muitas soluções saíram do Centro de Pesquisas da Petrobras Cenpes, no Rio de Janeiro. Aqui, pesquisadores inventaram técnicas que não existiam no mercado, coisa que o geofísico desenvolveram técnicas de processamento muito especial de matemática pesada. Para tentar mostrar de maneira mais óbvia onde estava roxa de pessoal, a área do pré sal fica a trezentos quilômetros da costa que vai do Espírito Santo a Santa Catarina, uma extensão de oitocentos quilômetros. O petróleo está a sete mil metros de profundidade, abaixo de uma espessa camada de sal, que funciona como um sino. Ao contrário do que muita gente acha que o petróleo tem, piscinas, debaixo do Mar Petróleo se aloja nesses buracos nessas horas, muitas dessas rochas estão no fundo da Bacia de Santos, no litoral de São Paulo. Metade da produção de petróleo que a gente tem aqui no Brasil já vem do pré sal, e um terço do gás que é consumido pelo Brasil também vem do pré sal. Então, se a gente não tivesse descoberto e desenvolvido essa tecnologia toda para poder operar as plataformas, hoje a gente estaria muito mais dependente do mercado externo. A jornada do conhecimento da tecnologia trouxe para a Petrobras a inovação que certamente para nós, hoje são ativos, são mais importantes do que o petróleo.' + } + ], + 'speaker_labels': { + 'speakers': 4, + 'segments': [ + { + 'start_time': '5.17', + 'speaker_label': 'spk_0', + 'end_time': '9.25', + 'items': [ + { + 'start_time': '5.17', + 'speaker_label': 'spk_0', + 'end_time': '5.37' + }, + { + 'start_time': '105.54', + 'speaker_label': 'spk_1', + 'end_time': '106.09' + } + ] + } + ] + }, + 'items': [ + { + 'start_time': '5.17', + 'end_time': '5.37', + 'alternatives': [ + { + 'confidence': '0.9999', + 'content': 'em' + } + ], + 'type': 'pronunciation' + }, + { + 'start_time': '5.37', + 'end_time': '5.67', + 'alternatives': [ + { + 'confidence': '0.9999', + 'content': 'águas' + } + ], + 'type': 'pronunciation' + } + ] + }, + 'status': 'COMPLETED' +}".Replace('\'', '"'), "items"); + Assert.AreEqual(4, result.Count); + } } -} +} \ No newline at end of file diff --git a/src/Test/Test.csproj b/src/Test/Test.csproj index ac435c72a..aa0584dc6 100644 --- a/src/Test/Test.csproj +++ b/src/Test/Test.csproj @@ -45,6 +45,7 @@ +