aspnetcore/test/dotnet-watch.Tests/ProgramTests.cs

58 lines
1.7 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Tools.Internal;
using Xunit;
using Xunit.Abstractions;
namespace Microsoft.DotNet.Watcher.Tools.Tests
{
public class ProgramTests : IDisposable
{
private readonly TemporaryDirectory _tempDir;
private readonly TestConsole _console;
public ProgramTests(ITestOutputHelper output)
{
_tempDir = new TemporaryDirectory();
_console = new TestConsole(output);
}
[Fact]
public async Task ConsoleCancelKey()
{
_tempDir
.WithCSharpProject("testproj")
.WithTargetFrameworks("netcoreapp2.2")
.Dir()
.WithFile("Program.cs")
.Create();
var output = new StringBuilder();
_console.Error = _console.Out = new StringWriter(output);
using (var app = new Program(_console, _tempDir.Root))
{
var run = app.RunAsync(new[] { "run" });
await _console.CancelKeyPressSubscribed.TimeoutAfter(TimeSpan.FromSeconds(30));
_console.ConsoleCancelKey();
var exitCode = await run.TimeoutAfter(TimeSpan.FromSeconds(30));
Assert.Contains("Shutdown requested. Press Ctrl+C again to force exit.", output.ToString());
Assert.Equal(0, exitCode);
}
}
public void Dispose()
{
_tempDir.Dispose();
}
}
}