AspectRatioTests.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using NUnit.Framework;
  2. using QuestPDF.Drawing;
  3. using QuestPDF.Elements;
  4. using QuestPDF.Infrastructure;
  5. using QuestPDF.UnitTests.TestEngine;
  6. namespace QuestPDF.UnitTests
  7. {
  8. [TestFixture]
  9. public class AspectRatioTests
  10. {
  11. [Test]
  12. public void Measure_FitWidth_EnoughSpace_FullRender()
  13. {
  14. TestPlan
  15. .For(x => new AspectRatio
  16. {
  17. Child = x.CreateChild(),
  18. Option = AspectRatioOption.FitArea,
  19. Ratio = 2f
  20. })
  21. .MeasureElement(new Size(400, 201))
  22. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  23. .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(100, 50))
  24. .CheckMeasureResult(SpacePlan.FullRender(400, 200));
  25. }
  26. [Test]
  27. public void Measure_FitWidth_EnoughSpace_PartialRender()
  28. {
  29. TestPlan
  30. .For(x => new AspectRatio
  31. {
  32. Child = x.CreateChild(),
  33. Option = AspectRatioOption.FitArea,
  34. Ratio = 2f
  35. })
  36. .MeasureElement(new Size(400, 201))
  37. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  38. .ExpectChildMeasure(new Size(400, 200), SpacePlan.PartialRender(100, 50))
  39. .CheckMeasureResult(SpacePlan.PartialRender(400, 200));
  40. }
  41. [Test]
  42. public void Measure_FitWidth_EnoughSpace_Wrap()
  43. {
  44. TestPlan
  45. .For(x => new AspectRatio
  46. {
  47. Child = x.CreateChild(),
  48. Option = AspectRatioOption.FitArea,
  49. Ratio = 2f
  50. })
  51. .MeasureElement(new Size(400, 201))
  52. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  53. .ExpectChildMeasure(new Size(400, 200), SpacePlan.Wrap("Mock"))
  54. .CheckMeasureResult(SpacePlan.Wrap("Forwarded from child"));
  55. }
  56. [Test]
  57. public void Measure_FitWidth_EnoughSpace()
  58. {
  59. TestPlan
  60. .For(x => new AspectRatio
  61. {
  62. Child = x.CreateChild(),
  63. Option = AspectRatioOption.FitWidth,
  64. Ratio = 2f
  65. })
  66. .MeasureElement(new Size(400, 201))
  67. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  68. .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(100, 50))
  69. .CheckMeasureResult(SpacePlan.FullRender(400, 200));
  70. }
  71. [Test]
  72. public void Measure_FitWidth_NotEnoughSpace()
  73. {
  74. TestPlan
  75. .For(x => new AspectRatio
  76. {
  77. Child = x.CreateChild(),
  78. Option = AspectRatioOption.FitWidth,
  79. Ratio = 2f
  80. })
  81. .MeasureElement(new Size(400, 199))
  82. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  83. .CheckMeasureResult(SpacePlan.Wrap("To preserve the target aspect ratio, the content requires more vertical space than available."));
  84. }
  85. [Test]
  86. public void Measure_FitHeight_EnoughSpace()
  87. {
  88. TestPlan
  89. .For(x => new AspectRatio
  90. {
  91. Child = x.CreateChild(),
  92. Option = AspectRatioOption.FitHeight,
  93. Ratio = 2f
  94. })
  95. .MeasureElement(new Size(401, 200))
  96. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  97. .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(100, 50))
  98. .CheckMeasureResult(SpacePlan.FullRender(400, 200));
  99. }
  100. [Test]
  101. public void Measure_FitHeight_NotEnoughSpace()
  102. {
  103. TestPlan
  104. .For(x => new AspectRatio
  105. {
  106. Child = x.CreateChild(),
  107. Option = AspectRatioOption.FitHeight,
  108. Ratio = 2f
  109. })
  110. .MeasureElement(new Size(399, 200))
  111. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  112. .CheckMeasureResult(SpacePlan.Wrap("To preserve the target aspect ratio, the content requires more horizontal space than available."));
  113. }
  114. [Test]
  115. public void Measure_FitArea_ToWidth()
  116. {
  117. TestPlan
  118. .For(x => new AspectRatio
  119. {
  120. Child = x.CreateChild(),
  121. Option = AspectRatioOption.FitArea,
  122. Ratio = 2f
  123. })
  124. .MeasureElement(new Size(400, 300))
  125. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  126. .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(100, 50))
  127. .CheckMeasureResult(SpacePlan.FullRender(400, 200));
  128. }
  129. [Test]
  130. public void Measure_FitArea_ToHeight()
  131. {
  132. TestPlan
  133. .For(x => new AspectRatio
  134. {
  135. Child = x.CreateChild(),
  136. Option = AspectRatioOption.FitArea,
  137. Ratio = 2f
  138. })
  139. .MeasureElement(new Size(500, 200))
  140. .ExpectChildMeasure(Size.Zero, SpacePlan.PartialRender(Size.Zero))
  141. .ExpectChildMeasure(new Size(400, 200), SpacePlan.FullRender(100, 50))
  142. .CheckMeasureResult(SpacePlan.FullRender(400, 200));
  143. }
  144. [Test]
  145. public void DrawChild_PerWidth()
  146. {
  147. TestPlan
  148. .For(x => new AspectRatio
  149. {
  150. Child = x.CreateChild(),
  151. Option = AspectRatioOption.FitArea,
  152. Ratio = 2f
  153. })
  154. .DrawElement(new Size(500, 200))
  155. .ExpectCanvasTranslate(0, 0)
  156. .ExpectChildDraw(new Size(400, 200))
  157. .ExpectCanvasTranslate(0, 0)
  158. .CheckDrawResult();
  159. }
  160. [Test]
  161. public void DrawChild_PerHeight()
  162. {
  163. TestPlan
  164. .For(x => new AspectRatio
  165. {
  166. Child = x.CreateChild(),
  167. Option = AspectRatioOption.FitArea,
  168. Ratio = 2f
  169. })
  170. .DrawElement(new Size(400, 300))
  171. .ExpectCanvasTranslate(0, 0)
  172. .ExpectChildDraw(new Size(400, 200))
  173. .ExpectCanvasTranslate(0, 0)
  174. .CheckDrawResult();
  175. }
  176. [Test]
  177. public void DrawChild_PerWidth_RightToLeft()
  178. {
  179. TestPlan
  180. .For(x => new AspectRatio
  181. {
  182. Child = x.CreateChild(),
  183. Option = AspectRatioOption.FitArea,
  184. Ratio = 2f,
  185. ContentDirection = ContentDirection.RightToLeft
  186. })
  187. .DrawElement(new Size(500, 200))
  188. .ExpectCanvasTranslate(100, 0)
  189. .ExpectChildDraw(new Size(400, 200))
  190. .ExpectCanvasTranslate(-100, 0)
  191. .CheckDrawResult();
  192. }
  193. [Test]
  194. public void DrawChild_PerHeight_RightToLeft()
  195. {
  196. TestPlan
  197. .For(x => new AspectRatio
  198. {
  199. Child = x.CreateChild(),
  200. Option = AspectRatioOption.FitArea,
  201. Ratio = 2f,
  202. ContentDirection = ContentDirection.RightToLeft
  203. })
  204. .DrawElement(new Size(400, 300))
  205. .ExpectCanvasTranslate(0, 0)
  206. .ExpectChildDraw(new Size(400, 200))
  207. .ExpectCanvasTranslate(0, 0)
  208. .CheckDrawResult();
  209. }
  210. }
  211. }