diff --git a/Confuser2.slnx b/Confuser2.slnx index d3c4816b..fd747489 100644 --- a/Confuser2.slnx +++ b/Confuser2.slnx @@ -57,6 +57,7 @@ + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj b/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj new file mode 100644 index 00000000..76b198f8 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Confuser.MSBuild.Tasks.Tests.csproj @@ -0,0 +1,35 @@ + + + + net472 + false + Exe + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + + + + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs b/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs new file mode 100644 index 00000000..3feb8594 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Confuser.UnitTest; +using Microsoft.Build.Framework; +using Moq; +using Xunit; + +namespace Confuser.MSBuild.Tasks.Tests { + public class CreateProjectTests { + private readonly ITestOutputHelper outputHelper; + private Mock buildEngine; + private List errors; + + public CreateProjectTests(ITestOutputHelper outputHelper) { + this.outputHelper = outputHelper ?? throw new ArgumentNullException(nameof(outputHelper)); + 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 void CreateNewProjectIfNoSourceProject() { + var assembly = new Mock(); + assembly.SetupAllProperties(); + assembly.Object.ItemSpec = $".\\bin\\debug\\test.dll"; + var baseDirectory = new Mock(); + baseDirectory.SetupAllProperties(); + baseDirectory.Object.ItemSpec = $"."; + var resultProject = new Mock(); + resultProject.SetupAllProperties(); + resultProject.Object.ItemSpec = $"result-empty.crproj"; + + var task = new CreateProjectTask(); + task.AssemblyPath = assembly.Object; + task.BuildEngine = buildEngine.Object; + task.ResultProject = resultProject.Object; + task.References = Array.Empty(); + + //Act + var success = task.Execute(); + + //Assert + Assert.True(success); + Assert.Empty(errors); + Assert.True(File.Exists(task.ResultProject.ItemSpec)); + Assert.Collection( + File.ReadLines(".\\Resources\\confuser-empty.expected.crproj"), + File.ReadLines(task.ResultProject.ItemSpec) + .Select>((string actual) => (string expected) => Assert.Equal(expected, actual)) + .ToArray() + ); + } + + [Fact] + [Trait("Category", "MSBuildIntegration")] + public void BaseDirectoryOverridenTest() { + var sourceProject = new Mock(); + sourceProject.SetupAllProperties(); + sourceProject.Object.ItemSpec = $".\\Resources\\confuser.src.crproj"; + var assembly = new Mock(); + assembly.SetupAllProperties(); + assembly.Object.ItemSpec = $".\\bin\\debug\\test.dll"; + var baseDirectory = new Mock(); + baseDirectory.SetupAllProperties(); + baseDirectory.Object.ItemSpec = $"."; + var resultProject = new Mock(); + resultProject.SetupAllProperties(); + resultProject.Object.ItemSpec = $"result.crproj"; + + var task = new CreateProjectTask(); + task.AssemblyPath = assembly.Object; + task.SourceProject = sourceProject.Object; + task.BuildEngine = buildEngine.Object; + task.ResultProject = resultProject.Object; + task.References = Array.Empty(); + + //Act + var success = task.Execute(); + + //Assert + Assert.True(success); + Assert.Empty(errors); + Assert.True(File.Exists(task.ResultProject.ItemSpec)); + Assert.Collection(File.ReadLines(task.ResultProject.ItemSpec), + File.ReadLines(".\\Resources\\confuser.expected.crproj") + .Select>((string actual) => (string expected) => Assert.Equal(expected, actual)) + .ToArray() + ); + } + } +} diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser-empty.expected.crproj b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser-empty.expected.crproj new file mode 100644 index 00000000..939b32a0 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser-empty.expected.crproj @@ -0,0 +1,3 @@ + + + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.expected.crproj b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.expected.crproj new file mode 100644 index 00000000..e297af8c --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.expected.crproj @@ -0,0 +1,5 @@ + + + + + diff --git a/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.src.crproj b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.src.crproj new file mode 100644 index 00000000..25011334 --- /dev/null +++ b/Tests/Confuser.MSBuild.Tasks.Tests/Resources/confuser.src.crproj @@ -0,0 +1,5 @@ + + + + c:\obfuscation\input\bin +