DynamicImageTests.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. TargetDpi = DocumentSettings.DefaultRasterDpi,
  20. CompressionQuality = ImageCompressionQuality.High,
  21. Source = payload => GenerateImage(payload.ImageSize)
  22. })
  23. .MeasureElement(new Size(300, 200))
  24. .CheckMeasureResult(SpacePlan.FullRender(300, 200));
  25. }
  26. [Test]
  27. public void Draw_HandlesNull()
  28. {
  29. TestPlan
  30. .For(x => new DynamicImage
  31. {
  32. TargetDpi = DocumentSettings.DefaultRasterDpi,
  33. CompressionQuality = ImageCompressionQuality.High,
  34. Source = size => null
  35. })
  36. .DrawElement(new Size(300, 200))
  37. .CheckDrawResult();
  38. }
  39. [Test]
  40. public void Draw_PreservesSize()
  41. {
  42. TestPlan
  43. .For(x => new DynamicImage
  44. {
  45. TargetDpi = DocumentSettings.DefaultRasterDpi,
  46. CompressionQuality = ImageCompressionQuality.High,
  47. Source = payload => GenerateImage(payload.ImageSize)
  48. })
  49. .DrawElement(new Size(300, 200))
  50. .ExpectCanvasDrawImage(Position.Zero, new Size(300, 200))
  51. .CheckDrawResult();
  52. }
  53. [Test]
  54. public void Draw_PassesCorrectSizeToSource()
  55. {
  56. ImageSize passedSize = default;
  57. TestPlan
  58. .For(x => new DynamicImage
  59. {
  60. TargetDpi = DocumentSettings.DefaultRasterDpi * 3,
  61. CompressionQuality = ImageCompressionQuality.High,
  62. Source = payload =>
  63. {
  64. passedSize = payload.ImageSize;
  65. return GenerateImage(payload.ImageSize);
  66. }
  67. })
  68. .DrawElement(new Size(400, 300))
  69. .ExpectCanvasDrawImage(Position.Zero, new Size(400, 300))
  70. .CheckDrawResult();
  71. passedSize.Width.Should().Be(1200);
  72. passedSize.Height.Should().Be(900);
  73. }
  74. byte[] GenerateImage(ImageSize size)
  75. {
  76. var image = GenerateImage(size.Width, size.Height);
  77. return image.Encode(SKEncodedImageFormat.Png, 100).ToArray();
  78. }
  79. static SKImage GenerateImage(int width, int height)
  80. {
  81. var imageInfo = new SKImageInfo(width, height);
  82. using var surface = SKSurface.Create(imageInfo);
  83. return surface.Snapshot();
  84. }
  85. }
  86. }