Skip to content
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e394a48
Initial plan
Copilot Oct 3, 2025
cf5f905
feat: implement DI for Stryker.Core and Stryker.CLI
Copilot Oct 3, 2025
b008240
fix: update unit tests to use DI constructors
Copilot Oct 3, 2025
932117d
fix: continue test constructor updates
Copilot Oct 3, 2025
31ac012
feat: implement dependency injection using Microsoft.Extensions.Depen…
Copilot Oct 3, 2025
b1110b5
fix: complete DI unit test migration
Copilot Oct 3, 2025
bada5c6
Merge branch 'master' into copilot/fix-55fd77a5-12e0-4e49-b7c5-607776…
rouke-broersma Oct 3, 2025
e48f7f2
fix: update unit test mocks to use new DI-based method signatures
Copilot Oct 3, 2025
ac65428
fix: improve ProjectMutatorTests initialization (partial)
Copilot Oct 3, 2025
10f68f3
refactor: remove backward compatibility API from StrykerRunner
Copilot Oct 3, 2025
3aef2ca
Changes before error encountered
Copilot Oct 3, 2025
f450f5b
fix: complete CLI test fixes and most Core test fixes
Copilot Oct 3, 2025
7538a30
Merge branch 'master' into copilot/fix-55fd77a5-12e0-4e49-b7c5-607776…
rouke-broersma Oct 3, 2025
9c47462
fix: complete DI refactoring for NugetRestoreProcess and InputFileRes…
Copilot Oct 3, 2025
8c5d32b
fix: sync ApplicationLogging factories between CLI and Utilities
Copilot Oct 3, 2025
571e063
fix: restore IMutationTestProcess and IInitialBuildProcess fields
Copilot Oct 3, 2025
f6d0984
Merge branch 'master' into copilot/fix-55fd77a5-12e0-4e49-b7c5-607776…
richardwerkman Oct 3, 2025
dac5d95
fix: restore real InitialisationProcess in ProjectOrchestrator tests
Copilot Oct 6, 2025
a7d7339
Merge branch 'master' into copilot/fix-55fd77a5-12e0-4e49-b7c5-607776…
richardwerkman Oct 7, 2025
5cf7fdf
Addressing PR comments
Copilot Oct 7, 2025
bc1f974
Merge branch 'master' of https://github.com/stryker-mutator/stryker-n…
richardwerkman Oct 14, 2025
6c9fcf6
fix: add missing using directive for System.IO.Abstractions
richardwerkman Oct 14, 2025
9ce0163
refactor: remove unnecessary logger parameters from InitialTestProces…
richardwerkman Oct 14, 2025
05a2d64
Merge branch 'master' of https://github.com/stryker-mutator/stryker-n…
Oct 24, 2025
8c59e5b
fix merge
Oct 24, 2025
346e49b
Merge branch 'copilot/fix-55fd77a5-12e0-4e49-b7c5-607776e5c133' of ht…
Oct 24, 2025
a338469
Fix sonar issue
Oct 24, 2025
ed8cc0b
Add extra dependency injections
Oct 24, 2025
915da33
Add more DI
Oct 24, 2025
0618057
Fix issues
Oct 24, 2025
b501dfd
Fix test build
Oct 24, 2025
c07c6b0
Fix unit tests
Oct 24, 2025
04cb372
Fix some more tests
Oct 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.39" />
<PackageVersion Include="LaunchDarkly.EventSource" Version="5.2.1" />
<PackageVersion Include="McMaster.Extensions.CommandLineUtils" Version="4.1.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.9" />
<PackageVersion Include="MSTest" Version="3.11.0" />
<PackageVersion Include="MSTest.TestFramework" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="4.14.0" />
Expand Down Expand Up @@ -46,4 +47,4 @@
<PackageVersion Include="Spectre.Console.Testing" Version="0.51.1" />
<PackageVersion Include="TestableIO.System.IO.Abstractions.TestingHelpers" Version="22.0.16" />
</ItemGroup>
</Project>
</Project>
19 changes: 10 additions & 9 deletions src/Stryker.Abstractions/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -298,6 +289,16 @@
"Microsoft.CodeAnalysis.Common": "[4.0.0]"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[9.0.9, )",
"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": "[9.0.9, )",
Expand Down
21 changes: 13 additions & 8 deletions src/Stryker.CLI/Stryker.CLI.UnitTest/FileConfigReaderTests.cs
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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<StrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>())).Returns(runResults).Verifiable();
var target = new StrykerCli(mock.Object);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>())).Returns(runResults).Verifiable();
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());

