StackTests.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using NUnit.Framework;
  2. using QuestPDF.Drawing.SpacePlan;
  3. using QuestPDF.Elements;
  4. using QuestPDF.Infrastructure;
  5. using QuestPDF.UnitTests.TestEngine;
  6. namespace QuestPDF.UnitTests
  7. {
  8. [TestFixture]
  9. public class StackTests
  10. {
  11. #region Measure
  12. [Test]
  13. public void Measure_ReturnsWrap_WhenFirstChildWraps()
  14. {
  15. TestPlan
  16. .For(x => new SimpleStack
  17. {
  18. First = x.CreateChild("first"),
  19. Second = x.CreateChild("second")
  20. })
  21. .MeasureElement(new Size(400, 300))
  22. .ExpectChildMeasure("first", new Size(400, 300), new Wrap())
  23. .CheckMeasureResult(new Wrap());
  24. }
  25. [Test]
  26. public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
  27. {
  28. TestPlan
  29. .For(x => new SimpleStack
  30. {
  31. First = x.CreateChild("first"),
  32. Second = x.CreateChild("second")
  33. })
  34. .MeasureElement(new Size(400, 300))
  35. .ExpectChildMeasure("first", new Size(400, 300), new PartialRender(300, 200))
  36. .CheckMeasureResult(new PartialRender(300, 200));
  37. }
  38. [Test]
  39. public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
  40. {
  41. TestPlan
  42. .For(x => new SimpleStack
  43. {
  44. First = x.CreateChild("first"),
  45. Second = x.CreateChild("second")
  46. })
  47. .MeasureElement(new Size(400, 300))
  48. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  49. .ExpectChildMeasure("second", new Size(400, 200), new Wrap())
  50. .CheckMeasureResult(new PartialRender(200, 100));
  51. }
  52. [Test]
  53. public void Measure_ReturnsPartialRender_WhenSecondChildReturnsPartialRender()
  54. {
  55. TestPlan
  56. .For(x => new SimpleStack
  57. {
  58. First = x.CreateChild("first"),
  59. Second = x.CreateChild("second")
  60. })
  61. .MeasureElement(new Size(400, 300))
  62. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  63. .ExpectChildMeasure("second", new Size(400, 200), new PartialRender(300, 150))
  64. .CheckMeasureResult(new PartialRender(300, 250));
  65. }
  66. [Test]
  67. public void Measure_ReturnsFullRender_WhenSecondChildReturnsFullRender()
  68. {
  69. TestPlan
  70. .For(x => new SimpleStack
  71. {
  72. First = x.CreateChild("first"),
  73. Second = x.CreateChild("second")
  74. })
  75. .MeasureElement(new Size(400, 300))
  76. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  77. .ExpectChildMeasure("second", new Size(400, 200), new FullRender(100, 50))
  78. .CheckMeasureResult(new FullRender(200, 150));
  79. }
  80. [Test]
  81. public void Measure_UsesEmpty_WhenFirstChildIsRendered()
  82. {
  83. TestPlan
  84. .For(x => new SimpleStack
  85. {
  86. First = x.CreateChild("first"),
  87. Second = x.CreateChild("second"),
  88. IsFirstRendered = true
  89. })
  90. .MeasureElement(new Size(400, 300))
  91. .ExpectChildMeasure("second", new Size(400, 300), new FullRender(200, 300))
  92. .CheckMeasureResult(new FullRender(200, 300));
  93. }
  94. #endregion
  95. #region Draw
  96. [Test]
  97. public void Draw_WhenFirstChildWraps()
  98. {
  99. TestPlan
  100. .For(x => new SimpleStack
  101. {
  102. First = x.CreateChild("first"),
  103. Second = x.CreateChild("second")
  104. })
  105. .DrawElement(new Size(400, 300))
  106. .ExpectChildMeasure("first", new Size(400, 300), new Wrap())
  107. .CheckDrawResult();
  108. }
  109. [Test]
  110. public void Draw_WhenFirstChildPartiallyRenders()
  111. {
  112. TestPlan
  113. .For(x => new SimpleStack
  114. {
  115. First = x.CreateChild("first"),
  116. Second = x.CreateChild("second")
  117. })
  118. .DrawElement(new Size(400, 300))
  119. .ExpectChildMeasure("first", new Size(400, 300), new PartialRender(200, 100))
  120. .ExpectChildDraw("first", new Size(400, 100))
  121. .CheckDrawResult();
  122. }
  123. [Test]
  124. public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
  125. {
  126. TestPlan
  127. .For(x => new SimpleStack
  128. {
  129. First = x.CreateChild("first"),
  130. Second = x.CreateChild("second")
  131. })
  132. .DrawElement(new Size(400, 300))
  133. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  134. .ExpectChildDraw("first", new Size(400, 100))
  135. .ExpectChildMeasure("second", new Size(400, 200), new Wrap())
  136. .CheckDrawResult();
  137. }
  138. [Test]
  139. public void Draw_WhenFirstChildFullyRenders_AndSecondChildPartiallyRenders()
  140. {
  141. TestPlan
  142. .For(x => new SimpleStack
  143. {
  144. First = x.CreateChild("first"),
  145. Second = x.CreateChild("second")
  146. })
  147. .DrawElement(new Size(400, 300))
  148. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  149. .ExpectChildDraw("first", new Size(400, 100))
  150. .ExpectChildMeasure("second", new Size(400, 200), new PartialRender(250, 150))
  151. .ExpectCanvasTranslate(0, 100)
  152. .ExpectChildDraw("second", new Size(400, 150))
  153. .ExpectCanvasTranslate(0, -100)
  154. .CheckDrawResult();
  155. }
  156. [Test]
  157. public void Draw_WhenFirstChildFullyRenders_AndSecondChildFullyRenders()
  158. {
  159. TestPlan
  160. .For(x => new SimpleStack
  161. {
  162. First = x.CreateChild("first"),
  163. Second = x.CreateChild("second")
  164. })
  165. .DrawElement(new Size(400, 300))
  166. .ExpectChildMeasure("first", new Size(400, 300), new FullRender(200, 100))
  167. .ExpectChildDraw("first", new Size(400, 100))
  168. .ExpectChildMeasure("second", new Size(400, 200), new FullRender(250, 150))
  169. .ExpectCanvasTranslate(0, 100)
  170. .ExpectChildDraw("second", new Size(400, 150))
  171. .ExpectCanvasTranslate(0, -100)
  172. .CheckDrawResult();
  173. }
  174. [Test]
  175. public void Draw_UsesEmpty_WhenFirstChildIsRendered()
  176. {
  177. TestPlan
  178. .For(x => new SimpleStack
  179. {
  180. First = x.CreateChild("first"),
  181. Second = x.CreateChild("second"),
  182. IsFirstRendered = true
  183. })
  184. .DrawElement(new Size(400, 300))
  185. .ExpectChildMeasure("second", new Size(400, 300), new PartialRender(200, 300))
  186. .ExpectCanvasTranslate(0, 0)
  187. .ExpectChildDraw("second", new Size(400, 300))
  188. .ExpectCanvasTranslate(0, 0)
  189. .CheckState<SimpleStack>(x => x.IsFirstRendered)
  190. .CheckDrawResult();
  191. }
  192. [Test]
  193. public void Draw_TogglesFirstRenderedFlag_WhenSecondFullyRenders()
  194. {
  195. TestPlan
  196. .For(x => new SimpleStack
  197. {
  198. First = x.CreateChild("first"),
  199. Second = x.CreateChild("second"),
  200. IsFirstRendered = true
  201. })
  202. .DrawElement(new Size(400, 300))
  203. .ExpectChildMeasure("second", new Size(400, 300), new FullRender(200, 300))
  204. .ExpectCanvasTranslate(0, 0)
  205. .ExpectChildDraw("second", new Size(400, 300))
  206. .ExpectCanvasTranslate(0, 0)
  207. .CheckDrawResult()
  208. .CheckState<SimpleStack>(x => !x.IsFirstRendered);
  209. }
  210. #endregion
  211. // TODO: add tests for the spacing property
  212. // TODO: add tests for the tree builder method
  213. }
  214. }