diff --git a/integrationtest/Validation/ValidationProject/ValidateStrykerResults.cs b/integrationtest/Validation/ValidationProject/ValidateStrykerResults.cs
index 8b640ff6f2..513655c91c 100644
--- a/integrationtest/Validation/ValidationProject/ValidateStrykerResults.cs
+++ b/integrationtest/Validation/ValidationProject/ValidateStrykerResults.cs
@@ -308,8 +308,8 @@ private void CheckReportMutants(IJsonReport report, int total, int ignored, int
private void CheckReportTestCounts(IJsonReport report, int total)
{
- var actualTotal = report.TestFiles.Sum(tf => tf.Value.Tests.Count);
+ var actualTestCount = report.TestFiles.Sum(tf => tf.Value.Tests.Count);
- actualTotal.ShouldBe(total);
+ actualTestCount.ShouldBe(total);
}
}
diff --git a/src/.run/FullFrameworkApp.Test.run.xml b/src/.run/FullFrameworkApp.Test.run.xml
index 19d8762fe1..efea798be0 100644
--- a/src/.run/FullFrameworkApp.Test.run.xml
+++ b/src/.run/FullFrameworkApp.Test.run.xml
@@ -1,23 +1,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.run/TargetProject.Solution.run.xml b/src/.run/TargetProject.Solution.run.xml
index e5e413ea88..f4bb7db355 100644
--- a/src/.run/TargetProject.Solution.run.xml
+++ b/src/.run/TargetProject.Solution.run.xml
@@ -1,8 +1,8 @@
-
-
+
+
diff --git a/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json b/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json
index 74137b3d27..0476ff5766 100644
--- a/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json
+++ b/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json
@@ -936,11 +936,11 @@
"Stryker.Abstractions": "[4.14.2, )",
"Stryker.Configuration": "[4.14.2, )",
"Stryker.Regex.Parser": "[1.0.0, )",
- "Stryker.RegexMutators": "[4.14.2, )",
- "Stryker.Solutions": "[4.14.2, )",
- "Stryker.TestRunner.MicrosoftTestPlatform": "[4.14.2, )",
- "Stryker.TestRunner.VsTest": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )",
+ "Stryker.RegexMutators": "[1.0.0, )",
+ "Stryker.Solutions": "[1.0.0, )",
+ "Stryker.TestRunner.MicrosoftTestPlatform": "[1.0.0, )",
+ "Stryker.TestRunner.VsTest": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )",
"TestableIO.System.IO.Abstractions.Wrappers": "[22.1.1, )"
}
},
@@ -963,8 +963,8 @@
"Microsoft.CodeAnalysis.CSharp": "[5.3.0, )",
"Microsoft.CodeAnalysis.Common": "[5.3.0, )",
"Serilog": "[4.3.1, )",
- "Stryker.Abstractions": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )"
}
},
"stryker.datacollector": {
@@ -983,14 +983,15 @@
"stryker.solutions": {
"type": "Project",
"dependencies": {
- "Microsoft.VisualStudio.SolutionPersistence": "[1.0.52, )"
+ "Microsoft.VisualStudio.SolutionPersistence": "[1.0.52, )",
+ "Stryker.Utilities": "[1.0.0, )"
}
},
"stryker.testrunner": {
"type": "Project",
"dependencies": {
"Microsoft.TestPlatform.ObjectModel": "[18.6.0, )",
- "Stryker.Abstractions": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )"
}
},
"stryker.testrunner.microsofttestplatform": {
@@ -1011,10 +1012,10 @@
"Microsoft.TestPlatform.ObjectModel": "[18.6.0, )",
"Microsoft.TestPlatform.Portable": "[18.6.0, )",
"Microsoft.TestPlatform.TranslationLayer": "[18.6.0, )",
- "Stryker.Abstractions": "[4.14.2, )",
- "Stryker.DataCollector": "[4.14.2, )",
- "Stryker.TestRunner": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )",
+ "Stryker.Abstractions": "[1.0.0, )",
+ "Stryker.DataCollector": "[1.0.0, )",
+ "Stryker.TestRunner": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )",
"TestableIO.System.IO.Abstractions.Wrappers": "[22.1.1, )"
}
},
@@ -1027,7 +1028,7 @@
"Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )",
"Mono.Cecil": "[0.11.6, )",
"ResXResourceReader.NetStandard": "[1.3.0, )",
- "Stryker.Abstractions": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )"
}
},
"AWSSDK.S3": {
@@ -1343,4 +1344,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Stryker.CLI/Stryker.CLI/Logging/LoggingInitializer.cs b/src/Stryker.CLI/Stryker.CLI/Logging/LoggingInitializer.cs
index a5b9f5a62c..f3031399c4 100644
--- a/src/Stryker.CLI/Stryker.CLI/Logging/LoggingInitializer.cs
+++ b/src/Stryker.CLI/Stryker.CLI/Logging/LoggingInitializer.cs
@@ -28,13 +28,17 @@ public void SetupLogOptions(IStrykerInputs inputs, IFileSystem fileSystem = null
inputs.OutputPathInput.SuppliedInput = outputPath;
var diagnoseMode = inputs.DiagModeInput.Validate();
- var logLevel = diagnoseMode ? LogEventLevel.Verbose : inputs.VerbosityInput.Validate();
+ var logLevel = inputs.VerbosityInput.Validate();
+ if (diagnoseMode && logLevel>LogEventLevel.Debug)
+ {
+ logLevel = LogEventLevel.Debug;
+ }
var logToFile = inputs.LogToFileInput.Validate(outputPath) || diagnoseMode;
ApplicationLogging.ConfigureLogger(logLevel, logToFile, diagnoseMode, outputPath);
}
- private string CreateOutputPath(IStrykerInputs inputs, IFileSystem fileSystem)
+ private static string CreateOutputPath(IStrykerInputs inputs, IFileSystem fileSystem)
{
var outputPath = inputs.OutputPathInput.SuppliedInput ?? Path.Combine("StrykerOutput", DateTime.Now.ToString("yyyy-MM-dd.HH-mm-ss"));
diff --git a/src/Stryker.CLI/Stryker.CLI/packages.lock.json b/src/Stryker.CLI/Stryker.CLI/packages.lock.json
index caefc006cc..23ca10e7ce 100644
--- a/src/Stryker.CLI/Stryker.CLI/packages.lock.json
+++ b/src/Stryker.CLI/Stryker.CLI/packages.lock.json
@@ -763,11 +763,11 @@
"Stryker.Abstractions": "[4.14.2, )",
"Stryker.Configuration": "[4.14.2, )",
"Stryker.Regex.Parser": "[1.0.0, )",
- "Stryker.RegexMutators": "[4.14.2, )",
- "Stryker.Solutions": "[4.14.2, )",
- "Stryker.TestRunner.MicrosoftTestPlatform": "[4.14.2, )",
- "Stryker.TestRunner.VsTest": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )",
+ "Stryker.RegexMutators": "[1.0.0, )",
+ "Stryker.Solutions": "[1.0.0, )",
+ "Stryker.TestRunner.MicrosoftTestPlatform": "[1.0.0, )",
+ "Stryker.TestRunner.VsTest": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )",
"TestableIO.System.IO.Abstractions.Wrappers": "[22.1.1, )"
}
},
@@ -790,8 +790,8 @@
"Microsoft.CodeAnalysis.CSharp": "[5.3.0, )",
"Microsoft.CodeAnalysis.Common": "[5.3.0, )",
"Serilog": "[4.3.1, )",
- "Stryker.Abstractions": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )"
}
},
"stryker.datacollector": {
@@ -810,14 +810,15 @@
"stryker.solutions": {
"type": "Project",
"dependencies": {
- "Microsoft.VisualStudio.SolutionPersistence": "[1.0.52, )"
+ "Microsoft.VisualStudio.SolutionPersistence": "[1.0.52, )",
+ "Stryker.Utilities": "[1.0.0, )"
}
},
"stryker.testrunner": {
"type": "Project",
"dependencies": {
"Microsoft.TestPlatform.ObjectModel": "[18.6.0, )",
- "Stryker.Abstractions": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )"
}
},
"stryker.testrunner.microsofttestplatform": {
@@ -838,10 +839,10 @@
"Microsoft.TestPlatform.ObjectModel": "[18.6.0, )",
"Microsoft.TestPlatform.Portable": "[18.6.0, )",
"Microsoft.TestPlatform.TranslationLayer": "[18.6.0, )",
- "Stryker.Abstractions": "[4.14.2, )",
- "Stryker.DataCollector": "[4.14.2, )",
- "Stryker.TestRunner": "[4.14.2, )",
- "Stryker.Utilities": "[4.14.2, )",
+ "Stryker.Abstractions": "[1.0.0, )",
+ "Stryker.DataCollector": "[1.0.0, )",
+ "Stryker.TestRunner": "[1.0.0, )",
+ "Stryker.Utilities": "[1.0.0, )",
"TestableIO.System.IO.Abstractions.Wrappers": "[22.1.1, )"
}
},
@@ -854,7 +855,7 @@
"Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )",
"Mono.Cecil": "[0.11.6, )",
"ResXResourceReader.NetStandard": "[1.3.0, )",
- "Stryker.Abstractions": "[4.14.2, )"
+ "Stryker.Abstractions": "[1.0.0, )"
}
},
"AWSSDK.S3": {
@@ -1131,4 +1132,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
index 9ea16924e8..7a616c0d91 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
@@ -44,9 +44,7 @@ public int Subtract(int first, int second)
}");
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ SourceProjectInfo = new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(
projectFilePath: "/c/project.csproj",
properties: new Dictionary()
{
@@ -56,8 +54,7 @@ public int Subtract(int first, int second)
},
// add a reference to system so the example code can compile
references: [typeof(object).Assembly.Location]
- ).Object
- }
+ ).Object, null)
};
var rollbackProcessMock = new Mock(MockBehavior.Strict);
@@ -91,35 +88,31 @@ public int Subtract(int first, int second)
var immutableArray = ImmutableArray.Create("TheAlias");
alias[typeof(object).Assembly.Location]=immutableArray;
- var input = new MutationTestInput
- {
- SourceProjectInfo = new SourceProjectInfo
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ projectFilePath: "/c/project.csproj",
+ properties: new Dictionary()
{
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- projectFilePath: "/c/project.csproj",
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName" },
- { "TargetFileName", "TargetFileName.dll" },
- },
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location],
- aliases: alias.ToImmutableDictionary()
- ).Object
- }
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName" },
+ { "TargetFileName", "TargetFileName.dll" },
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location],
+ aliases: alias.ToImmutableDictionary()
+ ).Object;
+ var input = new MutationTestInput()
+ {
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
};
- var rollbackProcessMock = new Mock(MockBehavior.Strict);
+ var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees:[syntaxTree]);
+ var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(ms, null);
- result.Success.ShouldBe(true);
- ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
- }
+ using var ms = new MemoryStream();
+ var result = target.Compile(ms, null);
+ result.Success.ShouldBe(true);
+ ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
}
[TestMethod]
@@ -137,33 +130,31 @@ public int Subtract(string first, string second)
}
}
}");
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ projectFilePath: "/c/project.csproj",
+ properties: new Dictionary()
+ {
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- projectFilePath: "/c/project.csproj",
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName"},
- { "TargetFileName", "TargetFileName.dll"},
- },
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location]
- ).Object
- }
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
};
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
+
+ var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
rollbackProcessMock.Setup(x => x.RollbackMutationsInError(It.IsAny(), It.IsAny>(), It.IsAny(), false))
.Returns((ICompilationContent _, ImmutableArray _, ICSharpRollbackProcess.Mode _, bool _) => null);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, new StrykerOptions(), [syntaxTree]);
-
- using (var ms = new MemoryStream())
- {
- Should.Throw(() => target.Compile(ms, null));
- }
+ using var ms = new MemoryStream();
+ Should.Throw(() => target.Compile(ms, null));
rollbackProcessMock.Verify(x => x.RollbackMutationsInError(It.IsAny(), It.IsAny>(), ICSharpRollbackProcess.Mode.Normal, false),
Times.AtLeast(2));
}
@@ -183,26 +174,26 @@ public int Subtract(int first, int second)
}
}
}");
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ projectFilePath: "/c/project.csproj",
+ properties: new Dictionary()
+ {
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- projectFilePath: "/c/project.csproj",
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName"},
- { "TargetFileName", "TargetFileName.dll"},
- },
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location]
- ).Object
- }
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
};
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees:[syntaxTree]);
+ var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
using var ms = new MemoryStream();
target.Compile(ms, null);
@@ -225,27 +216,28 @@ public int Subtract(int first, int second)
}
}
}");
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ properties: new Dictionary()
+ {
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName" },
+ { "TargetFileName", "TargetFileName.dll" },
+ { "SignAssembly", "true" },
+ { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location],
+ projectFilePath: "TestResources"
+ ).Object;
+
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName" },
- { "TargetFileName", "TargetFileName.dll" },
- { "SignAssembly", "true" },
- { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
- },
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location],
- projectFilePath: "TestResources"
- ).Object
- }
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
};
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees:[syntaxTree]);
+
+ var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
using var ms = new MemoryStream();
var result = target.Compile(ms, null);
@@ -273,9 +265,8 @@ public int Subtract(int first, int second)
}");
var input = new MutationTestInput
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ SourceProjectInfo = new SourceProjectInfo(
+ TestHelper.SetupProjectAnalyzerResult(
properties: new Dictionary()
{
{ "TargetDir", "" },
@@ -286,10 +277,8 @@ public int Subtract(int first, int second)
// add a reference to system so the example code can compile
references: [typeof(object).Assembly.Location],
projectFilePath: "TestResources"
- ).Object
- }
+ ).Object, new TestProjectsInfo(new MockFileSystem(), TestLoggerFactory.CreateLogger()))};
- };
var rollbackProcessMock = new Mock(MockBehavior.Strict);
var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
@@ -318,25 +307,23 @@ public int Subtract(int first, int second)
}
}
}");
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary()
+ {
+ { "TargetDir", "" },
+ { "TargetFileName", "TargetFileName.dll"},
+ { "AssemblyName", "AssemblyName"},
+ { "SignAssembly", "true" },
+ { "AssemblyOriginatorKeyFile", "DoesNotExist.snk" }
+ },
+ projectFilePath: "project.csproj",
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "TargetFileName", "TargetFileName.dll"},
- { "AssemblyName", "AssemblyName"},
- { "SignAssembly", "true" },
- { "AssemblyOriginatorKeyFile", "DoesNotExist.snk" }
- },
- projectFilePath: "project.csproj",
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location]
- ).Object
- }
-
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
};
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
@@ -360,34 +347,33 @@ public int Subtract(int first, int second)
}
}
}");
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ projectFilePath: "/c/project.csproj",
+ properties: new Dictionary()
+ {
+ { "TargetDir", "" },
+ { "TargetFileName", "TargetFileName.dll" },
+ { "AssemblyName", "AssemblyName"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- projectFilePath: "/c/project.csproj",
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "TargetFileName", "TargetFileName.dll" },
- { "AssemblyName", "AssemblyName"},
- },
- // add a reference to system so the example code can compile
- references: [typeof(object).Assembly.Location]
- ).Object
- }
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
+
};
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees:[syntaxTree]);
+ var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, syntaxTrees: [syntaxTree]);
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(ms, null);
- result.Success.ShouldBe(true);
+ using var ms = new MemoryStream();
+ var result = target.Compile(ms, null);
+ result.Success.ShouldBe(true);
- Assembly.Load(ms.ToArray()).GetName().Version.ToString().ShouldBe("0.0.0.0");
- }
+ Assembly.Load(ms.ToArray()).GetName().Version.ToString().ShouldBe("0.0.0.0");
}
[TestMethod]
@@ -483,8 +469,8 @@ private static IEnumerable MutateAndCompileSource(string sourceFile)
var input = new MutationTestInput
{
SourceProjectInfo = new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ (
+ TestHelper.SetupProjectAnalyzerResult(
projectFilePath: "/c/project.csproj",
properties: new Dictionary
{
@@ -495,7 +481,7 @@ private static IEnumerable MutateAndCompileSource(string sourceFile)
// add a reference to system so the example code can compile
references: [typeof(object).Assembly.Location]
).Object,
- TestProjectsInfo = new TestProjectsInfo(fileSystem)
+ new TestProjectsInfo(fileSystem)
{
TestProjects = new List {
new TestProject(fileSystem, TestHelper.SetupProjectAnalyzerResult(
@@ -511,7 +497,7 @@ private static IEnumerable MutateAndCompileSource(string sourceFile)
).Object),
}
}
- },
+ ),
TestRunner = new Mock(MockBehavior.Default).Object
};
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpRollbackProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpRollbackProcessTests.cs
index 127d263a2b..2c3f7b1546 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpRollbackProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpRollbackProcessTests.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
+using System.IO.Abstractions.TestingHelpers;
using System.IO.Pipes;
using System.Linq;
using System.Reflection;
@@ -16,10 +17,12 @@
using Stryker.Abstractions.Exceptions;
using Stryker.Configuration.Options;
using Stryker.Core.Compiling;
+using Stryker.Core.Initialisation;
using Stryker.Core.InjectedHelpers;
using Stryker.Core.Mutants;
using Stryker.Core.MutationTest;
using Stryker.Core.ProjectComponents.SourceProjects;
+using Stryker.Core.ProjectComponents.TestProjects;
namespace Stryker.Core.UnitTest.Compiling;
@@ -146,27 +149,25 @@ public void SomeLinq()
};
Assembly.GetEntryAssembly().GetReferencedAssemblies().ToList().ForEach(a => references.Add(Assembly.Load(a).Location));
- var input = new MutationTestInput()
- {
- SourceProjectInfo = new SourceProjectInfo
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ properties: new Dictionary
{
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName"},
- { "TargetFileName", "TargetFileName.dll"},
- { "SignAssembly", "true" },
- { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
- },
- projectFilePath: "TestResources",
- // add a reference to system so the example code can compile
- references: references.ToArray()
- ).Object
- }
- };
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ { "SignAssembly", "true" },
+ { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
+ },
+ projectFilePath: "TestResources",
+ // add a reference to system so the example code can compile
+ references: references.ToArray()
+ ).Object;
var rollbackProcess = new CSharpRollbackProcess();
+ var input = new MutationTestInput()
+ {
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
+ };
var target = new CsharpCompilingProcess(input, rollbackProcess, options, syntaxTrees: helpers);
@@ -232,27 +233,25 @@ private void RefreshAccountNumber()
};
Assembly.GetEntryAssembly().GetReferencedAssemblies().ToList().ForEach(a => references.Add(Assembly.Load(a).Location));
- var input = new MutationTestInput()
- {
- SourceProjectInfo = new SourceProjectInfo
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ properties: new Dictionary()
{
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- properties: new Dictionary()
- {
- { "TargetDir", "" },
- { "AssemblyName", "AssemblyName"},
- { "TargetFileName", "TargetFileName.dll"},
- { "SignAssembly", "true" },
- { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
- },
- projectFilePath: "TestResources",
- // add a reference to system so the example code can compile
- references: references.ToArray()
- ).Object
- }
- };
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ { "SignAssembly", "true" },
+ { "AssemblyOriginatorKeyFile", Path.GetFullPath(Path.Combine("TestResources", "StrongNameKeyFile.snk")) }
+ },
+ projectFilePath: "TestResources",
+ // add a reference to system so the example code can compile
+ references: references.ToArray()
+ ).Object;
var rollbackProcess = new CSharpRollbackProcess();
+ var input = new MutationTestInput()
+ {
+ SourceProjectInfo = new SourceProjectInfo(analyzerResult, null)
+ };
var target = new CsharpCompilingProcess(input, rollbackProcess, options, helpers);
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs
index 7953724937..d021e7f0bc 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.IO.Abstractions.TestingHelpers;
using System.Linq;
using System.Reflection;
@@ -254,6 +255,7 @@ internal Mock BuildProjectAnalyzerMock(string csprojPathName,
Select( iar => GetProjectResult(iar, framework).GetAssemblyPath()).Union(rawReferences).ToArray());
}
+ projectAnalyzerResultMock.Setup(x => x.ReferenceAliases).Returns(new Dictionary>().ToImmutableDictionary());
projectAnalyzerResultMock.Setup(x => x.SourceFiles).Returns(sourceFiles);
projectAnalyzerResultMock.Setup(x => x.PackageReferences).Returns(new Dictionary>());
projectAnalyzerResultMock.Setup(x => x.PreprocessorSymbols).Returns(["NET"]);
@@ -266,6 +268,7 @@ internal Mock BuildProjectAnalyzerMock(string csprojPathName,
projectAnalyzerResultMock.Setup(x => x.ProjectFilePath).Returns(csprojPathName);
projectAnalyzerResultMock.Setup(x => x.TargetFramework).Returns(framework);
projectAnalyzerResultMock.Setup(x => x.Succeeded).Returns(success);
+ projectAnalyzerResultMock.Setup(x => x.Command).Returns($"build command for {csprojPathName} with {framework}");
projectAnalyzerResultMock.Setup(x => x.Analyzer).Returns(null);
projectAnalyzerResults[framework] = projectAnalyzerResultMock.Object;
@@ -287,6 +290,7 @@ internal Mock BuildProjectAnalyzerMock(string csprojPathName,
projectFileMock.Setup(x => x.Path).Returns(csprojPathName);
projectFileMock.Setup(x => x.Name).Returns(FileSystem.Path.GetFileName(csprojPathName));
projectFileMock.Setup(x=> x.TargetFrameworks).Returns(frameworks.ToArray() );
+ projectFileMock.Setup(x => x.RequiresNetFramework).Returns(frameworks.Any(f => f.StartsWith("net") && f[3]>='1' && f[3]<='4'));
return projectAnalyzerMock;
}
@@ -329,6 +333,6 @@ public SolutionFile GetSolution(string solutionPath)
{
throw new InvalidOperationException($"Solution file {solutionPath} does not exist in the file system.");
}
- return SolutionFile.BuildFromProjectList(_projectCache.Keys.ToList());
+ return SolutionFile.BuildFromProjectList(solutionPath, _projectCache.Keys.ToList());
}
}
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs
index 7f66d9d269..8cd1eeb434 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs
@@ -19,9 +19,11 @@
using Stryker.Core.ProjectComponents.Csharp;
using Stryker.Core.ProjectComponents.SourceProjects;
using Stryker.Core.ProjectComponents.TestProjects;
+using Stryker.Solutions;
using Stryker.TestRunner.Results;
using Stryker.TestRunner.Tests;
using Stryker.TestRunner.VsTest;
+using Stryker.Utilities.Buildalyzer;
namespace Stryker.Core.UnitTest.Initialisation;
@@ -41,12 +43,12 @@ public void InitialisationProcess_ShouldCallNeededResolvers()
new CsharpFileLeaf()
});
inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny()))
- .Returns(new[] {new SourceProjectInfo
+ .Returns(new RelatedSourceProjectsInfo(null, [
+ new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(references: []).Object, null)
{
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(references: Array.Empty()).Object,
ProjectContents = folder
}
- });
+ ]));
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
var loggerMock = new Mock>();
@@ -58,7 +60,7 @@ public void InitialisationProcess_ShouldCallNeededResolvers()
ProjectVersion = "TheProjectVersion"
};
- var result = target.GetMutableProjectsInfo(options).ToList();
+ var result = target.GetMutableProjectsInfo(options).SourceProjectInfos.ToList();
result.Count.ShouldBe(1);
inputFileResolverMock.Verify(x => x.ResolveSourceProjectInfos(It.IsAny()), Times.Once);
}
@@ -74,12 +76,27 @@ public async Task InitialisationProcess_ShouldThrowOnFailedInitialTestRun()
var folder = new FolderComposite();
folder.Add(new CsharpFileLeaf());
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] {new SourceProjectInfo() {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- references: Array.Empty()).Object,
- TestProjectsInfo = new TestProjectsInfo(new MockFileSystem())
- }});
+ var loggerMock = new Mock>();
+ var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+
+ var mockFileSystem = new MockFileSystem();
+
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ WorkingDirectory = "./"
+ };
+
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).
+ Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [new SourceProjectInfo( TestHelper.SetupProjectAnalyzerResult(references: []).Object,
+ new TestProjectsInfo(mockFileSystem))
+ ]));
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(),
@@ -89,13 +106,6 @@ public async Task InitialisationProcess_ShouldThrowOnFailedInitialTestRun()
testRunnerMock.Setup(x => x.DiscoverTestsAsync(It.IsAny())).Returns(Task.FromResult(true));
initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new InputException("")); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion"
- };
-
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
await Should.ThrowAsync(async () => await target.GetMutationTestInputsAsync(options, projects, testRunnerMock.Object));
@@ -113,10 +123,23 @@ public async Task InitialisationProcess_ShouldThrowIfHalfTestsAreFailing()
var folder = new FolderComposite();
folder.Add(new CsharpFileLeaf());
+ var loggerMock = new Mock>();
+ var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+ var mockFileSystem = new MockFileSystem();
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ WorkingDirectory = "./"
+ };
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] { new SourceProjectInfo { AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(references: Array.Empty()).Object, TestProjectsInfo = new TestProjectsInfo(new MockFileSystem()) } });
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(references: []).Object, new TestProjectsInfo(new MockFileSystem()))]));
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(fileSystemMock);
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(),
@@ -136,12 +159,6 @@ public async Task InitialisationProcess_ShouldThrowIfHalfTestsAreFailing()
new InitialTestRun(
new TestRunResult(Array.Empty(), ranTests, failedTests, TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), new TimeoutValueCalculator(0))); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion"
- };
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
await Should.ThrowAsync(async () => await target.GetMutationTestInputsAsync(options, projects, testRunnerMock.Object));
@@ -162,18 +179,29 @@ public async Task InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool bre
var folder = new FolderComposite();
folder.Add(new CsharpFileLeaf());
+ var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+
+ var mockFileSystem = new MockFileSystem();
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] {new SourceProjectInfo {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- references: Array.Empty()).Object,
- TestProjectsInfo = new TestProjectsInfo(new MockFileSystem())
- }});
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ BreakOnInitialTestFailure = breakOnInitialTestFailure,
+ WorkingDirectory = "./"
+ };
+
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(references: []).Object, new TestProjectsInfo(new MockFileSystem()))]));
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny(), It.IsAny(), null, It.IsAny()));
- var failedTest = "testid";
+ const string failedTest = "testid";
var ranTests = new TestIdentifierList(failedTest, "othertest", "anothertest");
var testSet = new TestSet();
foreach (var ranTest in ranTests.GetIdentifiers())
@@ -186,13 +214,6 @@ public async Task InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool bre
initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(new InitialTestRun(
new TestRunResult(Array.Empty(), ranTests, failedTests, TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), new TimeoutValueCalculator(0))); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion",
- BreakOnInitialTestFailure = breakOnInitialTestFailure
- };
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
if (breakOnInitialTestFailure)
@@ -207,7 +228,6 @@ public async Task InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool bre
}
}
-
[TestMethod]
public async Task InitialisationProcess_ShouldRunTestSession()
{
@@ -219,26 +239,39 @@ public async Task InitialisationProcess_ShouldRunTestSession()
var folder = new FolderComposite();
folder.Add(new CsharpFileLeaf());
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] { new SourceProjectInfo() { AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(references: Array.Empty()).Object, TestProjectsInfo = new TestProjectsInfo(new MockFileSystem()) } });
+ var loggerMock = new Mock>();
+ var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+ var mockFileSystem = new MockFileSystem();
- inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ WorkingDirectory = "./"
+ };
+
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).
+ Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(references: []).Object,
+ new TestProjectsInfo(new MockFileSystem()))]));
+
+ var fileSystem = new MockFileSystem();
+ inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(fileSystem);
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny(), It.IsAny(), null, It.IsAny()));
var testSet = new TestSet();
testSet.RegisterTest(new TestDescription("id", "name", "test.cs"));
testRunnerMock.Setup(x => x.DiscoverTestsAsync(It.IsAny())).Returns(Task.FromResult(true));
testRunnerMock.Setup(x => x.GetTests(It.IsAny())).Returns(testSet);
- initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(), It.IsAny(), It.IsAny()))
+ initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(),
+ It.IsAny(),
+ It.IsAny()))
.Returns(Task.FromResult(new InitialTestRun(new TestRunResult(true), null))); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion"
- };
-
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
await target.GetMutationTestInputsAsync(options, projects, testRunnerMock.Object);
@@ -263,7 +296,6 @@ public async Task InitialisationProcess_ShouldThrowOnWhenNoTestDetected(string l
var folder = new FolderComposite();
folder.Add(new CsharpFileLeaf());
-
var testProjectAnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
projectFilePath: "C://Example/Dir/ProjectFolder",
targetFramework: "netcoreapp2.1",
@@ -271,13 +303,29 @@ public async Task InitialisationProcess_ShouldThrowOnWhenNoTestDetected(string l
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] {new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- references: []).Object,
- TestProjectsInfo = new TestProjectsInfo(new MockFileSystem()){TestProjects = new List {new(new MockFileSystem(), testProjectAnalyzerResult)}}
- }});
+ var loggerMock = new Mock>();
+ var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+ var mockFileSystem = new MockFileSystem();
+
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ WorkingDirectory = "./"
+ };
+
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [
+ new SourceProjectInfo(
+ TestHelper.SetupProjectAnalyzerResult(references: []).Object,
+ new TestProjectsInfo(new MockFileSystem()) {
+ TestProjects = new List {new(new MockFileSystem(), testProjectAnalyzerResult)} }
+ )
+ ]));
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny(), It.IsAny(), null, It.IsAny()));
@@ -286,12 +334,6 @@ public async Task InitialisationProcess_ShouldThrowOnWhenNoTestDetected(string l
initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(Task.FromResult(new InitialTestRun(new TestRunResult(Array.Empty(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), null))); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion"
- };
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
var exception = await Should.ThrowAsync(async () => await target.GetMutationTestInputsAsync(options, projects, testRunnerMock.Object));
@@ -322,13 +364,26 @@ public void InitialisationProcess_ShouldThrowOnWhenNoTestDetectedAndCorrectDepen
inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem());
- inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).Returns(
- new[] {new SourceProjectInfo
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
- references: []).Object,
- TestProjectsInfo = new TestProjectsInfo(new MockFileSystem()){TestProjects = new List {new(new MockFileSystem(), testProjectAnalyzerResult)}}
- }});
+ var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
+
+ var mockFileSystem = new MockFileSystem();
+
+ var options = new StrykerOptions
+ {
+ ProjectName = "TheProjectName",
+ ProjectVersion = "TheProjectVersion",
+ WorkingDirectory = "./"
+ };
+
+ var projectTracker = new ProjectsTracker(SolutionFile.BuildFromProjectList("solution.sln", []), options,
+ new Mock(MockBehavior.Strict).Object,
+ new Mock().Object,
+ mockFileSystem, loggerMock.Object);
+ inputFileResolverMock.Setup(x => x.ResolveSourceProjectInfos(It.IsAny())).
+ Returns(new RelatedSourceProjectsInfo(projectTracker,
+ [new SourceProjectInfo(TestHelper.SetupProjectAnalyzerResult(
+ references: []).Object
+ , new TestProjectsInfo(new MockFileSystem()){TestProjects = new List {new(new MockFileSystem(), testProjectAnalyzerResult)}})]));
initialBuildProcessMock.Setup(x => x.InitialBuild(It.IsAny(), It.IsAny(),
It.IsAny(), It.IsAny(), It.IsAny(), null, It.IsAny()));
@@ -337,12 +392,6 @@ public void InitialisationProcess_ShouldThrowOnWhenNoTestDetectedAndCorrectDepen
initialTestProcessMock.Setup(x => x.InitialTestAsync(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(Task.FromResult(new InitialTestRun(new TestRunResult(Array.Empty(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), null))); // failing test
- var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object);
- var options = new StrykerOptions
- {
- ProjectName = "TheProjectName",
- ProjectVersion = "TheProjectVersion"
- };
var projects = target.GetMutableProjectsInfo(options);
target.BuildProjects(options, projects);
Should.Throw(async () => await target.GetMutationTestInputsAsync(options, projects, testRunnerMock.Object)).Message.ShouldContain("failed to deploy or run.");
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs
index 72a151c113..47d0230812 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs
@@ -6,6 +6,7 @@
using System.Linq;
using System.Reflection;
using Buildalyzer;
+using Buildalyzer.Environment;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -154,7 +155,7 @@ public void InitializeShouldFindFilesRecursively()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(3);
}
@@ -189,7 +190,7 @@ public void InitializeShouldUseBuildalyzerResult()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(5);
}
@@ -228,7 +229,7 @@ public void ShouldUseCustomMsBuildPath()
var target = BuildTestResolver(fileSystem);
var options = new StrykerOptions { MsBuildPath = "\\msbuild.exe",ProjectPath = _testPath };
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(4);
}
@@ -258,7 +259,7 @@ public void ShouldHandleFailedAnalysis()
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(_options).First();
+ var action = () => target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
action.ShouldThrow();
}
@@ -288,7 +289,7 @@ public void ShouldSupportTestProjectFailedAnalysis()
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(_options).First();
+ var action = () => target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
action.ShouldNotThrow();
}
@@ -320,7 +321,7 @@ public void ShouldFailIfSolutionNotFound()
};
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(options).First();
+ var action = () => target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
action.ShouldThrow();
}
@@ -353,7 +354,7 @@ public void ShouldFailIfSolutionLoadFails()
var target = BuildTestResolverWithSolutionProvider(fileSystem,
new CustomSolutionProvider(_ => throw new IOException("Failed to read solution")));
- target.ResolveSourceProjectInfos(options).ShouldBeEmpty();
+ target.ResolveSourceProjectInfos(options).SourceProjectInfos.ShouldBeEmpty();
}
[TestMethod]
@@ -379,7 +380,7 @@ public void ShouldFailIfSolutionCantBeAccessed()
var target = BuildTestResolverWithSolutionProvider(fileSystem,
new CustomSolutionProvider(_ => throw new UnauthorizedAccessException("Access forbidden")));
- target.ResolveSourceProjectInfos(options).ShouldBeEmpty();
+ target.ResolveSourceProjectInfos(options).SourceProjectInfos.ShouldBeEmpty();
}
[TestMethod]
@@ -407,7 +408,7 @@ public void InitializeShouldNotSkipXamlFiles()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(5);
}
@@ -457,7 +458,7 @@ public void InitializeShouldMutateAssemblyInfo()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(3);
var mutatedFile = ((ProjectComponent)result.ProjectContents).CompilationSyntaxTrees.First(s => s != null && s.FilePath.Contains("AssemblyInfo.cs"));
@@ -514,7 +515,7 @@ public void InitializeShouldNotMutateIncompleteAssemblyInfo()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
((ProjectComponent)result.ProjectContents).CompilationSyntaxTrees.FirstOrDefault(s => s != null && s.FilePath.Contains("AssemblyInfo.cs")).
ShouldBeSemantically(CSharpSyntaxTree.ParseText(textContents));
@@ -543,7 +544,7 @@ public void InitializeShouldFindSpecifiedTestProjectFile()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(2);
}
@@ -600,7 +601,7 @@ public void InitializeShouldResolveImportedProject()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(3);
}
@@ -646,7 +647,7 @@ public void InitializeShouldNotResolveImportedPropsFile()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(2);
}
@@ -716,7 +717,7 @@ public void InitializeShouldResolveMultipleImportedProjects()
BuildBuildAnalyzerMock(analyzerResults);
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(4);
}
@@ -815,7 +816,7 @@ public void InitializeShouldResolvePropertiesInSharedProjectImports()
BuildBuildAnalyzerMock(analyzerResults);
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
var allFiles = result.ProjectContents.GetAllFiles();
@@ -899,7 +900,7 @@ public void InitializeShouldIgnoreBinFolder(string folderName)
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
((FolderComposite)result.ProjectContents).Children.Count().ShouldBe(1);
@@ -1080,22 +1081,24 @@ public void ShouldSelectAvailableFramework_WhenDesiredNotFound(string targetFram
var target = BuildTestResolver(fileSystem);
// Act
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
// Assert
result.AnalyzerResult.TargetFramework.ShouldBe(DefaultFramework);
}
[TestMethod]
- [DataRow("net3.0,net462", "net461,net2.0", null, "net3.0", "net2.0")]
- [DataRow("net3.0,net2.0", "net2.0,net3.0", null, "net3.0", "net3.0")]
- [DataRow("net3.0,net462", "net461,net2.0", "net2.0", "net3.0", "net2.0")]
- [DataRow("net3.0,net462", "net461,net2.0", "net3.0", "net3.0", "net2.0")]
- [DataRow("net3.0,net462", "net461,net2.0", "net461", "net3.0", "net2.0")]
- [DataRow("net3.0,net462", "net461,net2.0", "net462", "net462", "net461")]
- public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks, string projectFrameworks
+ [DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", null, "netcoreapp3.0", "netcoreapp2.0")]
+ [DataRow("netcoreapp3.0,netcoreapp2.0", "netcoreapp3.0,netcoreapp2.0", null, "netcoreapp3.0", "netcoreapp3.0")]
+ [DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "netcoreapp2.0", "netcoreapp3.0", "netcoreapp2.0")]
+ [DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "netcoreapp3.0", "netcoreapp3.0", "netcoreapp2.0")]
+ [DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "net461", "net462", "net461")]
+ [DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "net462", "net462", "net461")]
+ public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks
+ , string projectFrameworks
, string targetFramework
- , string expectedTestFramework,string expectedFramework)
+ , string expectedTestFramework,
+ string expectedFramework)
{
// Arrange
var basePath = Path.Combine(_sourcePath, "ExampleProject");
@@ -1132,7 +1135,59 @@ public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks, strin
var target = BuildTestResolver(fileSystem);
// Act
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
+
+ // Assert
+ result.AnalyzerResult.TargetFramework.ShouldBe(expectedFramework);
+ result.TestProjectsInfo.AnalyzerResults.First().TargetFramework.ShouldBe(expectedTestFramework);
+ }
+
+ // Stryker accepts netframework targert when running on Windows
+ [TestMethodWithIgnoreIfSupport]
+ [IgnoreIf(nameof(Is.NotWindows))]
+ [DataRow("net462", "net461", null, "net462", "net461")]
+ public void ShouldSelectFrameworkBasedOnTestProjectOnWindows(string testFrameworks
+ , string projectFrameworks
+ , string targetFramework
+ , string expectedTestFramework,
+ string expectedFramework)
+ {
+ // Arrange
+ var basePath = Path.Combine(_sourcePath, "ExampleProject");
+ var testProjectPath = Path.Combine(_sourcePath, "TestProjectFolder", "TestProject.csproj");
+ var sourceProjectPath = Path.Combine(_sourcePath, "ExampleProject", "ExampleProject.csproj");
+ var sourceProjectNameFilter = "ExampleProject.csproj";
+
+ var fileSystem = new MockFileSystem(new Dictionary
+ {
+ { sourceProjectPath, new MockFileData(_defaultTestProjectFileContents)},
+ { testProjectPath, new MockFileData(_defaultTestProjectFileContents)},
+ { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")}
+ });
+
+ var options = new StrykerOptions()
+ {
+ ProjectPath = basePath,
+ SourceProjectName = sourceProjectNameFilter,
+ TestProjects = new List { testProjectPath },
+ TargetFramework = targetFramework
+ };
+
+ var sourceProjectManagerMock = SourceProjectAnalyzerMock(sourceProjectPath,
+ fileSystem.AllFiles.Where(s => s.EndsWith(".cs")).ToArray(), null, projectFrameworks.Split(','));
+ var testProjectManagerMock = TestProjectAnalyzerMock(testProjectPath, sourceProjectPath, frameworks: testFrameworks.Split(','));
+
+ var analyzerResults = new Dictionary
+ {
+ { "MyProject", sourceProjectManagerMock.Object },
+ { "MyProject.UnitTests", testProjectManagerMock.Object }
+ };
+ BuildBuildAnalyzerMock(analyzerResults);
+
+ var target = BuildTestResolver(fileSystem);
+
+ // Act
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
// Assert
result.AnalyzerResult.TargetFramework.ShouldBe(expectedFramework);
@@ -1188,7 +1243,7 @@ public void ShouldSkipXamlFiles()
var target = BuildTestResolver(fileSystem);
// Act
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.ProjectContents.GetAllFiles().Count().ShouldBe(2);
}
@@ -1232,7 +1287,7 @@ public void ShouldFindAllTestProjects()
var target = BuildTestResolver(fileSystem);
// Act
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
// Assert
result.ProjectContents.GetAllFiles().Count().ShouldBe(1);
@@ -1260,7 +1315,7 @@ public void ShouldFindSourceProjectWhenSingleProjectReferenceAndNoFilter()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
}
@@ -1319,7 +1374,7 @@ public void ShouldThrowOnMultipleProjectsWithoutFilter()
// Assert
var ex = result.ShouldThrow();
- ex.Message.ShouldContain("Test project contains more than one project reference. Please set the project option");
+ ex.Message.ShouldContain("Multiple projects identified as potential candidates for mutation testing. Please set the project option");
ex.Message.ShouldContain("Choose one of the following references:");
}
@@ -1360,7 +1415,7 @@ public void ShouldNotThrowIfMultipleProjectButOneIsAlwaysReferenced()
WorkingDirectory = test2Path
};
// Act
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
// Assert
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
@@ -1403,7 +1458,7 @@ public void ShouldSelectProjectInWorkingDir()
WorkingDirectory = _sourcePath
};
// Act
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
// Assert
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
@@ -1442,7 +1497,7 @@ public void ShouldMatchFromMultipleProjectByName(string shouldMatch)
var target = BuildTestResolver(fileSystem);
var options = new StrykerOptions { SourceProjectName = shouldMatch, ProjectPath = _testPath };
- var result = target.ResolveSourceProjectInfos(options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
}
@@ -1480,7 +1535,7 @@ public void ShouldThrowWhenTheNameMatchesMore(string shouldMatchMoreThanOne)
var options = new StrykerOptions { SourceProjectName = shouldMatchMoreThanOne, ProjectPath = _testPath };
var result = () => target.ResolveSourceProjectInfos(options);
- result.ShouldThrow().Message.ShouldContain("more than one project");
+ result.ShouldThrow().Message.ShouldContain("Multiple projects identified");
}
[TestMethod]
@@ -1532,7 +1587,7 @@ public void ShouldFallbackToProjectReferenceIfDependencyNotFound()
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
}
@@ -1566,7 +1621,7 @@ public void ShouldPassPlatformToBuildalyzerWhenSpecified()
target.ResolveSourceProjectInfos(options);
// Assert
- managerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.AtLeastOnce);
+ sourceProjectManagerMock.Verify(x => x.Build(It.Is( env => env.GlobalProperties["Platform"] == "x64")), Times.AtLeastOnce);
}
[TestMethod]
@@ -1623,7 +1678,7 @@ public void ShouldPassPlatformFromSolutionToBuildalyzer()
var managerMock = BuildBuildAnalyzerMock(analyzerResults);
// Build a solution that assigns x64 platform to projects
- var solution = SolutionFile.BuildFromProjectList(
+ var solution = SolutionFile.BuildFromProjectList(solutionPath,
[_sourceProjectFilePath, _testProjectFilePath], ["x64"]);
var target = BuildTestResolverWithSolutionProvider(fileSystem,
@@ -1641,7 +1696,7 @@ public void ShouldPassPlatformFromSolutionToBuildalyzer()
target.ResolveSourceProjectInfos(options);
// Assert
- managerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.AtLeastOnce);
+ sourceProjectManagerMock.Verify(x => x.Build(It.Is( env => env.GlobalProperties["Platform"] == "x64")), Times.AtLeastOnce);
}
[TestMethod]
@@ -1669,7 +1724,7 @@ public void ShouldMatchOnBothForwardAndBackwardsSlash(string shouldMatch)
var target = BuildTestResolver(fileSystem);
var options = new StrykerOptions { SourceProjectName = shouldMatch, ProjectPath = _testPath };
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
result.AnalyzerResult.ProjectFilePath.ShouldBe(_sourceProjectFilePath);
}
@@ -1699,7 +1754,7 @@ public void ShouldUseNormalizedSolutionConfigurationWhenGetMatchingFallsBack()
var analyzerManagerMock = BuildBuildAnalyzerMock(analyzerResults);
// Build a solution with only Release|x86 available
- var solution = SolutionFile.BuildFromProjectList(
+ var solution = SolutionFile.BuildFromProjectList(solutionPath,
[_sourceProjectFilePath, _testProjectFilePath], ["x86"]);
var target = BuildTestResolverWithSolutionProvider(fileSystem,
@@ -1715,7 +1770,7 @@ public void ShouldUseNormalizedSolutionConfigurationWhenGetMatchingFallsBack()
target.ResolveSourceProjectInfos(options);
// Assert: Buildalyzer receives the solution-normalized platform "x86", not the requested "x64"
- analyzerManagerMock.Verify(x => x.SetGlobalProperty("Platform", "x86"), Times.AtLeastOnce);
- analyzerManagerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.Never);
+ sourceProjectManagerMock.Verify(x => x.Build(It.Is( env => env.GlobalProperties["Platform"] == "x86")), Times.AtLeastOnce);
+ sourceProjectManagerMock.Verify(x => x.Build(It.Is( env => env.GlobalProperties["Platform"] == "x64")), Times.Never);
}
}
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs
index 32d406cb15..38963b6a9e 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs
@@ -78,22 +78,21 @@ public ProjectMutatorTests()
SyntaxTree = CSharpSyntaxTree.ParseText("class TestClass { }")
});
- _mutationTestInput = new MutationTestInput()
+ var testProjectsInfo = new TestProjectsInfo(_fileSystemMock)
{
- SourceProjectInfo = new Stryker.Core.ProjectComponents.SourceProjects.SourceProjectInfo()
+ TestProjects = new List
{
- AnalyzerResult = analyzerResult,
- ProjectContents = folder
- },
- TestProjectsInfo = new TestProjectsInfo(_fileSystemMock)
+ new(_fileSystemMock, TestHelper.SetupProjectAnalyzerResult(
+ projectFilePath: "c:\\testproject.csproj",
+ targetFramework: "netcoreapp3.1",
+ sourceFiles: [_testFilePath]).Object)
+ }
+ };
+ _mutationTestInput = new MutationTestInput()
+ {
+ SourceProjectInfo = new Stryker.Core.ProjectComponents.SourceProjects.SourceProjectInfo(analyzerResult, testProjectsInfo)
{
- TestProjects = new List
- {
- new(_fileSystemMock, TestHelper.SetupProjectAnalyzerResult(
- projectFilePath: "c:\\testproject.csproj",
- targetFramework: "netcoreapp3.1",
- sourceFiles: new [] { _testFilePath }).Object)
- }
+ ProjectContents = folder,
}
};
}
@@ -125,7 +124,7 @@ public void ShouldInitializeEachProjectInSolution()
executedTests: new TestIdentifierList(failedTest, successfulTest),
failedTests: new TestIdentifierList(failedTest),
timedOutTest: TestIdentifierList.NoTest(),
- message: "testrun succesful",
+ message: "testrun successful",
Enumerable.Empty(),
timeSpan: TimeSpan.FromSeconds(2));
@@ -137,7 +136,7 @@ public void ShouldInitializeEachProjectInSolution()
// assert
result.ShouldNotBeNull();
- var testFile = _mutationTestInput.TestProjectsInfo.TestFiles.ShouldHaveSingleItem();
+ var testFile = _mutationTestInput.SourceProjectInfo.TestProjectsInfo.TestFiles.ShouldHaveSingleItem();
testFile.Tests.Count.ShouldBe(2);
}
}
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs
index 16690be005..b45d5fe876 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs
@@ -1,12 +1,11 @@
using System;
using System.Collections.Generic;
-using System.IO;
using System.IO.Abstractions.TestingHelpers;
using System.Linq;
using System.Threading.Tasks;
using Buildalyzer;
+using Buildalyzer.Environment;
using Microsoft.CodeAnalysis;
-using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
@@ -154,13 +153,13 @@ public async Task ShouldUseDesiredConfigurationWhenDefined()
};
var csPathName = FileSystem.Path.Combine(ProjectPath, "someFile.cs");
- var sourceProjectAnalyzerMock = SourceProjectAnalyzerMock(csprojPathName, [csPathName]).Object;
- var testProjectAnalyzerMock = TestProjectAnalyzerMock(testCsprojPathName, csprojPathName).Object;
+ var sourceProjectAnalyzerMock = SourceProjectAnalyzerMock(csprojPathName, [csPathName]);
+ var testProjectAnalyzerMock = TestProjectAnalyzerMock(testCsprojPathName, csprojPathName);
// The analyzer finds two projects
var analyzerResults = new Dictionary
{
- { "MyProject", sourceProjectAnalyzerMock },
- { "MyProject.UnitTests", testProjectAnalyzerMock }
+ { "MyProject", sourceProjectAnalyzerMock.Object },
+ { "MyProject.UnitTests", testProjectAnalyzerMock.Object }
};
var target = BuildProjectOrchestrator(analyzerResults, out var mockRunner, out var buildalyzerAnalyzerManagerMock);
@@ -168,7 +167,7 @@ public async Task ShouldUseDesiredConfigurationWhenDefined()
await target.MutateProjectsAsync(options, _reporterMock.Object, mockRunner.Object);
// assert
- buildalyzerAnalyzerManagerMock.Verify(x => x.SetGlobalProperty("Configuration", "Release"), Times.AtLeastOnce);
+ sourceProjectAnalyzerMock.Verify(x => x.Build(It.Is(env => env.GlobalProperties["Configuration"]=="Release")), Times.AtLeastOnce);
}
[TestMethodWithIgnoreIfSupport]
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
index 71c23b4197..6cc815e230 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
@@ -49,9 +49,8 @@ public void MutateShouldWriteToDisk_IfCompilationIsSuccessful()
var input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo()
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ SourceProjectInfo = new SourceProjectInfo(
+ TestHelper.SetupProjectAnalyzerResult(
projectFilePath: "/c/ProjectUnderTest/ProjectUnderTest.csproj",
properties: new Dictionary()
{
@@ -60,9 +59,8 @@ public void MutateShouldWriteToDisk_IfCompilationIsSuccessful()
{ "AssemblyName", "AssemblyName" },
{ "Language", "C#" }
},
- references: new[] { typeof(object).Assembly.Location }).Object,
- ProjectContents = folder,
- TestProjectsInfo = new TestProjectsInfo(fileSystem)
+ references: [typeof(object).Assembly.Location]).Object,
+ new TestProjectsInfo(fileSystem)
{
TestProjects = new List {
new(fileSystem, TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary()
@@ -72,7 +70,9 @@ public void MutateShouldWriteToDisk_IfCompilationIsSuccessful()
{ "Language", "C#" }
}).Object)
}
- }
+ })
+ {
+ ProjectContents = folder,
}
};
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs
index 49ff9476c1..c6af980ac2 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs
@@ -56,9 +56,8 @@ public MutationTestProcessTests()
};
Input = new MutationTestInput()
{
- SourceProjectInfo = new SourceProjectInfo()
- {
- AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
+ SourceProjectInfo = new SourceProjectInfo(
+ TestHelper.SetupProjectAnalyzerResult(
projectFilePath: Path.Combine(FilesystemRoot, "ProjectUnderTest", "ProjectUnderTest.csproj"),
properties: new Dictionary()
{
@@ -67,10 +66,10 @@ public MutationTestProcessTests()
{ "AssemblyName", "ProjectUnderTest" },
{ "Language", "C#" }
}).Object,
- ProjectContents = Folder,
- TestProjectsInfo = testProjectsInfo
- },
- TestProjectsInfo = testProjectsInfo,
+ testProjectsInfo)
+ {
+ ProjectContents = Folder
+ }
};
}
@@ -80,7 +79,7 @@ public void ShouldCallMutationProcess_MutateAndFilterMutants()
// Arrange
var options = new StrykerOptions()
{
- ExcludedMutations = new Mutator[] { }
+ ExcludedMutations = []
};
var executorMock = new Mock();
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs
index f522ce8b59..baccd8499c 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs
@@ -69,397 +69,397 @@ public void ShouldRemoveValuesFromCollectionExpression(string expression)
[TestMethod]
[CollectionExpressionTest("Should mutate collection expression with spread elements",
- """
- using System;
-
- namespace ExampleProject;
-
- class ClassName {
- public void M() {
- int[] abc = [ 1, 5, 7 ];
- int[] bcd = [ 1, ..abc, 3 ];
- }
- }
- """, 2)]
+ """
+ using System;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public void M() {
+ int[] abc = [ 1, 5, 7 ];
+ int[] bcd = [ 1, ..abc, 3 ];
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Should mutate collection expression with explicit cast",
- """
- using System;
-
- namespace ExampleProject;
-
- class ClassName {
- public void M() {
- int[] abc = [ 1, 5, 7 ];
- var bcd = (int[])[ 1, ..abc, 3 ];
- }
- }
- """, 2)]
+ """
+ using System;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public void M() {
+ int[] abc = [ 1, 5, 7 ];
+ var bcd = (int[])[ 1, ..abc, 3 ];
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Should mutate nested collection expression",
- """
- using System;
+ """
+ using System;
- namespace ExampleProject;
+ namespace ExampleProject;
- class ClassName {
- public void M() {
- int[][] abc = [ [ 1, 5 ], [ 7 ] ];
- }
- }
- """, 3)]
+ class ClassName {
+ public void M() {
+ int[][] abc = [ [ 1, 5 ], [ 7 ] ];
+ }
+ }
+ """, 3)]
[CollectionExpressionTest("Should mutate collection expression with inner array initialization",
- """
- using System;
+ """
+ using System;
- namespace ExampleProject;
+ namespace ExampleProject;
- class ClassName {
- public void M() {
- int[][] abc = [ [ 1, 5 ], new [] { 7 } ];
- }
- }
- """, 2)]
+ class ClassName {
+ public void M() {
+ int[][] abc = [ [ 1, 5 ], new [] { 7 } ];
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Should mutate collection expression with inner explicit spread collection expression",
- """
- using System;
+ """
+ using System;
- namespace ExampleProject;
+ namespace ExampleProject;
- class ClassName {
- public void M() {
- int[] abc = [ ..(Span)[ 1, 5 ], ..(Span)[ 7 ] ];
- }
- }
- """, 3)]
+ class ClassName {
+ public void M() {
+ int[] abc = [ ..(Span)[ 1, 5 ], ..(Span)[ 7 ] ];
+ }
+ }
+ """, 3)]
[CollectionExpressionTest("Should mutate empty collection expression",
- """
- using System;
+ """
+ using System;
- namespace ExampleProject;
+ namespace ExampleProject;
- class ClassName {
- public void M() {
- int[] abc = [];
- }
- }
- """, 1)]
+ class ClassName {
+ public void M() {
+ int[] abc = [];
+ }
+ }
+ """, 1)]
[CollectionExpressionTest("Should mutated collection expression used as a generic parameter",
- """
- using System;
- using System.Collections.Generic;
-
- namespace ExampleProject;
-
- class ClassName {
- public IEnumerable M() => Iter([ 1 ]);
-
- public IEnumerable Iter(IList list) {
- foreach (var l in list) {
- yield return l;
- }
- }
- }
- """, 1)]
+ """
+ using System;
+ using System.Collections.Generic;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public IEnumerable M() => Iter([ 1 ]);
+
+ public IEnumerable Iter(IList list) {
+ foreach (var l in list) {
+ yield return l;
+ }
+ }
+ }
+ """, 1)]
[CollectionExpressionTest("Empty collection expression mutation should not be ambiguous",
- """
- using System;
- using System.Collections.Generic;
-
- namespace ExampleProject;
-
- class ClassName {
- public IEnumerable M() => Iter([ 1 ]);
-
- public IEnumerable Iter(IList list) {
- foreach (var l in list) {
- yield return l;
- }
- }
-
- public IEnumerable Iter(IReadOnlyCollection list) {
- foreach (var l in list) {
- yield return l;
- }
- }
-
- public IEnumerable Iter(T[] list) {
- foreach (var l in list) {
- yield return l;
- }
- }
-
- public IEnumerable Iter(ReadOnlyMemory list) {
- for (var i = 0; i < list.Length; i++) {
- yield return list.Span[i];
- }
- }
- }
- """, 1)]
+ """
+ using System;
+ using System.Collections.Generic;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public IEnumerable M() => Iter([ 1 ]);
+
+ public IEnumerable Iter(IList list) {
+ foreach (var l in list) {
+ yield return l;
+ }
+ }
+
+ public IEnumerable Iter(IReadOnlyCollection list) {
+ foreach (var l in list) {
+ yield return l;
+ }
+ }
+
+ public IEnumerable Iter(T[] list) {
+ foreach (var l in list) {
+ yield return l;
+ }
+ }
+
+ public IEnumerable Iter(ReadOnlyMemory list) {
+ for (var i = 0; i < list.Length; i++) {
+ yield return list.Span[i];
+ }
+ }
+ }
+ """, 1)]
[CollectionExpressionTest("Filled collection expression mutation should not be ambiguous",
- """
- using System;
- using System.Collections.Generic;
- using System.Collections.Immutable;
-
- namespace ExampleProject;
-
- class ClassName {
- public void M() {
- ImmutableArray? a = [];
- var b = a ?? [];
- }
- }
- """, 2)]
+ """
+ using System;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public void M() {
+ ImmutableArray? a = [];
+ var b = a ?? [];
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Empty collection expression mutation should not be ambiguous again",
- """
- using System;
- using System.Collections.Generic;
- using System.Collections.Immutable;
-
- namespace ExampleProject;
-
- class ClassName {
- public void M() {
- List? a = [];
- var b = a ?? [];
- }
- }
- """, 2)]
+ """
+ using System;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public void M() {
+ List? a = [];
+ var b = a ?? [];
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Should mutate collection expression with varying sources",
- """
- using System;
- using System.Collections.Generic;
- using System.Collections.Immutable;
-
- namespace ExampleProject;
-
- class ClassName {
- public string[] M() {
- string[] vowels = [ "a", "e", "i", "o", "u" ];
- string[] consonants = [
- "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
- "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"
- ];
- string[] alphabet = [..vowels, ..consonants, "y" ];
- return alphabet;
- }
- }
- """, 3)]
+ """
+ using System;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public string[] M() {
+ string[] vowels = [ "a", "e", "i", "o", "u" ];
+ string[] consonants = [
+ "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
+ "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"
+ ];
+ string[] alphabet = [..vowels, ..consonants, "y" ];
+ return alphabet;
+ }
+ }
+ """, 3)]
[CollectionExpressionTest("Should mutate collection expression when nullable",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- public void GetLocalDateTime(Stream s) {
- AddAll(Deserialize(s, Enumerable.Empty()) ?? []);
- }
- public IEnumerable? Deserialize(Stream s, IEnumerable s2) {
- return [];
- }
- public void AddAll(IEnumerable list) { }
- }
- """, 2)]
+ """
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+ using System.Linq;
+ using System.IO;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public void GetLocalDateTime(Stream s) {
+ AddAll(Deserialize(s, Enumerable.Empty()) ?? []);
+ }
+ public IEnumerable? Deserialize(Stream s, IEnumerable s2) {
+ return [];
+ }
+ public void AddAll(IEnumerable list) { }
+ }
+ """, 2)]
[CollectionExpressionTest("Should mutate heavily nested collection expression",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- public static int[][][][][] Deep => [[[[[]]]]];
- }
- """, 5)]
+ """
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+ using System.Linq;
+ using System.IO;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ public static int[][][][][] Deep => [[[[[]]]]];
+ }
+ """, 5)]
[CollectionExpressionTest("Should mutate empty collection expressions",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#empty-collection-literal
- public static void Method() {
- int[] x = [];
- IEnumerable y = [];
- List z = [];
- }
- }
- """, 3)]
+ """
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+ using System.Linq;
+ using System.IO;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#empty-collection-literal
+ public static void Method() {
+ int[] x = [];
+ IEnumerable y = [];
+ List z = [];
+ }
+ }
+ """, 3)]
[CollectionExpressionTest("Should support ref safety",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#ref-safety
- static ReadOnlySpan AsSpanConstants()
- {
- return [1, 2, 3]; // ok: span refers to assembly data section
- }
-
- static ReadOnlySpan AsSpan3(T x, T y, T z)
- {
- return (T[])[x, y, z]; // ok: span refers to T[] on heap
- }
- }
- """, 2)]
+ """
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+ using System.Linq;
+ using System.IO;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#ref-safety
+ static ReadOnlySpan AsSpanConstants()
+ {
+ return [1, 2, 3]; // ok: span refers to assembly data section
+ }
+
+ static ReadOnlySpan AsSpan3(T x, T y, T z)
+ {
+ return (T[])[x, y, z]; // ok: span refers to T[] on heap
+ }
+ }
+ """, 2)]
[CollectionExpressionTest("Should support type inference",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#type-inference
- public static void Method() {
- var a = AsArray([1, 2, 3]); // AsArray(int[])
- var b = AsListOfArray([[4, 5], []]); // AsListOfArray(List)
-
- static T[] AsArray(T[] arg) => arg;
- static List AsListOfArray(List arg) => arg;
- }
- }
- """, 4)]
+ """
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Collections.Immutable;
+ using System.Linq;
+ using System.IO;
+
+ namespace ExampleProject;
+
+ class ClassName {
+ // https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#type-inference
+ public static void Method() {
+ var a = AsArray([1, 2, 3]); // AsArray(int[])
+ var b = AsListOfArray([[4, 5], []]); // AsListOfArray(List)
+
+ static T[] AsArray(T[] arg) => arg;
+ static List AsListOfArray(List arg) => arg;
+ }
+ }
+ """, 4)]
[CollectionExpressionTest("Should support overload resolution",
- """
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using System.IO;
-
- namespace ExampleProject;
-
- class ClassName {
- static void Generic(Span value) { }
- static void Generic(T[] value) { }
-
- static void SpanDerived(Span