target.Run(new string[] { });

Expand All @@ -57,12 +62,12 @@ public void WithJsonConfigFile_ShouldStartStrykerWithConfigFileOptions(string ar
var runResults = new StrykerRunResult(options, 0.3);

var mock = new Mock<IStrykerRunner>(MockBehavior.Strict);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
.Callback<IStrykerInputs, ILoggerFactory, IProjectOrchestrator>((c, l, p) => actualInputs = c)
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.Callback<IStrykerInputs>(c => actualInputs = c)
.Returns(runResults)
.Verifiable();

var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());

target.Run(new string[] { argName, "filled-stryker-config.json" });

Expand Down Expand Up @@ -104,12 +109,12 @@ public void WithYamlConfigFile_ShouldStartStrykerWithConfigFileOptions()
var runResults = new StrykerRunResult(options, 0.3);

var mock = new Mock<IStrykerRunner>(MockBehavior.Strict);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
.Callback<IStrykerInputs, ILoggerFactory, IProjectOrchestrator>((c, l, p) => actualInputs = c)
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.Callback<IStrykerInputs>(c => actualInputs = c)
.Returns(runResults)
.Verifiable();

var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());

target.Run(new string[] { "-f", "filled-stryker-config.yaml" });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
40 changes: 22 additions & 18 deletions src/Stryker.CLI/Stryker.CLI.UnitTest/StrykerCLITests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.IO.Abstractions;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -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;
Expand Down Expand Up @@ -35,20 +37,23 @@ public StrykerCLITests()
{
_options = new StrykerOptions() { Thresholds = new Thresholds { Break = 0 } };
_runResults = new StrykerRunResult(_options, 0.3);
_strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
.Callback<IStrykerInputs, ILoggerFactory, IProjectOrchestrator>((c, l, p) => _inputs = c)
_strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.Callback<IStrykerInputs>(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<IAnsiConsole>();
var fileSystemMock = new Mock<IFileSystem>();
_target = new StrykerCli(_strykerRunnerMock.Object, configBuilder, _loggingInitializerMock.Object, _nugetClientMock.Object, consoleMock.Object, fileSystemMock.Object);
}

[TestMethod]
public void ShouldDisplayInfoOnHelp()
{
var mock = new Mock<IStrykerRunner>(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<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), console, Mock.Of<IFileSystem>());

target.Run(new string[] { "--help" });

Expand All @@ -68,12 +73,12 @@ public void ShouldDisplayLogo()
var strykerRunnerMock = new Mock<IStrykerRunner>(MockBehavior.Strict);
var strykerRunResult = new StrykerRunResult(_options, 0.3);

strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
strykerRunnerMock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.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<IFileSystem>());

target.Run(Array.Empty<string>());

Expand Down Expand Up @@ -121,12 +126,11 @@ public void OnMutationScoreBelowThresholdBreak_ShouldReturn_ExitCodeBreakThresho
};
var strykerRunResult = new StrykerRunResult(options, 0.3);

mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
.Callback<IStrykerInputs, ILoggerFactory, IProjectOrchestrator>((c, l, p) => Utilities.Logging.ApplicationLogging.LoggerFactory = l)
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.Returns(strykerRunResult)
.Verifiable();

var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());
var result = target.Run(new string[] { });

