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
+