1
0

BiDiAlgorithmTests.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Avalonia.Media.TextFormatting.Unicode;
  2. using Avalonia.Utilities;
  3. using Xunit;
  4. using Xunit.Abstractions;
  5. namespace Avalonia.Visuals.UnitTests.Media.TextFormatting
  6. {
  7. public class BiDiAlgorithmTests
  8. {
  9. private readonly ITestOutputHelper _outputHelper;
  10. public BiDiAlgorithmTests(ITestOutputHelper outputHelper)
  11. {
  12. _outputHelper = outputHelper;
  13. }
  14. [ClassData(typeof(BiDiTestDataGenerator))]
  15. [Theory(Skip = "Only run when the Unicode spec changes.")]
  16. public void Should_Process(int lineNumber, BidiClass[] classes, sbyte paragraphEmbeddingLevel, int[] levels)
  17. {
  18. var bidi = new BidiAlgorithm();
  19. // Run the algorithm...
  20. ArraySlice<sbyte> resultLevels;
  21. bidi.Process(
  22. classes,
  23. ArraySlice<BidiPairedBracketType>.Empty,
  24. ArraySlice<int>.Empty,
  25. paragraphEmbeddingLevel,
  26. false,
  27. null,
  28. null,
  29. null);
  30. resultLevels = bidi.ResolvedLevels;
  31. // Check the results match
  32. var pass = true;
  33. if (resultLevels.Length == levels.Length)
  34. {
  35. for (var i = 0; i < levels.Length; i++)
  36. {
  37. if (levels[i] == -1)
  38. {
  39. continue;
  40. }
  41. if (resultLevels[i] != levels[i])
  42. {
  43. pass = false;
  44. break;
  45. }
  46. }
  47. }
  48. else
  49. {
  50. pass = false;
  51. }
  52. if (!pass)
  53. {
  54. _outputHelper.WriteLine($"Failed line {lineNumber}");
  55. _outputHelper.WriteLine($" Data: {string.Join(" ", classes)}");
  56. _outputHelper.WriteLine($" Embed Level: {paragraphEmbeddingLevel}");
  57. _outputHelper.WriteLine($" Expected: {string.Join(" ", levels)}");
  58. _outputHelper.WriteLine($" Actual: {string.Join(" ", resultLevels)}");
  59. }
  60. Assert.True(pass);
  61. }
  62. }
  63. }