ChunkyImageTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using ChunkyImageLib;
  2. using ChunkyImageLib.DataHolders;
  3. using Drawie.Backend.Core.Bridge;
  4. using Drawie.Backend.Core.ColorsImpl;
  5. using Drawie.Backend.Core.Surfaces;
  6. using Drawie.Backend.Core.Surfaces.ImageData;
  7. using Drawie.Numerics;
  8. using Drawie.Skia;
  9. using PixiEditor.Tests;
  10. using Xunit;
  11. namespace ChunkyImageLibTest;
  12. public class ChunkyImageTests : PixiEditorTest
  13. {
  14. [Fact]
  15. public void Dispose_ComplexImage_ReturnsAllChunks()
  16. {
  17. ChunkyImage image = new ChunkyImage(new VecI(ChunkyImage.FullChunkSize, ChunkyImage.FullChunkSize),
  18. ColorSpace.CreateSrgb());
  19. image.EnqueueDrawRectangle(new(new(5, 5), new(80, 80), 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  20. using (Chunk target = Chunk.Create(ColorSpace.CreateSrgb()))
  21. {
  22. image.DrawMostUpToDateChunkOn(new(0, 0), ChunkResolution.Full, target.Surface.DrawingSurface, VecI.Zero);
  23. image.CancelChanges();
  24. image.EnqueueResize(new(ChunkyImage.FullChunkSize * 4, ChunkyImage.FullChunkSize * 4));
  25. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow,
  26. BlendMode.Multiply));
  27. image.CommitChanges();
  28. image.SetBlendMode(BlendMode.Overlay);
  29. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow,
  30. BlendMode.Multiply));
  31. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  32. image.CommitChanges();
  33. image.SetBlendMode(BlendMode.Screen);
  34. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  35. image.CancelChanges();
  36. image.SetBlendMode(BlendMode.SrcOver);
  37. image.EnqueueDrawRectangle(new(VecD.Zero, image.CommittedSize, 0, 0, 2, Colors.AliceBlue, Colors.Snow));
  38. }
  39. image.Dispose();
  40. Assert.Equal(0, Chunk.ChunkCounter);
  41. }
  42. [Fact]
  43. public void GetCommittedPixel_RedImage_ReturnsRedPixel()
  44. {
  45. const int chunkSize = ChunkyImage.FullChunkSize;
  46. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  47. image.EnqueueDrawRectangle
  48. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  49. image.CommitChanges();
  50. Assert.Equal(Colors.Red, image.GetCommittedPixel(new VecI(chunkSize + chunkSize / 2)));
  51. image.Dispose();
  52. Assert.Equal(0, Chunk.ChunkCounter);
  53. }
  54. [Fact]
  55. public void GetMostUpToDatePixel_BlendModeSrc_ReturnsCorrectPixel()
  56. {
  57. const int chunkSize = ChunkyImage.FullChunkSize;
  58. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  59. image.EnqueueDrawRectangle
  60. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  61. Assert.Equal(Colors.Red, image.GetMostUpToDatePixel(new VecI(chunkSize + chunkSize / 2)));
  62. image.Dispose();
  63. Assert.Equal(0, Chunk.ChunkCounter);
  64. }
  65. [Fact]
  66. public void GetMostUpToDatePixel_BlendModeSrcOver_ReturnsCorrectPixel()
  67. {
  68. const int chunkSize = ChunkyImage.FullChunkSize;
  69. ChunkyImage image = new ChunkyImage(new VecI(chunkSize * 2), ColorSpace.CreateSrgb());
  70. image.EnqueueDrawRectangle
  71. (new ShapeData(new VecD(chunkSize), new VecD(chunkSize * 2), 0, 0, 0, Colors.Transparent, Colors.Red));
  72. image.CommitChanges();
  73. image.SetBlendMode(BlendMode.SrcOver);
  74. image.EnqueueDrawRectangle(new ShapeData(
  75. new VecD(chunkSize),
  76. new VecD(chunkSize * 2),
  77. 0, 0,
  78. 0,
  79. Colors.Transparent,
  80. new Color(0, 255, 0, 128)));
  81. Assert.Equal(new Color(127, 128, 0), image.GetMostUpToDatePixel(new VecI(chunkSize + chunkSize / 2)));
  82. image.Dispose();
  83. Assert.Equal(0, Chunk.ChunkCounter);
  84. }
  85. [Fact]
  86. public void EnqueueDrawRectangle_OutsideOfImage_PartsAreNotDrawn()
  87. {
  88. const int chunkSize = ChunkyImage.FullChunkSize;
  89. using ChunkyImage image = new(new VecI(chunkSize), ColorSpace.CreateSrgb());
  90. image.EnqueueDrawRectangle(new ShapeData(
  91. VecD.Zero,
  92. new VecD(chunkSize * 10),
  93. 0, 0,
  94. 0,
  95. Colors.Transparent,
  96. Colors.Red));
  97. image.CommitChanges();
  98. Assert.Collection(
  99. image.FindAllChunks(),
  100. elem => Assert.Equal(VecI.Zero, elem));
  101. }
  102. }