ColumnTests.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using System.Linq;
  2. using NUnit.Framework;
  3. using QuestPDF.Drawing;
  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 ColumnTests
  12. {
  13. private Column CreateColumnWithTwoItems(TestPlan testPlan)
  14. {
  15. return new Column
  16. {
  17. Items =
  18. {
  19. new ColumnItem
  20. {
  21. Child = testPlan.CreateChild("first")
  22. },
  23. new ColumnItem
  24. {
  25. Child = testPlan.CreateChild("second")
  26. }
  27. }
  28. };
  29. }
  30. private Column CreateColumnWithTwoItemsWhereFirstIsFullyRendered(TestPlan testPlan)
  31. {
  32. var column = CreateColumnWithTwoItems(testPlan);
  33. column.Items.First().IsRendered = true;
  34. return column;
  35. }
  36. #region Measure
  37. [Test]
  38. public void Measure_ReturnsWrap_WhenFirstChildWraps()
  39. {
  40. TestPlan
  41. .For(CreateColumnWithTwoItems)
  42. .MeasureElement(new Size(400, 300))
  43. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
  44. .CheckMeasureResult(SpacePlan.Wrap());
  45. }
  46. [Test]
  47. public void Measure_ReturnsPartialRender_WhenFirstChildReturnsPartialRender()
  48. {
  49. TestPlan
  50. .For(CreateColumnWithTwoItems)
  51. .MeasureElement(new Size(400, 300))
  52. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(300, 200))
  53. .CheckMeasureResult(SpacePlan.PartialRender(300, 200));
  54. }
  55. [Test]
  56. public void Measure_ReturnsPartialRender_WhenSecondChildWraps()
  57. {
  58. TestPlan
  59. .For(CreateColumnWithTwoItems)
  60. .MeasureElement(new Size(400, 300))
  61. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  62. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
  63. .CheckMeasureResult(SpacePlan.PartialRender(200, 100));
  64. }
  65. [Test]
  66. public void Measure_ReturnsPartialRender_WhenSecondChildReturnsPartialRender()
  67. {
  68. TestPlan
  69. .For(CreateColumnWithTwoItems)
  70. .MeasureElement(new Size(400, 300))
  71. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  72. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(300, 150))
  73. .CheckMeasureResult(SpacePlan.PartialRender(300, 250));
  74. }
  75. [Test]
  76. public void Measure_ReturnsFullRender_WhenSecondChildReturnsFullRender()
  77. {
  78. TestPlan
  79. .For(CreateColumnWithTwoItems)
  80. .MeasureElement(new Size(400, 300))
  81. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  82. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(100, 50))
  83. .CheckMeasureResult(SpacePlan.FullRender(200, 150));
  84. }
  85. #endregion
  86. #region Draw
  87. [Test]
  88. public void Draw_WhenFirstChildWraps()
  89. {
  90. TestPlan
  91. .For(CreateColumnWithTwoItems)
  92. .DrawElement(new Size(400, 300))
  93. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.Wrap())
  94. .CheckDrawResult();
  95. }
  96. [Test]
  97. public void Draw_WhenFirstChildPartiallyRenders()
  98. {
  99. TestPlan
  100. .For(CreateColumnWithTwoItems)
  101. .DrawElement(new Size(400, 300))
  102. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.PartialRender(200, 100))
  103. .ExpectCanvasTranslate(0, 0)
  104. .ExpectChildDraw("first", new Size(400, 100))
  105. .ExpectCanvasTranslate(0, 0)
  106. .CheckDrawResult();
  107. }
  108. [Test]
  109. public void Draw_WhenFirstChildFullyRenders_AndSecondChildWraps()
  110. {
  111. TestPlan
  112. .For(CreateColumnWithTwoItems)
  113. .DrawElement(new Size(400, 300))
  114. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  115. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.Wrap())
  116. .ExpectCanvasTranslate(0, 0)
  117. .ExpectChildDraw("first", new Size(400, 100))
  118. .ExpectCanvasTranslate(0, 0)
  119. .CheckDrawResult();
  120. }
  121. [Test]
  122. public void Draw_WhenFirstChildFullyRenders_AndSecondChildPartiallyRenders()
  123. {
  124. TestPlan
  125. .For(CreateColumnWithTwoItems)
  126. .DrawElement(new Size(400, 300))
  127. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  128. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.PartialRender(250, 150))
  129. .ExpectCanvasTranslate(0, 0)
  130. .ExpectChildDraw("first", new Size(400, 100))
  131. .ExpectCanvasTranslate(0, 0)
  132. .ExpectCanvasTranslate(0, 100)
  133. .ExpectChildDraw("second", new Size(400, 150))
  134. .ExpectCanvasTranslate(0, -100)
  135. .CheckDrawResult();
  136. }
  137. [Test]
  138. public void Draw_WhenFirstChildFullyRenders_AndSecondChildFullyRenders()
  139. {
  140. TestPlan
  141. .For(CreateColumnWithTwoItems)
  142. .DrawElement(new Size(400, 300))
  143. .ExpectChildMeasure("first", new Size(400, 300), SpacePlan.FullRender(200, 100))
  144. .ExpectChildMeasure("second", new Size(400, 200), SpacePlan.FullRender(250, 150))
  145. .ExpectCanvasTranslate(0, 0)
  146. .ExpectChildDraw("first", new Size(400, 100))
  147. .ExpectCanvasTranslate(0, 0)
  148. .ExpectCanvasTranslate(0, 100)
  149. .ExpectChildDraw("second", new Size(400, 150))
  150. .ExpectCanvasTranslate(0, -100)
  151. .CheckDrawResult();
  152. }
  153. [Test]
  154. public void Draw_UsesEmpty_WhenFirstChildIsRendered()
  155. {
  156. TestPlan
  157. .For(CreateColumnWithTwoItemsWhereFirstIsFullyRendered)
  158. .DrawElement(new Size(400, 300))
  159. .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.PartialRender(200, 300))
  160. .ExpectCanvasTranslate(0, 0)
  161. .ExpectChildDraw("second", new Size(400, 300))
  162. .ExpectCanvasTranslate(0, 0)
  163. .CheckState<Column>(x => x.Items.First().IsRendered)
  164. .CheckDrawResult();
  165. }
  166. [Test]
  167. public void Draw_TogglesFirstRenderedFlag_WhenSecondFullyRenders()
  168. {
  169. TestPlan
  170. .For(CreateColumnWithTwoItemsWhereFirstIsFullyRendered)
  171. .DrawElement(new Size(400, 300))
  172. .ExpectChildMeasure("second", new Size(400, 300), SpacePlan.FullRender(200, 300))
  173. .ExpectCanvasTranslate(0, 0)
  174. .ExpectChildDraw("second", new Size(400, 300))
  175. .ExpectCanvasTranslate(0, 0)
  176. .CheckDrawResult()
  177. .CheckState<Column>(x => !x.Items.First().IsRendered);
  178. }
  179. #endregion
  180. }
  181. }