1
1
Ruben 1 жил өмнө
parent
commit
ef88e03912

+ 4 - 0
src/PicView.Avalonia.MacOS/PicView.Avalonia.MacOS.csproj

@@ -39,4 +39,8 @@
       <DependentUpon>%(Filename)</DependentUpon>
     </Compile>
   </ItemGroup>
+
+	<ItemGroup>
+		<InternalsVisibleTo Include="PicView.Tests" />
+	</ItemGroup>
 </Project>

+ 3 - 7
src/PicView.Avalonia.Win32/PicView.Avalonia.Win32.csproj

@@ -52,11 +52,7 @@
     </Compile>
   </ItemGroup>
 
-  <ItemGroup>
-    <UpToDateCheckInput Remove="Views\ExifWindow.axaml" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <UpToDateCheckInput Remove="Views\SettingsWindow.axaml" />
-  </ItemGroup>
+	<ItemGroup>
+		<InternalsVisibleTo Include="PicView.Tests" />
+	</ItemGroup>
 </Project>

+ 4 - 0
src/PicView.Avalonia/PicView.Avalonia.csproj

@@ -96,4 +96,8 @@
   <ItemGroup>
     <ProjectReference Include="..\PicView.Core\PicView.Core.csproj" />
   </ItemGroup>
+
+	<ItemGroup>
+		<InternalsVisibleTo Include="PicView.Tests" />
+	</ItemGroup>
 </Project>

+ 2 - 2
src/PicView.Core/Config/Languages/fr.json

@@ -178,7 +178,7 @@
   "Random": "Aléatoire",
   "Ascending": "Ascendant",
   "Descending": "Descendant",
-  "Settings": "Options",
+  "Settings": "Paramètres",
   "Scrolling": "Défilement",
   "Looping": "Boucle",
   "FitToWindow": "Ajuster à la fenêtre / à l'image\"",
@@ -374,5 +374,5 @@
   "WhiteFluorescent": "Fluorescent blanc",
   "PhotometricInterpretation": "Interprétation photométrique",
   "LensModel": "Modèle de l'objectif",
-  "LensMaker": "Fabricant de l'objectif",
+  "LensMaker": "Fabricant de l'objectif"
 }

+ 4 - 1
src/PicView.Core/Config/SettingsHelper.cs

@@ -115,7 +115,7 @@ public static class SettingsHelper
         Settings = await UpgradeSettings(settings);
     }
 
-    public static async Task SaveSettingsAsync()
+    public static async Task<bool> SaveSettingsAsync()
     {
         try
         {
@@ -132,12 +132,15 @@ public static class SettingsHelper
             catch (Exception)
             {
                 Trace.WriteLine($"{nameof(SaveSettingsAsync)} error saving settings:\n {ex.Message}");
+                return false;
             }
         }
         catch (Exception ex)
         {
             Trace.WriteLine($"{nameof(SaveSettingsAsync)} error saving settings:\n {ex.Message}");
+            return false;
         }
+        return true;
     }
 
     private static async Task<AppSettings> UpgradeSettings(AppSettings settings)

+ 3 - 2
src/PicView.Core/Localization/TranslationHelper.cs

@@ -42,7 +42,7 @@ public static class TranslationHelper
     /// Determines the language based on the specified culture and loads the corresponding language file.
     /// </summary>
     /// <param name="isoLanguageCode">The culture code representing the desired language.</param>
-    public static async Task LoadLanguage(string isoLanguageCode)
+    public static async Task<bool> LoadLanguage(string isoLanguageCode)
     {
         var jsonLanguageFile = DetermineLanguageFilePath(isoLanguageCode);
 
@@ -72,9 +72,10 @@ public static class TranslationHelper
 #if DEBUG
             Trace.WriteLine($"{nameof(LoadLanguage)} exception:\n{exception.Message}");
 #endif
+            return false;
         }
 
