using ResourceString.Net.Logic.DomainObjects.Resx;
using ResourceString.Net.Logic.Factories;
using ResourceString.Net.Logic.Parsers.Resx;
namespace ResourceString.Net.Logic.Tests;
[TestClass]
public class ResxFileTests
{
private readonly string validXml = @$"
Value1
Value2
";
private const string expectedClass = @"
using ResourceString.Net.Contract;
using System;
using System.Globalization;
using System.Resources;
using System.Threading;
namespace TestNameSpace
{
internal static class TestResourceClass
{
#region ResourceManager
private static readonly Type _Type = typeof(ResourceManager);
private static readonly Lazy _ResourceManager = new Lazy(
() => new ResourceManager(_Type.FullName, _Type.Assembly),
LazyThreadSafetyMode.PublicationOnly
);
public static ResourceManager ResourceManager => _ResourceManager.Value;
#endregion // ResourceManager
#region Test1
private static readonly Lazy LazyTest1 = new Lazy(
() => new ResourceManagerString(""Test1"", ResourceManager, CultureInfo.CurrentCulture),
LazyThreadSafetyMode.PublicationOnly
);
public static IResourceString Test1 => LazyTest1.Value;
#endregion // Test1
#region Test2
private static readonly Lazy LazyTest2 = new Lazy(
() => new ResourceManagerString(""Test2"", ResourceManager, CultureInfo.CurrentCulture),
LazyThreadSafetyMode.PublicationOnly
);
public static IResourceString Test2 => LazyTest2.Value;
#endregion // Test2
}
}";
private readonly string emptyXml = @"";
private readonly string invalidXml = @"";
[TestMethod]
public void Test_TryParse_ValidXml()
{
// Arrange
var expectedData = new[] {
("Test1", "Value1", string.Empty),
("Test2", "Value2", typeof(int).FullName)
};
// Act
var result = Parser.TryParse(validXml).Match(
Some: v => v.Resources,
None: () => throw new InvalidOperationException()
);
// Assert
CollectionAssert.AreEqual(
expectedData,
result.Select(i => (i.Name, i.Value, i.Type.IfNone(string.Empty))).ToList()
);
}
[TestMethod]
public void Test_TryParse_EmptyXml()
{
// Arrange
var expectedData = Enumerable.Empty();
// Act
var isSome = Parser.TryParse(emptyXml).Match(
Some: _ => true,
None: () => false
);
// Assert
Assert.IsFalse(isSome);
}
[TestMethod]
public void Test_TryParse_InValidXml()
{
// Arrange
var expectedData = Enumerable.Empty();
// Act
var isSome = Parser.TryParse(invalidXml).Match(
Some: _ => true,
None: () => false
);
// Assert
Assert.IsFalse(isSome);
}
[TestMethod]
public void Test_ToMemberString()
{
// Act
var result = Parser.TryParse(validXml).Match(
Some: v => CodeSnippetFactory.CreateMemberCodeSnippets(v.Resources),
None: () => throw new InvalidOperationException()
);
// Assert
Assert.AreEqual(2, result.Count());
Assert.AreEqual(
"#region Test1",
result.Select(i => i.Value.Substring(0, 25).Trim()).ToList()[0]
);
Assert.AreEqual(
"#region Test2",
result.Select(i => i.Value.Substring(0, 25).Trim()).ToList()[1]
);
}
[TestMethod]
public void Test_ToClassString()
{
// Act
var result = Parser.TryParse(validXml).Match(
Some: v => CodeSnippetFactory.CreateResourceClassCodeSnippet(
"TestNameSpace",
"TestResourceClass",
CodeSnippetFactory.CreateResourceMangerMemberCodeSnippet("ResourceManager"),
v.Resources
),
None: () => throw new InvalidOperationException()
);
// Assert
Assert.AreEqual(
expectedClass.Trim(),
result.Value.Trim()
);
}
}