mock.Verify();
Expand All @@ -146,11 +150,11 @@ public void OnMutationScoreEqualToNullAndThresholdBreakEqualTo0_ShouldReturnExit
}
};
var strykerRunResult = new StrykerRunResult(options, double.NaN);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.Returns(strykerRunResult)
.Verifiable();

var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());
var result = target.Run(new string[] { });

mock.Verify();
Expand All @@ -170,11 +174,11 @@ public void OnMutationScoreEqualToNullAndThresholdBreakAbove0_ShouldReturnExitCo
}
};
var strykerRunResult = new StrykerRunResult(options, double.NaN);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.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<IAnsiConsole>(), Mock.Of<IFileSystem>());
var result = target.Run(new string[] { });

mock.Verify();
Expand All @@ -195,9 +199,9 @@ public void OnMutationScoreAboveThresholdBreak_ShouldReturnExitCode0()
};
var strykerRunResult = new StrykerRunResult(options, 0.1);

mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>())).Returns(strykerRunResult).Verifiable();
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>())).Returns(strykerRunResult).Verifiable();

var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());
var result = target.Run(new string[] { });

mock.Verify();
Expand All @@ -212,7 +216,7 @@ public void OnMutationScoreAboveThresholdBreak_ShouldReturnExitCode0()
public void ShouldNotStartStryker_WithHelpArgument(string argName)
{
var mock = new Mock<IStrykerRunner>(MockBehavior.Strict);
var target = new StrykerCli(mock.Object);
var target = new StrykerCli(mock.Object, new ConfigBuilder(), Mock.Of<ILoggingInitializer>(), Mock.Of<IStrykerNugetFeedClient>(), Mock.Of<IAnsiConsole>(), Mock.Of<IFileSystem>());

target.Run(new string[] { argName });

Expand All @@ -223,11 +227,11 @@ public void ShouldNotStartStryker_WithHelpArgument(string argName)
public void ShouldThrow_OnException()
{
var mock = new Mock<IStrykerRunner>(MockBehavior.Strict);
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>(), It.IsAny<ILoggerFactory>(), It.IsAny<IProjectOrchestrator>()))
mock.Setup(x => x.RunMutationTest(It.IsAny<IStrykerInputs>()))
.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<IAnsiConsole>(), Mock.Of<IFileSystem>());
Should.Throw<Exception>(() => target.Run(new string[] { }));
}

