File: TestUtilities\TestRuntimeProcessLauncher.cs
Web Access
Project: ..\..\..\test\dotnet-watch.Tests\dotnet-watch.Tests.csproj (dotnet-watch.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Build.Graph;
 
namespace Microsoft.DotNet.Watch.UnitTests;
 
internal class TestRuntimeProcessLauncher(ProjectLauncher projectLauncher) : IRuntimeProcessLauncher
{
    public class Factory(Action<TestRuntimeProcessLauncher>? initialize = null) : IRuntimeProcessLauncherFactory
    {
        public IRuntimeProcessLauncher TryCreate(ProjectGraphNode projectNode, ProjectLauncher projectLauncher, ProjectOptions hostProjectOptions)
        {
            var service = new TestRuntimeProcessLauncher(projectLauncher);
            initialize?.Invoke(service);
            return service;
        }
    }
 
    public Func<IEnumerable<(string name, string value)>>? GetEnvironmentVariablesImpl;
    public Action? TerminateLaunchedProcessesImpl;
 
    public ProjectLauncher ProjectLauncher { get; } = projectLauncher;
 
    public ValueTask DisposeAsync()
        => ValueTask.CompletedTask;
 
    public IEnumerable<(string name, string value)> GetEnvironmentVariables()
        => GetEnvironmentVariablesImpl?.Invoke() ?? [];
 
    public ValueTask TerminateLaunchedProcessesAsync(CancellationToken cancellationToken)
    {
        TerminateLaunchedProcessesImpl?.Invoke();
        return ValueTask.CompletedTask;
    }
}