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/MTP Solution.run.xml b/src/.run/MTP Solution.run.xml
index 72ba004ad6..d1baa377a1 100644
--- a/src/.run/MTP Solution.run.xml
+++ b/src/.run/MTP Solution.run.xml
@@ -2,7 +2,7 @@
-
+
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.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
index b91fb038d6..f23093ba6f 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs
@@ -42,26 +42,20 @@ public int Subtract(int first, int second)
}
}
}");
- 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: new[] { typeof(object).Assembly.Location }
- ).Object
- }
- };
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(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, rollbackProcessMock.Object);
using var ms = new MemoryStream();
using var symbol = new MemoryStream();
@@ -91,35 +85,26 @@ 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 rollbackProcessMock = new Mock(MockBehavior.Strict);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
-
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(new Collection() { syntaxTree }, 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(new Collection() { syntaxTree }, ms, null);
+ result.Success.ShouldBe(true);
+ ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
}
[TestMethod]
@@ -137,29 +122,24 @@ public int Subtract(string first, string second)
}
}
}");
- 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: new string[] { typeof(object).Assembly.Location }
- ).Object
- }
- };
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
rollbackProcessMock.Setup(x => x.Start(It.IsAny(), It.IsAny>(), It.IsAny(), false))
.Returns((CSharpCompilation compilation, ImmutableArray diagnostics, bool _, bool _) =>
new(compilation, null));
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object, new StrykerOptions());
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object, new StrykerOptions());
using (var ms = new MemoryStream())
{
@@ -184,26 +164,21 @@ public int Subtract(int first, int second)
}
}
}");
- 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: new string[] { typeof(object).Assembly.Location }
- ).Object
- }
- };
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
using (var ms = new MemoryStream())
{
@@ -228,38 +203,31 @@ public int Subtract(int first, int second)
}
}
}");
- 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")) }
- },
- // add a reference to system so the example code can compile
- references: new string[] { typeof(object).Assembly.Location },
- projectFilePath: "TestResources"
- ).Object
- }
- };
+ { "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 rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(new Collection() { syntaxTree }, ms, null);
- result.Success.ShouldBe(true);
+ using var ms = new MemoryStream();
+ var result = target.Compile(new Collection() { syntaxTree }, ms, null);
+ result.Success.ShouldBe(true);
- var key = Assembly.Load(ms.ToArray()).GetName().GetPublicKey();
- key.Length.ShouldBe(160, "Assembly was not signed");
- ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
- }
+ var key = Assembly.Load(ms.ToArray()).GetName().GetPublicKey();
+ key.Length.ShouldBe(160, "Assembly was not signed");
+ ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
}
[TestMethod]
@@ -277,38 +245,30 @@ public int Subtract(int first, int second)
}
}
}");
- 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" }
- },
- // add a reference to system so the example code can compile
- references: new string[] { typeof(object).Assembly.Location },
- projectFilePath: "TestResources"
- ).Object
- }
+ { "TargetDir", "" },
+ { "AssemblyName", "AssemblyName"},
+ { "TargetFileName", "TargetFileName.dll"},
+ { "SignAssembly", "true" }
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location],
+ projectFilePath: "TestResources"
+ ).Object;
- };
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(new Collection() { syntaxTree }, ms, null);
- result.Success.ShouldBe(true);
+ using var ms = new MemoryStream();
+ var result = target.Compile(new Collection() { syntaxTree }, ms, null);
+ result.Success.ShouldBe(true);
- var key = Assembly.Load(ms.ToArray()).GetName().GetPublicKey();
- key.Length.ShouldBe(0, "Assembly was signed");
- ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
- }
+ var key = Assembly.Load(ms.ToArray()).GetName().GetPublicKey();
+ key.Length.ShouldBe(0, "Assembly was signed");
+ ms.Length.ShouldBeGreaterThan(100, "No value was written to the MemoryStream by the compiler");
}
[TestMethod]
@@ -326,33 +286,25 @@ public int Subtract(int first, int second)
}
}
}");
- var input = new MutationTestInput()
- {
- SourceProjectInfo = new SourceProjectInfo
+ var analyzerResult = TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary()
{
- 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: new string[] { typeof(object).Assembly.Location }
- ).Object
- }
+ { "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 rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
- using (var ms = new MemoryStream())
- {
- Should.Throw(() => target.Compile(new Collection() { syntaxTree }, ms, null));
- }
+ using var ms = new MemoryStream();
+ Should.Throw(() => target.Compile(new Collection() { syntaxTree }, ms, null));
}
[TestMethod]
@@ -370,34 +322,27 @@ public int Subtract(int first, int second)
}
}
}");
- 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", "" },
- { "TargetFileName", "TargetFileName.dll" },
- { "AssemblyName", "AssemblyName"},
- },
- // add a reference to system so the example code can compile
- references: new string[] { typeof(object).Assembly.Location }
- ).Object
- }
- };
+ { "TargetDir", "" },
+ { "TargetFileName", "TargetFileName.dll" },
+ { "AssemblyName", "AssemblyName"},
+ },
+ // add a reference to system so the example code can compile
+ references: [typeof(object).Assembly.Location]
+ ).Object;
+
var rollbackProcessMock = new Mock(MockBehavior.Strict);
- var target = new CsharpCompilingProcess(input, rollbackProcessMock.Object);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcessMock.Object);
- using (var ms = new MemoryStream())
- {
- var result = target.Compile(new Collection() { syntaxTree }, ms, null);
- result.Success.ShouldBe(true);
+ using var ms = new MemoryStream();
+ var result = target.Compile(new Collection() { syntaxTree }, 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]
@@ -493,8 +438,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
{
@@ -503,9 +448,9 @@ private static IEnumerable MutateAndCompileSource(string sourceFile)
{ "TargetFileName", "TargetFileName.dll" },
},
// add a reference to system so the example code can compile
- references: new[] { typeof(object).Assembly.Location }
+ references: [typeof(object).Assembly.Location]
).Object,
- TestProjectsInfo = new TestProjectsInfo(fileSystem)
+ new TestProjectsInfo(fileSystem)
{
TestProjects = new List {
new TestProject(fileSystem, TestHelper.SetupProjectAnalyzerResult(
@@ -521,7 +466,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 88d64fb7fa..8b425888a4 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;
@@ -15,10 +16,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;
@@ -130,29 +133,23 @@ 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 target = new CsharpCompilingProcess(input, rollbackProcess, options);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcess, options);
using var ms = new MemoryStream();
var result = target.Compile(helpers, ms, null);
@@ -215,29 +212,23 @@ 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 target = new CsharpCompilingProcess(input, rollbackProcess, options);
+ var target = new CsharpCompilingProcess(analyzerResult, rollbackProcess, options);
using var ms = new MemoryStream();
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/BuildAnalyzerTestsBase.cs
index 7953724937..9836f3accc 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.StartsWith("netcoreapp") && !f.StartsWith("netstandard")));
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 3f5ba23af5..699d3644d7 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs
@@ -18,9 +18,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;
@@ -40,12 +42,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>();
@@ -57,7 +59,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);
}
@@ -73,12 +75,27 @@ public async Task InitialisationProcess_ShouldThrowOnFailedInitialTestRun()
var folder = new CsharpFolderComposite();
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(),
@@ -88,13 +105,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));
@@ -112,10 +122,23 @@ public async Task InitialisationProcess_ShouldThrowIfHalfTestsAreFailing()
var folder = new CsharpFolderComposite();
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(),
@@ -135,12 +158,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));
@@ -161,18 +178,29 @@ public async Task InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool bre
var folder = new CsharpFolderComposite();
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())
@@ -185,13 +213,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)
@@ -206,7 +227,6 @@ public async Task InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool bre
}
}
-
[TestMethod]
public async Task InitialisationProcess_ShouldRunTestSession()
{
@@ -218,26 +238,39 @@ public async Task InitialisationProcess_ShouldRunTestSession()
var folder = new CsharpFolderComposite();
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);
@@ -262,7 +295,6 @@ public async Task InitialisationProcess_ShouldThrowOnWhenNoTestDetected(string l
var folder = new CsharpFolderComposite();
folder.Add(new CsharpFileLeaf());
-
var testProjectAnalyzerResult = TestHelper.SetupProjectAnalyzerResult(
projectFilePath: "C://Example/Dir/ProjectFolder",
targetFramework: "netcoreapp2.1",
@@ -270,13 +302,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()));
@@ -285,12 +333,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));
@@ -321,13 +363,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()));
@@ -336,12 +391,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 09af3fafba..ea08a6feee 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;
@@ -155,7 +156,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);
}
@@ -190,7 +191,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);
}
@@ -229,7 +230,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);
}
@@ -259,7 +260,7 @@ public void ShouldHandleFailedAnalysis()
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(_options).First();
+ var action = () => target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
action.ShouldThrow();
}
@@ -289,7 +290,7 @@ public void ShouldSupportTestProjectFailedAnalysis()
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(_options).First();
+ var action = () => target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
action.ShouldNotThrow();
}
@@ -321,7 +322,7 @@ public void ShouldFailIfSolutionNotFound()
};
var target = BuildTestResolver(fileSystem);
- var action = () => target.ResolveSourceProjectInfos(options).First();
+ var action = () => target.ResolveSourceProjectInfos(options).SourceProjectInfos.First();
action.ShouldThrow();
}
@@ -354,7 +355,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]
@@ -380,7 +381,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]
@@ -408,7 +409,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);
}
@@ -458,7 +459,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"));
@@ -515,7 +516,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));
@@ -544,7 +545,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);
}
@@ -601,7 +602,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);
}
@@ -647,7 +648,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);
}
@@ -717,7 +718,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);
}
@@ -816,7 +817,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();
@@ -900,7 +901,7 @@ public void InitializeShouldIgnoreBinFolder(string folderName)
var target = BuildTestResolver(fileSystem);
- var result = target.ResolveSourceProjectInfos(_options).First();
+ var result = target.ResolveSourceProjectInfos(_options).SourceProjectInfos.First();
((CsharpFolderComposite)result.ProjectContents).Children.Count().ShouldBe(1);
@@ -1081,22 +1082,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");
@@ -1133,7 +1136,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 will ignore NetFramework target when runnning on non windows platforms
+ [TestMethodWithIgnoreIfSupport]
+ [IgnoreIf(nameof(Is.NotWindows))]
+ [DataRow("net462,netcoreapp3.0", "net461,netcoreapp2.0", 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);
@@ -1189,7 +1244,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);
}
@@ -1233,7 +1288,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);
@@ -1261,7 +1316,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);
}
@@ -1320,7 +1375,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 candidate for mutation testing. Please set the project option");
ex.Message.ShouldContain("Choose one of the following references:");
}
@@ -1361,7 +1416,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);
@@ -1404,7 +1459,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);
@@ -1443,7 +1498,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);
}
@@ -1481,7 +1536,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]
@@ -1533,7 +1588,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);
}
@@ -1567,7 +1622,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]
@@ -1624,7 +1679,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,
@@ -1642,7 +1697,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]
@@ -1670,7 +1725,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);
}
@@ -1700,7 +1755,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,
@@ -1716,7 +1771,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 6decd2550d..9b0cf1c5e0 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs
@@ -79,22 +79,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,
}
};
}
@@ -126,7 +125,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));
@@ -138,7 +137,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 4fcfa580af..afc92aff73 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]
@@ -302,7 +301,7 @@ public async Task ShouldFilterInSolutionMode()
// act
var result = async() => (await target.MutateProjectsAsync(options, _reporterMock.Object, mockRunner.Object)).ToList();
-
+
// assert
result.ShouldThrow();
}
diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
index 9f74a65cda..e22d52fdf5 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs
@@ -7,7 +7,6 @@
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
-using Stryker.Abstractions;
using Stryker.Configuration.Options;
using Stryker.Core.Mutants;
using Stryker.Core.MutationTest;
@@ -49,9 +48,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 +58,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 +69,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 f2e3789c86..a27ec5a8af 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs
@@ -55,9 +55,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()
{
@@ -66,10 +65,10 @@ public MutationTestProcessTests()
{ "AssemblyName", "ProjectUnderTest" },
{ "Language", "C#" }
}).Object,
- ProjectContents = Folder,
- TestProjectsInfo = testProjectsInfo
- },
- TestProjectsInfo = testProjectsInfo,
+ testProjectsInfo)
+ {
+ ProjectContents = Folder
+ }
};
}
@@ -79,7 +78,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 1415e412cd..c95dfac992 100644
--- a/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs
+++ b/src/Stryker.Core/Stryker.Core.UnitTest/Mutators/CollectionExpressionMutatorTests.cs
@@ -17,9 +17,7 @@
using Stryker.Core.Compiling;
using Stryker.Core.InjectedHelpers;
using Stryker.Core.Mutants;
-using Stryker.Core.MutationTest;
using Stryker.Core.Mutators;
-using Stryker.Core.ProjectComponents.SourceProjects;
namespace Stryker.Core.UnitTest.Mutators;
@@ -43,7 +41,7 @@ public void ShouldAddValueToEmptyCollectionExpression(string expression)
var expressionSyntax = SyntaxFactory.ParseExpression(expression) as CollectionExpressionSyntax;
var target = new CollectionExpressionMutator();
var result = target.ApplyMutations(expressionSyntax, null);
-
+
var mutation = result.ShouldHaveSingleItem();
mutation.DisplayName.ShouldBe("Collection expression mutation");
var replacement = mutation.ReplacementNode.ShouldBeOfType();
@@ -151,7 +149,7 @@ namespace ExampleProject;
class ClassName {
public IEnumerable M() => Iter([ 1 ]);
-
+
public IEnumerable Iter(IList list) {
foreach (var l in list) {
yield return l;
@@ -168,25 +166,25 @@ 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];
@@ -317,7 +315,7 @@ 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
@@ -340,7 +338,7 @@ class ClassName {
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;
}
@@ -360,19 +358,19 @@ namespace ExampleProject;
class ClassName {
static void Generic(Span value) { }
static void Generic(T[] value) { }
-
+
static void SpanDerived(Span value) { }
static void SpanDerived(object[] value) { }
-
+
static void ArrayDerived(Span