Expand Down
47 changes: 25 additions & 22 deletions src/Stryker.CLI/Stryker.CLI.UnitTest/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -212,14 +212,6 @@
"Microsoft.Extensions.Configuration.Abstractions": "6.0.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "9.0.9",
"contentHash": "zQV2WOSP+3z1EuK91ULxfGgo2Y75bTRnmJHp08+w/YXAyekZutX/qCd88/HOMNh35MDW9mJJJxPpMPS+1Rww8A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "9.0.9",
Expand Down Expand Up @@ -869,6 +861,7 @@
"type": "Project",
"dependencies": {
"McMaster.Extensions.CommandLineUtils": "[4.1.1, )",
"Microsoft.Extensions.DependencyInjection": "[9.0.9, )",
"NuGet.Protocol": "[6.14.0, )",
"YamlDotNet": "[16.3.0, )",
"stryker": "[4.8.1, )"
Expand All @@ -884,6 +877,7 @@
"LibGit2Sharp": "[0.31.0, )",
"Microsoft.CodeAnalysis.CSharp": "[4.14.0, )",
"Microsoft.CodeAnalysis.Common": "[4.14.0, )",
"Microsoft.Extensions.DependencyInjection": "[9.0.9, )",
"Microsoft.Extensions.Logging": "[9.0.9, )",
"Microsoft.TestPlatform": "[17.14.1, )",
"Microsoft.TestPlatform.ObjectModel": "[17.14.1, )",
Expand All @@ -898,13 +892,13 @@
"Serilog.Sinks.Console": "[6.0.0, )",
"ShellProgressBar": "[5.2.0, )",
"Spectre.Console": "[0.51.1, )",
"Stryker.Abstractions": "[4.8.1, )",
"Stryker.Configuration": "[4.8.1, )",
"Stryker.DataCollector": "[4.8.1, )",
"Stryker.Abstractions": "[1.0.0, )",
"Stryker.Configuration": "[1.0.0, )",
"Stryker.DataCollector": "[1.0.0, )",
"Stryker.Regex.Parser": "[1.0.0, )",
"Stryker.RegexMutators": "[4.8.1, )",
"Stryker.TestRunner.VsTest": "[4.8.1, )",
"Stryker.Utilities": "[4.8.1, )",
"Stryker.RegexMutators": "[1.0.0, )",
"Stryker.TestRunner.VsTest": "[1.0.0, )",
"Stryker.Utilities": "[1.0.0, )",
"TestableIO.System.IO.Abstractions.Wrappers": "[22.0.16, )"
}
},
Expand All @@ -927,8 +921,8 @@
"Microsoft.CodeAnalysis.CSharp": "[4.14.0, )",
"Microsoft.CodeAnalysis.Common": "[4.14.0, )",
"Serilog": "[4.3.0, )",
"Stryker.Abstractions": "[4.8.1, )",
"Stryker.Utilities": "[4.8.1, )"
"Stryker.Abstractions": "[1.0.0, )",
"Stryker.Utilities": "[1.0.0, )"
}
},
"stryker.datacollector": {
Expand All @@ -948,7 +942,7 @@
"type": "Project",
"dependencies": {
"Microsoft.TestPlatform.ObjectModel": "[17.14.1, )",
"Stryker.Abstractions": "[4.8.1, )"
"Stryker.Abstractions": "[1.0.0, )"
}
},
"stryker.testrunner.vstest": {
Expand All @@ -959,10 +953,10 @@
"Microsoft.TestPlatform.ObjectModel": "[17.14.1, )",
"Microsoft.TestPlatform.Portable": "[17.14.1, )",
"Microsoft.TestPlatform.TranslationLayer": "[17.14.1, )",
"Stryker.Abstractions": "[4.8.1, )",
"Stryker.DataCollector": "[4.8.1, )",
"Stryker.TestRunner": "[4.8.1, )",
"Stryker.Utilities": "[4.8.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.0.16, )"
}
},
Expand All @@ -975,7 +969,7 @@
"Microsoft.Extensions.Logging.Abstractions": "[9.0.9, )",
"Mono.Cecil": "[0.11.6, )",
"ResXResourceReader.NetStandard": "[1.3.0, )",
"Stryker.Abstractions": "[4.8.1, )"
"Stryker.Abstractions": "[1.0.0, )"
}
},
"Azure.Storage.Files.Shares": {
Expand Down Expand Up @@ -1066,6 +1060,15 @@
"Microsoft.CodeAnalysis.Common": "[4.0.0]"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[9.0.9, )",
"resolved": "9.0.9",
"contentHash": "zQV2WOSP+3z1EuK91ULxfGgo2Y75bTRnmJHp08+w/YXAyekZutX/qCd88/HOMNh35MDW9mJJJxPpMPS+1Rww8A==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[9.0.9, )",
Expand Down
Original file line number Diff line number Diff line change
@@ -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<StrykerCli>();
services.AddSingleton<IConfigBuilder, ConfigBuilder>();
services.AddSingleton<ILoggingInitializer, LoggingInitializer>();
services.AddSingleton<IStrykerNugetFeedClient, StrykerNugetFeedClient>();
services.AddSingleton<IAnsiConsole>(AnsiConsole.Console);
services.AddSingleton<IFileSystem, FileSystem>();

return services;
}
}
4 changes: 4 additions & 0 deletions src/Stryker.CLI/Stryker.CLI/Logging/ApplicationLogging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
Loading
Loading