namespace Spectre.Console.Tests.Unit;

public partial class AnsiConsoleTests
{
    [Theory]
    [InlineData(Decoration.Bold, "\u001b[1mHello World")]
    [InlineData(Decoration.Dim, "\u001b[2mHello World")]
    [InlineData(Decoration.Italic, "\u001b[3mHello World")]
    [InlineData(Decoration.Underline, "\u001b[4mHello World")]
    [InlineData(Decoration.Invert, "\u001b[7mHello World")]
    [InlineData(Decoration.Conceal, "\u001b[8mHello World")]
    [InlineData(Decoration.SlowBlink, "\u001b[5mHello World")]
    [InlineData(Decoration.RapidBlink, "\u001b[6mHello World")]
    [InlineData(Decoration.Strikethrough, "\u001b[9mHello World")]
    public void Should_Write_Decorated_Text_Correctly(Decoration decoration, string expected)
    {
        // Given
        var console = new TestConsole()
            .EmitAnsiSequences();

        // When
        console.Write("Hello World", new Style().Decoration(decoration));

        // Then
        console.Output.ShouldBe(expected);
    }

    [Theory]
    [InlineData(Decoration.Bold | Decoration.Underline, "\u001b[1;4mHello World")]
    [InlineData(Decoration.Bold | Decoration.Underline | Decoration.Conceal, "\u001b[1;4;8mHello World")]
    public void Should_Write_Text_With_Multiple_Decorations_Correctly(Decoration decoration, string expected)
    {
        // Given
        var console = new TestConsole()
            .EmitAnsiSequences();

        // When
        console.Write("Hello World", new Style().Decoration(decoration));

        // Then
        console.Output.ShouldBe(expected);
    }
}