StackTests.cs 11 KB

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