diff --git a/.github/workflows/integration-test.yaml b/.github/workflows/integration-test.yaml index 1c12620ea5..ba005cdb2f 100644 --- a/.github/workflows/integration-test.yaml +++ b/.github/workflows/integration-test.yaml @@ -1,5 +1,5 @@ name: integration test macos m1 -run-name: e2e ${{ github.head_ref }} on m1 macos +run-name: e2e ${{ github.head_ref }} on macOS apple silicon ARM on: [pull_request] diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 0b72cfdbbf..708d6653d7 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,13 +4,14 @@ + - + @@ -19,31 +20,31 @@ - + - + - + - + - - - - - - - - + + + + + + + + - + - - + + diff --git a/src/Stryker.Abstractions/packages.lock.json b/src/Stryker.Abstractions/packages.lock.json index de473ecd37..2991310daa 100644 --- a/src/Stryker.Abstractions/packages.lock.json +++ b/src/Stryker.Abstractions/packages.lock.json @@ -56,9 +56,9 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } @@ -71,11 +71,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "Direct", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "Buildalyzer.Logger": { @@ -130,15 +130,6 @@ "System.Configuration.ConfigurationManager": "8.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", "resolved": "6.0.0", @@ -280,8 +271,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "Microsoft.CodeAnalysis.Analyzers": { "type": "CentralTransitive", @@ -298,9 +289,19 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "dependencies": { @@ -313,13 +314,13 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", + "requested": "[6.14.0, )", "resolved": "6.9.1", "contentHash": "DaKh3lenPUvzGccPkbI97BIvA27z+/UsL3ankfoZlX/4vBVDK5N1sheFTQ+GuJf+IgSzsJz/A21SPUpQLHwUtA==" } diff --git a/src/Stryker.CLI/Stryker.CLI.UnitTest/FileConfigReaderTests.cs b/src/Stryker.CLI/Stryker.CLI.UnitTest/FileConfigReaderTests.cs index 04a84811cc..3a8bb84783 100644 --- a/src/Stryker.CLI/Stryker.CLI.UnitTest/FileConfigReaderTests.cs +++ b/src/Stryker.CLI/Stryker.CLI.UnitTest/FileConfigReaderTests.cs @@ -1,10 +1,15 @@ using System.IO; +using System.IO.Abstractions; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; +using Spectre.Console; using Stryker.Abstractions; using Stryker.Abstractions.Options; +using Stryker.CLI.Clients; +using Stryker.CLI.Logging; +using Stryker.Configuration; using Stryker.Core; using Stryker.Core.Initialisation; @@ -29,8 +34,8 @@ public void WithNoArgumentsAndNoConfigFile_ShouldStartStrykerWithConfigOptions() var currentDirectory = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory($"..{Path.DirectorySeparatorChar}"); var runResults = new StrykerRunResult(options, 0.3); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())).Returns(runResults).Verifiable(); - var target = new StrykerCli(mock.Object); + mock.Setup(x => x.RunMutationTest(It.IsAny())).Returns(runResults).Verifiable(); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); target.Run(new string[] { }); @@ -57,12 +62,12 @@ public void WithJsonConfigFile_ShouldStartStrykerWithConfigFileOptions(string ar var runResults = new StrykerRunResult(options, 0.3); var mock = new Mock(MockBehavior.Strict); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((c, l, p) => actualInputs = c) + mock.Setup(x => x.RunMutationTest(It.IsAny())) + .Callback(c => actualInputs = c) .Returns(runResults) .Verifiable(); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); target.Run(new string[] { argName, "filled-stryker-config.json" }); @@ -104,12 +109,12 @@ public void WithYamlConfigFile_ShouldStartStrykerWithConfigFileOptions() var runResults = new StrykerRunResult(options, 0.3); var mock = new Mock(MockBehavior.Strict); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((c, l, p) => actualInputs = c) + mock.Setup(x => x.RunMutationTest(It.IsAny())) + .Callback(c => actualInputs = c) .Returns(runResults) .Verifiable(); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); target.Run(new string[] { "-f", "filled-stryker-config.yaml" }); diff --git a/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLIInitCommandTests.cs b/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLIInitCommandTests.cs index 7b6416200c..3bcfab43fc 100644 --- a/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLIInitCommandTests.cs +++ b/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLIInitCommandTests.cs @@ -26,7 +26,7 @@ public class StrykerCLIInitCommandTests public StrykerCLIInitCommandTests() { - _target = new StrykerCli(_strykerRunnerMock.Object, null, _loggingInitializerMock.Object, _nugetClientMock.Object, _consoleMock, _fileSystemMock); + _target = new StrykerCli(_strykerRunnerMock.Object, new ConfigBuilder(), _loggingInitializerMock.Object, _nugetClientMock.Object, _consoleMock, _fileSystemMock); } [TestMethod] diff --git a/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLITests.cs b/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLITests.cs index 904e4fed31..2f6d904b67 100644 --- a/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLITests.cs +++ b/src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLITests.cs @@ -1,4 +1,5 @@ using System; +using System.IO.Abstractions; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -8,6 +9,7 @@ using NuGet.Versioning; using Serilog.Events; using Shouldly; +using Spectre.Console; using Spectre.Console.Testing; using Stryker.Abstractions; using Stryker.Abstractions.Options; @@ -35,12 +37,15 @@ public StrykerCLITests() { _options = new StrykerOptions() { Thresholds = new Thresholds { Break = 0 } }; _runResults = new StrykerRunResult(_options, 0.3); - _strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((c, l, p) => _inputs = c) + _strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny())) + .Callback(c => _inputs = c) .Returns(_runResults) .Verifiable(); _nugetClientMock.Setup(x => x.GetLatestVersionAsync()).Returns(Task.FromResult(new SemanticVersion(10, 0, 0))); - _target = new StrykerCli(_strykerRunnerMock.Object, null, _loggingInitializerMock.Object, _nugetClientMock.Object); + var configBuilder = new ConfigBuilder(); + var consoleMock = new Mock(); + var fileSystemMock = new Mock(); + _target = new StrykerCli(_strykerRunnerMock.Object, configBuilder, _loggingInitializerMock.Object, _nugetClientMock.Object, consoleMock.Object, fileSystemMock.Object); } [TestMethod] @@ -48,7 +53,7 @@ public void ShouldDisplayInfoOnHelp() { var mock = new Mock(MockBehavior.Strict); var console = new TestConsole().EmitAnsiSequences().Width(160); - var target = new StrykerCli(mock.Object, console:console); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), console, Mock.Of()); target.Run(new string[] { "--help" }); @@ -68,12 +73,12 @@ public void ShouldDisplayLogo() var strykerRunnerMock = new Mock(MockBehavior.Strict); var strykerRunResult = new StrykerRunResult(_options, 0.3); - strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) + strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny())) .Returns(strykerRunResult) .Verifiable(); var console = new TestConsole().EmitAnsiSequences().Width(160); - var target = new StrykerCli(strykerRunnerMock.Object, null, _loggingInitializerMock.Object, _nugetClientMock.Object, console); + var target = new StrykerCli(strykerRunnerMock.Object, new ConfigBuilder(), _loggingInitializerMock.Object, _nugetClientMock.Object, console, Mock.Of()); target.Run(Array.Empty()); @@ -121,12 +126,11 @@ public void OnMutationScoreBelowThresholdBreak_ShouldReturn_ExitCodeBreakThresho }; var strykerRunResult = new StrykerRunResult(options, 0.3); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((c, l, p) => Utilities.Logging.ApplicationLogging.LoggerFactory = l) + mock.Setup(x => x.RunMutationTest(It.IsAny())) .Returns(strykerRunResult) .Verifiable(); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var result = target.Run(new string[] { }); mock.Verify(); @@ -146,11 +150,11 @@ public void OnMutationScoreEqualToNullAndThresholdBreakEqualTo0_ShouldReturnExit } }; var strykerRunResult = new StrykerRunResult(options, double.NaN); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) + mock.Setup(x => x.RunMutationTest(It.IsAny())) .Returns(strykerRunResult) .Verifiable(); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var result = target.Run(new string[] { }); mock.Verify(); @@ -170,11 +174,11 @@ public void OnMutationScoreEqualToNullAndThresholdBreakAbove0_ShouldReturnExitCo } }; var strykerRunResult = new StrykerRunResult(options, double.NaN); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) + mock.Setup(x => x.RunMutationTest(It.IsAny())) .Returns(strykerRunResult) .Verifiable(); - var target = new StrykerCli(mock.Object, null, _loggingInitializerMock.Object, _nugetClientMock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), _loggingInitializerMock.Object, _nugetClientMock.Object, Mock.Of(), Mock.Of()); var result = target.Run(new string[] { }); mock.Verify(); @@ -195,9 +199,9 @@ public void OnMutationScoreAboveThresholdBreak_ShouldReturnExitCode0() }; var strykerRunResult = new StrykerRunResult(options, 0.1); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())).Returns(strykerRunResult).Verifiable(); + mock.Setup(x => x.RunMutationTest(It.IsAny())).Returns(strykerRunResult).Verifiable(); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var result = target.Run(new string[] { }); mock.Verify(); @@ -212,7 +216,7 @@ public void OnMutationScoreAboveThresholdBreak_ShouldReturnExitCode0() public void ShouldNotStartStryker_WithHelpArgument(string argName) { var mock = new Mock(MockBehavior.Strict); - var target = new StrykerCli(mock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); target.Run(new string[] { argName }); @@ -223,11 +227,11 @@ public void ShouldNotStartStryker_WithHelpArgument(string argName) public void ShouldThrow_OnException() { var mock = new Mock(MockBehavior.Strict); - mock.Setup(x => x.RunMutationTest(It.IsAny(), It.IsAny(), It.IsAny())) + mock.Setup(x => x.RunMutationTest(It.IsAny())) .Throws(new Exception("Initial testrun failed")) .Verifiable(); - var target = new StrykerCli(mock.Object, null, _loggingInitializerMock.Object, _nugetClientMock.Object); + var target = new StrykerCli(mock.Object, new ConfigBuilder(), _loggingInitializerMock.Object, _nugetClientMock.Object, Mock.Of(), Mock.Of()); Should.Throw(() => target.Run(new string[] { })); } diff --git a/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json b/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json index 638c90c49d..d026995b7b 100644 --- a/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json +++ b/src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json @@ -10,12 +10,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" } }, "Moq": { @@ -52,21 +52,22 @@ }, "Spectre.Console.Testing": { "type": "Direct", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "9QjSrRH+scy66ppmOLDiSno0Uh1ISJL18FqmTQDFNvK/oNI1DaI30cy2Uj6v0gxLZghtc/eKTwXtPpe0KKfHXw==", + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "wmthEamheMg6dtLtDemfrId/mBqAzZtPJtW2IdhEQiIPQdnJDyUima65z/ymPrRvX6UOHnybPPdS3ePybAdoCA==", "dependencies": { - "Spectre.Console": "0.54.0" + "Spectre.Console": "0.52.0", + "Spectre.Console.Cli": "0.52.0" } }, "TestableIO.System.IO.Abstractions.TestingHelpers": { "type": "Direct", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "320o0GORJV6VDFyKL7e7At+CTBFciFKKwgFYthCAPNKnlZLqyY68NKGQ+h4xTVf5y6qBtIsV3ap+Qog7VzF65g==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "dIZ2qtrvWbilx2HGkBIp5LNZmEZT2rve2M/NEg3RAzR4WbTa/Gis1x/qRggnoqfDrZ0VnPaybJJKh6r9POQ1EQ==", "dependencies": { - "TestableIO.System.IO.Abstractions.Wrappers": "22.1.0", - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "TestableIO.System.IO.Abstractions.Wrappers": "22.0.16", + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "Azure.Core": { @@ -133,14 +134,6 @@ "resolved": "8.0.0", "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==" }, - "Microsoft.Bcl.Cryptography": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "QY+zvyOMPoa883T3JB+M9sQvYBfGHidptsVhD9pWn52fS3+xaUSIaf5Fcw8WIoyP6cx3K5vHMcvOdDz7NehZOA==", - "dependencies": { - "System.Formats.Asn1": "9.0.6" - } - }, "Microsoft.Build": { "type": "Transitive", "resolved": "17.10.4", @@ -190,8 +183,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" }, "Microsoft.DiaSymReader": { "type": "Transitive", @@ -214,18 +207,10 @@ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", @@ -241,17 +226,17 @@ }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "Microsoft.Extensions.Primitives": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.NET.StringTools": { "type": "Transitive", @@ -336,10 +321,10 @@ }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.TestPlatform.ObjectModel": "17.14.1", "Newtonsoft.Json": "13.0.3" } }, @@ -374,6 +359,11 @@ "Microsoft.Testing.Platform.MSBuild": "1.9.1" } }, + "Namotion.Reflection": { + "type": "Transitive", + "resolved": "3.4.2", + "contentHash": "ZHrvPdAg7zV78iOTiH9ua+34rBfn4iH6Bjfo2bzUHOGD3KkjGUvqxBFy+v9p6qwV+GEeYWl4NOqXH8tVcZOMpw==" + }, "NETStandard.Library": { "type": "Transitive", "resolved": "2.0.0", @@ -387,38 +377,62 @@ "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, + "NJsonSchema": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "0q6mr6eJk/D4jPFKyRwAPauedZK60yFE5rjA3+aqCdQm9kGE9J8xygRrLfk0Ms8wBviWbLlaZYzqAteG3b6Yag==", + "dependencies": { + "NJsonSchema.Annotations": "11.4.0", + "Namotion.Reflection": "3.4.2", + "Newtonsoft.Json": "13.0.3" + } + }, + "NJsonSchema.Annotations": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "fKAGyIU9s18e9GAdNbEr2PmZdpBqb1RdAr2+EHHrdkSZNoYtwFcmN6syJaxYxeEFegoLbC3e+EU5eb7Tt1ph3Q==" + }, "NuGet.Common": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "AegMASeOhhm2flGk53b/YtINs2H+zKMnV5fTs3rRo08JMQ3gqrbJUSjiEMOKt5d541IhVA+pHDWVsDCZ+5g7Fg==", + "resolved": "6.14.0", + "contentHash": "E+IyoDez4kPrjNPYp41fScowTuSjGifXfjrtU9p9XlQDOGig6vrikQDCMeo6BT6YmT9vUZ+Tb1CX8ru8z0bkNg==", "dependencies": { - "NuGet.Frameworks": "7.0.1" + "NuGet.Frameworks": "6.14.0", + "System.Collections.Immutable": "8.0.0" } }, "NuGet.Configuration": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "En8aIvZywOmgi+Q2Tv7VUELSYc3OCTwmzItr2N3j5pVIBQE92HbOa1b4+fJJbl9X/rAOkNon3fxjwYeqrdMRrw==", + "resolved": "6.14.0", + "contentHash": "YwoF+Nm0IGdNP/LQ97xysCQlhy4oWIzD4oGcbvz5bQGogPrqn/5lSGwP8llmVv+zfJ6tZZDAT9vh4Q+gH0Aqqg==", "dependencies": { - "NuGet.Common": "7.0.1", - "System.Security.Cryptography.ProtectedData": "9.0.6" + "NuGet.Common": "6.14.0", + "System.Security.Cryptography.ProtectedData": "4.4.0" } }, "NuGet.Packaging": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "hpC6Fx5VlMa42cSZDQ10TKDFHLoMpa8NbDwYSnCiGd4IPiG9+5ywWuxHjVbYYA7/PmJry5hs1GyJjvHV8bQmLw==", + "resolved": "6.14.0", + "contentHash": "BpQlGpkuAhrh6x00mGvwK13a5c30vX3FYQbWI11LIyXl/nWmoOQSZrB3yEAh9ihibeGo8SunWZBGXvkkJUxbEg==", "dependencies": { "Newtonsoft.Json": "13.0.3", - "NuGet.Configuration": "7.0.1", - "NuGet.Versioning": "7.0.1", - "System.Security.Cryptography.Pkcs": "9.0.6" + "NuGet.Configuration": "6.14.0", + "NuGet.Versioning": "6.14.0", + "System.Security.Cryptography.Pkcs": "6.0.4" } }, "NuGet.Versioning": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "tu68LnZqiLM/VyLQzPRqedopMi/M+5/6JqwB2Xkd0AWXRpUWewkVv77asVB7wgjMPVzQFK2sBy7AuxV49UzuvQ==" + "resolved": "6.14.0", + "contentHash": "4v4blkhCv8mpKtfx+z0G/X0daVCzdIaHSC51GkUspugi5JIMn2Bo8xm5PdZYF0U68gOBfz/+aPWMnpRd85Jbow==" + }, + "OpenCli.Sources": { + "type": "Transitive", + "resolved": "0.5.0", + "contentHash": "5FgwoxpZy9Qy7MsKHb2hZBTWXEvg7JCPuNnaqsn2g0/X9oWQVThYQ1nND1xJrq8P1aw+Gh8sirV1HbefeqSalw==", + "dependencies": { + "NJsonSchema": "11.4.0" + } }, "runtime.native.System": { "type": "Transitive", @@ -471,6 +485,15 @@ "System.Text.Encoding.Extensions": "4.0.11" } }, + "Spectre.Console.Cli": { + "type": "Transitive", + "resolved": "0.52.0", + "contentHash": "50O+XG7tqtEErVGtqX00aUcsXJs7ltlSkGGAdRTI17zEgqzpQd7RRtf657eHXnPSK10SCoAuVMK0fnWPXDoVCA==", + "dependencies": { + "OpenCli.Sources": "0.5.0", + "Spectre.Console": "0.52.0" + } + }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", @@ -521,8 +544,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -531,8 +554,8 @@ }, "System.Formats.Asn1": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "8LbKs3WVqyDSszFZJA9Uxg9z+C6WbPbFTSPm/HjFEsWx49XWs0ueqaAKPWncvFJ8yl4H4C/RTnUMhCKoXkddkg==" + "resolved": "8.0.0", + "contentHash": "AJukBuLoe3QeAF+mfaRKQb2dgyrvt340iMBHYv+VdBzCUM06IxGlvl0o/uPOS7lHnXPN6u8fFRHSHudx5aTi8w==" }, "System.Globalization": { "type": "Transitive", @@ -732,17 +755,16 @@ }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "Gny8p2mX0jc5rjh+PA4Gx5GG66sj2C+e+ro7+j/3IsKT/bmQ84tGRV+XKaG+5/CTCdwkSSKDWEQ1rJd0J5jE0Q==", + "resolved": "8.0.0", + "contentHash": "ULmp3xoOwNYjOYp4JZ2NK/6NdTgiN1GQXzVVN1njQ7LOZ0d0B9vyMnhyqbIi9Qw4JXj1JgCsitkTShboHRx7Eg==", "dependencies": { - "Microsoft.Bcl.Cryptography": "9.0.6", - "System.Formats.Asn1": "9.0.6" + "System.Formats.Asn1": "8.0.0" } }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "yErfw/3pZkJE/VKza/Cm5idTpIKOy/vsmVi59Ta5SruPVtubzxb8CtnE8tyUpzs5pr0Y28GUFfSVzAhCLN3F/Q==" + "resolved": "8.0.0", + "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -843,14 +865,15 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "dotnet-stryker": { "type": "Project", "dependencies": { "McMaster.Extensions.CommandLineUtils": "[4.1.1, )", - "NuGet.Protocol": "[7.0.1, )", + "Microsoft.Extensions.DependencyInjection": "[9.0.10, )", + "NuGet.Protocol": "[6.14.0, )", "YamlDotNet": "[16.3.0, )", "stryker": "[4.8.1, )" } @@ -865,20 +888,21 @@ "LibGit2Sharp": "[0.31.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.DependencyInjection": "[9.0.10, )", + "Microsoft.Extensions.Logging": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "Microsoft.Web.LibraryManager.Build": "[3.0.71, )", "Mono.Cecil": "[0.11.6, )", - "NuGet.Frameworks": "[7.0.1, )", + "NuGet.Frameworks": "[6.14.0, )", "Serilog": "[4.3.0, )", - "Serilog.Extensions.Logging": "[10.0.0, )", + "Serilog.Extensions.Logging": "[9.0.2, )", "Serilog.Extensions.Logging.File": "[3.0.0, )", - "Serilog.Sinks.Console": "[6.1.1, )", + "Serilog.Sinks.Console": "[6.0.0, )", "ShellProgressBar": "[5.2.0, )", - "Spectre.Console": "[0.54.0, )", + "Spectre.Console": "[0.52.0, )", "Stryker.Abstractions": "[1.0.0, )", "Stryker.Configuration": "[1.0.0, )", "Stryker.DataCollector": "[1.0.0, )", @@ -886,7 +910,7 @@ "Stryker.RegexMutators": "[1.0.0, )", "Stryker.TestRunner.VsTest": "[1.0.0, )", "Stryker.Utilities": "[1.0.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.abstractions": { @@ -896,9 +920,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.configuration": { @@ -915,8 +939,8 @@ "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.regexmutators": { @@ -928,23 +952,23 @@ "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.testrunner.vstest": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "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.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -953,7 +977,7 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", "Stryker.Abstractions": "[1.0.0, )" @@ -1048,53 +1072,62 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0", - "Microsoft.Extensions.Options": "10.0.0" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } @@ -1122,17 +1155,17 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==" + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "xZ37J58DQAkVUX29qoMwla26iBYRScdcfSGNe1FIZjCX1tpafN9n7TinrkRxaJqYzW0D8Ob8a3eRSYhwEUauCA==" }, "NuGet.Protocol": { "type": "CentralTransitive", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "bYPzTqgOSsXV8AxXXFCCPtAtlxwph0DVtdM8AlaKTGLClHDx7VAlL4cCIcVl2iEzQuG1uC79SvzllvKi1grcNw==", + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "hYk9j/ZKErdiK0tFaqsrRtT5q+sJ2VjCUrgFCQG2wGhAlmb8YaBzYLOGDvRdFwuvTi5I+KRuVHPqhc010Np1Bg==", "dependencies": { - "NuGet.Packaging": "7.0.1" + "NuGet.Packaging": "6.14.0" } }, "ResXResourceReader.NetStandard": { @@ -1149,11 +1182,11 @@ }, "Serilog.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "requested": "[9.0.2, )", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", "dependencies": { - "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging": "9.0.0", "Serilog": "4.2.0" } }, @@ -1174,9 +1207,9 @@ }, "Serilog.Sinks.Console": { "type": "CentralTransitive", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", "dependencies": { "Serilog": "4.0.0" } @@ -1193,9 +1226,9 @@ }, "Spectre.Console": { "type": "CentralTransitive", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "StDXCFayfy0yB1xzUHT2tgEpV1/HFTiS4JgsAQS49EYTfMixSwwucaQs/bIOCwXjWwIQTMuxjUIxcB5XsJkFJA==" + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "bVe6b8mizSB4QAlfvKGWHIZbzpxtkCnK6taFUgrxbzPseiBNENi/36RTnKwqPJCHPimU5QG2vK6jd+JASQDugg==" }, "Stryker.Regex.Parser": { "type": "CentralTransitive", @@ -1205,11 +1238,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "YamlDotNet": { diff --git a/src/Stryker.CLI/Stryker.CLI/Infrastructure/ServiceCollectionExtensions.cs b/src/Stryker.CLI/Stryker.CLI/Infrastructure/ServiceCollectionExtensions.cs new file mode 100644 index 0000000000..45ef0905c6 --- /dev/null +++ b/src/Stryker.CLI/Stryker.CLI/Infrastructure/ServiceCollectionExtensions.cs @@ -0,0 +1,24 @@ +using System.IO.Abstractions; +using Microsoft.Extensions.DependencyInjection; +using Spectre.Console; +using Stryker.CLI.Clients; +using Stryker.CLI.Logging; +using Stryker.Configuration; + +namespace Stryker.CLI; + +public static class ServiceCollectionExtensions +{ + public static IServiceCollection AddStrykerCli(this IServiceCollection services) + { + // CLI services + services.AddTransient(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(AnsiConsole.Console); + services.AddSingleton(); + + return services; + } +} diff --git a/src/Stryker.CLI/Stryker.CLI/Logging/ApplicationLogging.cs b/src/Stryker.CLI/Stryker.CLI/Logging/ApplicationLogging.cs index 6cae65c57c..d06d67680a 100644 --- a/src/Stryker.CLI/Stryker.CLI/Logging/ApplicationLogging.cs +++ b/src/Stryker.CLI/Stryker.CLI/Logging/ApplicationLogging.cs @@ -22,6 +22,10 @@ public static void ConfigureLogger(LogEventLevel logLevel, bool logToFile, bool LoggerFactory.AddFile(Path.Combine(outputPath, "logs", "log-{Date}.txt"), traceToFile ? MSLogLevel.Trace : MSLogLevel.Debug); } + // Set the Utilities ApplicationLogging factory to the same instance + // This ensures that code in Stryker.Options and other projects can access the configured logger + Stryker.Utilities.Logging.ApplicationLogging.LoggerFactory = LoggerFactory; + // When stryker log level is debug or trace, set LibGit2Sharp loglevel if (logLevel >= LogEventLevel.Information) return; // LibGit2Sharp does not handle LogEventLevel.None properly. diff --git a/src/Stryker.CLI/Stryker.CLI/Program.cs b/src/Stryker.CLI/Stryker.CLI/Program.cs index 4dcd06b2d8..f4f87969de 100644 --- a/src/Stryker.CLI/Stryker.CLI/Program.cs +++ b/src/Stryker.CLI/Stryker.CLI/Program.cs @@ -1,6 +1,10 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Spectre.Console; using Stryker.Abstractions.Exceptions; +using Stryker.CLI.Logging; using Stryker.Configuration; +using Stryker.Core.Infrastructure; namespace Stryker.CLI; @@ -10,7 +14,14 @@ public static int Main(string[] args) { try { - var app = new StrykerCli(); + // Build DI container + var services = new ServiceCollection() + .AddLogging() + .AddStrykerCore() + .AddStrykerCli() + .BuildServiceProvider(); + + var app = services.GetRequiredService(); return app.Run(args); } catch (NoTestProjectsException exception) diff --git a/src/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj b/src/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj index 0323d279a0..08d9d40120 100644 --- a/src/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj +++ b/src/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj @@ -6,6 +6,8 @@ Exe true dotnet-stryker + portable + true @@ -29,6 +31,7 @@ + diff --git a/src/Stryker.CLI/Stryker.CLI/StrykerCLI.cs b/src/Stryker.CLI/Stryker.CLI/StrykerCLI.cs index fe22f8d5a0..65af424413 100644 --- a/src/Stryker.CLI/Stryker.CLI/StrykerCLI.cs +++ b/src/Stryker.CLI/Stryker.CLI/StrykerCLI.cs @@ -75,19 +75,20 @@ public class StrykerCli public int ExitCode { get; private set; } = ExitCodes.Success; - public StrykerCli(IStrykerRunner stryker = null, - IConfigBuilder configReader = null, - ILoggingInitializer loggingInitializer = null, - IStrykerNugetFeedClient nugetClient = null, - IAnsiConsole console = null, - IFileSystem fileSystem = null) + public StrykerCli( + IStrykerRunner stryker, + IConfigBuilder configReader, + ILoggingInitializer loggingInitializer, + IStrykerNugetFeedClient nugetClient, + IAnsiConsole console, + IFileSystem fileSystem) { - _stryker = stryker ?? new StrykerRunner(); - _configReader = configReader ?? new ConfigBuilder(); - _loggingInitializer = loggingInitializer ?? new LoggingInitializer(); - _nugetClient = nugetClient ?? new StrykerNugetFeedClient(); - _console = console ?? AnsiConsole.Console; - _fileSystem = fileSystem ?? new FileSystem(); + _stryker = stryker ?? throw new ArgumentNullException(nameof(stryker)); + _configReader = configReader ?? throw new ArgumentNullException(nameof(configReader)); + _loggingInitializer = loggingInitializer ?? throw new ArgumentNullException(nameof(loggingInitializer)); + _nugetClient = nugetClient ?? throw new ArgumentNullException(nameof(nugetClient)); + _console = console ?? throw new ArgumentNullException(nameof(console)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); } /// @@ -149,12 +150,12 @@ public int Run(string[] args) private void RunStryker(IStrykerInputs inputs) { - var result = _stryker.RunMutationTest(inputs, ApplicationLogging.LoggerFactory); + var result = _stryker.RunMutationTest(inputs); - HandleStrykerRunResult(inputs, result); + HandleStrykerRunResult(result); } - private void HandleStrykerRunResult(IStrykerInputs inputs, StrykerRunResult result) + private void HandleStrykerRunResult(StrykerRunResult result) { var logger = ApplicationLogging.LoggerFactory.CreateLogger(); @@ -169,7 +170,7 @@ private void HandleStrykerRunResult(IStrykerInputs inputs, StrykerRunResult resu if (result.ScoreIsLowerThanThresholdBreak()) { - var thresholdBreak = (double)inputs.ValidateAll().Thresholds.Break / 100; + var thresholdBreak = (double)result.Options.Thresholds.Break / 100; logger.LogWarning("Final mutation score is below threshold break. Crashing..."); _console.WriteLine(); diff --git a/src/Stryker.CLI/Stryker.CLI/packages.lock.json b/src/Stryker.CLI/Stryker.CLI/packages.lock.json index 1172502aa4..9be94be4f6 100644 --- a/src/Stryker.CLI/Stryker.CLI/packages.lock.json +++ b/src/Stryker.CLI/Stryker.CLI/packages.lock.json @@ -17,13 +17,22 @@ "System.ComponentModel.Annotations": "5.0.0" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + } + }, "NuGet.Protocol": { "type": "Direct", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "bYPzTqgOSsXV8AxXXFCCPtAtlxwph0DVtdM8AlaKTGLClHDx7VAlL4cCIcVl2iEzQuG1uC79SvzllvKi1grcNw==", + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "hYk9j/ZKErdiK0tFaqsrRtT5q+sJ2VjCUrgFCQG2wGhAlmb8YaBzYLOGDvRdFwuvTi5I+KRuVHPqhc010Np1Bg==", "dependencies": { - "NuGet.Packaging": "7.0.1" + "NuGet.Packaging": "6.14.0" } }, "YamlDotNet": { @@ -66,14 +75,6 @@ "resolved": "8.0.0", "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==" }, - "Microsoft.Bcl.Cryptography": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "QY+zvyOMPoa883T3JB+M9sQvYBfGHidptsVhD9pWn52fS3+xaUSIaf5Fcw8WIoyP6cx3K5vHMcvOdDz7NehZOA==", - "dependencies": { - "System.Formats.Asn1": "9.0.6" - } - }, "Microsoft.Build": { "type": "Transitive", "resolved": "17.10.4", @@ -137,32 +138,24 @@ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "Microsoft.Extensions.Primitives": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.NET.StringTools": { "type": "Transitive", @@ -211,36 +204,37 @@ }, "NuGet.Common": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "AegMASeOhhm2flGk53b/YtINs2H+zKMnV5fTs3rRo08JMQ3gqrbJUSjiEMOKt5d541IhVA+pHDWVsDCZ+5g7Fg==", + "resolved": "6.14.0", + "contentHash": "E+IyoDez4kPrjNPYp41fScowTuSjGifXfjrtU9p9XlQDOGig6vrikQDCMeo6BT6YmT9vUZ+Tb1CX8ru8z0bkNg==", "dependencies": { - "NuGet.Frameworks": "7.0.1" + "NuGet.Frameworks": "6.14.0", + "System.Collections.Immutable": "8.0.0" } }, "NuGet.Configuration": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "En8aIvZywOmgi+Q2Tv7VUELSYc3OCTwmzItr2N3j5pVIBQE92HbOa1b4+fJJbl9X/rAOkNon3fxjwYeqrdMRrw==", + "resolved": "6.14.0", + "contentHash": "YwoF+Nm0IGdNP/LQ97xysCQlhy4oWIzD4oGcbvz5bQGogPrqn/5lSGwP8llmVv+zfJ6tZZDAT9vh4Q+gH0Aqqg==", "dependencies": { - "NuGet.Common": "7.0.1", - "System.Security.Cryptography.ProtectedData": "9.0.6" + "NuGet.Common": "6.14.0", + "System.Security.Cryptography.ProtectedData": "4.4.0" } }, "NuGet.Packaging": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "hpC6Fx5VlMa42cSZDQ10TKDFHLoMpa8NbDwYSnCiGd4IPiG9+5ywWuxHjVbYYA7/PmJry5hs1GyJjvHV8bQmLw==", + "resolved": "6.14.0", + "contentHash": "BpQlGpkuAhrh6x00mGvwK13a5c30vX3FYQbWI11LIyXl/nWmoOQSZrB3yEAh9ihibeGo8SunWZBGXvkkJUxbEg==", "dependencies": { "Newtonsoft.Json": "13.0.3", - "NuGet.Configuration": "7.0.1", - "NuGet.Versioning": "7.0.1", - "System.Security.Cryptography.Pkcs": "9.0.6" + "NuGet.Configuration": "6.14.0", + "NuGet.Versioning": "6.14.0", + "System.Security.Cryptography.Pkcs": "6.0.4" } }, "NuGet.Versioning": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "tu68LnZqiLM/VyLQzPRqedopMi/M+5/6JqwB2Xkd0AWXRpUWewkVv77asVB7wgjMPVzQFK2sBy7AuxV49UzuvQ==" + "resolved": "6.14.0", + "contentHash": "4v4blkhCv8mpKtfx+z0G/X0daVCzdIaHSC51GkUspugi5JIMn2Bo8xm5PdZYF0U68gOBfz/+aPWMnpRd85Jbow==" }, "runtime.native.System": { "type": "Transitive", @@ -338,8 +332,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -348,8 +342,8 @@ }, "System.Formats.Asn1": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "8LbKs3WVqyDSszFZJA9Uxg9z+C6WbPbFTSPm/HjFEsWx49XWs0ueqaAKPWncvFJ8yl4H4C/RTnUMhCKoXkddkg==" + "resolved": "8.0.0", + "contentHash": "AJukBuLoe3QeAF+mfaRKQb2dgyrvt340iMBHYv+VdBzCUM06IxGlvl0o/uPOS7lHnXPN6u8fFRHSHudx5aTi8w==" }, "System.Globalization": { "type": "Transitive", @@ -531,17 +525,16 @@ }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "Gny8p2mX0jc5rjh+PA4Gx5GG66sj2C+e+ro7+j/3IsKT/bmQ84tGRV+XKaG+5/CTCdwkSSKDWEQ1rJd0J5jE0Q==", + "resolved": "8.0.0", + "contentHash": "ULmp3xoOwNYjOYp4JZ2NK/6NdTgiN1GQXzVVN1njQ7LOZ0d0B9vyMnhyqbIi9Qw4JXj1JgCsitkTShboHRx7Eg==", "dependencies": { - "Microsoft.Bcl.Cryptography": "9.0.6", - "System.Formats.Asn1": "9.0.6" + "System.Formats.Asn1": "8.0.0" } }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "yErfw/3pZkJE/VKza/Cm5idTpIKOy/vsmVi59Ta5SruPVtubzxb8CtnE8tyUpzs5pr0Y28GUFfSVzAhCLN3F/Q==" + "resolved": "8.0.0", + "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -632,8 +625,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker": { "type": "Project", @@ -645,20 +638,21 @@ "LibGit2Sharp": "[0.31.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.DependencyInjection": "[9.0.10, )", + "Microsoft.Extensions.Logging": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "Microsoft.Web.LibraryManager.Build": "[3.0.71, )", "Mono.Cecil": "[0.11.6, )", - "NuGet.Frameworks": "[7.0.1, )", + "NuGet.Frameworks": "[6.14.0, )", "Serilog": "[4.3.0, )", - "Serilog.Extensions.Logging": "[10.0.0, )", + "Serilog.Extensions.Logging": "[9.0.2, )", "Serilog.Extensions.Logging.File": "[3.0.0, )", - "Serilog.Sinks.Console": "[6.1.1, )", + "Serilog.Sinks.Console": "[6.0.0, )", "ShellProgressBar": "[5.2.0, )", - "Spectre.Console": "[0.54.0, )", + "Spectre.Console": "[0.52.0, )", "Stryker.Abstractions": "[1.0.0, )", "Stryker.Configuration": "[1.0.0, )", "Stryker.DataCollector": "[1.0.0, )", @@ -666,7 +660,7 @@ "Stryker.RegexMutators": "[1.0.0, )", "Stryker.TestRunner.VsTest": "[1.0.0, )", "Stryker.Utilities": "[1.0.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.abstractions": { @@ -676,9 +670,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.configuration": { @@ -695,8 +689,8 @@ "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.regexmutators": { @@ -708,23 +702,23 @@ "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.testrunner.vstest": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "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.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -733,7 +727,7 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", "Stryker.Abstractions": "[1.0.0, )" @@ -821,51 +815,51 @@ }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0", - "Microsoft.Extensions.Options": "10.0.0" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } @@ -884,9 +878,9 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==" + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "xZ37J58DQAkVUX29qoMwla26iBYRScdcfSGNe1FIZjCX1tpafN9n7TinrkRxaJqYzW0D8Ob8a3eRSYhwEUauCA==" }, "ResXResourceReader.NetStandard": { "type": "CentralTransitive", @@ -902,11 +896,11 @@ }, "Serilog.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "requested": "[9.0.2, )", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", "dependencies": { - "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging": "9.0.0", "Serilog": "4.2.0" } }, @@ -927,9 +921,9 @@ }, "Serilog.Sinks.Console": { "type": "CentralTransitive", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", "dependencies": { "Serilog": "4.0.0" } @@ -946,9 +940,9 @@ }, "Spectre.Console": { "type": "CentralTransitive", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "StDXCFayfy0yB1xzUHT2tgEpV1/HFTiS4JgsAQS49EYTfMixSwwucaQs/bIOCwXjWwIQTMuxjUIxcB5XsJkFJA==" + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "bVe6b8mizSB4QAlfvKGWHIZbzpxtkCnK6taFUgrxbzPseiBNENi/36RTnKwqPJCHPimU5QG2vK6jd+JASQDugg==" }, "Stryker.Regex.Parser": { "type": "CentralTransitive", @@ -958,11 +952,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } } diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs index 172850410f..8b1369714b 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Compiling/CSharpCompilingProcessTests.cs @@ -539,8 +539,8 @@ private static IEnumerable MutateAndCompileSource(string sourceFile) MutationLevel = MutationLevel.Complete, OptimizationMode = OptimizationModes.CoverageBasedTest, }; - var process = new CsharpMutationProcess(fileSystem, options); - process.Mutate(input); + var process = new CsharpMutationProcess(fileSystem, TestLoggerFactory.CreateLogger()); + process.Mutate(input, options); var projectContentsMutants = input.SourceProjectInfo.ProjectContents.Mutants; return projectContentsMutants; diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialBuildProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialBuildProcessTests.cs index 2260e7b187..20aa3c2c54 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialBuildProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialBuildProcessTests.cs @@ -28,7 +28,7 @@ public void InitialBuildProcess_ShouldThrowStrykerInputExceptionOnFail() processMock.SetupProcessMockToReturn("", 1); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.InitialBuild(false, _cProjectsExampleCsproj, null)) .Details.ShouldBe("Initial build of targeted project failed. Please make sure the targeted project is buildable. You can reproduce this error yourself using: \"dotnet build Example.csproj\""); @@ -42,7 +42,7 @@ public void InitialBuildProcess_WithPathAsBuildCommand_ShouldThrowStrykerInputEx processMock.SetupProcessMockToReturn("", 1); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.InitialBuild(true, null, _cProjectsExampleCsproj, null, null, @"C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe")) @@ -58,7 +58,7 @@ public void InitialBuildProcess_WithPathAsBuildCommand_TriesWithMsBuildIfDotnetF processMock.SetupProcessMockToReturn("", 2); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.InitialBuild(false, null, _cProjectsExampleCsproj, null, null, @"C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe")) .Details.ShouldBe("Initial build of targeted project failed. Please make sure the targeted project is buildable. You can reproduce this error yourself using: \"\"" + @@ -75,7 +75,7 @@ public void InitialBuildProcess_ShouldNotThrowExceptionOnSuccess() processMock.SetupProcessMockToReturn(""); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); target.InitialBuild(false, "/", "/"); @@ -97,7 +97,7 @@ public void InitialBuildProcess_ShouldRunMsBuildOnDotnetFramework(string msBuild var mockFileSystem = new MockFileSystem(); mockFileSystem.AddFile(msBuildLocation, new MockFileData("Mocked MsBuild Executable")); - var target = new InitialBuildProcess(processMock.Object, mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, mockFileSystem, TestLoggerFactory.CreateLogger()); target.InitialBuild(true, "./ExampleProject.sln", "./ExampleProject.sln", "Debug"); @@ -121,7 +121,7 @@ public void InitialBuildProcess_ShouldUseCustomMsbuildIfNotNull() processMock.SetupProcessMockToReturn(""); - var target = new InitialBuildProcess(processMock.Object, mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, mockFileSystem, TestLoggerFactory.CreateLogger()); target.InitialBuild(true, "/", "./ExampleProject.sln", null, null, CustomMsBuildPath); processMock.Verify(x => x.Start(It.IsAny(), @@ -139,7 +139,7 @@ public void InitialBuildProcess_ShouldRunDotnetBuildIfNotDotnetFramework() processMock.SetupProcessMockToReturn(""); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); target.InitialBuild(false, "./ExampleProject.csproj", null); @@ -158,7 +158,7 @@ public void InitialBuildProcess_ShouldUseSolutionPathIfSet() processMock.SetupProcessMockToReturn(""); - var target = new InitialBuildProcess(processMock.Object, _mockFileSystem); + var target = new InitialBuildProcess(processMock.Object, _mockFileSystem, TestLoggerFactory.CreateLogger()); target.InitialBuild(false, "", "./ExampleProject.sln"); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialTestProcessTests.cs index 9c59a9c5fc..3842d5e3ba 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialTestProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialTestProcessTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; +using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; @@ -11,6 +12,7 @@ using Stryker.TestRunner.Results; using Stryker.TestRunner.Tests; using Stryker.TestRunner.VsTest; +using Stryker.Utilities; namespace Stryker.Core.UnitTest.Initialisation; @@ -22,7 +24,7 @@ public class InitialTestProcessTests : TestBase public InitialTestProcessTests() { - _target = new InitialTestProcess(); + _target = new InitialTestProcess(TestLoggerFactory.CreateLogger()); _options = new StrykerOptions { AdditionalTimeout = 0 diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs index fbbbbe05ae..5d0cab341b 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InitialisationProcessTests.cs @@ -4,6 +4,7 @@ using System.IO.Abstractions; using System.IO.Abstractions.TestingHelpers; using System.Linq; +using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; @@ -45,7 +46,8 @@ public void InitialisationProcess_ShouldCallNeededResolvers() }); inputFileResolverMock.SetupGet(x => x.FileSystem).Returns(new FileSystem()); - var target = new InitialisationProcess(inputFileResolverMock.Object); + var loggerMock = new Mock>(); + var target = new InitialisationProcess(inputFileResolverMock.Object, Mock.Of(), Mock.Of(), loggerMock.Object); var options = new StrykerOptions { @@ -82,9 +84,7 @@ public void InitialisationProcess_ShouldThrowOnFailedInitialTestRun() testRunnerMock.Setup(x => x.DiscoverTests(It.IsAny())).Returns(true); initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())).Throws(new InputException("")); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -129,9 +129,7 @@ public void InitialisationProcess_ShouldThrowIfHalfTestsAreFailing() new InitialTestRun( new TestRunResult(Array.Empty(), ranTests, failedTests, TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), new TimeoutValueCalculator(0))); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -180,9 +178,7 @@ public void InitialisationProcess_ShouldThrowOnTestTestIfAskedFor(bool breakOnIn initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())).Returns(new InitialTestRun( new TestRunResult(Array.Empty(), ranTests, failedTests, TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), new TimeoutValueCalculator(0))); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -228,9 +224,7 @@ public void InitialisationProcess_ShouldRunTestSession() initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new InitialTestRun(new TestRunResult(true), null)); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -283,9 +277,7 @@ public void InitialisationProcess_ShouldThrowOnWhenNoTestDetected(string library initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new InitialTestRun(new TestRunResult(Array.Empty(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), null)); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -334,9 +326,7 @@ public void InitialisationProcess_ShouldThrowOnWhenNoTestDetectedAndCorrectDepen initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new InitialTestRun(new TestRunResult(Array.Empty(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), string.Empty, Enumerable.Empty(), TimeSpan.Zero), null)); // failing test - var target = new InitialisationProcess(inputFileResolverMock.Object, - initialBuildProcessMock.Object, - initialTestProcessMock.Object); + var loggerMock = new Mock>(); var target = new InitialisationProcess(inputFileResolverMock.Object, initialBuildProcessMock.Object, initialTestProcessMock.Object, loggerMock.Object); var options = new StrykerOptions { ProjectName = "TheProjectName", @@ -347,3 +337,4 @@ public void InitialisationProcess_ShouldThrowOnWhenNoTestDetectedAndCorrectDepen Should.Throw(() => target.GetMutationTestInputs(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 ed4631b3d7..0f53e05ecb 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/InputFileResolverTests.cs @@ -145,7 +145,7 @@ public void InitializeShouldFindFilesRecursively() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -180,7 +180,7 @@ public void InitializeShouldUseBuildalyzerResult() BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -218,7 +218,7 @@ public void ShouldUseCustomMsBuildPath() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { MsBuildPath = "\\msbuild.exe",ProjectPath = _testPath }; var result = target.ResolveSourceProjectInfos(options).First(); @@ -249,7 +249,7 @@ public void ShouldHandleFailedAnalysis() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var action = () => target.ResolveSourceProjectInfos(_options).First(); action.ShouldThrow(); @@ -278,7 +278,7 @@ public void InitializeShouldNotSkipXamlFiles() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -328,7 +328,7 @@ public void InitializeShouldMutateAssemblyInfo() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -385,7 +385,7 @@ public void InitializeShouldNotMutateIncompleteAssemblyInfo() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -414,7 +414,7 @@ public void InitializeShouldFindSpecifiedTestProjectFile() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -471,7 +471,7 @@ public void InitializeShouldResolveImportedProject() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -517,7 +517,7 @@ public void InitializeShouldNotResolveImportedPropsFile() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -588,7 +588,7 @@ public void InitializeShouldResolveMultipleImportedProjects() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -636,7 +636,7 @@ public void InitializeShouldThrowOnMissingSharedProject() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.ResolveSourceProjectInfos(_options)); } @@ -688,7 +688,7 @@ public void InitializeShouldResolvePropertiesInSharedProjectImports() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -741,7 +741,7 @@ public void InitializeShouldThrowIfImportPropertyCannotBeResolved() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var exception = Should.Throw(() => target.ResolveSourceProjectInfos(_options)); exception.Message.ShouldBe($"Missing MSBuild property (SharedDir) in project reference (..{FilePathUtils.NormalizePathSeparators("/$(SharedDir)/Example.projitems")}). Please check your project file ({_sourceProjectPath}) and try again."); @@ -772,7 +772,7 @@ public void InitializeShouldIgnoreBinFolder(string folderName) }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -793,7 +793,7 @@ public void ShouldThrowExceptionOnNullPath() BuildBuildAnalyzerMock(new Dictionary()); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.FindTestProject(null)); } @@ -807,7 +807,7 @@ public void ShouldThrowExceptionOnNoProjectFile() BuildBuildAnalyzerMock(new Dictionary()); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.FindTestProject(Path.Combine(_sourcePath))); } @@ -821,7 +821,7 @@ public void ShouldThrowStrykerInputExceptionOnTwoProjectFiles_AndNoTestProjectFi { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var errorMessage = $@"Expected exactly one .csproj file, found more than one: @@ -846,7 +846,7 @@ public void ShouldNotThrowExceptionOnTwoProjectFilesInDifferentLocations() { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var actual = target.FindTestProject(Path.Combine(_sourcePath)); @@ -862,7 +862,7 @@ public void ShouldChooseGivenTestProjectFileIfPossible() { Path.Combine(_sourcePath, "TestProject.csproj"), new MockFileData(_defaultTestProjectFileContents)}, { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var actual = target.FindTestProject(Path.Combine(_sourcePath, "TestProject.csproj")); @@ -877,7 +877,7 @@ public void ShouldThrowExceptionIfGivenTestFileDoesNotExist() { Path.Combine(_sourcePath, "AlternateProject.csproj"), new MockFileData(_defaultTestProjectFileContents)}, { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var exception = Should.Throw(() => target.FindTestProject(Path.Combine(_sourcePath, "GivenTestProject.csproj"))); exception.Message.ShouldStartWith("No .csproj or .fsproj file found, please check your project directory at"); @@ -892,7 +892,7 @@ public void ShouldChooseGivenTestProjectFileIfPossible_AtRelativeLocation() { Path.Combine(_sourcePath, "SubFolder", "TestProject.csproj"), new MockFileData(_defaultTestProjectFileContents)}, { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var actual = target.FindTestProject(Path.Combine(_sourcePath, "SubFolder", "TestProject.csproj")); @@ -908,7 +908,7 @@ public void ShouldChooseGivenTestProjectFileIfPossible_AtFullPath() { Path.Combine(_sourcePath,"SubFolder", "TestProject.csproj"), new MockFileData(_defaultTestProjectFileContents)}, { Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")} }); - var target = new InputFileResolver(fileSystem, null); + var target = new InputFileResolver(fileSystem, new Mock().Object, new Mock().Object, TestLoggerFactory.CreateLogger()); var actual = target.FindTestProject(Path.Combine(_filesystemRoot, FilePathUtils.NormalizePathSeparators(Path.Combine(_sourcePath, "SubFolder")))); @@ -952,7 +952,7 @@ public void ShouldSelectAvailableFramework_WhenDesiredNotFound(string targetFram }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); // Act var result = target.ResolveSourceProjectInfos(options).First(); @@ -1002,7 +1002,7 @@ public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks, strin }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); // Act var result = target.ResolveSourceProjectInfos(options).First(); @@ -1058,7 +1058,7 @@ public void ShouldSkipXamlFiles() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); // Act var result = target.ResolveSourceProjectInfos(_options).First(); @@ -1103,7 +1103,7 @@ public void ShouldFindAllTestProjects() BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); // Act var result = target.ResolveSourceProjectInfos(options).First(); @@ -1131,7 +1131,7 @@ public void ShouldFindSourceProjectWhenSingleProjectReferenceAndNoFilter() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -1154,7 +1154,7 @@ public void ShouldThrowOnNoProjectReference() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var action = () => target.ResolveSourceProjectInfos(_options); @@ -1186,7 +1186,7 @@ public void ShouldThrowOnMultipleProjectsWithoutFilter() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); // Act var result = () => target.ResolveSourceProjectInfos(_options); @@ -1226,7 +1226,7 @@ public void ShouldNotThrowIfMultipleProjectButOneIsAlwaysReferenced() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { TestProjects = [_testProjectPath, test2Path], @@ -1269,7 +1269,7 @@ public void ShouldMatchFromMultipleProjectByName(string shouldMatch) }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { SourceProjectName = shouldMatch, ProjectPath = _testPath }; var result = target.ResolveSourceProjectInfos(options).First(); @@ -1306,7 +1306,7 @@ public void ShouldThrowWhenTheNameMatchesMore(string shouldMatchMoreThanOne) }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { SourceProjectName = shouldMatchMoreThanOne, ProjectPath = _testPath }; var result = () => target.ResolveSourceProjectInfos(options); @@ -1333,7 +1333,7 @@ public void ShouldThrowWhenTheNameMatchesNone() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { SourceProjectName = "wrong.csprj", ProjectPath = _testPath }; var result = () => target.ResolveSourceProjectInfos(options); @@ -1361,7 +1361,7 @@ public void ShouldFallbackToProjectReferenceIfDependencyNotFound() }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var result = target.ResolveSourceProjectInfos(_options).First(); @@ -1390,7 +1390,7 @@ public void ShouldMatchOnBothForwardAndBackwardsSlash(string shouldMatch) }; BuildBuildAnalyzerMock(analyzerResults); - var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object); + var target = new InputFileResolver(fileSystem, BuildalyzerProviderMock.Object, _nugetMock.Object, TestLoggerFactory.CreateLogger()); var options = new StrykerOptions { SourceProjectName = shouldMatch, ProjectPath = _testPath }; var result = target.ResolveSourceProjectInfos(_options).First(); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/NugetRestoreProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/NugetRestoreProcessTests.cs index ac4a6fc280..bc911c6af4 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/NugetRestoreProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/NugetRestoreProcessTests.cs @@ -60,7 +60,7 @@ public void HappyFlow() ExitCode = 0, Output = "Msbuild executable path found at " }); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); target.RestorePackages(SolutionPath); @@ -122,7 +122,7 @@ public void RetryIfRestoreFails() Output = "Packages restore failed." }).Verifiable(Times.Once); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); target.RestorePackages(SolutionPath); @@ -181,7 +181,7 @@ public void FailToGetMsBuildVersion() ExitCode = 0, Output = "Msbuild executable path found at " }); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); target.RestorePackages(SolutionPath); @@ -242,7 +242,7 @@ public void NugetIsUsingSuppliedMsBuild() Output = "Msbuild executable path found at " }); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); target.RestorePackages(SolutionPath, msbuildPath); processExecutorMock.Verify(x => x.Start(CProgramFilesX86MicrosoftVisualStudio, It.Is((p) => p.EndsWith("where.exe")), @@ -289,7 +289,7 @@ public void ShouldThrowOnNugetNotInstalled() Output = "INFO: Could not find files for the given pattern(s)." }); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); Should.Throw(() => target.RestorePackages(SolutionPath)); } @@ -348,7 +348,7 @@ public void ShouldPickFirstNugetPath() Output = "Msbuild executable path found at " }); - var target = new NugetRestoreProcess(processExecutorMock.Object); + var target = new NugetRestoreProcess(processExecutorMock.Object, TestLoggerFactory.CreateLogger()); target.RestorePackages(SolutionPath); processExecutorMock.Verify(p => p.Start(It.IsAny(), It.IsAny(), It.IsAny(), diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs index a1f82ae0bb..d43b4de896 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectMutatorTests.cs @@ -3,13 +3,17 @@ using System.IO.Abstractions; using System.IO.Abstractions.TestingHelpers; using System.Linq; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.Extensions.DependencyInjection; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; using Stryker.Abstractions; +using Stryker.Abstractions.Options; using Stryker.Abstractions.Reporting; using Stryker.Core.Initialisation; using Stryker.Core.MutationTest; +using Stryker.Core.ProjectComponents.Csharp; using Stryker.Core.ProjectComponents.TestProjects; using Stryker.TestRunner.Results; using Stryker.TestRunner.Tests; @@ -51,14 +55,43 @@ public void Test2() public ProjectMutatorTests() { _mutationTestProcessMock.Setup(x => x.Mutate()); + _mutationTestProcessMock.Setup(x => x.Initialize(It.IsAny(), It.IsAny(), It.IsAny())); _fileSystemMock.File.WriteAllText(_testFilePath, _testFileContents); + + var analyzerResult = TestHelper.SetupProjectAnalyzerResult( + properties: new Dictionary + { + { "Language", "C#" }, + { "AssemblyName", "TestProject" }, + { "TargetDir", "c:\\bin\\Debug\\netcoreapp3.1" }, + { "TargetFileName", "TestProject.dll" } + }, + projectFilePath: "c:\\project.csproj", + targetFramework: "netcoreapp3.1", + projectReferences: Array.Empty(), + sourceFiles: Array.Empty()).Object; + + var folder = new CsharpFolderComposite(); + folder.Add(new CsharpFileLeaf + { + FullPath = "c:\\TestClass.cs", + SyntaxTree = CSharpSyntaxTree.ParseText("class TestClass { }") + }); + _mutationTestInput = new MutationTestInput() { + SourceProjectInfo = new Stryker.Core.ProjectComponents.SourceProjects.SourceProjectInfo() + { + AnalyzerResult = analyzerResult, + ProjectContents = folder + }, TestProjectsInfo = new TestProjectsInfo(_fileSystemMock) { TestProjects = new List { new(_fileSystemMock, TestHelper.SetupProjectAnalyzerResult( + projectFilePath: "c:\\testproject.csproj", + targetFramework: "netcoreapp3.1", sourceFiles: new [] { _testFilePath }).Object) } } @@ -70,7 +103,8 @@ public void ShouldInitializeEachProjectInSolution() { // arrange var options = new StrykerOptions(); - var target = new ProjectMutator(_mutationTestProcessMock.Object); + var serviceProviderMock = new Mock(); + var target = new ProjectMutator(TestLoggerFactory.CreateLogger(), serviceProviderMock.Object, _mutationTestProcessMock.Object); var testCase1 = new VsTestCase(new TestCase("mytestname1", new Uri(_testFilePath), _testFileContents) { Id = Guid.NewGuid(), diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs index eb6c5b8383..356b10ff46 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/Initialisation/ProjectOrchestratorTests.cs @@ -3,6 +3,7 @@ using System.Linq; using Buildalyzer; using Microsoft.CodeAnalysis; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -11,11 +12,13 @@ using Shouldly; using Stryker.Abstractions; using Stryker.Abstractions.Exceptions; +using Stryker.Abstractions.Options; using Stryker.Abstractions.Reporting; using Stryker.Abstractions.Testing; using Stryker.Core.Initialisation; using Stryker.Core.MutationTest; using Stryker.Core.ProjectComponents; +using Stryker.Core.ProjectComponents.SourceProjects; using Stryker.TestRunner.Results; using Stryker.TestRunner.VsTest; using Stryker.Utilities.Logging; @@ -208,9 +211,20 @@ public void ShouldRestoreWhenAnalysisFails() }); var initialBuildProcessMock = new Mock(); + var initialTestProcessMock = new Mock(); + initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(new InitialTestRun(new TestRunResult(true), new TimeoutValueCalculator(500))); + var inputFileResolver = new InputFileResolver(FileSystem, BuildalyzerProviderMock.Object, nugetRestoreMock.Object, TestLoggerFactory.CreateLogger()); + var initialisationProcess = new InitialisationProcess(inputFileResolver, initialBuildProcessMock.Object, initialTestProcessMock.Object, TestLoggerFactory.CreateLogger()); + + var serviceProviderMock = new Mock(); + var mutationTestExecutorMock = new Mock(); var target = new ProjectOrchestrator(_projectMutatorMock.Object, - initialBuildProcessMock.Object, - new InputFileResolver(FileSystem, BuildalyzerProviderMock.Object, nugetRestoreMock.Object)); + initialisationProcess, + inputFileResolver, + serviceProviderMock.Object, + mutationTestExecutorMock.Object, + TestLoggerFactory.CreateLogger()); // act var result = target.MutateProjects(options, _reporterMock.Object, mockRunner.Object).ToList(); @@ -447,8 +461,19 @@ private ProjectOrchestrator BuildProjectOrchestrator(Dictionary r.InitialTest(It.IsAny())).Returns(new TestRunResult(true)); var initialBuildProcessMock = new Mock(); + var initialTestProcessMock = new Mock(); + initialTestProcessMock.Setup(x => x.InitialTest(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(new InitialTestRun(new TestRunResult(true), new TimeoutValueCalculator(500))); + var inputFileResolver = new InputFileResolver(FileSystem, BuildalyzerProviderMock.Object, new Mock().Object, TestLoggerFactory.CreateLogger()); + var initialisationProcess = new InitialisationProcess(inputFileResolver, initialBuildProcessMock.Object, initialTestProcessMock.Object, TestLoggerFactory.CreateLogger()); + + var serviceProviderMock = new Mock(); + var mutationTestExecutorMock = new Mock(); return new ProjectOrchestrator(_projectMutatorMock.Object, - initialBuildProcessMock.Object, - new InputFileResolver(FileSystem, BuildalyzerProviderMock.Object)); + initialisationProcess, + inputFileResolver, + serviceProviderMock.Object, + mutationTestExecutorMock.Object, + TestLoggerFactory.CreateLogger()); } } diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs index f1a5f449f5..b693c98306 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/CSharpMutationTestProcessTests.cs @@ -88,9 +88,9 @@ public void MutateShouldWriteToDisk_IfCompilationIsSuccessful() orchestratorMock.SetupAllProperties(); orchestratorMock.Setup(x => x.GetLatestMutantBatch()).Returns(mockMutants); - var target = new CsharpMutationProcess(fileSystem, options, null, orchestratorMock.Object); + var target = new CsharpMutationProcess(fileSystem, TestLoggerFactory.CreateLogger()); - target.Mutate(input); + target.Mutate(input, options); // Verify the created assembly is written to disk on the right location var expectedPath = Path.Combine(FilesystemRoot, "TestProject", "bin", "Debug", "netcoreapp2.0", "ProjectUnderTest.dll"); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestExecutorTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestExecutorTests.cs index bd7822b830..7ab657b4ad 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestExecutorTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestExecutorTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; @@ -25,7 +26,9 @@ public void MutationTestExecutor_NoFailedTestShouldBeSurvived() var mutant = new Mutant { Id = 1 }; testRunnerMock.Setup(x => x.TestMultipleMutants(It.IsAny(), It.IsAny(), It.IsAny>(), null)).Returns(new TestRunResult(true)); - var target = new MutationTestExecutor(testRunnerMock.Object); + var loggerMock = new Mock>(); + var target = new MutationTestExecutor(loggerMock.Object); + target.TestRunner = testRunnerMock.Object; target.Test(null, new List { mutant }, null, null); @@ -40,7 +43,9 @@ public void MutationTestExecutor_FailedTestShouldBeKilled() var mutant = new Mutant { Id = 1, CoveringTests = TestIdentifierList.EveryTest() }; testRunnerMock.Setup(x => x.TestMultipleMutants(It.IsAny(), null, It.IsAny>(), null)).Returns(new TestRunResult(false)); - var target = new MutationTestExecutor(testRunnerMock.Object); + var loggerMock = new Mock>(); + var target = new MutationTestExecutor(loggerMock.Object); + target.TestRunner = testRunnerMock.Object; target.Test(null, new List { mutant }, null, null); @@ -56,7 +61,9 @@ public void MutationTestExecutor_TimeoutShouldBePassedToProcessTimeout() testRunnerMock.Setup(x => x.TestMultipleMutants(It.IsAny(), It.IsAny(), It.IsAny>(), null)). Returns(TestRunResult.TimedOut(new List(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.EveryTest(), "", Enumerable.Empty(), TimeSpan.Zero)); - var target = new MutationTestExecutor(testRunnerMock.Object); + var loggerMock = new Mock>(); + var target = new MutationTestExecutor(loggerMock.Object); + target.TestRunner = testRunnerMock.Object; var timeoutValueCalculator = new TimeoutValueCalculator(500); target.Test(null, new List { mutant }, timeoutValueCalculator, null); @@ -74,7 +81,9 @@ public void MutationTestExecutor_ShouldSwitchToSingleModeOnDubiousTimeouts() testRunnerMock.Setup(x => x.TestMultipleMutants(It.IsAny(), It.IsAny(), It.IsAny>(), null)). Returns(TestRunResult.TimedOut(new List(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), TestIdentifierList.NoTest(), "", Enumerable.Empty(), TimeSpan.Zero)); - var target = new MutationTestExecutor(testRunnerMock.Object); + var loggerMock = new Mock>(); + var target = new MutationTestExecutor(loggerMock.Object); + target.TestRunner = testRunnerMock.Object; var timeoutValueCalculator = new TimeoutValueCalculator(500); target.Test(null, new List { mutant1, mutant2 }, timeoutValueCalculator, null); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs index c890a326ad..d7e028a46b 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/MutationTest/MutationTestProcessTests.cs @@ -3,6 +3,7 @@ using System.IO.Abstractions.TestingHelpers; using System.Linq; using System.Reflection; +using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Shouldly; @@ -10,12 +11,15 @@ using Stryker.Abstractions.Exceptions; using Stryker.Abstractions.Options; using Stryker.Abstractions.Reporting; +using Stryker.Abstractions.Testing; +using Stryker.Core.CoverageAnalysis; using Stryker.Core.Initialisation; using Stryker.Core.Mutants; using Stryker.Core.MutationTest; using Stryker.Core.ProjectComponents.Csharp; using Stryker.Core.ProjectComponents.SourceProjects; using Stryker.Core.ProjectComponents.TestProjects; +using Stryker.TestRunner.Tests; namespace Stryker.Core.UnitTest.MutationTest; @@ -36,29 +40,36 @@ public MutationTestProcessTests() CurrentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); FilesystemRoot = Path.GetPathRoot(CurrentDirectory); SourceFile = File.ReadAllText(CurrentDirectory + "/TestResources/ExampleSourceFile.cs"); + var testProjectsInfo = new TestProjectsInfo(fileSystemMock) + { + TestProjects = new List { + new TestProject(fileSystemMock, TestHelper.SetupProjectAnalyzerResult( + projectFilePath: Path.Combine(FilesystemRoot, "TestProject", "TestProject.csproj"), + properties: new Dictionary() + { + { "TargetDir", Path.Combine(FilesystemRoot, "TestProject", "bin", "Debug", "netcoreapp2.0") }, + { "TargetFileName", "TestName.dll" }, + { "Language", "C#" } + }).Object) + } + }; _input = new MutationTestInput() { SourceProjectInfo = new SourceProjectInfo() { - AnalyzerResult = TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary() + AnalyzerResult = TestHelper.SetupProjectAnalyzerResult( + projectFilePath: Path.Combine(FilesystemRoot, "ProjectUnderTest", "ProjectUnderTest.csproj"), + properties: new Dictionary() { { "TargetDir", "/bin/Debug/netcoreapp2.1" }, { "TargetFileName", "ProjectUnderTest.dll" }, + { "AssemblyName", "ProjectUnderTest" }, { "Language", "C#" } }).Object, - ProjectContents = _folder - }, - TestProjectsInfo = new TestProjectsInfo(fileSystemMock) - { - TestProjects = new List { - new TestProject(fileSystemMock, TestHelper.SetupProjectAnalyzerResult(properties: new Dictionary() - { - { "TargetDir", Path.Combine(FilesystemRoot, "TestProject", "bin", "Debug", "netcoreapp2.0") }, - { "TargetFileName", "TestName.dll" }, - { "Language", "C#" } - }).Object) - } + ProjectContents = _folder, + TestProjectsInfo = testProjectsInfo }, + TestProjectsInfo = testProjectsInfo, }; } @@ -70,21 +81,26 @@ public void ShouldCallMutantionProcess_MutateAndFilterMutants() { ExcludedMutations = new Mutator[] { } }; - var mutationTestExecutorMock = new Mock(MockBehavior.Strict); - var mutantionProcessMock = new Mock(MockBehavior.Strict); - mutantionProcessMock.Setup(x => x.Mutate(It.IsAny())); - mutantionProcessMock.Setup(x => x.FilterMutants(It.IsAny())); - var target = new MutationTestProcess(_input, options, null, mutationTestExecutorMock.Object, mutantionProcessMock.Object); + var executorMock = new Mock(); + var coverageAnalyzerMock = new Mock(); + + // Create a strict mock for the IMutationProcess and verify the calls on that instance. + var mutationProcessMock = new Mock(MockBehavior.Strict); + mutationProcessMock.Setup(x => x.Mutate(It.IsAny(), It.IsAny())); + mutationProcessMock.Setup(x => x.FilterMutants(It.IsAny())); + + var target = new MutationTestProcess(executorMock.Object, coverageAnalyzerMock.Object, mutationProcessMock.Object, TestLoggerFactory.CreateLogger()); // Act + target.Initialize(_input, options, null); target.Mutate(); target.FilterMutants(); // Assert - mutantionProcessMock.Verify(x => x.Mutate(It.IsAny()), Times.Once); - mutantionProcessMock.Verify(x => x.FilterMutants(It.IsAny()), Times.Once); + mutationProcessMock.Verify(x => x.Mutate(It.IsAny(), It.IsAny()), Times.Once); + mutationProcessMock.Verify(x => x.FilterMutants(It.IsAny()), Times.Once); } [TestMethod] @@ -103,7 +119,10 @@ public void ShouldCallExecutorForEveryCoveredMutant() Mutants = _testScenario.GetMutants() }); - var mutationExecutor = new MutationTestExecutor(_testScenario.GetTestRunnerMock().Object); + var loggerMock = new Mock>(); + var mutationExecutor = new MutationTestExecutor(loggerMock.Object); + mutationExecutor.TestRunner = _testScenario.GetTestRunnerMock().Object; + var coverageAnalyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); var options = new StrykerOptions() { @@ -113,8 +132,10 @@ public void ShouldCallExecutorForEveryCoveredMutant() }; _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, mutationExecutor); + var mutationProcessMock = Mock.Of(); + var target = new MutationTestProcess(mutationExecutor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); + target.Initialize(_input, options, null); target.GetCoverage(); target.Test(_testScenario.GetCoveredMutants()); @@ -143,7 +164,9 @@ public void ShouldCallExecutorForEveryMutantWhenNoOptimization() var reporterMock = new Mock(MockBehavior.Strict); reporterMock.Setup(x => x.OnMutantTested(It.IsAny())); - var mutationExecutor = new MutationTestExecutor(_testScenario.GetTestRunnerMock().Object); + var loggerMock2 = new Mock>(); + var mutationExecutor = new MutationTestExecutor(loggerMock2.Object); + mutationExecutor.TestRunner = _testScenario.GetTestRunnerMock().Object; var options = new StrykerOptions() { @@ -153,8 +176,11 @@ public void ShouldCallExecutorForEveryMutantWhenNoOptimization() }; _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, mutationExecutor); + var coverageAnalyzerMock2 = new Mock(); + var mutationProcessMock = Mock.Of(); + var target = new MutationTestProcess(mutationExecutor, coverageAnalyzerMock2.Object, mutationProcessMock, TestLoggerFactory.CreateLogger()); + target.Initialize(_input, options, null); target.GetCoverage(); target.Test(_testScenario.GetMutants()); @@ -185,7 +211,9 @@ public void ShouldHandleCoverage() var runnerMock = _testScenario.GetTestRunnerMock(); // setup coverage - var executor = new MutationTestExecutor(runnerMock.Object); + var loggerMock3 = new Mock>(); + var executor = new MutationTestExecutor(loggerMock3.Object); + executor.TestRunner = _testScenario.GetTestRunnerMock().Object; var options = new StrykerOptions { @@ -195,11 +223,17 @@ public void ShouldHandleCoverage() }; _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, executor); + var coverageAnalyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + var mutationProcessMock = Mock.Of(); + var target = new MutationTestProcess(executor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); // test mutants + target.Initialize(_input, options, null); target.GetCoverage(); - target.Test(_input.SourceProjectInfo.ProjectContents.Mutants.Where(m => m.ResultStatus == MutantStatus.Pending)); + var mutantsToTest = _input.SourceProjectInfo.ProjectContents.Mutants + .Where(m => m.ResultStatus == MutantStatus.Pending) + .ToList(); + target.Test(mutantsToTest); // first mutant should be killed by test 2 _testScenario.GetMutantStatus(1).ShouldBe(MutantStatus.Killed); // other mutant survives @@ -230,7 +264,9 @@ public void ShouldNotKillMutantIfOnlyKilledByFailingTest() var runnerMock = _testScenario.GetTestRunnerMock(); // setup coverage - var executor = new MutationTestExecutor(runnerMock.Object); + var loggerMock4 = new Mock>(); + var executor = new MutationTestExecutor(loggerMock4.Object); + executor.TestRunner = _testScenario.GetTestRunnerMock().Object; var options = new StrykerOptions { @@ -241,9 +277,12 @@ public void ShouldNotKillMutantIfOnlyKilledByFailingTest() _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, executor); + var coverageAnalyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + var mutationProcessMock = Mock.Of(); + var target = new MutationTestProcess(executor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); // test mutants + target.Initialize(_input, options, null); target.GetCoverage(); target.Test(_input.SourceProjectInfo.ProjectContents.Mutants); @@ -255,25 +294,27 @@ public void ShouldNotKillMutantIfOnlyKilledByFailingTest() public void ShouldNotKillMutantIfOnlyCoveredByFailingTest() { var basePath = Path.Combine(FilesystemRoot, "ExampleProject.Test"); - _testScenario.CreateMutants(1, 2); + _testScenario.CreateMutants(1); _folder.Add(new CsharpFileLeaf() { SourceCode = SourceFile, Mutants = _testScenario.GetMutants() }); - _testScenario.CreateTests(1, 2, 3); + _testScenario.CreateTests(1, 2); // mutant 1 is covered by both tests - _testScenario.DeclareCoverageForMutant(1, 1, 2, 3); + _testScenario.DeclareCoverageForMutant(1, 1, 2); // mutant 2 is covered only by test 1 - _testScenario.DeclareTestsFailingAtInit(1, 2, 3); + _testScenario.DeclareTestsFailingAtInit(1, 2); // test 1 succeeds, test 2 fails - _testScenario.DeclareTestsFailingWhenTestingMutant(1, 1, 2, 3); + _testScenario.DeclareTestsFailingWhenTestingMutant(1, 1, 2); var runnerMock = _testScenario.GetTestRunnerMock(); // setup coverage - var executor = new MutationTestExecutor(runnerMock.Object); + var loggerMock5 = new Mock>(); + var executor = new MutationTestExecutor(loggerMock5.Object); + executor.TestRunner = _testScenario.GetTestRunnerMock().Object; var options = new StrykerOptions { @@ -283,8 +324,11 @@ public void ShouldNotKillMutantIfOnlyCoveredByFailingTest() }; _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, executor); + var coverageAnalyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + var mutationProcessMock = Mock.Of(); + var target = new MutationTestProcess(executor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); // test mutants + target.Initialize(_input, options, null); target.GetCoverage(); // first mutant should be marked as survived without any test @@ -313,7 +357,9 @@ public void ShouldKillMutantKilledByFailingTestAndNormalTest() var runnerMock = _testScenario.GetTestRunnerMock(); // setup coverage - var executor = new MutationTestExecutor(runnerMock.Object); + var loggerMock6 = new Mock>(); + var executor = new MutationTestExecutor(loggerMock6.Object); + executor.TestRunner = _testScenario.GetTestRunnerMock().Object; var options = new StrykerOptions { @@ -323,9 +369,13 @@ public void ShouldKillMutantKilledByFailingTestAndNormalTest() }; _input.InitialTestRun = new InitialTestRun(_testScenario.GetInitialRunResult(), new TimeoutValueCalculator(500)); - var target = new MutationTestProcess(_input, options, null, executor); + var coverageAnalyzerMock6 = new Mock(); + var mutationProcessMock = Mock.Of(); + + var target = new MutationTestProcess(executor, coverageAnalyzerMock6.Object, mutationProcessMock, TestLoggerFactory.CreateLogger()); // test mutants + target.Initialize(_input, options, null); target.GetCoverage(); target.Test(_input.SourceProjectInfo.ProjectContents.Mutants); @@ -340,8 +390,12 @@ public void ShouldThrowExceptionWhenOtherStatusThanNotRunIsPassed(MutantStatus s { var mutants = new List { new Mutant { Id = 1, ResultStatus = status } }; + var mutationTestExecutor = Mock.Of(); + var coverageAnalyzer = Mock.Of(); var mutationProcessMock = Mock.Of(); - Should.Throw(() => new MutationTestProcess(_input, null, null, null, mutationProcessMock).Test(mutants)); + var target = new MutationTestProcess(mutationTestExecutor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); + target.Initialize(_input, new StrykerOptions(), null); + Should.Throw(() => target.Test(mutants)); } [TestMethod] @@ -349,8 +403,11 @@ public void ShouldNotTest_WhenThereAreNoMutations() { var reporter = Mock.Of(); var mutationTestExecutor = Mock.Of(); + var coverageAnalyzer = Mock.Of(); var mutationProcessMock = Mock.Of(); - var result = new MutationTestProcess(_input, null, reporter, mutationTestExecutor, mutationProcessMock).Test(Enumerable.Empty()); + var target = new MutationTestProcess(mutationTestExecutor, coverageAnalyzer, mutationProcessMock, TestLoggerFactory.CreateLogger()); + target.Initialize(_input, new StrykerOptions(), reporter); + var result = target.Test(Enumerable.Empty()); Mock.Get(reporter).VerifyNoOtherCalls(); Mock.Get(mutationTestExecutor).VerifyNoOtherCalls(); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/StrykerRunnerTests.cs b/src/Stryker.Core/Stryker.Core.UnitTest/StrykerRunnerTests.cs index e8a3006226..6b7720affa 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/StrykerRunnerTests.cs +++ b/src/Stryker.Core/Stryker.Core.UnitTest/StrykerRunnerTests.cs @@ -79,9 +79,12 @@ public void Stryker_ShouldInvokeAllProcesses() mutationTestProcessMock.InSequence(seq).Setup(x => x.FilterMutants()); reporterMock.InSequence(seq).Setup(x => x.OnMutantsCreated(It.IsAny(), It.IsAny())); - var target = new StrykerRunner(reporterFactory: reporterFactoryMock.Object); + // Setup Dispose for ProjectOrchestrator + projectOrchestratorMock.Setup(x => x.Dispose()); - target.RunMutationTest(inputsMock.Object, new LoggerFactory(), projectOrchestratorMock.Object); + var target = new StrykerRunner(reporterFactoryMock.Object, projectOrchestratorMock.Object, TestLoggerFactory.CreateLogger()); + + target.RunMutationTest(inputsMock.Object); projectOrchestratorMock.Verify(x => x.MutateProjects(It.Is(x => x.ProjectPath == "C:/test"), It.IsAny(), It.IsAny()), Times.Once); mutationTestProcessMock.Verify(x => x.GetCoverage(), Times.Once); @@ -133,9 +136,12 @@ public void ShouldStop_WhenAllMutationsWereIgnored() reporterMock.Setup(x => x.OnStartMutantTestRun(It.IsAny>())); reporterMock.Setup(x => x.OnAllMutantsTested(It.IsAny(), It.IsAny())); - var target = new StrykerRunner(reporterFactory: reporterFactoryMock.Object); + // Setup Dispose for ProjectOrchestrator + projectOrchestratorMock.Setup(x => x.Dispose()); + + var target = new StrykerRunner(reporterFactoryMock.Object, projectOrchestratorMock.Object, TestLoggerFactory.CreateLogger()); - var result = target.RunMutationTest(inputsMock.Object, new LoggerFactory(), projectOrchestratorMock.Object); + var result = target.RunMutationTest(inputsMock.Object); result.MutationScore.ShouldBe(double.NaN); @@ -178,9 +184,12 @@ public void ShouldThrow_WhenNoProjectsFound() reporterFactoryMock.Setup(x => x.Create(It.IsAny(), It.IsAny())).Returns(reporterMock.Object); - var target = new StrykerRunner(reporterFactory: reporterFactoryMock.Object); + // Setup Dispose for ProjectOrchestrator (even though exception is thrown, Dispose may still be called in cleanup) + projectOrchestratorMock.Setup(x => x.Dispose()); + + var target = new StrykerRunner(reporterFactoryMock.Object, projectOrchestratorMock.Object, TestLoggerFactory.CreateLogger()); - Should.Throw(() => target.RunMutationTest(inputsMock.Object, new LoggerFactory(), projectOrchestratorMock.Object)); + Should.Throw(() => target.RunMutationTest(inputsMock.Object)); reporterMock.Verify(x => x.OnStartMutantTestRun(It.IsAny>()), Times.Never); reporterMock.Verify(x => x.OnMutantTested(It.IsAny()), Times.Never); diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/TestLoggerFactory.cs b/src/Stryker.Core/Stryker.Core.UnitTest/TestLoggerFactory.cs new file mode 100644 index 0000000000..49ca2496f3 --- /dev/null +++ b/src/Stryker.Core/Stryker.Core.UnitTest/TestLoggerFactory.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; +using Moq; + +namespace Stryker.Core.UnitTest; + +/// +/// Helper class to create mock loggers for unit tests +/// +public static class TestLoggerFactory +{ + /// + /// Creates a mock logger for testing + /// + public static ILogger CreateLogger() + { + return new Mock>().Object; + } + + /// + /// Creates a mock logger with setup for verification + /// + public static Mock> CreateMockLogger() + { + return new Mock>(); + } +} diff --git a/src/Stryker.Core/Stryker.Core.UnitTest/packages.lock.json b/src/Stryker.Core/Stryker.Core.UnitTest/packages.lock.json index 4906c94956..a0980d19f1 100644 --- a/src/Stryker.Core/Stryker.Core.UnitTest/packages.lock.json +++ b/src/Stryker.Core/Stryker.Core.UnitTest/packages.lock.json @@ -31,12 +31,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" } }, "Moq": { @@ -73,11 +73,12 @@ }, "Spectre.Console.Testing": { "type": "Direct", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "9QjSrRH+scy66ppmOLDiSno0Uh1ISJL18FqmTQDFNvK/oNI1DaI30cy2Uj6v0gxLZghtc/eKTwXtPpe0KKfHXw==", + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "wmthEamheMg6dtLtDemfrId/mBqAzZtPJtW2IdhEQiIPQdnJDyUima65z/ymPrRvX6UOHnybPPdS3ePybAdoCA==", "dependencies": { - "Spectre.Console": "0.54.0" + "Spectre.Console": "0.52.0", + "Spectre.Console.Cli": "0.52.0" } }, "Stryker.Regex.Parser": { @@ -88,12 +89,12 @@ }, "TestableIO.System.IO.Abstractions.TestingHelpers": { "type": "Direct", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "320o0GORJV6VDFyKL7e7At+CTBFciFKKwgFYthCAPNKnlZLqyY68NKGQ+h4xTVf5y6qBtIsV3ap+Qog7VzF65g==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "dIZ2qtrvWbilx2HGkBIp5LNZmEZT2rve2M/NEg3RAzR4WbTa/Gis1x/qRggnoqfDrZ0VnPaybJJKh6r9POQ1EQ==", "dependencies": { - "TestableIO.System.IO.Abstractions.Wrappers": "22.1.0", - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "TestableIO.System.IO.Abstractions.Wrappers": "22.0.16", + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "Azure.Core": { @@ -217,8 +218,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" }, "Microsoft.DiaSymReader": { "type": "Transitive", @@ -241,18 +242,10 @@ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", @@ -268,17 +261,17 @@ }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "Microsoft.Extensions.Primitives": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.NET.StringTools": { "type": "Transitive", @@ -363,10 +356,10 @@ }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.TestPlatform.ObjectModel": "17.14.1", "Newtonsoft.Json": "13.0.3" } }, @@ -401,6 +394,11 @@ "Microsoft.Testing.Platform.MSBuild": "1.9.1" } }, + "Namotion.Reflection": { + "type": "Transitive", + "resolved": "3.4.2", + "contentHash": "ZHrvPdAg7zV78iOTiH9ua+34rBfn4iH6Bjfo2bzUHOGD3KkjGUvqxBFy+v9p6qwV+GEeYWl4NOqXH8tVcZOMpw==" + }, "NETStandard.Library": { "type": "Transitive", "resolved": "2.0.0", @@ -414,6 +412,29 @@ "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, + "NJsonSchema": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "0q6mr6eJk/D4jPFKyRwAPauedZK60yFE5rjA3+aqCdQm9kGE9J8xygRrLfk0Ms8wBviWbLlaZYzqAteG3b6Yag==", + "dependencies": { + "NJsonSchema.Annotations": "11.4.0", + "Namotion.Reflection": "3.4.2", + "Newtonsoft.Json": "13.0.3" + } + }, + "NJsonSchema.Annotations": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "fKAGyIU9s18e9GAdNbEr2PmZdpBqb1RdAr2+EHHrdkSZNoYtwFcmN6syJaxYxeEFegoLbC3e+EU5eb7Tt1ph3Q==" + }, + "OpenCli.Sources": { + "type": "Transitive", + "resolved": "0.5.0", + "contentHash": "5FgwoxpZy9Qy7MsKHb2hZBTWXEvg7JCPuNnaqsn2g0/X9oWQVThYQ1nND1xJrq8P1aw+Gh8sirV1HbefeqSalw==", + "dependencies": { + "NJsonSchema": "11.4.0" + } + }, "runtime.native.System": { "type": "Transitive", "resolved": "4.3.0", @@ -465,6 +486,15 @@ "System.Text.Encoding.Extensions": "4.0.11" } }, + "Spectre.Console.Cli": { + "type": "Transitive", + "resolved": "0.52.0", + "contentHash": "50O+XG7tqtEErVGtqX00aUcsXJs7ltlSkGGAdRTI17zEgqzpQd7RRtf657eHXnPSK10SCoAuVMK0fnWPXDoVCA==", + "dependencies": { + "OpenCli.Sources": "0.5.0", + "Spectre.Console": "0.52.0" + } + }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", @@ -510,8 +540,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -831,8 +861,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker": { "type": "Project", @@ -844,20 +874,21 @@ "LibGit2Sharp": "[0.31.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.DependencyInjection": "[9.0.10, )", + "Microsoft.Extensions.Logging": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "Microsoft.Web.LibraryManager.Build": "[3.0.71, )", "Mono.Cecil": "[0.11.6, )", - "NuGet.Frameworks": "[7.0.1, )", + "NuGet.Frameworks": "[6.14.0, )", "Serilog": "[4.3.0, )", - "Serilog.Extensions.Logging": "[10.0.0, )", + "Serilog.Extensions.Logging": "[9.0.2, )", "Serilog.Extensions.Logging.File": "[3.0.0, )", - "Serilog.Sinks.Console": "[6.1.1, )", + "Serilog.Sinks.Console": "[6.0.0, )", "ShellProgressBar": "[5.2.0, )", - "Spectre.Console": "[0.54.0, )", + "Spectre.Console": "[0.52.0, )", "Stryker.Abstractions": "[1.0.0, )", "Stryker.Configuration": "[1.0.0, )", "Stryker.DataCollector": "[1.0.0, )", @@ -865,7 +896,7 @@ "Stryker.RegexMutators": "[1.0.0, )", "Stryker.TestRunner.VsTest": "[1.0.0, )", "Stryker.Utilities": "[1.0.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.abstractions": { @@ -875,9 +906,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.configuration": { @@ -894,8 +925,8 @@ "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.regexmutators": { @@ -907,23 +938,23 @@ "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.testrunner.vstest": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "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.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -932,7 +963,7 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", "Stryker.Abstractions": "[1.0.0, )" @@ -1015,53 +1046,62 @@ "System.Reflection.Metadata": "9.0.0" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0", - "Microsoft.Extensions.Options": "10.0.0" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } @@ -1089,9 +1129,9 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==" + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "xZ37J58DQAkVUX29qoMwla26iBYRScdcfSGNe1FIZjCX1tpafN9n7TinrkRxaJqYzW0D8Ob8a3eRSYhwEUauCA==" }, "ResXResourceReader.NetStandard": { "type": "CentralTransitive", @@ -1107,11 +1147,11 @@ }, "Serilog.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "requested": "[9.0.2, )", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", "dependencies": { - "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging": "9.0.0", "Serilog": "4.2.0" } }, @@ -1132,9 +1172,9 @@ }, "Serilog.Sinks.Console": { "type": "CentralTransitive", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", "dependencies": { "Serilog": "4.0.0" } @@ -1151,17 +1191,17 @@ }, "Spectre.Console": { "type": "CentralTransitive", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "StDXCFayfy0yB1xzUHT2tgEpV1/HFTiS4JgsAQS49EYTfMixSwwucaQs/bIOCwXjWwIQTMuxjUIxcB5XsJkFJA==" + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "bVe6b8mizSB4QAlfvKGWHIZbzpxtkCnK6taFUgrxbzPseiBNENi/36RTnKwqPJCHPimU5QG2vK6jd+JASQDugg==" }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } } diff --git a/src/Stryker.Core/Stryker.Core/CoverageAnalysis/CoverageAnalyser.cs b/src/Stryker.Core/Stryker.Core/CoverageAnalysis/CoverageAnalyser.cs index 23543da4a6..43ceb683d6 100644 --- a/src/Stryker.Core/Stryker.Core/CoverageAnalysis/CoverageAnalyser.cs +++ b/src/Stryker.Core/Stryker.Core/CoverageAnalysis/CoverageAnalyser.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Logging; @@ -5,26 +6,23 @@ using Stryker.Abstractions.Options; using Stryker.Abstractions.Testing; using Stryker.TestRunner.Tests; -using Stryker.Utilities.Logging; namespace Stryker.Core.CoverageAnalysis; public class CoverageAnalyser : ICoverageAnalyser { private readonly ILogger _logger; - private readonly IStrykerOptions _options; - public CoverageAnalyser(IStrykerOptions options) + public CoverageAnalyser(ILogger logger) { - _options = options; - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } - public void DetermineTestCoverage(IProjectAndTests project, ITestRunner runner, IEnumerable mutants, + public void DetermineTestCoverage(IStrykerOptions options, IProjectAndTests project, ITestRunner runner, IEnumerable mutants, ITestIdentifiers resultFailingTests) { - if (!_options.OptimizationMode.HasFlag(OptimizationModes.SkipUncoveredMutants) && - !_options.OptimizationMode.HasFlag(OptimizationModes.CoverageBasedTest)) + if (!options.OptimizationMode.HasFlag(OptimizationModes.SkipUncoveredMutants) && + !options.OptimizationMode.HasFlag(OptimizationModes.CoverageBasedTest)) { AssumeAllTestsAreNeeded(mutants); diff --git a/src/Stryker.Core/Stryker.Core/CoverageAnalysis/ICoverageAnalyser.cs b/src/Stryker.Core/Stryker.Core/CoverageAnalysis/ICoverageAnalyser.cs index 01156e936d..5ce5e37a36 100644 --- a/src/Stryker.Core/Stryker.Core/CoverageAnalysis/ICoverageAnalyser.cs +++ b/src/Stryker.Core/Stryker.Core/CoverageAnalysis/ICoverageAnalyser.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using Stryker.Abstractions; +using Stryker.Abstractions.Options; using Stryker.Abstractions.Testing; namespace Stryker.Core.CoverageAnalysis; public interface ICoverageAnalyser { - void DetermineTestCoverage(IProjectAndTests project, ITestRunner runner, IEnumerable mutants, ITestIdentifiers resultFailingTests); + void DetermineTestCoverage(IStrykerOptions options, IProjectAndTests project, ITestRunner runner, IEnumerable mutants, ITestIdentifiers resultFailingTests); } diff --git a/src/Stryker.Core/Stryker.Core/Infrastructure/ServiceCollectionExtensions.cs b/src/Stryker.Core/Stryker.Core/Infrastructure/ServiceCollectionExtensions.cs new file mode 100644 index 0000000000..59288d917c --- /dev/null +++ b/src/Stryker.Core/Stryker.Core/Infrastructure/ServiceCollectionExtensions.cs @@ -0,0 +1,50 @@ +using System.IO.Abstractions; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Stryker.Abstractions.Testing; +using Stryker.Core.CoverageAnalysis; +using Stryker.Core.Helpers.ProcessUtil; +using Stryker.Core.Initialisation; +using Stryker.Core.MutationTest; +using Stryker.Core.Reporters; +using Stryker.TestRunner.VsTest; +using Stryker.Utilities.Buildalyzer; + +namespace Stryker.Core.Infrastructure; + +public static class ServiceCollectionExtensions +{ + public static IServiceCollection AddStrykerCore(this IServiceCollection services) + { + // Add logging support (providers configured by caller) + services.AddLogging(); + + // Core orchestration - Transient as they manage per-run state + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddSingleton(); + + // Mutation test process - Scoped as they manage per-project state + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + // Initialisation services - Transient as they perform per-run operations + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + + // Helpers and utilities - Transient or Singleton based on state + services.AddTransient(); + services.AddTransient(); + services.AddSingleton(); + + // Reporter factory - Singleton as it's stateless + services.AddSingleton(); + + return services; + } +} diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/InitialBuildProcess.cs b/src/Stryker.Core/Stryker.Core/Initialisation/InitialBuildProcess.cs index b92ba54b78..6ad776765f 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/InitialBuildProcess.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/InitialBuildProcess.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using System.IO.Abstractions; using Microsoft.Extensions.Logging; @@ -5,7 +6,6 @@ using Stryker.Configuration; using Stryker.Core.Helpers; using Stryker.Core.Helpers.ProcessUtil; -using Stryker.Utilities.Logging; namespace Stryker.Core.Initialisation; @@ -21,11 +21,14 @@ public class InitialBuildProcess : IInitialBuildProcess private readonly IFileSystem _fileSystem; private readonly ILogger _logger; - public InitialBuildProcess(IProcessExecutor processExecutor = null, IFileSystem fileSystem = null) + public InitialBuildProcess( + IProcessExecutor processExecutor, + IFileSystem fileSystem, + ILogger logger) { - _processExecutor = processExecutor ?? new ProcessExecutor(); - _fileSystem = fileSystem ?? new FileSystem(); - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); + _processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor)); + _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public void InitialBuild(bool fullFramework, string projectPath, string solutionPath, string configuration = null, string targetFramework = null, diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/InitialTestProcess.cs b/src/Stryker.Core/Stryker.Core/Initialisation/InitialTestProcess.cs index d186192155..e079827717 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/InitialTestProcess.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/InitialTestProcess.cs @@ -1,9 +1,9 @@ +using System; using System.Diagnostics; using Microsoft.Extensions.Logging; using Stryker.Abstractions; using Stryker.Abstractions.Options; using Stryker.Abstractions.Testing; -using Stryker.Utilities.Logging; namespace Stryker.Core.Initialisation; @@ -16,7 +16,10 @@ public class InitialTestProcess : IInitialTestProcess { private readonly ILogger _logger; - public InitialTestProcess() => _logger = ApplicationLogging.LoggerFactory.CreateLogger(); + public InitialTestProcess(ILogger logger) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } public ITimeoutValueCalculator TimeoutValueCalculator { get; private set; } diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/InitialisationProcess.cs b/src/Stryker.Core/Stryker.Core/Initialisation/InitialisationProcess.cs index 57543f66fb..b9e071a1cc 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/InitialisationProcess.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/InitialisationProcess.cs @@ -9,7 +9,6 @@ using Stryker.Core.MutationTest; using Stryker.Core.ProjectComponents.SourceProjects; using Stryker.Utilities.Buildalyzer; -using Stryker.Utilities.Logging; namespace Stryker.Core.Initialisation; @@ -37,13 +36,14 @@ public class InitialisationProcess : IInitialisationProcess public InitialisationProcess( IInputFileResolver inputFileResolver, - IInitialBuildProcess initialBuildProcess = null, - IInitialTestProcess initialTestProcess = null) + IInitialBuildProcess initialBuildProcess, + IInitialTestProcess initialTestProcess, + ILogger logger = null) { - _inputFileResolver = inputFileResolver; - _initialBuildProcess = initialBuildProcess ?? new InitialBuildProcess(); - _initialTestProcess = initialTestProcess ?? new InitialTestProcess(); - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); + _inputFileResolver = inputFileResolver ?? throw new ArgumentNullException(nameof(inputFileResolver)); + _initialBuildProcess = initialBuildProcess ?? throw new ArgumentNullException(nameof(initialBuildProcess)); + _initialTestProcess = initialTestProcess ?? throw new ArgumentNullException(nameof(initialTestProcess)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } /// diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/InputFileResolver.cs b/src/Stryker.Core/Stryker.Core/Initialisation/InputFileResolver.cs index e0e7d5b6eb..fd84bcec2a 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/InputFileResolver.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/InputFileResolver.cs @@ -43,16 +43,14 @@ public class InputFileResolver : IInputFileResolver private readonly StringWriter _buildalyzerLog = new(); public InputFileResolver(IFileSystem fileSystem, - IBuildalyzerProvider analyzerProvider = null, INugetRestoreProcess nugetRestoreProcess = null, ILogger logger = null) + IBuildalyzerProvider analyzerProvider, INugetRestoreProcess nugetRestoreProcess, ILogger logger) { - FileSystem = fileSystem; - _analyzerProvider = analyzerProvider ?? new BuildalyzerProvider(); - _nugetRestoreProcess = nugetRestoreProcess ?? new NugetRestoreProcess(); - _logger = logger ?? ApplicationLogging.LoggerFactory.CreateLogger(); + FileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); + _analyzerProvider = analyzerProvider ?? throw new ArgumentNullException(nameof(analyzerProvider)); + _nugetRestoreProcess = nugetRestoreProcess ?? throw new ArgumentNullException(nameof(nugetRestoreProcess)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } - public InputFileResolver() : this(new FileSystem()) { } - public IFileSystem FileSystem { get; } public IReadOnlyCollection ResolveSourceProjectInfos(IStrykerOptions options) diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/NugetRestoreProcess.cs b/src/Stryker.Core/Stryker.Core/Initialisation/NugetRestoreProcess.cs index 3cc21855a3..08247a2b5a 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/NugetRestoreProcess.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/NugetRestoreProcess.cs @@ -23,10 +23,10 @@ public class NugetRestoreProcess : INugetRestoreProcess private IProcessExecutor ProcessExecutor { get; set; } private readonly ILogger _logger; - public NugetRestoreProcess(IProcessExecutor processExecutor = null) + public NugetRestoreProcess(IProcessExecutor processExecutor, ILogger logger) { - ProcessExecutor = processExecutor ?? new ProcessExecutor(); - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); + ProcessExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public void RestorePackages(string solutionPath, string msbuildPath = null) diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/ProjectMutator.cs b/src/Stryker.Core/Stryker.Core/Initialisation/ProjectMutator.cs index 6cd7cc515d..6284fd87e1 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/ProjectMutator.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/ProjectMutator.cs @@ -1,6 +1,8 @@ +using System; using System.IO; using System.Linq; using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Stryker.Abstractions; using Stryker.Abstractions.Reporting; @@ -8,7 +10,6 @@ using Stryker.Core.ProjectComponents.TestProjects; using Stryker.Abstractions.Options; using Stryker.Abstractions.ProjectComponents; -using Stryker.Utilities.Logging; namespace Stryker.Core.Initialisation; @@ -20,18 +21,20 @@ public interface IProjectMutator public class ProjectMutator : IProjectMutator { private readonly ILogger _logger; + private readonly IServiceProvider _serviceProvider; private readonly IMutationTestProcess _injectedMutationTestProcess; - public ProjectMutator(IMutationTestProcess mutationTestProcess = null) + public ProjectMutator(ILogger logger, IServiceProvider serviceProvider, IMutationTestProcess mutationTestProcess = null) { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); _injectedMutationTestProcess = mutationTestProcess; - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); } public IMutationTestProcess MutateProject(IStrykerOptions options, MutationTestInput input, IReporter reporters) { - var process = _injectedMutationTestProcess ?? new MutationTestProcess(input, options, reporters, - new MutationTestExecutor(input.TestRunner)); + var process = _injectedMutationTestProcess ?? _serviceProvider.GetRequiredService(); + process.Initialize(input, options, reporters); // Enrich test projects info with unit tests EnrichTestProjectsWithTestInfo(input.InitialTestRun, input.TestProjectsInfo); diff --git a/src/Stryker.Core/Stryker.Core/Initialisation/ProjectOrchestrator.cs b/src/Stryker.Core/Stryker.Core/Initialisation/ProjectOrchestrator.cs index 7146e7a38e..f6cd5209a7 100644 --- a/src/Stryker.Core/Stryker.Core/Initialisation/ProjectOrchestrator.cs +++ b/src/Stryker.Core/Stryker.Core/Initialisation/ProjectOrchestrator.cs @@ -2,8 +2,10 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; +using System.IO.Abstractions; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Mono.Cecil; using Stryker.Abstractions.Baseline; @@ -14,7 +16,6 @@ using Stryker.Core.MutationTest; using Stryker.Core.ProjectComponents.SourceProjects; using Stryker.TestRunner.VsTest; -using Stryker.Utilities.Logging; namespace Stryker.Core.Initialisation; @@ -28,27 +29,31 @@ public sealed class ProjectOrchestrator : IProjectOrchestrator private IInitialisationProcess _initializationProcess; private readonly ILogger _logger; private readonly IProjectMutator _projectMutator; - private readonly IInitialBuildProcess _initialBuildProcess; + private readonly IServiceProvider _serviceProvider; + private readonly IMutationTestExecutor _mutationTestExecutor; private readonly IInputFileResolver _fileResolver; private ITestRunner _runner; - public ProjectOrchestrator(IProjectMutator projectMutator = null, - IInitialBuildProcess initialBuildProcess = null, - IInputFileResolver fileResolver = null, - IInitialisationProcess initializationProcess = null) + public ProjectOrchestrator( + IProjectMutator projectMutator, + IInitialisationProcess initializationProcess, + IInputFileResolver fileResolver, + IServiceProvider serviceProvider, + IMutationTestExecutor mutationTestExecutor, + ILogger logger) { - _projectMutator = projectMutator ?? new ProjectMutator(); - _initialBuildProcess = initialBuildProcess ?? new InitialBuildProcess(); - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); - _fileResolver = fileResolver ?? new InputFileResolver(); - _initializationProcess = initializationProcess; + _projectMutator = projectMutator ?? throw new ArgumentNullException(nameof(projectMutator)); + _initializationProcess = initializationProcess ?? throw new ArgumentNullException(nameof(initializationProcess)); + _fileResolver = fileResolver ?? throw new ArgumentNullException(nameof(fileResolver)); + _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); + _mutationTestExecutor = mutationTestExecutor ?? throw new ArgumentNullException(nameof(mutationTestExecutor)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public IEnumerable MutateProjects(IStrykerOptions options, IReporter reporters, ITestRunner runner = null) { - - _initializationProcess ??= new InitialisationProcess(_fileResolver, _initialBuildProcess); + _initializationProcess ??= _serviceProvider.GetRequiredService(); var projectInfos = _initializationProcess.GetMutableProjectsInfo(options); if (!projectInfos.Any()) @@ -61,7 +66,7 @@ public IEnumerable MutateProjects(IStrykerOptions options, // create a test runner _runner = runner ?? new VsTestRunnerPool(options, fileSystem: _fileResolver.FileSystem); - + _mutationTestExecutor.TestRunner = _runner; InitializeDashboardProjectInformation(options, projectInfos.First()); var inputs = _initializationProcess.GetMutationTestInputs(options, projectInfos, _runner); diff --git a/src/Stryker.Core/Stryker.Core/MutationTest/CsharpMutationProcess.cs b/src/Stryker.Core/Stryker.Core/MutationTest/CsharpMutationProcess.cs index e283b9364d..bb3b59706b 100644 --- a/src/Stryker.Core/Stryker.Core/MutationTest/CsharpMutationProcess.cs +++ b/src/Stryker.Core/Stryker.Core/MutationTest/CsharpMutationProcess.cs @@ -19,44 +19,24 @@ namespace Stryker.Core.MutationTest; public class CsharpMutationProcess : IMutationProcess { + private IStrykerOptions _options; + private IMutantFilter _mutantFilter; private readonly ILogger _logger; - private readonly IStrykerOptions _options; private readonly IFileSystem _fileSystem; - private readonly BaseMutantOrchestrator _orchestrator; - private readonly IMutantFilter _mutantFilter; - /// - /// This constructor is for tests - /// - /// - /// - /// - /// public CsharpMutationProcess( - IFileSystem fileSystem = null, - IStrykerOptions options = null, - IMutantFilter mutantFilter = null, - BaseMutantOrchestrator orchestrator = null) + IFileSystem fileSystem, + ILogger logger) { - _options = options; - _orchestrator = orchestrator; _fileSystem = fileSystem ?? new FileSystem(); - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); - - _mutantFilter = mutantFilter; + _logger = logger; } - /// - /// This constructor is used by the initialization logic. - /// - /// - public CsharpMutationProcess(IStrykerOptions options) : this(null, options) - { } - - public void Mutate(MutationTestInput input) + public void Mutate(MutationTestInput input, IStrykerOptions options) { + _options = options; var projectInfo = input.SourceProjectInfo.ProjectContents; - var orchestrator = _orchestrator ?? new CsharpMutantOrchestrator(new MutantPlacer(input.SourceProjectInfo.CodeInjector), options: _options); + var orchestrator = new CsharpMutantOrchestrator(new MutantPlacer(input.SourceProjectInfo.CodeInjector), options: _options); var compilingProcess = new CsharpCompilingProcess(input, options: _options); var semanticModels = compilingProcess.GetSemanticModels(projectInfo.GetAllFiles().Cast().Select(x => x.SyntaxTree)); @@ -135,12 +115,12 @@ private void CompileMutations(MutationTestInput input, CsharpCompilingProcess co public void FilterMutants(MutationTestInput input) { - var mutantFilter = _mutantFilter ?? MutantFilterFactory.Create(_options, input); + _mutantFilter ??= MutantFilterFactory.Create(_options, input); foreach (var file in input.SourceProjectInfo.ProjectContents.GetAllFiles()) { // CompileError is a final status and can not be changed during filtering. var mutantsToFilter = file.Mutants.Where(x => x.ResultStatus != MutantStatus.CompileError); - mutantFilter.FilterMutants(mutantsToFilter, file, _options); + _mutantFilter.FilterMutants(mutantsToFilter, file, _options); } } } diff --git a/src/Stryker.Core/Stryker.Core/MutationTest/IMutationProcess.cs b/src/Stryker.Core/Stryker.Core/MutationTest/IMutationProcess.cs index b8818218c2..0b87f8edc7 100644 --- a/src/Stryker.Core/Stryker.Core/MutationTest/IMutationProcess.cs +++ b/src/Stryker.Core/Stryker.Core/MutationTest/IMutationProcess.cs @@ -1,8 +1,10 @@ +using Stryker.Abstractions.Options; + namespace Stryker.Core.MutationTest; public interface IMutationProcess { - void Mutate(MutationTestInput input); + void Mutate(MutationTestInput input, IStrykerOptions options); void FilterMutants(MutationTestInput input); } diff --git a/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestExecutor.cs b/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestExecutor.cs index 3cf4cb1c44..52ca5983e6 100644 --- a/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestExecutor.cs +++ b/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestExecutor.cs @@ -5,7 +5,6 @@ using Stryker.Abstractions; using Stryker.Abstractions.Testing; using Stryker.TestRunner.Results; -using Stryker.Utilities.Logging; using static Stryker.Abstractions.Testing.ITestRunner; namespace Stryker.Core.MutationTest; @@ -15,7 +14,7 @@ namespace Stryker.Core.MutationTest; /// public interface IMutationTestExecutor { - ITestRunner TestRunner { get; } + ITestRunner TestRunner { get; set; } void Test(IProjectAndTests project, IList mutantsToTest, ITimeoutValueCalculator timeoutMs, TestUpdateHandler updateHandler); @@ -23,13 +22,13 @@ void Test(IProjectAndTests project, IList mutantsToTest, ITimeoutValueC public class MutationTestExecutor : IMutationTestExecutor { - public ITestRunner TestRunner { get; } + // Test runner can't be set in the constructor because it is determined at runtime. + public ITestRunner TestRunner { get; set; } private ILogger Logger { get; } - public MutationTestExecutor(ITestRunner testRunner) + public MutationTestExecutor(ILogger logger) { - TestRunner = testRunner; - Logger = ApplicationLogging.LoggerFactory.CreateLogger(); + Logger = logger ?? throw new ArgumentNullException(nameof(logger)); } public void Test(IProjectAndTests project, IList mutantsToTest, ITimeoutValueCalculator timeoutMs, diff --git a/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestProcess.cs b/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestProcess.cs index 8083906f6d..576ced3e85 100644 --- a/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestProcess.cs +++ b/src/Stryker.Core/Stryker.Core/MutationTest/MutationTestProcess.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO.Abstractions; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -12,13 +13,13 @@ using Stryker.Core.CoverageAnalysis; using Stryker.TestRunner.Tests; using Stryker.Utilities.Buildalyzer; -using Stryker.Utilities.Logging; namespace Stryker.Core.MutationTest; public interface IMutationTestProcess { MutationTestInput Input { get; } + void Initialize(MutationTestInput input, IStrykerOptions options, IReporter reporter); void Mutate(); StrykerRunResult Test(IEnumerable mutantsToTest); void Restore(); @@ -28,61 +29,40 @@ public interface IMutationTestProcess public class MutationTestProcess : IMutationTestProcess { - private static readonly ILogger Logger = ApplicationLogging.LoggerFactory.CreateLogger(); - private readonly IReadOnlyProjectComponent _projectContents; + public MutationTestInput Input { get; set; } + + private IStrykerOptions _options; + private IReadOnlyProjectComponent _projectContents; + private IReporter _reporter; + private readonly ILogger _logger; private readonly IMutationTestExecutor _mutationTestExecutor; - private readonly IReporter _reporter; private readonly ICoverageAnalyser _coverageAnalyser; - private readonly IStrykerOptions _options; private readonly IMutationProcess _mutationProcess; - private static readonly Dictionary> LanguageMap = []; - - static MutationTestProcess() => DeclareMutationProcessForLanguage(Language.Csharp); - public static void DeclareMutationProcessForLanguage(Language language) where T : IMutationProcess + public MutationTestProcess( + IMutationTestExecutor executor, + ICoverageAnalyser coverageAnalyzer, + IMutationProcess mutationProcess, + ILogger logger) { - var constructor = typeof(T).GetConstructor([typeof(IStrykerOptions)]); - if (constructor == null) - { - throw new NotSupportedException( - $"Failed to find a constructor with the appropriate signature for type {typeof(T)}"); - } - - LanguageMap[language] = y => (IMutationProcess)constructor.Invoke([y]); + _mutationTestExecutor = executor ?? throw new ArgumentNullException(nameof(executor)); + _mutationProcess = mutationProcess ?? throw new ArgumentNullException(nameof(mutationProcess)); + _coverageAnalyser = coverageAnalyzer ?? throw new ArgumentNullException(nameof(coverageAnalyzer)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } - public MutationTestProcess(MutationTestInput input, - IStrykerOptions options, - IReporter reporter, - IMutationTestExecutor executor, - IMutationProcess mutationProcess = null, - ICoverageAnalyser coverageAnalyzer = null) + public void Initialize(MutationTestInput input, IStrykerOptions options, IReporter reporter) { Input = input; - _reporter = reporter; _options = options; - _mutationTestExecutor = executor; - _mutationProcess = mutationProcess ?? BuildMutationProcess(); - _coverageAnalyser = coverageAnalyzer ?? new CoverageAnalyser(_options); + _reporter = reporter; _projectContents = input.SourceProjectInfo.ProjectContents; - } - - public MutationTestInput Input { get; } - - private IMutationProcess BuildMutationProcess() - { - if (LanguageMap.ContainsKey(Input.SourceProjectInfo.AnalyzerResult.GetLanguage())) - { - return LanguageMap[Input.SourceProjectInfo.AnalyzerResult.GetLanguage()](_options); - } - - throw new GeneralStrykerException("no valid language detected || no valid csproj or fsproj was given."); + Input.TestProjectsInfo.BackupOriginalAssembly(Input.SourceProjectInfo.AnalyzerResult); } public void Mutate() { - Input.TestProjectsInfo.BackupOriginalAssembly(Input.SourceProjectInfo.AnalyzerResult); - _mutationProcess.Mutate(Input); + _mutationProcess.Mutate(Input, _options); } public void FilterMutants() => _mutationProcess.FilterMutants(Input); @@ -154,7 +134,7 @@ private void OnMutantsTested(IEnumerable mutants, ISet reporte { if (mutant.ResultStatus == MutantStatus.Pending) { - Logger.LogWarning("Mutation {Id} was not fully tested.", mutant.Id); + _logger.LogWarning("Mutation {Id} was not fully tested.", mutant.Id); } OnMutantTested(mutant, reportedMutants); @@ -241,14 +221,14 @@ private IEnumerable> BuildMutantGroupsForTest(IReadOnlyCollection< if (mutantsNotRun.Count > blocks.Count) { - Logger.LogDebug( + _logger.LogDebug( "Mutations will be tested in {BlocksCount} test runs, instead of {MutantsNotRun}.", blocks.Count, mutantsNotRun.Count); } else { - Logger.LogDebug( + _logger.LogDebug( "Mutations will be tested in {BlocksCount} test runs.", blocks.Count); } @@ -257,6 +237,6 @@ private IEnumerable> BuildMutantGroupsForTest(IReadOnlyCollection< return blocks; } - public void GetCoverage() => _coverageAnalyser.DetermineTestCoverage(Input.SourceProjectInfo, + public void GetCoverage() => _coverageAnalyser.DetermineTestCoverage(_options, Input.SourceProjectInfo, _mutationTestExecutor.TestRunner, _projectContents.Mutants, Input.InitialTestRun.Result.FailingTests); } diff --git a/src/Stryker.Core/Stryker.Core/Stryker.Core.csproj b/src/Stryker.Core/Stryker.Core/Stryker.Core.csproj index 237360bd3e..4c25ce9dfb 100644 --- a/src/Stryker.Core/Stryker.Core/Stryker.Core.csproj +++ b/src/Stryker.Core/Stryker.Core/Stryker.Core.csproj @@ -4,6 +4,8 @@ Stryker.Core Stryker.Core Library + portable + true @@ -41,6 +43,7 @@ + diff --git a/src/Stryker.Core/Stryker.Core/StrykerRunResult.cs b/src/Stryker.Core/Stryker.Core/StrykerRunResult.cs index ce03b8917e..044e60b36b 100644 --- a/src/Stryker.Core/Stryker.Core/StrykerRunResult.cs +++ b/src/Stryker.Core/Stryker.Core/StrykerRunResult.cs @@ -4,18 +4,18 @@ namespace Stryker.Core; public class StrykerRunResult { - private readonly IStrykerOptions _options; + public IStrykerOptions Options { get; } public double MutationScore { get; private set; } public StrykerRunResult(IStrykerOptions options, double mutationScore) { - _options = options; + Options = options; MutationScore = mutationScore; } public bool ScoreIsLowerThanThresholdBreak() { // If the mutation score is NaN we don't have a result yet - return !double.IsNaN(MutationScore) && MutationScore < (double)_options.Thresholds.Break / 100; + return !double.IsNaN(MutationScore) && MutationScore < (double)Options.Thresholds.Break / 100; } } diff --git a/src/Stryker.Core/Stryker.Core/StrykerRunner.cs b/src/Stryker.Core/Stryker.Core/StrykerRunner.cs index 3b42054cd7..a1899370fc 100644 --- a/src/Stryker.Core/Stryker.Core/StrykerRunner.cs +++ b/src/Stryker.Core/Stryker.Core/StrykerRunner.cs @@ -1,6 +1,4 @@ -#if !DEBUG using System; -#endif using System.Collections.Generic; using System.Diagnostics; using System.Linq; @@ -14,46 +12,42 @@ using Stryker.Core.ProjectComponents; using Stryker.Core.ProjectComponents.TestProjects; using Stryker.Core.Reporters; -using Stryker.Utilities.Logging; namespace Stryker.Core; public interface IStrykerRunner { - StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory loggerFactory, IProjectOrchestrator projectOrchestrator = null); + StrykerRunResult RunMutationTest(IStrykerInputs inputs); } public class StrykerRunner : IStrykerRunner { private IEnumerable _mutationTestProcesses; - private ILogger _logger; + private readonly ILogger _logger; private readonly IReporterFactory _reporterFactory; + private readonly IProjectOrchestrator _projectOrchestrator; - public StrykerRunner(IEnumerable mutationTestProcesses = null, - IReporterFactory reporterFactory = null) + public StrykerRunner( + IReporterFactory reporterFactory, + IProjectOrchestrator projectOrchestrator, + ILogger logger) { - _mutationTestProcesses = mutationTestProcesses ?? new List(); - _reporterFactory = reporterFactory ?? new ReporterFactory(); + _reporterFactory = reporterFactory ?? throw new ArgumentNullException(nameof(reporterFactory)); + _projectOrchestrator = projectOrchestrator ?? throw new ArgumentNullException(nameof(projectOrchestrator)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _mutationTestProcesses = new List(); } /// /// Starts a mutation test run /// /// user options - /// This loggerfactory will be used to create loggers during the stryker run - /// /// For managed exceptions - public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory loggerFactory, IProjectOrchestrator projectOrchestrator = null) + public StrykerRunResult RunMutationTest(IStrykerInputs inputs) { var stopwatch = new Stopwatch(); stopwatch.Start(); - SetupLogging(loggerFactory); - - var disposeOrchestrator = projectOrchestrator == null; - // Setup project orchestrator can't be done sooner since it needs logging - projectOrchestrator ??= new ProjectOrchestrator(); - var options = inputs.ValidateAll(); _logger.LogDebug("Stryker started with options: {@Options}", options); @@ -62,7 +56,7 @@ public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory lo try { // Mutate - _mutationTestProcesses = projectOrchestrator.MutateProjects(options, reporters).ToList(); + _mutationTestProcesses = _projectOrchestrator.MutateProjects(options, reporters).ToList(); var rootComponent = AddRootFolderIfMultiProject(_mutationTestProcesses.Select(x => x.Input.SourceProjectInfo.ProjectContents).ToList(), options); var combinedTestProjectsInfo = _mutationTestProcesses.Select(mtp => mtp.Input.TestProjectsInfo).Aggregate((a, b) => (TestProjectsInfo)a + (TestProjectsInfo)b); @@ -103,10 +97,7 @@ public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory lo } reporters.OnAllMutantsTested(rootComponent, combinedTestProjectsInfo); - if (disposeOrchestrator) - { - projectOrchestrator.Dispose(); - } + _projectOrchestrator.Dispose(); return new StrykerRunResult(options, rootComponent.GetMutationScore()); } @@ -119,10 +110,8 @@ public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory lo project.Test(project.Input.SourceProjectInfo.ProjectContents.Mutants.Where(x => x.ResultStatus == MutantStatus.Pending).ToList()); } // dispose and stop runners - if (disposeOrchestrator) - { - projectOrchestrator.Dispose(); - } + _projectOrchestrator.Dispose(); + // Restore assemblies foreach (var project in _mutationTestProcesses) { @@ -131,7 +120,6 @@ public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory lo reporters.OnAllMutantsTested(rootComponent, combinedTestProjectsInfo); - return new StrykerRunResult(options, rootComponent.GetMutationScore()); } #if !DEBUG @@ -151,13 +139,6 @@ public StrykerRunResult RunMutationTest(IStrykerInputs inputs, ILoggerFactory lo } } - private void SetupLogging(ILoggerFactory loggerFactory) - { - // setup logging - ApplicationLogging.LoggerFactory = loggerFactory; - _logger = ApplicationLogging.LoggerFactory.CreateLogger(); - } - private void AnalyzeCoverage(IStrykerOptions options) { if (options.OptimizationMode.HasFlag(OptimizationModes.SkipUncoveredMutants) || options.OptimizationMode.HasFlag(OptimizationModes.CoverageBasedTest)) diff --git a/src/Stryker.Core/Stryker.Core/packages.lock.json b/src/Stryker.Core/Stryker.Core/packages.lock.json index b0e5e1b35c..efee466a90 100644 --- a/src/Stryker.Core/Stryker.Core/packages.lock.json +++ b/src/Stryker.Core/Stryker.Core/packages.lock.json @@ -85,43 +85,52 @@ "System.Reflection.Metadata": "9.0.0" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + } + }, "Microsoft.Extensions.Logging": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0", - "Microsoft.Extensions.Options": "10.0.0" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } @@ -140,9 +149,9 @@ }, "NuGet.Frameworks": { "type": "Direct", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==" + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "xZ37J58DQAkVUX29qoMwla26iBYRScdcfSGNe1FIZjCX1tpafN9n7TinrkRxaJqYzW0D8Ob8a3eRSYhwEUauCA==" }, "Serilog": { "type": "Direct", @@ -152,11 +161,11 @@ }, "Serilog.Extensions.Logging": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "requested": "[9.0.2, )", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", "dependencies": { - "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging": "9.0.0", "Serilog": "4.2.0" } }, @@ -177,9 +186,9 @@ }, "Serilog.Sinks.Console": { "type": "Direct", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", "dependencies": { "Serilog": "4.0.0" } @@ -196,9 +205,9 @@ }, "Spectre.Console": { "type": "Direct", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "StDXCFayfy0yB1xzUHT2tgEpV1/HFTiS4JgsAQS49EYTfMixSwwucaQs/bIOCwXjWwIQTMuxjUIxcB5XsJkFJA==" + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "bVe6b8mizSB4QAlfvKGWHIZbzpxtkCnK6taFUgrxbzPseiBNENi/36RTnKwqPJCHPimU5QG2vK6jd+JASQDugg==" }, "Spectre.Console.Analyzer": { "type": "Direct", @@ -214,11 +223,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "Direct", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "Azure.Core": { @@ -318,32 +327,24 @@ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "Microsoft.Extensions.Primitives": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.NET.StringTools": { "type": "Transitive", @@ -476,8 +477,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -769,8 +770,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker.abstractions": { "type": "Project", @@ -779,9 +780,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.configuration": { @@ -798,8 +799,8 @@ "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.regexmutators": { @@ -811,23 +812,23 @@ "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.testrunner.vstest": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "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.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -836,7 +837,7 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", "Stryker.Abstractions": "[1.0.0, )" @@ -853,12 +854,12 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "ResXResourceReader.NetStandard": { diff --git a/src/Stryker.DataCollector/Stryker.DataCollector/packages.lock.json b/src/Stryker.DataCollector/Stryker.DataCollector/packages.lock.json index b6cf44db2c..f28b9a6ecd 100644 --- a/src/Stryker.DataCollector/Stryker.DataCollector/packages.lock.json +++ b/src/Stryker.DataCollector/Stryker.DataCollector/packages.lock.json @@ -10,18 +10,18 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "NETStandard.Library": { "type": "Direct", diff --git a/src/Stryker.Options/packages.lock.json b/src/Stryker.Options/packages.lock.json index 26e1092f5d..d773f7fb23 100644 --- a/src/Stryker.Options/packages.lock.json +++ b/src/Stryker.Options/packages.lock.json @@ -95,19 +95,10 @@ "System.Configuration.ConfigurationManager": "8.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", @@ -169,8 +160,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -242,8 +233,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker.abstractions": { "type": "Project", @@ -252,9 +243,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -263,10 +254,10 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", - "Stryker.Abstractions": "[4.8.1, )" + "Stryker.Abstractions": "[1.0.0, )" } }, "Buildalyzer": { @@ -301,9 +292,19 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "dependencies": { @@ -316,19 +317,19 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } @@ -341,7 +342,7 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", + "requested": "[6.14.0, )", "resolved": "6.9.1", "contentHash": "DaKh3lenPUvzGccPkbI97BIvA27z+/UsL3ankfoZlX/4vBVDK5N1sheFTQ+GuJf+IgSzsJz/A21SPUpQLHwUtA==" }, @@ -353,11 +354,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } } diff --git a/src/Stryker.RegexMutators/Stryker.RegexMutators.UnitTest/packages.lock.json b/src/Stryker.RegexMutators/Stryker.RegexMutators.UnitTest/packages.lock.json index ed9e50e072..2cbb1b5bf9 100644 --- a/src/Stryker.RegexMutators/Stryker.RegexMutators.UnitTest/packages.lock.json +++ b/src/Stryker.RegexMutators/Stryker.RegexMutators.UnitTest/packages.lock.json @@ -10,12 +10,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" } }, "MSTest": { @@ -65,8 +65,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" }, "Microsoft.DiaSymReader": { "type": "Transitive", @@ -153,10 +153,10 @@ }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.TestPlatform.ObjectModel": "17.14.1", "Newtonsoft.Json": "13.0.3" } }, @@ -243,9 +243,9 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } diff --git a/src/Stryker.TestRunner.VsTest.UnitTest/VsTestMockingHelper.cs b/src/Stryker.TestRunner.VsTest.UnitTest/VsTestMockingHelper.cs index a5de818dde..fb5db01178 100644 --- a/src/Stryker.TestRunner.VsTest.UnitTest/VsTestMockingHelper.cs +++ b/src/Stryker.TestRunner.VsTest.UnitTest/VsTestMockingHelper.cs @@ -15,9 +15,11 @@ using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector; using Moq; +using Stryker.Abstractions; using Stryker.Abstractions.Options; using Stryker.Abstractions.ProjectComponents; using Stryker.Abstractions.Testing; +using Stryker.Core.CoverageAnalysis; using Stryker.Core.Initialisation; using Stryker.Core.Mutants; using Stryker.Core.MutationTest; @@ -35,7 +37,7 @@ namespace Stryker.TestRunner.VsTest.UnitTest; /// -/// This class has a set of methods that can be used to mock VsTest behavior. +/// This class has a set of methods that can be used to mock VsTest behavior. /// public class VsTestMockingHelper : TestBase { @@ -544,11 +546,17 @@ protected MutationTestProcess BuildMutationTestProcess(VsTestRunnerPool runner, { SourceProjectInfo = sourceProject ?? SourceProjectInfo, TestRunner = runner, - InitialTestRun = new InitialTestRun(testRunResult, new TimeoutValueCalculator(500)) + InitialTestRun = new InitialTestRun(testRunResult, new TimeoutValueCalculator(500)), + TestProjectsInfo = _testProjectsInfo }; - var mutator = new CsharpMutationProcess(_fileSystem, options); - - return new MutationTestProcess(input, options, null, new MutationTestExecutor(runner), mutator); + var mutator = new CsharpMutationProcess(_fileSystem, TestLoggerFactory.CreateLogger()); + var executor = new MutationTestExecutor(TestLoggerFactory.CreateLogger()); + executor.TestRunner = runner; + var coverageAnalyser = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + + var process = new MutationTestProcess(executor, coverageAnalyser, mutator, TestLoggerFactory.CreateLogger()); + process.Initialize(input, options, null); + return process; } private class MockStrykerTestHostLauncher : IStrykerTestHostLauncher diff --git a/src/Stryker.TestRunner.VsTest.UnitTest/VsTestRunnerPoolTests.cs b/src/Stryker.TestRunner.VsTest.UnitTest/VsTestRunnerPoolTests.cs index cf47cf485e..f96b32331c 100644 --- a/src/Stryker.TestRunner.VsTest.UnitTest/VsTestRunnerPoolTests.cs +++ b/src/Stryker.TestRunner.VsTest.UnitTest/VsTestRunnerPoolTests.cs @@ -11,7 +11,9 @@ using Stryker.Core.CoverageAnalysis; using Stryker.Core.Initialisation; using Stryker.Core.Mutants; +using Stryker.Core.UnitTest; using Stryker.TestRunner.Tests; +using Stryker.Utilities; using VsTestObjModel = Microsoft.VisualStudio.TestPlatform.ObjectModel; namespace Stryker.TestRunner.VsTest.UnitTest; @@ -179,8 +181,8 @@ public void DetectTimeout() var mockVsTest = BuildVsTestRunnerPool(options, out var runner); SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;", ["T1"] = "1;" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); SetupMockTimeOutTestRun(mockVsTest, new Dictionary { ["0"] = "T0=S;T1=S" }, "T0"); var result = runner.TestMultipleMutants(SourceProjectInfo, null, new[] { Mutant }, null); @@ -246,8 +248,8 @@ public void IdentifyNonCoveredMutants() // test 0 and 1 cover mutant 1 SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;", ["T1"] = "0;" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // one mutant is covered by tests 0 and 1 Mutant.CoveringTests.IsEmpty.ShouldBe(false); OtherMutant.CoveringTests.IsEmpty.ShouldBe(true); @@ -266,8 +268,8 @@ public void ShouldIgnoreCoverageAnalysisWhenEmpty() // test 0 and 1 cover mutant 1 SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = ";", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); Mutant.CoveringTests.IsEveryTest.ShouldBeTrue(); } @@ -283,8 +285,8 @@ public void RunOnlyUsefulTest() // only first test covers one mutant SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); SetupMockPartialTestRun(mockVsTest, new Dictionary { ["0"] = "T0=S" }); @@ -308,8 +310,8 @@ public void NotRunTestWhenNotCovered() // only first test covers one mutant SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;0", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); SetupMockTestRun(mockVsTest, false, TestCases); // mutant 0 is covered @@ -382,8 +384,8 @@ public void RunRelevantTestsOnStaticWhenPerTestCoverage() SetupMockCoveragePerTestRun(mockVsTest, new Dictionary { ["T0"] = "0,1;1", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); SetupMockPartialTestRun(mockVsTest, new Dictionary { ["0"] = "T0=F", ["1"] = "T0=S" }); var result = runner.TestMultipleMutants(SourceProjectInfo, null, new[] { OtherMutant }, null); @@ -531,8 +533,8 @@ public void MarkSuspiciousCoverage() SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;|1", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // the suspicious mutant should be tested against all tests OtherMutant.CoveringTests.IsEveryTest.ShouldBe(true); } @@ -550,8 +552,8 @@ public void StaticMutantsShouldBeTestedAgainstAllTests() SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;", ["T1"] = "1;" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant, staticMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant, staticMutant }, TestIdentifierList.NoTest()); // the suspicious mutant should be tested against all tests staticMutant.CoveringTests.IsEveryTest.ShouldBe(true); } @@ -572,8 +574,8 @@ public void MarkSuspiciousCoverageInPresenceOfFailedTests() SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "0;|1", ["T1"] = ";" }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, new TestIdentifierList(TestCases[1].Id.ToString())); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, new TestIdentifierList(TestCases[1].Id.ToString())); // the suspicious mutant should be tested against all tests except the failing one OtherMutant.AssessingTests.IsEveryTest.ShouldBe(false); } @@ -592,8 +594,8 @@ public void MarkSuspiciousTests() SetupMockCoverageRun(mockVsTest, new Dictionary { ["T0"] = "1;", ["T1"] = null }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // the suspicious mutant should be tested against all tests OtherMutant.CoveringTests.Count.ShouldBe(2); Mutant.CoveringTests.Count.ShouldBe(1); @@ -616,8 +618,8 @@ public void HandleNonCoveringTests() SetupMockCoverageRun(mockVsTest, new[] { testResult, other }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); OtherMutant.CoveringTests.Count.ShouldBe(0); Mutant.CoveringTests.Count.ShouldBe(1); @@ -645,8 +647,8 @@ public void HandleExtraTestResult() SetupMockCoverageRun(mockVsTest, new[] { testResult, other }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); OtherMutant.CoveringTests.Count.ShouldBe(0); Mutant.CoveringTests.Count.ShouldBe(1); @@ -668,8 +670,8 @@ public void DetectUnexpectedCase() var buildCase = BuildCase("unexpected", TestFrameworks.NUnit); SetupMockCoverageRun(mockVsTest, new[] { new VsTestObjModel.TestResult(buildCase) { Outcome = VsTestObjModel.TestOutcome.Passed }, testResult }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // the suspicious tests should be used for every mutant OtherMutant.CoveringTests.GetIdentifiers().Select(Guid.Parse).ShouldContain(buildCase.Id); Mutant.CoveringTests.GetIdentifiers().Select(Guid.Parse).ShouldContain(buildCase.Id); @@ -691,8 +693,8 @@ public void IgnoreSkippedTestResults() var other = BuildCoverageTestResult("T1", new[] { "0;", "" }); SetupMockCoverageRun(mockVsTest, new[] { testResult, other }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // the suspicious tests should be used for every mutant Mutant.CoveringTests.Count.ShouldBe(1); } @@ -712,11 +714,13 @@ public void HandlesMultipleResultsForCoverage() var other = BuildCoverageTestResult("T0", new[] { "1;0", "" }); SetupMockCoverageRun(mockVsTest, new[] { testResult, other }); - var analyzer = new CoverageAnalyser(options); - analyzer.DetermineTestCoverage(SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); + var analyzer = new CoverageAnalyser(TestLoggerFactory.CreateLogger()); + analyzer.DetermineTestCoverage(options, SourceProjectInfo, runner, new[] { Mutant, OtherMutant }, TestIdentifierList.NoTest()); // the suspicious tests should be used for every mutant Mutant.CoveringTests.IsEveryTest.ShouldBe(true); Mutant.IsStaticValue.ShouldBe(true); OtherMutant.CoveringTests.Count.ShouldBe(1); } } + + diff --git a/src/Stryker.TestRunner.VsTest.UnitTest/packages.lock.json b/src/Stryker.TestRunner.VsTest.UnitTest/packages.lock.json index 85e1eb409d..e4566a58c0 100644 --- a/src/Stryker.TestRunner.VsTest.UnitTest/packages.lock.json +++ b/src/Stryker.TestRunner.VsTest.UnitTest/packages.lock.json @@ -10,12 +10,12 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "HJKqKOE+vshXra2aEHpi2TlxYX7Z9VFYkr+E5rwEvHC8eIXiyO+K9kNm8vmNom3e2rA56WqxU+/N9NJlLGXsJQ==", "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" + "Microsoft.CodeCoverage": "17.14.1", + "Microsoft.TestPlatform.TestHost": "17.14.1" } }, "MSTest": { @@ -162,8 +162,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" + "resolved": "17.14.1", + "contentHash": "pmTrhfFIoplzFVbhVwUquT+77CbGH+h4/3mBpdmIlYtBi9nAB+kKI6dN3A/nV4DFi3wLLx/BlHIPK+MkbQ6Tpg==" }, "Microsoft.DiaSymReader": { "type": "Transitive", @@ -186,18 +186,10 @@ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", @@ -213,17 +205,17 @@ }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "Microsoft.Extensions.Primitives": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.NET.StringTools": { "type": "Transitive", @@ -308,10 +300,10 @@ }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", + "resolved": "17.14.1", + "contentHash": "d78LPzGKkJwsJXAQwsbJJ7LE7D1wB+rAyhHHAaODF+RDSQ0NgMjDFkSA1Djw18VrxO76GlKAjRUhl+H8NL8Z+Q==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.TestPlatform.ObjectModel": "17.14.1", "Newtonsoft.Json": "13.0.3" } }, @@ -346,6 +338,11 @@ "Microsoft.Testing.Platform.MSBuild": "1.9.1" } }, + "Namotion.Reflection": { + "type": "Transitive", + "resolved": "3.4.2", + "contentHash": "ZHrvPdAg7zV78iOTiH9ua+34rBfn4iH6Bjfo2bzUHOGD3KkjGUvqxBFy+v9p6qwV+GEeYWl4NOqXH8tVcZOMpw==" + }, "NETStandard.Library": { "type": "Transitive", "resolved": "2.0.0", @@ -359,6 +356,29 @@ "resolved": "13.0.3", "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" }, + "NJsonSchema": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "0q6mr6eJk/D4jPFKyRwAPauedZK60yFE5rjA3+aqCdQm9kGE9J8xygRrLfk0Ms8wBviWbLlaZYzqAteG3b6Yag==", + "dependencies": { + "NJsonSchema.Annotations": "11.4.0", + "Namotion.Reflection": "3.4.2", + "Newtonsoft.Json": "13.0.3" + } + }, + "NJsonSchema.Annotations": { + "type": "Transitive", + "resolved": "11.4.0", + "contentHash": "fKAGyIU9s18e9GAdNbEr2PmZdpBqb1RdAr2+EHHrdkSZNoYtwFcmN6syJaxYxeEFegoLbC3e+EU5eb7Tt1ph3Q==" + }, + "OpenCli.Sources": { + "type": "Transitive", + "resolved": "0.5.0", + "contentHash": "5FgwoxpZy9Qy7MsKHb2hZBTWXEvg7JCPuNnaqsn2g0/X9oWQVThYQ1nND1xJrq8P1aw+Gh8sirV1HbefeqSalw==", + "dependencies": { + "NJsonSchema": "11.4.0" + } + }, "runtime.native.System": { "type": "Transitive", "resolved": "4.3.0", @@ -410,6 +430,15 @@ "System.Text.Encoding.Extensions": "4.0.11" } }, + "Spectre.Console.Cli": { + "type": "Transitive", + "resolved": "0.52.0", + "contentHash": "50O+XG7tqtEErVGtqX00aUcsXJs7ltlSkGGAdRTI17zEgqzpQd7RRtf657eHXnPSK10SCoAuVMK0fnWPXDoVCA==", + "dependencies": { + "OpenCli.Sources": "0.5.0", + "Spectre.Console": "0.52.0" + } + }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", @@ -455,8 +484,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -776,8 +805,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker": { "type": "Project", @@ -789,20 +818,21 @@ "LibGit2Sharp": "[0.31.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.DependencyInjection": "[9.0.10, )", + "Microsoft.Extensions.Logging": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "Microsoft.Web.LibraryManager.Build": "[3.0.71, )", "Mono.Cecil": "[0.11.6, )", - "NuGet.Frameworks": "[7.0.1, )", + "NuGet.Frameworks": "[6.14.0, )", "Serilog": "[4.3.0, )", - "Serilog.Extensions.Logging": "[10.0.0, )", + "Serilog.Extensions.Logging": "[9.0.2, )", "Serilog.Extensions.Logging.File": "[3.0.0, )", - "Serilog.Sinks.Console": "[6.1.1, )", + "Serilog.Sinks.Console": "[6.0.0, )", "ShellProgressBar": "[5.2.0, )", - "Spectre.Console": "[0.54.0, )", + "Spectre.Console": "[0.52.0, )", "Stryker.Abstractions": "[1.0.0, )", "Stryker.Configuration": "[1.0.0, )", "Stryker.DataCollector": "[1.0.0, )", @@ -810,7 +840,7 @@ "Stryker.RegexMutators": "[1.0.0, )", "Stryker.TestRunner.VsTest": "[1.0.0, )", "Stryker.Utilities": "[1.0.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.abstractions": { @@ -820,9 +850,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.configuration": { @@ -842,22 +872,22 @@ "LaunchDarkly.EventSource": "[5.2.1, )", "MSTest": "[3.11.1, )", "Microsoft.CodeAnalysis.VisualBasic": "[4.14.0, )", - "Microsoft.NET.Test.Sdk": "[18.0.1, )", + "Microsoft.NET.Test.Sdk": "[17.14.1, )", "Moq": "[4.20.72, )", "Shouldly": "[4.3.0, )", - "Spectre.Console.Testing": "[0.54.0, )", + "Spectre.Console.Testing": "[0.52.0, )", "Stryker.Abstractions": "[1.0.0, )", "Stryker.Regex.Parser": "[1.0.0, )", "Stryker.Utilities": "[1.0.0, )", - "TestableIO.System.IO.Abstractions.TestingHelpers": "[22.1.0, )", + "TestableIO.System.IO.Abstractions.TestingHelpers": "[22.0.16, )", "stryker": "[4.8.1, )" } }, "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.regexmutators": { @@ -869,23 +899,23 @@ "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.testrunner.vstest": { "type": "Project", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", - "Microsoft.TestPlatform": "[18.0.1, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )", - "Microsoft.TestPlatform.TranslationLayer": "[18.0.1, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", + "Microsoft.TestPlatform": "[17.14.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )", + "Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )", "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.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.utilities": { @@ -894,7 +924,7 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", "Stryker.Abstractions": "[1.0.0, )" @@ -998,53 +1028,62 @@ "System.Reflection.Metadata": "9.0.0" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0", - "Microsoft.Extensions.Options": "10.0.0" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } @@ -1081,9 +1120,9 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", - "resolved": "7.0.1", - "contentHash": "dUDwg8VYTyT+ZbLdC7hUUHFF530HeRl4jcxclKJY0o96f3nv0eZvojXwjRkq2HKzuyRCcVD4T24aEF83CUmBzA==" + "requested": "[6.14.0, )", + "resolved": "6.14.0", + "contentHash": "xZ37J58DQAkVUX29qoMwla26iBYRScdcfSGNe1FIZjCX1tpafN9n7TinrkRxaJqYzW0D8Ob8a3eRSYhwEUauCA==" }, "ResXResourceReader.NetStandard": { "type": "CentralTransitive", @@ -1099,11 +1138,11 @@ }, "Serilog.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "requested": "[9.0.2, )", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", "dependencies": { - "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging": "9.0.0", "Serilog": "4.2.0" } }, @@ -1124,9 +1163,9 @@ }, "Serilog.Sinks.Console": { "type": "CentralTransitive", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "fQGWqVMClCP2yEyTXPIinSr5c+CBGUvBybPxjAGcf7ctDhadFhrQw03Mv8rJ07/wR5PDfFjewf2LimvXCDzpbA==", "dependencies": { "Serilog": "4.0.0" } @@ -1143,17 +1182,18 @@ }, "Spectre.Console": { "type": "CentralTransitive", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "StDXCFayfy0yB1xzUHT2tgEpV1/HFTiS4JgsAQS49EYTfMixSwwucaQs/bIOCwXjWwIQTMuxjUIxcB5XsJkFJA==" + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "bVe6b8mizSB4QAlfvKGWHIZbzpxtkCnK6taFUgrxbzPseiBNENi/36RTnKwqPJCHPimU5QG2vK6jd+JASQDugg==" }, "Spectre.Console.Testing": { "type": "CentralTransitive", - "requested": "[0.54.0, )", - "resolved": "0.54.0", - "contentHash": "9QjSrRH+scy66ppmOLDiSno0Uh1ISJL18FqmTQDFNvK/oNI1DaI30cy2Uj6v0gxLZghtc/eKTwXtPpe0KKfHXw==", + "requested": "[0.52.0, )", + "resolved": "0.52.0", + "contentHash": "wmthEamheMg6dtLtDemfrId/mBqAzZtPJtW2IdhEQiIPQdnJDyUima65z/ymPrRvX6UOHnybPPdS3ePybAdoCA==", "dependencies": { - "Spectre.Console": "0.54.0" + "Spectre.Console": "0.52.0", + "Spectre.Console.Cli": "0.52.0" } }, "Stryker.Regex.Parser": { @@ -1164,21 +1204,21 @@ }, "TestableIO.System.IO.Abstractions.TestingHelpers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "320o0GORJV6VDFyKL7e7At+CTBFciFKKwgFYthCAPNKnlZLqyY68NKGQ+h4xTVf5y6qBtIsV3ap+Qog7VzF65g==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "dIZ2qtrvWbilx2HGkBIp5LNZmEZT2rve2M/NEg3RAzR4WbTa/Gis1x/qRggnoqfDrZ0VnPaybJJKh6r9POQ1EQ==", "dependencies": { - "TestableIO.System.IO.Abstractions.Wrappers": "22.1.0", - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "TestableIO.System.IO.Abstractions.Wrappers": "22.0.16", + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } } diff --git a/src/Stryker.TestRunner.VsTest/packages.lock.json b/src/Stryker.TestRunner.VsTest/packages.lock.json index 1c4858389d..0a42ddc23b 100644 --- a/src/Stryker.TestRunner.VsTest/packages.lock.json +++ b/src/Stryker.TestRunner.VsTest/packages.lock.json @@ -10,51 +10,51 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Microsoft.TestPlatform": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "j28I540VckZ/cBX3/dotFDIwjYjfqXrHJDTujLDqB0Udr4blVWnQR34QoFMbSnjLJ4yyUUP/y70UzRevVEd3Gw==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "chV8QnyU0mY1i8kBG6UsfHMn7sTasloBKh+A9yuyRw760vDc1qKvFq1PAp3wujtTnX3WWwy49okuzrT2ZHJhfA==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "Microsoft.TestPlatform.Portable": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "xo0LUgBPdPOGVeing0HtgSHlu59IlATDXxbqsJZkDDb9ErCJkC3Z/aOn01nMvsAxISrrP3DjutXzTh7DRG545w==" + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "YiNhY7vP5IQnhCf8AHEaxvK85xG+4gpFDBvgx1nZhwxjt7yPz094K6i8JpFU4mgmO6T/gT3Q+ylfkpYFqtKkUw==" }, "Microsoft.TestPlatform.TranslationLayer": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "kkLbNqvR5I4QU4ImmYcAU6c34q5uTWNjKv8kHkZvnixFXHa/e6o8Oo8AwhL89OfJZ054V1IL0dlAU6Jmj5vt7w==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "LvxCfuUqu1Xs3xAs2hPlLYnrezqdqu14swUuVyoGCywJ63dD+FRD2lLG/3nAXux4MAXClFtp2y5FiBvLgEAbdA==", "dependencies": { "NETStandard.Library": "2.0.0" } }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "Direct", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } }, "Buildalyzer.Logger": { @@ -109,19 +109,10 @@ "System.Configuration.ConfigurationManager": "8.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", @@ -196,8 +187,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -269,8 +260,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker.abstractions": { "type": "Project", @@ -279,23 +270,23 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "stryker.datacollector": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Microsoft.TestPlatform.Portable": "[18.0.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Microsoft.TestPlatform.Portable": "[17.14.1, )" } }, "stryker.testrunner": { "type": "Project", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", - "Stryker.Abstractions": "[4.8.1, )" + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", + "Stryker.Abstractions": "[1.0.0, )" } }, "stryker.utilities": { @@ -304,10 +295,10 @@ "Buildalyzer": "[7.1.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.Extensions.Logging.Abstractions": "[10.0.0, )", + "Microsoft.Extensions.Logging.Abstractions": "[9.0.10, )", "Mono.Cecil": "[0.11.6, )", "ResXResourceReader.NetStandard": "[1.3.0, )", - "Stryker.Abstractions": "[4.8.1, )" + "Stryker.Abstractions": "[1.0.0, )" } }, "Buildalyzer": { @@ -371,9 +362,19 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "dependencies": { @@ -392,7 +393,7 @@ }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", + "requested": "[6.14.0, )", "resolved": "6.9.1", "contentHash": "DaKh3lenPUvzGccPkbI97BIvA27z+/UsL3ankfoZlX/4vBVDK5N1sheFTQ+GuJf+IgSzsJz/A21SPUpQLHwUtA==" }, diff --git a/src/Stryker.TestRunner/packages.lock.json b/src/Stryker.TestRunner/packages.lock.json index 5c1f49bf89..9337d2e4b6 100644 --- a/src/Stryker.TestRunner/packages.lock.json +++ b/src/Stryker.TestRunner/packages.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } @@ -69,15 +69,6 @@ "System.Configuration.ConfigurationManager": "8.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", "resolved": "6.0.0", @@ -219,8 +210,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker.abstractions": { "type": "Project", @@ -229,9 +220,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "Buildalyzer": { @@ -295,9 +286,19 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "dependencies": { @@ -310,13 +311,13 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", + "requested": "[6.14.0, )", "resolved": "6.9.1", "contentHash": "DaKh3lenPUvzGccPkbI97BIvA27z+/UsL3ankfoZlX/4vBVDK5N1sheFTQ+GuJf+IgSzsJz/A21SPUpQLHwUtA==" }, @@ -328,11 +329,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } } diff --git a/src/Stryker.Utilities/packages.lock.json b/src/Stryker.Utilities/packages.lock.json index c76130eb77..c55c51031a 100644 --- a/src/Stryker.Utilities/packages.lock.json +++ b/src/Stryker.Utilities/packages.lock.json @@ -50,12 +50,12 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", - "System.Diagnostics.DiagnosticSource": "10.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "System.Diagnostics.DiagnosticSource": "9.0.10" } }, "Mono.Cecil": { @@ -122,19 +122,10 @@ "System.Configuration.ConfigurationManager": "8.0.0" } }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", @@ -196,8 +187,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "0KdBK+h7G13PuOSC2R/DalAoFMvdYMznvGRuICtkdcUMXgl/gYXsG6z4yUvTxHSMACorWgHCU1Faq0KUHU6yAQ==" + "resolved": "9.0.10", + "contentHash": "uIpKiKp7EWlYZBK71jYP+maGYjDY9YTi/FxBlZoqDzM1ZHZB7gLqUm4jHvRFwaKfR1/Lrt2rQih9LGPIKyNEow==" }, "System.Diagnostics.EventLog": { "type": "Transitive", @@ -269,8 +260,8 @@ }, "Testably.Abstractions.FileSystem.Interface": { "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "tZOXFLGjkh8TxgMgKeEcM2HAlz9DwndGl6TFLo6ISHcszFX3FkuPMrtVbmqVjhooWNXrgJ/a9cH9ym5MZL1LAg==" + "resolved": "9.0.0", + "contentHash": "uksk86YlnzAdyfVNu3wICU0X5iXVe9LF7Q3UkngNliHWEvM5gvAlOUr+jmd9JwmbJWISH5+i1vyXE02lEVz7WQ==" }, "stryker.abstractions": { "type": "Project", @@ -279,9 +270,9 @@ "DotNet.Glob": "[3.1.3, )", "Microsoft.CodeAnalysis.CSharp": "[4.14.0, )", "Microsoft.CodeAnalysis.Common": "[4.14.0, )", - "Microsoft.TestPlatform.ObjectModel": "[18.0.1, )", + "Microsoft.TestPlatform.ObjectModel": "[17.14.1, )", "Serilog": "[4.3.0, )", - "TestableIO.System.IO.Abstractions.Wrappers": "[22.1.0, )" + "TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )" } }, "DotNet.Glob": { @@ -305,9 +296,19 @@ "Microsoft.CodeAnalysis.Common": "[4.0.0]" } }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[9.0.10, )", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Microsoft.Extensions.Logging": { "type": "CentralTransitive", - "requested": "[10.0.0, )", + "requested": "[9.0.10, )", "resolved": "6.0.0", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "dependencies": { @@ -320,16 +321,16 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "CentralTransitive", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", + "requested": "[17.14.1, )", + "resolved": "17.14.1", + "contentHash": "xTP1W6Mi6SWmuxd3a+jj9G9UoC850WGwZUps1Wah9r1ZxgXhdJfj1QqDLJkFjHDCvN42qDL2Ps5KjQYWUU0zcQ==", "dependencies": { "System.Reflection.Metadata": "8.0.0" } }, "NuGet.Frameworks": { "type": "CentralTransitive", - "requested": "[7.0.1, )", + "requested": "[6.14.0, )", "resolved": "6.9.1", "contentHash": "DaKh3lenPUvzGccPkbI97BIvA27z+/UsL3ankfoZlX/4vBVDK5N1sheFTQ+GuJf+IgSzsJz/A21SPUpQLHwUtA==" }, @@ -341,11 +342,11 @@ }, "TestableIO.System.IO.Abstractions.Wrappers": { "type": "CentralTransitive", - "requested": "[22.1.0, )", - "resolved": "22.1.0", - "contentHash": "IsW3jQqIiTN4GwdWFx+dzgRL5XR75UDTFVGuuIackPf2d7eH0KKyrx4wuIoASa1XnS9zhgLP39FKwJq6nbbx1w==", + "requested": "[22.0.16, )", + "resolved": "22.0.16", + "contentHash": "QUX0TLMvnRLEgvuMRotrZKN9eCdX4yzK7HJCaPj17T4jvUf+G4XifdLpB5wmRct2zKlscYzpWMOmHjKabse3yw==", "dependencies": { - "Testably.Abstractions.FileSystem.Interface": "10.0.0" + "Testably.Abstractions.FileSystem.Interface": "9.0.0" } } }