From 0fea3dbfd4a19ca18783dccbf5f655e522a92a99 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Fri, 27 Mar 2026 18:23:28 +0100 Subject: [PATCH] Create test for running confusing task Close #32 --- .../ConfuseTaskTests.cs | 68 +++++++++++++++++++ .../Confuser.MSBuild.Tasks.Tests.csproj | 42 ++++++++++++ .../CreateProjectTests.cs | 25 +------ .../Resources/non-existing-file.crproj | 5 ++ .../Resources/valid.crproj | 5 ++ .../VerifyTestBase.cs | 30 ++++++++ ...jectProduceRunnableExecutable.verified.txt | 1 + ...tingFileInProjectProduceError.verified.txt | 2 + 8 files changed, 155 insertions(+), 23 deletions(-) create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/ConfuseTaskTests.cs create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/Resources/non-existing-file.crproj create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/Resources/valid.crproj create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/VerifyTestBase.cs create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.CorrectProjectProduceRunnableExecutable.verified.txt create mode 100644 Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.NonExistingFileInProjectProduceError.verified.txt diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/ConfuseTaskTests.cs b/Tests/Confuser.MSBuild.Tasks.Tests/ConfuseTaskTests.cs new file mode 100644 index 00000000..0efc57c7 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/ConfuseTaskTests.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Microsoft.Build.Framework; +using Moq; +using Xunit; +using Task = System.Threading.Tasks.Task; + +namespace Confuser.MSBuild.Tasks.Tests { + public class ConfuseTaskTests : VerifyTestBase { + private Mock buildEngine; + private List errors; + + public ConfuseTaskTests() { + this.buildEngine = new Mock(); + this.errors = new List(); + this.buildEngine.Setup(x => x.LogErrorEvent(It.IsAny())).Callback(e => errors.Add(e)); + } + + [Fact] + [Trait("Category", "MSBuildIntegration")] + public async Task NonExistingFileInProjectProduceError() { + var assembly = new Mock(); + assembly.SetupAllProperties(); + assembly.Object.ItemSpec = $".\\bin\\debug\\test.dll"; + var resultProject = new Mock(); + resultProject.SetupAllProperties(); + resultProject.Object.ItemSpec = $"Resources\\non-existing-file.crproj"; + + var task = new ConfuseTask(); + task.Project = resultProject.Object; + task.BuildEngine = buildEngine.Object; + task.OutputAssembly = assembly.Object; + + //Act + var success = task.Execute(); + + //Assert + Assert.True(success); + await Verify(string.Join("\n", errors.Select(_ => _.Message)), GetSettings()); + } + + [Fact] + [Trait("Category", "MSBuildIntegration")] + public async Task CorrectProjectProduceRunnableExecutable() { + var assembly = new Mock(); + assembly.SetupAllProperties(); + assembly.Object.ItemSpec = $".\\test\\net472\\obfuscated\\Confuser.CLI.exe"; + var resultProject = new Mock(); + resultProject.SetupAllProperties(); + resultProject.Object.ItemSpec = $"Resources\\valid.crproj"; + + var task = new ConfuseTask(); + task.Project = resultProject.Object; + task.BuildEngine = buildEngine.Object; + task.OutputAssembly = assembly.Object; + + //Act + var success = task.Execute(); + + //Assert + Assert.True(success); + Assert.Empty(errors); + Assert.True(File.Exists(task.OutputAssembly.ItemSpec)); + } + } +} diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj b/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj index 876b501b..7cc018c0 100644 --- a/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj @@ -4,9 +4,16 @@ net472 false Exe + ..\..\Confuser.CLI\Confuser.CLI.csproj + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -20,8 +27,43 @@ + + + + + + + + + + + + + + + + + + + + + <_RuntimeOutputsNetFramework>@(RuntimeOutputsNetFramework) + <_RuntimeOutputsNet>@(RuntimeOutputsNet) + + + <_RuntimeOutputsNetFrameworkFiles Include="$([System.IO.Path]::GetDirectoryName($(_RuntimeOutputsNetFramework)))\*.*"/> + + + + + + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs b/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs index ec761db0..239ad537 100644 --- a/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs +++ b/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs @@ -1,30 +1,17 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using Confuser.UnitTest; using Microsoft.Build.Framework; using Moq; -using VerifyTests; -using VerifyXunit; using Xunit; namespace Confuser.MSBuild.Tasks.Tests { - public class CreateProjectTests : VerifyBase { + public class CreateProjectTests : VerifyTestBase { private readonly ITestOutputHelper outputHelper; private Mock buildEngine; private List errors; - static CreateProjectTests() { - // To disable Visual Studio popping up on every test execution. - Environment.SetEnvironmentVariable("DiffEngine_Disabled", "true"); - Environment.SetEnvironmentVariable("Verify_DisableClipboard", "true"); - - // To prevent from adding UTF-8 BOM to generated test data: - VerifierSettings.UseUtf8NoBom(); - } - - public CreateProjectTests(ITestOutputHelper outputHelper) : base() { + public CreateProjectTests(ITestOutputHelper outputHelper) { this.outputHelper = outputHelper ?? throw new ArgumentNullException(nameof(outputHelper)); this.buildEngine = new Mock(); this.errors = new List(); @@ -91,14 +78,6 @@ public async System.Threading.Tasks.Task BaseDirectoryOverridenTest() { Assert.Empty(errors); Assert.True(File.Exists(task.ResultProject.ItemSpec)); await Verify(File.ReadAllText(task.ResultProject.ItemSpec), GetSettings()); - } - - protected static VerifySettings GetSettings(params object[] parameters) { - var settings = new VerifySettings(); - settings.UseDirectory("verified"); - if (parameters.Length > 0) - settings.UseParameters(parameters); - return settings; } } } diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Resources/non-existing-file.crproj b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/non-existing-file.crproj new file mode 100644 index 00000000..123c0670 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/non-existing-file.crproj @@ -0,0 +1,5 @@ + + + + c:\obfuscation\input\bin + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Resources/valid.crproj b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/valid.crproj new file mode 100644 index 00000000..0734ae59 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/valid.crproj @@ -0,0 +1,5 @@ + + + + test/net472 + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/VerifyTestBase.cs b/Tests/Confuser.MSBuild.Tasks.Tests/VerifyTestBase.cs new file mode 100644 index 00000000..c8fa5b39 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/VerifyTestBase.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VerifyTests; + +namespace Confuser.MSBuild.Tasks.Tests { + public abstract class VerifyTestBase: VerifyXunit.VerifyBase { + + static VerifyTestBase() { + // To disable Visual Studio popping up on every test execution. + Environment.SetEnvironmentVariable("DiffEngine_Disabled", "true"); + Environment.SetEnvironmentVariable("Verify_DisableClipboard", "true"); + + // To prevent from adding UTF-8 BOM to generated test data: + VerifierSettings.UseUtf8NoBom(); + } + + protected VerifyTestBase() : base() { } + + protected static VerifySettings GetSettings(params object[] parameters) { + var settings = new VerifySettings(); + settings.UseDirectory("verified"); + if (parameters.Length > 0) + settings.UseParameters(parameters); + return settings; + } + } +} diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.CorrectProjectProduceRunnableExecutable.verified.txt b/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.CorrectProjectProduceRunnableExecutable.verified.txt new file mode 100644 index 00000000..30ab4cf8 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.CorrectProjectProduceRunnableExecutable.verified.txt @@ -0,0 +1 @@ +emptyString \ No newline at end of file diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.NonExistingFileInProjectProduceError.verified.txt b/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.NonExistingFileInProjectProduceError.verified.txt new file mode 100644 index 00000000..683b8926 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/verified/ConfuseTaskTests.NonExistingFileInProjectProduceError.verified.txt @@ -0,0 +1,2 @@ +An IO error occurred, check if all input/output locations are readable/writable. +Could not open file c:\obfuscation\input\test.dll for reading. Error: 00000003 \ No newline at end of file