File: Utils\EmojiWidthTests.cs
Web Access
Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Reflection;
using System.Text;
using Aspire.Cli.Interaction;
using Aspire.Cli.Utils;
using Spectre.Console;
 
namespace Aspire.Cli.Tests.Utils;
 
public class EmojiWidthTests
{
    public static TheoryData<string> KnownEmojiNames
    {
        get
        {
            var data = new TheoryData<string>();
            foreach (var f in typeof(KnownEmojis).GetFields(BindingFlags.Public | BindingFlags.Static))
            {
                if (f.FieldType == typeof(KnownEmoji) && f.GetValue(null) is KnownEmoji emoji)
                {
                    data.Add(emoji.Name);
                }
            }
            return data;
        }
    }
 
    [Theory]
    [MemberData(nameof(KnownEmojiNames))]
    public void GetCellWidth_Emojis_ReturnMeasuredWidth(string emojiName)
    {
        // Arrange
        var console = AnsiConsole.Create(new AnsiConsoleSettings
        {
            Ansi = AnsiSupport.No,
            ColorSystem = ColorSystemSupport.NoColors,
            Out = new AnsiConsoleOutput(new StringWriter(new StringBuilder()))
        });
 
        // Act
        var width = EmojiWidth.GetCellWidth(emojiName, console);
 
        // Assert - Spectre 0.55.2+ correctly measures emoji widths
        Assert.InRange(width, 1, 2);
    }
}