namespace Terminal.Gui.TextTests; #nullable enable public class StringTests { [Fact] public void TestGetColumns_Empty () { var str = string.Empty; Assert.Equal (0, str.GetColumns ()); } [Theory] [InlineData ("a", 1)] [InlineData ("á", 1)] [InlineData ("ab", 2)] [InlineData ("áé", 2)] [InlineData ("abc", 3)] [InlineData ("áéí", 3)] [InlineData ("abcd", 4)] public void TestGetColumns_MultiRune (string str, int expected) { Assert.Equal (expected, str.GetColumns ()); } // Test non-BMP codepoints // Face with Tears of Joy Emoji (😂), Unicode U+1F602 is 2 columns wide [Theory] [InlineData ("😂", 2)] [InlineData ("😂😂", 4)] public void TestGetColumns_MultiRune_NonBMP (string str, int expected) { Assert.Equal (expected, str.GetColumns ()); } // Test known wide codepoints [Theory] [InlineData ("🙂", 2)] [InlineData ("a🙂", 3)] [InlineData ("🙂a", 3)] [InlineData ("👨‍👩‍👦‍👦", 8)] [InlineData ("👨‍👩‍👦‍👦🙂", 10)] [InlineData ("👨‍👩‍👦‍👦🙂a", 11)] [InlineData ("👨‍👩‍👦‍👦a🙂", 11)] [InlineData ("👨‍👩‍👦‍👦👨‍👩‍👦‍👦", 16)] [InlineData ("山", 2)] // The character for "mountain" in Chinese/Japanese/Korean (山), Unicode U+5C71 [InlineData ("山🙂", 4)] // The character for "mountain" in Chinese/Japanese/Korean (山), Unicode U+5C71 //[InlineData ("\ufe20\ufe21", 2)] // Combining Ligature Left Half ︠ - U+fe20 -https://github.com/microsoft/terminal/blob/main/src/types/unicode_width_overrides.xml // // Combining Ligature Right Half - U+fe21 -https://github.com/microsoft/terminal/blob/main/src/types/unicode_width_overrides.xml public void TestGetColumns_MultiRune_WideBMP (string str, int expected) { Assert.Equal (expected, str.GetColumns ()); } [Fact] public void TestGetColumns_Null () { string? str = null; Assert.Equal (0, str!.GetColumns ()); } [Fact] public void TestGetColumns_SingleRune () { var str = "a"; Assert.Equal (1, str.GetColumns ()); } }