-        return;
+        return true;
 
         async Task Deserialize(string file)
         {

+ 4 - 0
src/PicView.Core/PicView.Core.csproj

@@ -62,4 +62,8 @@
     </None>
   </ItemGroup>
 
+	<ItemGroup>
+		<InternalsVisibleTo Include="PicView.Tests" />
+	</ItemGroup>
+
 </Project>

+ 11 - 0
src/PicView.Tests/AvaloniaTest.cs

@@ -0,0 +1,11 @@
+using Avalonia.Headless.XUnit;
+
+namespace PicView.Tests;
+
+public class AvaloniaTest
+{
+    [AvaloniaFact]
+    public void Test1()
+    {
+    }
+}

+ 1 - 0
src/PicView.Tests/GlobalUsings.cs

@@ -0,0 +1 @@
+global using Xunit;

+ 140 - 0
src/PicView.Tests/LanguageAndSettingsUnitTest.cs

@@ -0,0 +1,140 @@
+using Avalonia;
+using Avalonia.Headless;
+using Avalonia.Headless.XUnit;
+using PicView.Avalonia.ViewModels;
+using PicView.Core.Config;
+using PicView.Core.Localization;
+
+namespace PicView.Tests;
+
+public class LanguageAndSettingsUnitTest
+{
+    [Fact]
+    public async Task CheckIfSettingsWorks()
+    {
+        await SettingsHelper.LoadSettingsAsync();
+        Assert.NotNull(SettingsHelper.Settings);
+        var testSave = await SettingsHelper.SaveSettingsAsync();
+        Assert.True(testSave);
+    }
+
+    [Fact]
+    public async Task CheckDanishLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("da");
+        Assert.True(exists);
+        Assert.Equal("Billede", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("filer", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Indstillinger", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckGermanLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("de");
+        Assert.True(exists);
+        Assert.Equal("Bild", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("Dateien", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Einstellungen", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckEnglishLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("en");
+        Assert.True(exists);
+        Assert.Equal("Image", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("files", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Settings", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckSpanishLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("es");
+        Assert.True(exists);
+        Assert.Equal("Imagen", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("archivos", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Opciones", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckFrenchLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("fr");
+        Assert.True(exists);
+        Assert.Equal("Image", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("fichiers", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Paramètres", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckItalianLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("it");
+        Assert.True(exists);
+        Assert.Equal("Immagine", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("File", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Impostazioni", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckKoreanLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("ko");
+        Assert.True(exists);
+        Assert.Equal("이미지", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("파일", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("설정", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckPolishLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("pl");
+        Assert.True(exists);
+        Assert.Equal("Obraz", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("pliki", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Ustawienia", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckRomanianLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("ro");
+        Assert.True(exists);
+        Assert.Equal("Imagine", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("fișiere", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Setări", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckRussianLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("ru");
+        Assert.True(exists);
+        Assert.Equal("Изображение", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("Файлы", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("Настройки", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckChineseSimplifiedLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("zh-CN");
+        Assert.True(exists);
+        Assert.Equal("图片", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("文件", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("设置", TranslationHelper.GetTranslation("Settings"));
+    }
+
+    [Fact]
+    public async Task CheckChineseTraditionalLangauge()
+    {
+        var exists = await TranslationHelper.LoadLanguage("zh-TW");
+        Assert.True(exists);
+        Assert.Equal("圖片", TranslationHelper.GetTranslation("Image"));
+        Assert.Equal("檔案", TranslationHelper.GetTranslation("Files"));
+        Assert.Equal("設定", TranslationHelper.GetTranslation("Settings"));
+    }
+}

+ 31 - 0
src/PicView.Tests/PicView.Tests.csproj

@@ -0,0 +1,31 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+
+    <IsPackable>false</IsPackable>
+    <IsTestProject>true</IsTestProject>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Avalonia.Headless.XUnit" Version="11.1.0-beta1" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0-preview-24080-01" />
+    <PackageReference Include="xunit" Version="2.7.0" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="6.0.2">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\PicView.Avalonia\PicView.Avalonia.csproj" />
+    <ProjectReference Include="..\PicView.Core\PicView.Core.csproj" />
+  </ItemGroup>
+
+</Project>

+ 6 - 0
src/PicView.sln

@@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PicView.Windows", "PicView.
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PicView.MacOS", "PicView.MacOS\PicView.MacOS.csproj", "{FEAC727E-1102-4F11-A747-5A5789FBBF81}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicView.Tests", "PicView.Tests\PicView.Tests.csproj", "{E9901309-A077-42CF-957C-9E737DC9731C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -57,6 +59,10 @@ Global
 		{FEAC727E-1102-4F11-A747-5A5789FBBF81}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{FEAC727E-1102-4F11-A747-5A5789FBBF81}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{FEAC727E-1102-4F11-A747-5A5789FBBF81}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E9901309-A077-42CF-957C-9E737DC9731C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E9901309-A077-42CF-957C-9E737DC9731C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E9901309-A077-42CF-957C-9E737DC9731C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E9901309-A077-42CF-957C-9E737DC9731C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE