Files
Sharepoint-Toolbox/SharepointToolbox.Tests/Localization/TranslationSourceTests.cs
Dev 8a58140f9b test(01-05): add failing tests for TranslationSource singleton
- Instance singleton test
- EN string lookup test
- FR culture fallback test
- Missing key returns bracketed key
- PropertyChanged fires with empty string on culture switch
- Same culture does not fire PropertyChanged
2026-04-02 12:14:49 +02:00

84 lines
2.7 KiB
C#

using SharepointToolbox.Localization;
using System.ComponentModel;
using System.Globalization;
namespace SharepointToolbox.Tests.Localization;
[Trait("Category", "Unit")]
public class TranslationSourceTests : IDisposable
{
private readonly CultureInfo _originalCulture;
public TranslationSourceTests()
{
_originalCulture = TranslationSource.Instance.CurrentCulture;
// Reset to EN before each test
TranslationSource.Instance.CurrentCulture = new CultureInfo("en-US");
}
public void Dispose()
{
// Restore original culture after each test to prevent test pollution
TranslationSource.Instance.CurrentCulture = _originalCulture;
}
[Fact]
public void Instance_IsSameInstance_OnMultipleAccesses()
{
var instance1 = TranslationSource.Instance;
var instance2 = TranslationSource.Instance;
Assert.Same(instance1, instance2);
}
[Fact]
public void Indexer_ReturnsEnString_ForEnCulture()
{
TranslationSource.Instance.CurrentCulture = new CultureInfo("en-US");
var result = TranslationSource.Instance["app.title"];
Assert.Equal("SharePoint Toolbox", result);
}
[Fact]
public void Indexer_ReturnsFrOrFallback_AfterSwitchToFrFR()
{
TranslationSource.Instance.CurrentCulture = new CultureInfo("fr-FR");
var result = TranslationSource.Instance["app.title"];
// FR stub uses EN text — at minimum should not be null or empty
Assert.NotNull(result);
Assert.NotEmpty(result);
Assert.DoesNotContain("[", result); // Should not be missing-key placeholder
}
[Fact]
public void Indexer_ReturnsBracketedKey_ForMissingKey()
{
var result = TranslationSource.Instance["key.does.not.exist"];
Assert.Equal("[key.does.not.exist]", result);
}
[Fact]
public void ChangingCurrentCulture_FiresPropertyChanged_WithEmptyPropertyName()
{
string? capturedPropertyName = null;
TranslationSource.Instance.PropertyChanged += (sender, args) =>
capturedPropertyName = args.PropertyName;
TranslationSource.Instance.CurrentCulture = new CultureInfo("fr-FR");
Assert.Equal(string.Empty, capturedPropertyName);
}
[Fact]
public void SettingSameCulture_DoesNotFirePropertyChanged()
{
TranslationSource.Instance.CurrentCulture = new CultureInfo("en-US");
int fireCount = 0;
TranslationSource.Instance.PropertyChanged += (sender, args) => fireCount++;
// Set the exact same culture
TranslationSource.Instance.CurrentCulture = new CultureInfo("en-US");
Assert.Equal(0, fireCount);
}
}