From 14a5f35436650e38ecf84c3889c9e297c1ac3ffd Mon Sep 17 00:00:00 2001 From: Capella87 Date: Fri, 6 Dec 2024 14:07:53 +0900 Subject: [PATCH] feat(tests): Add tests for conversion from FormC to FormD --- .../FormCNormalizationTests.cs | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 tests/FixNormalization.Tests/FormCNormalizationTests.cs diff --git a/tests/FixNormalization.Tests/FormCNormalizationTests.cs b/tests/FixNormalization.Tests/FormCNormalizationTests.cs new file mode 100644 index 0000000..fd7e303 --- /dev/null +++ b/tests/FixNormalization.Tests/FormCNormalizationTests.cs @@ -0,0 +1,104 @@ +using Xunit; +using Xunit.Abstractions; +using NSubstitute; +using FluentAssertions; +using System.Text; +using Ookii.CommandLine; +using Ookii.CommandLine.Commands; +using FixNormalization.Commands; + +namespace FixNormalization.Tests; + +public class FormCNormalizationTests : IClassFixture +{ + FileSystemFixture fixture; + + private readonly ITestOutputHelper _output; + + public FormCNormalizationTests(FileSystemFixture fixture, ITestOutputHelper output) + { + this.fixture = fixture; + _output = output; + } + + [InlineData(".\\")] + [InlineData(".\\FirstSubDir\\옛한글")] + [InlineData(".\\FirstSubDir")] + [InlineData(".\\Western\\")] + [Theory] + public async Task FormCFileSystem_Directory_Should_Be_Normalized_To_FormD_NonRecursive(string directoryPath) + { + // Arrange + FileSystemFixtureHelpers.ConfigureMockData(fixture, NormalizationForm.FormC); + + var targetParser = new CommandLineParser(); + + FileSystemFixtureHelpers.ShowFilesInFileSystem(fixture, _output); + + // Act + var c = targetParser.ParseWithErrorHandling([directoryPath, "--form", "nfd", "-q"]); + + var r = await c!.RunAsync(fixture.FileSystem); + + // Assertion + foreach (var f in fixture.FileSystem!.Directory.GetFiles(directoryPath)) + { + var filename = fixture.FileSystem.Path.GetFileName(f); + + filename.IsNormalized(NormalizationForm.FormD).Should().BeTrue(); + } + + // Assert for files which should not be normalized in subdirectories + Assert.All(this.fixture.FileSystem.Directory.GetDirectories(directoryPath), + (f) => fixture.FileSystem.Directory.GetFiles(f, "", SearchOption.AllDirectories) + .All(filePath => !(Path.GetFileName(filePath) + .IsNormalized(NormalizationForm.FormD)))); + } + + [Fact] + public async Task FormCFileSystem_Directories_Should_Be_Normalized_To_FormD_Recursive() + { + // Arrange + FileSystemFixtureHelpers.ConfigureMockData(fixture, NormalizationForm.FormC); + + var targetParser = new CommandLineParser(); + string rootPath = fixture.FileSystem!.Path.GetPathRoot(fixture.FileSystem.Directory.GetCurrentDirectory())!; + + FileSystemFixtureHelpers.ShowFilesInFileSystem(fixture, _output); + + // Act + var c = targetParser.ParseWithErrorHandling([rootPath, "--form", "nfd", "-q", "-r"]); + + var r = await c!.RunAsync(fixture.FileSystem); + + // Assertion + foreach (var f in fixture.FileSystem!.Directory.GetFiles(rootPath, "", SearchOption.AllDirectories)) + { + var filename = fixture.FileSystem.Path.GetFileName(f); + + filename.IsNormalized(NormalizationForm.FormD).Should().BeTrue(); + } + } + + [InlineData(".\\어린양.txt")] + [InlineData(".\\Western\\Áçčèñţşůşîñģdïäçřïţïçš.txt")] + [Theory] + public async Task FormCFileSystem_File_Should_Be_Normalized_To_FormD(string filePath) + { + // Arrange + FileSystemFixtureHelpers.ConfigureMockData(fixture, NormalizationForm.FormC); + + var targetParser = new CommandLineParser(); + + FileSystemFixtureHelpers.ShowFilesInFileSystem(fixture, _output); + + // Act + var c = targetParser.ParseWithErrorHandling([filePath, "--form", "nfd", "-q"]); + + var r = await c!.RunAsync(fixture.FileSystem); + + // Assertion + var filename = fixture.FileSystem!.Path.GetFileName(filePath).Normalize(NormalizationForm.FormD); + filename.IsNormalized(NormalizationForm.FormD).Should().BeTrue(); + } +}