DynamicImageTests.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using FluentAssertions;
  2. using NUnit.Framework;
  3. using QuestPDF.Drawing;
  4. using QuestPDF.Elements;
  5. using QuestPDF.Infrastructure;
  6. using QuestPDF.UnitTests.TestEngine;
  7. using SkiaSharp;
  8. namespace QuestPDF.UnitTests
  9. {
  10. [TestFixture]
  11. public class DynamicImageTests
  12. {
  13. [Test]
  14. public void Measure_TakesAvailableSpaceRegardlessOfSize()
  15. {
  16. TestPlan
  17. .For(x => new DynamicImage
  18. {
  19. Source = GenerateImage
  20. })
  21. .MeasureElement(new Size(300, 200))
  22. .CheckMeasureResult(SpacePlan.FullRender(300, 200));
  23. }
  24. [Test]
  25. public void Draw_HandlesNull()
  26. {
  27. TestPlan
  28. .For(x => new DynamicImage
  29. {
  30. Source = size => null
  31. })
  32. .DrawElement(new Size(300, 200))
  33. .CheckDrawResult();
  34. }
  35. [Test]
  36. public void Draw_PreservesSize()
  37. {
  38. TestPlan
  39. .For(x => new DynamicImage
  40. {
  41. Source = GenerateImage
  42. })
  43. .DrawElement(new Size(300, 200))
  44. .ExpectCanvasDrawImage(Position.Zero, new Size(300, 200))
  45. .CheckDrawResult();
  46. }
  47. [Test]
  48. public void Draw_PassesCorrectSizeToSource()
  49. {
  50. Size passedSize = default;
  51. TestPlan
  52. .For(x => new DynamicImage
  53. {
  54. Source = size =>
  55. {
  56. passedSize = size;
  57. return GenerateImage(size);
  58. }
  59. })
  60. .DrawElement(new Size(400, 300))
  61. .ExpectCanvasDrawImage(Position.Zero, new Size(400, 300))
  62. .CheckDrawResult();
  63. passedSize.Should().BeEquivalentTo(new Size(400, 300));
  64. }
  65. byte[] GenerateImage(Size size)
  66. {
  67. var image = GenerateImage((int) size.Width, (int) size.Height);
  68. return image.Encode(SKEncodedImageFormat.Png, 100).ToArray();
  69. }
  70. SKImage GenerateImage(int width, int height)
  71. {
  72. var imageInfo = new SKImageInfo(width, height);
  73. using var surface = SKSurface.Create(imageInfo);
  74. return surface.Snapshot();
  75. }
  76. }
  77. }