mirror of
https://github.com/Tyrrrz/CliFx.git
synced 2025-10-25 15:19:17 +00:00
Refactor tests
This commit is contained in:
@@ -16,7 +16,7 @@ public class CancellationSpecs : SpecsBase
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Command_can_register_to_receive_a_cancellation_signal_from_the_console()
|
||||
public async Task Command_can_receive_a_cancellation_signal_from_the_console()
|
||||
{
|
||||
// Arrange
|
||||
var commandType = DynamicCommandBuilder.Compile(
|
||||
|
||||
@@ -21,7 +21,7 @@ public class ConsoleSpecs : SpecsBase
|
||||
{
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Timeout = 15000)]
|
||||
public async Task Real_console_maps_directly_to_system_console()
|
||||
{
|
||||
// Can't verify our own console output, so using an
|
||||
|
||||
@@ -19,54 +19,35 @@ public class DirectivesSpecs : SpecsBase
|
||||
{
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Timeout = 15000)]
|
||||
public async Task Debug_directive_can_be_specified_to_interrupt_execution_until_a_debugger_is_attached()
|
||||
{
|
||||
// Arrange
|
||||
var stdOutBuffer = new StringBuilder();
|
||||
using var cts = new CancellationTokenSource();
|
||||
|
||||
// We can't actually attach a debugger, but we can ensure that the process is waiting for one
|
||||
void HandleStdOut(string line)
|
||||
{
|
||||
// Kill the process once it writes the output we expect
|
||||
if (line.Contains("Attach debugger to", StringComparison.OrdinalIgnoreCase))
|
||||
cts.Cancel();
|
||||
}
|
||||
|
||||
var command = Cli.Wrap("dotnet")
|
||||
.WithArguments(a => a
|
||||
.Add(Dummy.Program.Location)
|
||||
.Add("[debug]")
|
||||
) | stdOutBuffer;
|
||||
) | HandleStdOut;
|
||||
|
||||
// Act
|
||||
// Act & assert
|
||||
try
|
||||
{
|
||||
// This has a timeout just in case the execution hangs forever
|
||||
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
|
||||
|
||||
var task = command.ExecuteAsync(cts.Token);
|
||||
|
||||
// We can't attach a debugger programmatically, so the application
|
||||
// will hang indefinitely.
|
||||
// To work around it, we will wait until the application writes
|
||||
// something to the standard output and then kill it.
|
||||
while (true)
|
||||
await command.ExecuteAsync(cts.Token);
|
||||
}
|
||||
catch (OperationCanceledException ex) when (ex.CancellationToken == cts.Token)
|
||||
{
|
||||
if (stdOutBuffer.Length > 0)
|
||||
{
|
||||
cts.Cancel();
|
||||
break;
|
||||
// This means that the process was killed after it wrote the expected output
|
||||
}
|
||||
|
||||
await Task.Delay(100, cts.Token);
|
||||
}
|
||||
|
||||
await task;
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// This is expected
|
||||
}
|
||||
|
||||
var stdOut = stdOutBuffer.ToString();
|
||||
|
||||
// Assert
|
||||
stdOut.Should().Contain("Attach debugger to");
|
||||
|
||||
TestOutput.WriteLine(stdOut);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -241,7 +241,7 @@ public class EnvironmentSpecs : SpecsBase
|
||||
stdOut.Trim().Should().Be("bar");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Timeout = 15000)]
|
||||
public async Task Environment_variables_are_extracted_automatically()
|
||||
{
|
||||
// Ensures that the environment variables are properly obtained from
|
||||
|
||||
Reference in New Issue
Block a user