Utf16UtilsTests.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using Avalonia.Media.TextFormatting.Unicode;
  3. using Xunit;
  4. namespace Avalonia.Base.UnitTests.Media.TextFormatting;
  5. public class Utf16UtilsTests
  6. {
  7. [Theory,
  8. InlineData("\ud87e\udc32123", 1, 2),
  9. InlineData("\ud87e\udc32123", 2, 3),
  10. InlineData("test", 3, 3),
  11. InlineData("\ud87e\udc32", 0, 0),
  12. InlineData("12\ud87e\udc3212", 2, 2),
  13. InlineData("12\ud87e\udc3212", 3, 4),
  14. ]
  15. public void CharacterOffsetToStringOffset(string s, int charOffset, int stringOffset)
  16. {
  17. Assert.Equal(stringOffset, Utf16Utils.CharacterOffsetToStringOffset(s, charOffset, false));
  18. }
  19. [Theory,
  20. InlineData("\ud87e\udc32", 2, true),
  21. InlineData("12", 2, true),
  22. ]
  23. public void CharacterOffsetToStringOffsetThrowsOnOutOfRange(string s, int charOffset, bool throws)
  24. {
  25. if (throws)
  26. Assert.Throws<IndexOutOfRangeException>(() =>
  27. Utf16Utils.CharacterOffsetToStringOffset(s, charOffset, true));
  28. else
  29. Utf16Utils.CharacterOffsetToStringOffset(s, charOffset, true);
  30. }
  31. }