123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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 ());
- }
- }
|