diff --git a/vCardEditor/JsonLocalizationProvider.cs b/vCardEditor/JsonLocalizationProvider.cs index fc3a243..c4360c5 100644 --- a/vCardEditor/JsonLocalizationProvider.cs +++ b/vCardEditor/JsonLocalizationProvider.cs @@ -8,7 +8,7 @@ namespace vCardEditor { private readonly LocalizationFile _localization; private string _currentLanguage; - public JsonLocalizationProvider(LocalizationFile localization, string defaultLanguage = "fr") + public JsonLocalizationProvider(LocalizationFile localization, string defaultLanguage = "en") { _localization = localization; _currentLanguage = defaultLanguage; @@ -32,9 +32,9 @@ namespace vCardEditor return value; } - if (_localization.languages.TryGetValue("en", out var fallback)) + if (_localization.languages.TryGetValue("en", out var fallbackLang)) { - if (lang.messages.TryGetValue(key, out var fallbackMsg)) + if (fallbackLang.messages.TryGetValue(key, out var fallbackMsg)) return fallbackMsg; } diff --git a/vCardEditor/Libs/TinyJson/IParser.cs b/vCardEditor/Libs/TinyJson/IParser.cs new file mode 100644 index 0000000..bf4be15 --- /dev/null +++ b/vCardEditor/Libs/TinyJson/IParser.cs @@ -0,0 +1,7 @@ +namespace vCardEditor.Libs.TinyJson +{ + public interface IParser + { + T Deserialize(string json); + } +} diff --git a/vCardEditor/Libs/TinyJson/LocalizationLoader.cs b/vCardEditor/Libs/TinyJson/LocalizationLoader.cs index 411a340..38f2896 100644 --- a/vCardEditor/Libs/TinyJson/LocalizationLoader.cs +++ b/vCardEditor/Libs/TinyJson/LocalizationLoader.cs @@ -1,42 +1,28 @@ -using System.IO; -using System.Reflection; -using TinyJson; +using vCardEditor.Repository; namespace vCardEditor.Libs.TinyJson { - public static class LocalizationLoader + public class LocalizationLoader { - private const string EmbeddedResourceName = "vCardEditor.i18n.lang.json"; + private readonly IParser _parser; + private readonly IFileHandler _fileHandler; - public static LocalizationFile LoadEmbedded() + public LocalizationLoader(IParser parser, IFileHandler fileHandler) { - var assembly = Assembly.GetExecutingAssembly(); - - using (var stream = assembly.GetManifestResourceStream(EmbeddedResourceName)) - { - if (stream == null) - throw new FileNotFoundException($"Ressource embarquée '{EmbeddedResourceName}' introuvable."); - - using (var reader = new StreamReader(stream)) - { - var json = reader.ReadToEnd(); - return Deserialize(json); - } - } + _parser = parser; + _fileHandler = fileHandler; } - //public static LocalizationFile LoadFromFile(string filePath) - //{ - // if (!File.Exists(filePath)) - // return new LocalizationFile(); // fichier inexistant, retourne un fichier vide - - // var json = File.ReadAllText(filePath); - // return Deserialize(json); - //} - - private static LocalizationFile Deserialize(string json) + public LocalizationFile LoadEmbedded(string EmbeddedResourceName = "vCardEditor.i18n.lang.json") { - var result = JSONParser.FromJson(json); + string json = _fileHandler.LoadJsonFromAssembly(EmbeddedResourceName); + return Deserialize(json); + } + + + private LocalizationFile Deserialize(string json) + { + var result = _parser.Deserialize(json); return result ?? new LocalizationFile(); } diff --git a/vCardEditor/Libs/TinyJson/TinyJsonParser.cs b/vCardEditor/Libs/TinyJson/TinyJsonParser.cs new file mode 100644 index 0000000..f140344 --- /dev/null +++ b/vCardEditor/Libs/TinyJson/TinyJsonParser.cs @@ -0,0 +1,12 @@ +using TinyJson; + +namespace vCardEditor.Libs.TinyJson +{ + public class TinyJsonParser : IParser + { + public T Deserialize(string json) + { + return JSONParser.FromJson(json); + } + } +} diff --git a/vCardEditor/Program.cs b/vCardEditor/Program.cs index a9ef539..f848a91 100644 --- a/vCardEditor/Program.cs +++ b/vCardEditor/Program.cs @@ -18,11 +18,11 @@ namespace vCardEditor { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - - var embedded = LocalizationLoader.LoadEmbedded(); - var localizationProvider = new JsonLocalizationProvider(embedded); - FileHandler fileHandler = new FileHandler(); + + var embeddedlang = new LocalizationLoader(new TinyJsonParser(), fileHandler).LoadEmbedded(); + var localizationProvider = new JsonLocalizationProvider(embeddedlang); + MainForm mainForm = new MainForm(); new MainPresenter(mainForm, new ContactRepository(fileHandler), localizationProvider); diff --git a/vCardEditor/Repository/FileHandler.cs b/vCardEditor/Repository/FileHandler.cs index 1606dd0..e313a49 100644 --- a/vCardEditor/Repository/FileHandler.cs +++ b/vCardEditor/Repository/FileHandler.cs @@ -1,5 +1,5 @@ using System.IO; - +using System.Reflection; namespace vCardEditor.Repository { @@ -60,5 +60,21 @@ namespace vCardEditor.Repository string[] filePaths = Directory.GetFiles(path, ext,SearchOption.TopDirectoryOnly); return filePaths; } + + public string LoadJsonFromAssembly(string EmbeddedResourceName) + { + string json; + var assembly = Assembly.GetExecutingAssembly(); + using (var stream = assembly.GetManifestResourceStream(EmbeddedResourceName)) + { + if (stream == null) + throw new FileNotFoundException($"Embedded resource '{EmbeddedResourceName}' not found."); + + using (var reader = new StreamReader(stream)) + json = reader.ReadToEnd(); + } + + return json; + } } } diff --git a/vCardEditor/Repository/Interfaces/IFileHandler.cs b/vCardEditor/Repository/Interfaces/IFileHandler.cs index 5c29fef..f0a821a 100644 --- a/vCardEditor/Repository/Interfaces/IFileHandler.cs +++ b/vCardEditor/Repository/Interfaces/IFileHandler.cs @@ -13,6 +13,7 @@ namespace vCardEditor.Repository void WriteBytesToFile(string imageFile, byte[] image); string GetVcfFileName(string folderPath, string familyName); string GetFileNameWithExtension(string fileName, int index, string extension); + string LoadJsonFromAssembly(string EmbeddedResourceName); string[] GetFiles(string path, string ext); } } diff --git a/vCardEditor/vCardEditor.csproj b/vCardEditor/vCardEditor.csproj index cd19a96..1cd8847 100644 --- a/vCardEditor/vCardEditor.csproj +++ b/vCardEditor/vCardEditor.csproj @@ -86,9 +86,11 @@ + + diff --git a/vCardEditor_Test/JsonEntries.cs b/vCardEditor_Test/JsonEntries.cs new file mode 100644 index 0000000..059d8df --- /dev/null +++ b/vCardEditor_Test/JsonEntries.cs @@ -0,0 +1,48 @@ +namespace vCardEditor_Test +{ + public class JsonEntries + { + public static string[] JsonEmtpy + { + get + { + return "".Split('\n'); + } + } + + public static string[] JsonIncorrect + { + get + { + return "abcdef".Split('\n'); + } + } + + public static string JsonValid + { + get + { + return @"{ + ""version"": ""1.0"", + ""languages"": { + ""en"": { + ""name"": ""English"", + ""messages"": { + ""MSG_001"": ""Save current file before?"", + ""MSG_002"": ""File"" + } + }, + ""fr"": { + ""name"": ""Français"", + ""messages"": { + ""MSG_001"": ""Sauvegarder le fichier en cours"", + ""MSG_002"": ""Fichier"" + } + } + } + }"; + + } + } + } +} diff --git a/vCardEditor_Test/LocalizationLoaderTest.cs b/vCardEditor_Test/LocalizationLoaderTest.cs new file mode 100644 index 0000000..39ff84f --- /dev/null +++ b/vCardEditor_Test/LocalizationLoaderTest.cs @@ -0,0 +1,26 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NSubstitute; +using System; +using vCardEditor.Libs.TinyJson; +using vCardEditor.Repository; + +namespace vCardEditor_Test +{ + [TestClass] + public class LocalizationLoaderTest + { + [TestMethod] + public void CorrectJsonLoaded_Test() + { + var fileHandler = Substitute.For(); + fileHandler.LoadJsonFromAssembly(Arg.Any()).Returns(JsonEntries.JsonValid); + var JsonParser = new TinyJsonParser(); + + var embeddedlang = new LocalizationLoader(JsonParser, fileHandler).LoadEmbedded(); + + Assert.IsTrue(embeddedlang.version == "1.0", "Json version incorrect"); + Assert.IsTrue(embeddedlang.languages.Count == 2, "Number of json entries invalid"); + + } + } +} diff --git a/vCardEditor_Test/vCardEditor_Test.csproj b/vCardEditor_Test/vCardEditor_Test.csproj index c715a97..f3346f1 100644 --- a/vCardEditor_Test/vCardEditor_Test.csproj +++ b/vCardEditor_Test/vCardEditor_Test.csproj @@ -77,10 +77,12 @@ + +