ColumnTests.cs 7.5 KB

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