Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions Tests/Confuser.MSBuild.Tasks.Tests/ConfuseTaskTests.cs
Original file line number Diff line number Diff line change
@@ -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<IBuildEngine> buildEngine;
private List<BuildErrorEventArgs> errors;

public ConfuseTaskTests() {
this.buildEngine = new Mock<IBuildEngine>();
this.errors = new List<BuildErrorEventArgs>();
this.buildEngine.Setup(x => x.LogErrorEvent(It.IsAny<BuildErrorEventArgs>())).Callback<BuildErrorEventArgs>(e => errors.Add(e));
}

[Fact]
[Trait("Category", "MSBuildIntegration")]
public async Task NonExistingFileInProjectProduceError() {
var assembly = new Mock<ITaskItem>();
assembly.SetupAllProperties();
assembly.Object.ItemSpec = $".\\bin\\debug\\test.dll";
var resultProject = new Mock<ITaskItem>();
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<ITaskItem>();
assembly.SetupAllProperties();
assembly.Object.ItemSpec = $".\\test\\net472\\obfuscated\\Confuser.CLI.exe";
var resultProject = new Mock<ITaskItem>();
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));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,16 @@
<TargetFramework>net472</TargetFramework>
<IsPackable>false</IsPackable>
<OutputType>Exe</OutputType>
<TestTargetProject>..\..\Confuser.CLI\Confuser.CLI.csproj</TestTargetProject>
</PropertyGroup>

<ItemGroup>
<None Include="Resources\valid.crproj">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Resources\non-existing-file.crproj">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Resources\confuser.src.crproj">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Expand All @@ -20,8 +27,43 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\Confuser.CLI\Confuser.CLI.csproj" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\Confuser.UnitTest\Confuser.UnitTest.csproj" />
<ProjectReference Include="..\..\Confuser.MSBuild.Tasks\Confuser.MSBuild.Tasks.csproj" />
</ItemGroup>

<ItemGroup>
<!--<RuntimeProjectFramework Include="$(TargetFrameworks)" />-->
<RuntimeProjectFramework Include="net472" />
</ItemGroup>

<Target Name="CollectRuntimeOutputs" AfterTargets="Build">

<!-- Query each TFM output -->
<MSBuild Projects="$(TestTargetProject)" Targets="GetTargetPath" Properties="Configuration=$(Configuration);TargetFramework=%(RuntimeProjectFramework.Identity)" BuildInParallel="true">

<Output TaskParameter="TargetOutputs" ItemName="RuntimeOutputs" />

</MSBuild>

<ItemGroup>
<RuntimeOutputsNetFramework Include="@(RuntimeOutputs)" Condition="'%(TargetFrameworkVersion)' == '4.7.2'" />
<RuntimeOutputsNet Include="@(RuntimeOutputs)" Condition="'%(TargetFrameworkVersion)' == '8.0'" />
</ItemGroup>
<PropertyGroup>
<_RuntimeOutputsNetFramework>@(RuntimeOutputsNetFramework)</_RuntimeOutputsNetFramework>
<_RuntimeOutputsNet>@(RuntimeOutputsNet)</_RuntimeOutputsNet>
</PropertyGroup>
<ItemGroup>
<_RuntimeOutputsNetFrameworkFiles Include="$([System.IO.Path]::GetDirectoryName($(_RuntimeOutputsNetFramework)))\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(_RuntimeOutputsNetFrameworkFiles)"
Condition="'$(_RuntimeOutputsNetFramework)' != ''"
DestinationFolder="$(OutDir)test\net472\" />
<Copy SourceFiles="$([System.IO.Path]::GetDirectoryName($(_RuntimeOutputsNet)))\*.*"
Condition="'$(_RuntimeOutputsNet)' != ''"
DestinationFolder="$(OutDir)test\net8.0\" />

</Target>

</Project>
25 changes: 2 additions & 23 deletions Tests/Confuser.MSBuild.Tasks.Tests/CreateProjectTests.cs
Original file line number Diff line number Diff line change
@@ -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<IBuildEngine> buildEngine;
private List<BuildErrorEventArgs> 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<IBuildEngine>();
this.errors = new List<BuildErrorEventArgs>();
Expand Down Expand Up @@ -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;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<project outputDir="." baseDir="c:\obfuscation\input" debug="true" xmlns="http://confuser.codeplex.com">
<module path="c:\obfuscation\input\test.dll" />
<module path="c:\obfuscation\input\test2.dll" />
<probePath>c:\obfuscation\input\bin</probePath>
</project>
5 changes: 5 additions & 0 deletions Tests/Confuser.MSBuild.Tasks.Tests/Resources/valid.crproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<project outputDir="test/net472/obfuscated" baseDir="test/net472" debug="true" xmlns="http://confuser.codeplex.com">
<rule pattern="true" preset="maximum" inherit="false" />
<module path="Confuser.CLI.exe" />
<probePath>test/net472</probePath>
</project>
30 changes: 30 additions & 0 deletions Tests/Confuser.MSBuild.Tasks.Tests/VerifyTestBase.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
emptyString
Original file line number Diff line number Diff line change
@@ -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
Loading