StackTests.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. using NUnit.Framework;
  2. using QuestPDF.Drawing;
  3. using QuestPDF.Elements;
  4. using QuestPDF.Fluent;
  5. using QuestPDF.Infrastructure;
  6. using QuestPDF.UnitTests.TestEngine;
  7. namespace QuestPDF.UnitTests
  8. {
  9. [TestFixture]
  10. public class StackTests
  11. {
  12. #region Measure
  13. [Test]
  14. public void Measure_ReturnsWrap_WhenFirstChildWraps()
  15. {
  16. TestPlan
  17. .For(x => new BinaryStack
  18. {
  19. First = x.CreateChild("first"),
  20. Second = x.CreateChild("second")
  21. })
  22. .MeasureElement(new Size(400, 300))
  23. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
  24. .CheckMeasureResult(SpacePlan.Wrap());
  25. }
  26. [Test]
  27. public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
  28. {
  29. TestPlan
  30. .For(x => new BinaryStack
  31. {
  32. First = x.CreateChild("first"),
  33. Second = x.CreateChild("second")
  34. })
  35. .MeasureElement(new Size(400, 300))
  36. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(300, 200))
  37. .CheckMeasureResult(SpacePlan.PartialRender(300, 200));
  38. }
  39. [Test]
  40. public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
  41. {
  42. TestPlan
  43. .For(x => new BinaryStack
  44. {
  45. First = x.CreateChild("first"),
  46. Second = x.CreateChild("second")
  47. })
  48. .MeasureElement(new Size(400, 300))
  49. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  50. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
  51. .CheckMeasureResult(SpacePlan.PartialRender(200, 100));
  52. }
  53. [Test]
  54. public void Measure_ReturnsPartialRender_WhenSecondChildReturnsPartialRender()
  55. {
  56. TestPlan
  57. .For(x => new BinaryStack
  58. {
  59. First = x.CreateChild("first"),
  60. Second = x.CreateChild("second")
  61. })
  62. .MeasureElement(new Size(400, 300))
  63. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  64. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(300, 150))
  65. .CheckMeasureResult(SpacePlan.PartialRender(300, 250));
  66. }
  67. [Test]
  68. public void Measure_ReturnsFullRender_WhenSecondChildReturnsFullRender()
  69. {
  70. TestPlan
  71. .For(x => new BinaryStack
  72. {
  73. First = x.CreateChild("first"),
  74. Second = x.CreateChild("second")
  75. })
  76. .MeasureElement(new Size(400, 300))
  77. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  78. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(100, 50))
  79. .CheckMeasureResult(SpacePlan.FullRender(200, 150));
  80. }
  81. [Test]
  82. public void Measure_UsesEmpty_WhenFirstChildIsRendered()
  83. {
  84. TestPlan
  85. .For(x => new BinaryStack
  86. {
  87. First = x.CreateChild("first"),
  88. Second = x.CreateChild("second"),
  89. IsFirstRendered = true
  90. })
  91. .MeasureElement(new Size(400, 300))
  92. .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.FullRender(200, 300))
  93. .CheckMeasureResult(SpacePlan.FullRender(200, 300));
  94. }
  95. #endregion
  96. #region Draw
  97. [Test]
  98. public void Draw_WhenFirstChildWraps()
  99. {
  100. TestPlan
  101. .For(x => new BinaryStack
  102. {
  103. First = x.CreateChild("first"),
  104. Second = x.CreateChild("second")
  105. })
  106. .DrawElement(new Size(400, 300))
  107. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
  108. .CheckDrawResult();
  109. }
  110. [Test]
  111. public void Draw_WhenFirstChildPartiallyRenders()
  112. {
  113. TestPlan
  114. .For(x => new BinaryStack
  115. {
  116. First = x.CreateChild("first"),
  117. Second = x.CreateChild("second")
  118. })
  119. .DrawElement(new Size(400, 300))
  120. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(200, 100))
  121. .ExpectChildDraw("first", new Size(400, 100))
  122. .CheckDrawResult();
  123. }
  124. [Test]
  125. public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
  126. {
  127. TestPlan
  128. .For(x => new BinaryStack
  129. {
  130. First = x.CreateChild("first"),
  131. Second = x.CreateChild("second")
  132. })
  133. .DrawElement(new Size(400, 300))
  134. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  135. .ExpectChildDraw("first", new Size(400, 100))
  136. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
  137. .CheckDrawResult();
  138. }
  139. [Test]
  140. public void Draw_WhenFirstChildFullyRenders_AndSecondChildPartiallyRenders()
  141. {
  142. TestPlan
  143. .For(x => new BinaryStack
  144. {
  145. First = x.CreateChild("first"),
  146. Second = x.CreateChild("second")
  147. })
  148. .DrawElement(new Size(400, 300))
  149. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  150. .ExpectChildDraw("first", new Size(400, 100))
  151. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(250, 150))
  152. .ExpectCanvasTranslate(0, 100)
  153. .ExpectChildDraw("second", new Size(400, 150))
  154. .ExpectCanvasTranslate(0, -100)
  155. .CheckDrawResult();
  156. }
  157. [Test]
  158. public void Draw_WhenFirstChildFullyRenders_AndSecondChildFullyRenders()
  159. {
  160. TestPlan
  161. .For(x => new BinaryStack
  162. {
  163. First = x.CreateChild("first"),
  164. Second = x.CreateChild("second")
  165. })
  166. .DrawElement(new Size(400, 300))
  167. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  168. .ExpectChildDraw("first", new Size(400, 100))
  169. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(250, 150))
  170. .ExpectCanvasTranslate(0, 100)
  171. .ExpectChildDraw("second", new Size(400, 150))
  172. .ExpectCanvasTranslate(0, -100)
  173. .CheckDrawResult();
  174. }
  175. [Test]
  176. public void Draw_UsesEmpty_WhenFirstChildIsRendered()
  177. {
  178. TestPlan
  179. .For(x => new BinaryStack
  180. {
  181. First = x.CreateChild("first"),
  182. Second = x.CreateChild("second"),
  183. IsFirstRendered = true
  184. })
  185. .DrawElement(new Size(400, 300))
  186. .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.PartialRender(200, 300))
  187. .ExpectCanvasTranslate(0, 0)
  188. .ExpectChildDraw("second", new Size(400, 300))
  189. .ExpectCanvasTranslate(0, 0)
  190. .CheckState<BinaryStack>(x => x.IsFirstRendered)
  191. .CheckDrawResult();
  192. }
  193. [Test]
  194. public void Draw_TogglesFirstRenderedFlag_WhenSecondFullyRenders()
  195. {
  196. TestPlan
  197. .For(x => new BinaryStack
  198. {
  199. First = x.CreateChild("first"),
  200. Second = x.CreateChild("second"),
  201. IsFirstRendered = true
  202. })
  203. .DrawElement(new Size(400, 300))
  204. .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.FullRender(200, 300))
  205. .ExpectCanvasTranslate(0, 0)
  206. .ExpectChildDraw("second", new Size(400, 300))
  207. .ExpectCanvasTranslate(0, 0)
  208. .CheckDrawResult()
  209. .CheckState<BinaryStack>(x => !x.IsFirstRendered);
  210. }
  211. #endregion
  212. #region Structure
  213. [Test]
  214. public void Structure_Simple()
  215. {
  216. // arrange
  217. var childA = TestPlan.CreateUniqueElement();
  218. var childB = TestPlan.CreateUniqueElement();
  219. var childC = TestPlan.CreateUniqueElement();
  220. var childD = TestPlan.CreateUniqueElement();
  221. var childE = TestPlan.CreateUniqueElement();
  222. const int spacing = 20;
  223. // act
  224. var structure = new Container();
  225. structure.Stack(stack =>
  226. {
  227. stack.Spacing(spacing);
  228. stack.Item().Element(childA);
  229. stack.Item().Element(childB);
  230. stack.Item().Element(childC);
  231. stack.Item().Element(childD);
  232. stack.Item().Element(childE);
  233. });
  234. // assert
  235. var expected = new Padding
  236. {
  237. Bottom = -spacing,
  238. Child = new BinaryStack
  239. {
  240. First = new BinaryStack
  241. {
  242. First = new Padding
  243. {
  244. Bottom = spacing,
  245. Child = childA
  246. },
  247. Second = new Padding
  248. {
  249. Bottom = spacing,
  250. Child = childB
  251. }
  252. },
  253. Second = new BinaryStack
  254. {
  255. First = new Padding
  256. {
  257. Bottom = spacing,
  258. Child = childC
  259. },
  260. Second = new BinaryStack
  261. {
  262. First = new Padding
  263. {
  264. Bottom = spacing,
  265. Child = childD
  266. },
  267. Second = new Padding
  268. {
  269. Bottom = spacing,
  270. Child = childE
  271. }
  272. }
  273. }
  274. }
  275. };
  276. TestPlan.CompareOperations(structure, expected);
  277. }
  278. #endregion
  279. }
  280. }