< Summary

Information
Class: Dotnet.Installer.Core.Types.Terminal
Assembly: Dotnet.Installer.Core
File(s): /home/runner/work/dotnet-snap/dotnet-snap/src/Dotnet.Installer.Core/Types/Terminal.cs
Line coverage
31%
Covered lines: 14
Uncovered lines: 30
Coverable lines: 44
Total lines: 73
Line coverage: 31.8%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Invoke()100%210%
Invoke()0%7280%
get_Default()100%210%
get_RedirectStandardOutput()100%210%
get_RedirectStandardError()100%210%
.ctor()100%210%
.ctor(...)100%11100%
get_IsSuccess()100%11100%
get_ExitCode()100%11100%
get_RedirectedStandardOutput()100%11100%
get_RedirectedStandardError()100%11100%
get_StandardOutput()100%11100%
get_StandardError()100%11100%

File(s)

/home/runner/work/dotnet-snap/dotnet-snap/src/Dotnet.Installer.Core/Types/Terminal.cs

#LineLine coverage
 1using System.Diagnostics;
 2
 3namespace Dotnet.Installer.Core.Types;
 4
 5public static class Terminal
 6{
 7    public static async Task<InvocationResult> Invoke(string program, params string[] arguments)
 08    {
 09        return await Invoke(program, options: null, arguments);
 010    }
 11
 12    public static async Task<InvocationResult> Invoke(string program, InvocationOptions? options = default,
 13        params string[] arguments)
 014    {
 015        options ??= InvocationOptions.Default;
 16
 017        var process = new Process();
 18
 019        process.StartInfo.FileName = program;
 20
 021        foreach (var argument in arguments)
 022            process.StartInfo.ArgumentList.Add(argument);
 23
 024        process.StartInfo.CreateNoWindow = true;
 025        process.StartInfo.RedirectStandardOutput = options.RedirectStandardOutput;
 026        process.StartInfo.RedirectStandardError = options.RedirectStandardError;
 27
 028        process.Start();
 029        await process.WaitForExitAsync();
 30
 031        return new InvocationResult
 032        {
 033            ExitCode = process.ExitCode,
 034            RedirectedStandardError = options.RedirectStandardError,
 035            RedirectedStandardOutput = options.RedirectStandardOutput,
 036            StandardError = options.RedirectStandardError ?
 037                await process.StandardError.ReadToEndAsync() : default,
 038            StandardOutput = options.RedirectStandardOutput ?
 039                await process.StandardOutput.ReadToEndAsync() : default
 040        };
 041    }
 42
 43    public class InvocationOptions
 44    {
 045        public static InvocationOptions Default => new();
 46
 047        public bool RedirectStandardOutput { get; set; } = false;
 048        public bool RedirectStandardError { get; set; } = false;
 49    }
 50
 51    public class InvocationResult
 52    {
 053        public InvocationResult()
 054        { }
 55
 1556        public InvocationResult(int exitCode, string standardOutput, string standardError)
 1557        {
 1558            ExitCode = exitCode;
 1559            StandardOutput = standardOutput;
 1560            StandardError = standardError;
 61
 1562            RedirectedStandardError = true;
 1563            RedirectedStandardOutput = true;
 1564        }
 65
 2966        public bool IsSuccess => ExitCode == 0;
 4467        public int ExitCode { get; init; }
 1568        public bool RedirectedStandardOutput { get; init; }
 1569        public bool RedirectedStandardError { get; init; }
 1570        public string? StandardOutput { get; init; }
 1571        public string? StandardError { get; init; }
 72    }
 73}