From fc9e4feaf16d702f24beb46759d6bf9008c67bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Strandg=C3=A5rd?= Date: Tue, 15 Jul 2025 14:56:20 +0200 Subject: [PATCH 1/3] Add tests for Directory.Build.props --- .../Core/DirectoryBuildPropsTests.cs | 223 ++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs diff --git a/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs new file mode 100644 index 0000000..18bb5f0 --- /dev/null +++ b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs @@ -0,0 +1,223 @@ +using Microsoft.Extensions.Logging.Abstractions; +using ProjectDiff.Core; +using ProjectDiff.Core.Entrypoints; +using ProjectDiff.Tests.Utils; + +namespace ProjectDiff.Tests.Core; + +public sealed class DirectoryBuildPropsTests +{ + [Fact] + public async Task ModifyingParentDirectoryBuildProps_ShouldNotAffectProjectInSubDirectory() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateDirectory("Sample"); + await r.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + + var result = await GetProjectDiff(repo); + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + Assert.Empty(result.Projects); + } + + [Fact] + public async Task DirectoryBuildProps_AffectsProjects_IfImportedByNestedDirectoryBuildProps() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + r.CreateDirectory("Sample"); + await r.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + + + Value + + + """ + ); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + Assert.Equal(DiffStatus.Modified, project.Status); + } + + [Fact] + public async Task AddingDirectoryBuildProps_ShouldOnlyAffectProjectsInDirectory() + { + using var repo = await TestRepository.SetupAsync(r => + { + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + r.CreateDirectory("Other"); + r.CreateProject("Other/Other.csproj"); + return Task.CompletedTask; + } + ); + + await repo.WriteAllTextAsync( + "Sample/Directory.Build.props", + """ + + + Value + + + """ + ); + + var result = await GetProjectDiff(repo); + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + var project = Assert.Single(result.Projects); + + Assert.Equal(repo.GetPath("Sample", "Sample.csproj"), project.Path); + } + + [Fact] + public async Task AddingDirectoryBuildProps_ShouldAffectProjects() + { + using var repo = await TestRepository.SetupAsync(r => + { + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + return Task.CompletedTask; + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + + Assert.Equal(DiffStatus.Modified, project.Status); + } + + [Fact] + public async Task ModififyingDirectoryBuildProps_ShouldAffectProjects() + { + using var repo = await TestRepository.SetupAsync(async r => + { + await r.WriteAllTextAsync( + "Directory.Build.props", + """ + + + Value + + + """ + ); + + r.CreateDirectory("Sample"); + r.CreateProject("Sample/Sample.csproj"); + } + ); + + await repo.WriteAllTextAsync( + "Directory.Build.props", + """ + + + SomeNewValue + + + """ + ); + var result = await GetProjectDiff(repo); + + Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status); + + var project = Assert.Single(result.Projects); + + Assert.Equal(DiffStatus.Modified, project.Status); + } + + + private static Task GetProjectDiff(TestRepository repo) + { + var executor = new ProjectDiffExecutor(new ProjectDiffExecutorOptions()); + return executor.GetProjectDiff( + repo.WorkingDirectory, + new DirectoryScanEntrypointProvider( + repo.WorkingDirectory, + NullLogger.Instance + ), + cancellationToken: TestContext.Current.CancellationToken + ); + } +} \ No newline at end of file From a2fd423279b193f748c4fae9576e89cb989a910f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Strandg=C3=A5rd?= Date: Tue, 15 Jul 2025 15:00:34 +0200 Subject: [PATCH 2/3] Fix typo in test name Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs index 18bb5f0..5ea1254 100644 --- a/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs +++ b/test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs @@ -168,7 +168,7 @@ await repo.WriteAllTextAsync( } [Fact] - public async Task ModififyingDirectoryBuildProps_ShouldAffectProjects() + public async Task ModifyingDirectoryBuildProps_ShouldAffectProjects() { using var repo = await TestRepository.SetupAsync(async r => { From 4c0c334f6aa6551cbd3e5b95c9a17532c018111d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Strandg=C3=A5rd?= Date: Tue, 15 Jul 2025 15:03:57 +0200 Subject: [PATCH 3/3] Disable logging in tests --- test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs b/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs index 3671179..56483d6 100644 --- a/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs +++ b/test/ProjectDiff.Tests/Tool/ProjectDiffTests.cs @@ -335,7 +335,7 @@ params string[] args var console = new TestConsole(repository.WorkingDirectory); var cli = ProjectDiffTool.BuildCli(console); - var exitCode = await cli.InvokeAsync(args.Append("--log-level=Debug").ToArray()); + var exitCode = await cli.InvokeAsync(args.Append("--log-level=None").ToArray()); if (exitCode != 0) { var stderr = console.GetStandardError();