using System.Threading.Tasks; using Shouldly; using Spectre.Console.Testing; using Spectre.Verify.Extensions; using VerifyXunit; using Xunit; namespace Spectre.Console.Tests.Unit { [UsesVerify] [ExpectationPath("AlternateScreen")] public sealed class AlternateScreenTests { [Fact] public void Should_Throw_If_Alternative_Buffer_Is_Not_Supported_By_Terminal() { // Given var console = new TestConsole(); console.Profile.Capabilities.AlternateBuffer = false; // When var result = Record.Exception(() => { console.WriteLine("Foo"); console.AlternateScreen(() => { console.WriteLine("Bar"); }); }); // Then result.ShouldNotBeNull(); result.Message.ShouldBe("Alternate buffers are not supported by your terminal."); } [Fact] public void Should_Throw_If_Ansi_Is_Not_Supported_By_Terminal() { // Given var console = new TestConsole(); console.Profile.Capabilities.Ansi = false; console.Profile.Capabilities.AlternateBuffer = true; // When var result = Record.Exception(() => { console.WriteLine("Foo"); console.AlternateScreen(() => { console.WriteLine("Bar"); }); }); // Then result.ShouldNotBeNull(); result.Message.ShouldBe("Alternate buffers are not supported since your terminal does not support ANSI."); } [Fact] [Expectation("Show")] public async Task Should_Write_To_Alternate_Screen() { // Given var console = new TestConsole(); console.EmitAnsiSequences = true; console.Profile.Capabilities.AlternateBuffer = true; // When console.WriteLine("Foo"); console.AlternateScreen(() => { console.WriteLine("Bar"); }); // Then await Verifier.Verify(console.Output); } } }