ColumnTests.cs 7.3 KB

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