BiDiClassTests.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Diagnostics.CodeAnalysis;
  2. using System.Linq;
  3. using System.Runtime.InteropServices;
  4. using System.Text;
  5. using Avalonia.Media.TextFormatting.Unicode;
  6. using Xunit;
  7. using Xunit.Abstractions;
  8. namespace Avalonia.Visuals.UnitTests.Media.TextFormatting
  9. {
  10. public class BiDiClassTests
  11. {
  12. private readonly ITestOutputHelper _outputHelper;
  13. public BiDiClassTests(ITestOutputHelper outputHelper)
  14. {
  15. _outputHelper = outputHelper;
  16. }
  17. [Theory(Skip = "Only run when the Unicode spec changes.")]
  18. [ClassData(typeof(BiDiClassTestDataGenerator))]
  19. [SuppressMessage("Usage", "xUnit1026:Theory methods should use all of their parameters", Justification = "Parameters match BiDi fields")]
  20. public void Should_Resolve(
  21. int lineNumber,
  22. int[] codePoints,
  23. sbyte paragraphLevel,
  24. sbyte resolvedParagraphLevel,
  25. sbyte[] resolvedLevels,
  26. int[] resolvedOrder)
  27. {
  28. var bidi = new BidiAlgorithm();
  29. var bidiData = new BidiData { ParagraphEmbeddingLevel = paragraphLevel };
  30. var text = Encoding.UTF32.GetString(MemoryMarshal.Cast<int, byte>(codePoints).ToArray());
  31. // Append
  32. bidiData.Append(text);
  33. // Act
  34. for (var i = 0; i < 10; i++)
  35. {
  36. bidi.Process(bidiData);
  37. }
  38. var resultLevels = bidi.ResolvedLevels;
  39. var resultParagraphLevel = bidi.ResolvedParagraphEmbeddingLevel;
  40. Assert.Equal(resolvedParagraphLevel, resultParagraphLevel);
  41. for (var i = 0; i < resolvedLevels.Length; i++)
  42. {
  43. if (resolvedLevels[i] == -1)
  44. {
  45. continue;
  46. }
  47. var expectedLevel = resolvedLevels[i];
  48. var actualLevel = resultLevels[i];
  49. Assert.Equal(expectedLevel, actualLevel);
  50. }
  51. }
  52. }
  53. }