LineTests.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. using System;
  2. using NUnit.Framework;
  3. using QuestPDF.Elements;
  4. using QuestPDF.Fluent;
  5. using QuestPDF.Helpers;
  6. using QuestPDF.Infrastructure;
  7. namespace QuestPDF.UnitTests;
  8. public class LineTests
  9. {
  10. #region Line Types
  11. [Test]
  12. public void VerticalLineTypeIsSetCorrectly()
  13. {
  14. var container = EmptyContainer.Create();
  15. container.LineVertical(2);
  16. var line = container.Child as Line;
  17. Assert.That(line?.Type, Is.EqualTo(LineType.Vertical));
  18. Assert.That(line?.Thickness, Is.EqualTo(2));
  19. }
  20. [Test]
  21. public void HorizontalLineTypeIsSetCorrectly()
  22. {
  23. var container = EmptyContainer.Create();
  24. container.LineHorizontal(3);
  25. var line = container.Child as Line;
  26. Assert.That(line?.Type, Is.EqualTo(LineType.Horizontal));
  27. Assert.That(line?.Thickness, Is.EqualTo(3));
  28. }
  29. #endregion
  30. #region Line Thickness
  31. [Test]
  32. public void VerticalLineThicknessSupportsUnitConversion()
  33. {
  34. var container = EmptyContainer.Create();
  35. container.LineVertical(2, Unit.Inch);
  36. var line = container.Child as Line;
  37. Assert.That(line?.Thickness, Is.EqualTo(144));
  38. }
  39. [TestCase(-5f)]
  40. [TestCase(-float.Epsilon)]
  41. public void LineThicknessCannotBeNegative(float thickness)
  42. {
  43. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  44. {
  45. EmptyContainer
  46. .Create()
  47. .LineVertical(thickness);
  48. });
  49. Assert.That(exception.Message, Is.EqualTo("The Line thickness cannot be negative. (Parameter 'thickness')"));
  50. }
  51. [Test]
  52. public void LineThicknessCanBeEqualToZero()
  53. {
  54. // thickness 0 corresponds to a hairline
  55. var container = EmptyContainer.Create();
  56. container.LineHorizontal(0);
  57. var line = container.Child as Line;
  58. Assert.That(line?.Thickness, Is.Zero);
  59. }
  60. [Test]
  61. public void HorizontalLineThicknessSupportsUnitConversion()
  62. {
  63. var container = EmptyContainer.Create();
  64. container.LineHorizontal(3, Unit.Inch);
  65. var line = container.Child as Line;
  66. Assert.That(line?.Thickness, Is.EqualTo(216));
  67. }
  68. #endregion
  69. [Test]
  70. public void LineColorIsSetCorrectly()
  71. {
  72. var container = EmptyContainer.Create();
  73. container.LineHorizontal(1).LineColor(Colors.Red.Medium);
  74. var line = container.Child as Line;
  75. Assert.That(line?.Color, Is.EqualTo(Colors.Red.Medium));
  76. }
  77. #region Line Dash Pattern
  78. [Test]
  79. public void LineDashPatternCannotBeNull()
  80. {
  81. var exception = Assert.Throws<ArgumentNullException>(() =>
  82. {
  83. EmptyContainer
  84. .Create()
  85. .LineVertical(1)
  86. .LineDashPattern(null);
  87. });
  88. Assert.That(exception.Message, Is.EqualTo("The dash pattern cannot be null. (Parameter 'dashPattern')"));
  89. }
  90. [Test]
  91. public void LineDashPatternCannotBeEmpty()
  92. {
  93. var exception = Assert.Throws<ArgumentException>(() =>
  94. {
  95. EmptyContainer
  96. .Create()
  97. .LineVertical(1)
  98. .LineDashPattern([]);
  99. });
  100. Assert.That(exception.Message, Is.EqualTo("The dash pattern cannot be empty. (Parameter 'dashPattern')"));
  101. }
  102. [Test]
  103. public void LineDashPatternMustHaveEvenNumberOfElements()
  104. {
  105. var exception = Assert.Throws<ArgumentException>(() =>
  106. {
  107. EmptyContainer
  108. .Create()
  109. .LineVertical(1)
  110. .LineDashPattern([ 1, 2, 3 ]);
  111. });
  112. Assert.That(exception.Message, Is.EqualTo("The dash pattern must contain an even number of elements. (Parameter 'dashPattern')"));
  113. }
  114. [Test]
  115. public void LineDashPatternIsSetCorrectly()
  116. {
  117. var container = EmptyContainer.Create();
  118. container
  119. .LineVertical(1)
  120. .LineDashPattern([1, 2, 3, 4]);
  121. var line = container.Child as Line;
  122. Assert.That(line?.DashPattern, Is.EquivalentTo([ 1, 2, 3, 4 ]));
  123. }
  124. [Test]
  125. public void LineDashPatternSupportsUnitConversion()
  126. {
  127. var container = EmptyContainer.Create();
  128. container
  129. .LineVertical(1)
  130. .LineDashPattern([1, 2, 3, 4], Unit.Inch);
  131. var line = container.Child as Line;
  132. Assert.That(line?.DashPattern, Is.EquivalentTo([ 72, 144, 216, 288 ]));
  133. }
  134. #endregion
  135. #region Gradient Colors
  136. [Test]
  137. public void LineGradientColorsCannotBeBull()
  138. {
  139. var exception = Assert.Throws<ArgumentNullException>(() =>
  140. {
  141. EmptyContainer
  142. .Create()
  143. .LineVertical(1)
  144. .LineGradient(null);
  145. });
  146. Assert.That(exception.Message, Is.EqualTo("The gradient colors cannot be null. (Parameter 'colors')"));
  147. }
  148. [Test]
  149. public void LineGradientColorsCannotBeEmpty()
  150. {
  151. var exception = Assert.Throws<ArgumentException>(() =>
  152. {
  153. EmptyContainer
  154. .Create()
  155. .LineVertical(1)
  156. .LineGradient([]);
  157. });
  158. Assert.That(exception.Message, Is.EqualTo("The gradient colors cannot be empty. (Parameter 'colors')"));
  159. }
  160. [Test]
  161. public void LineGradientColorsAreSetCorrectly()
  162. {
  163. var container = EmptyContainer.Create();
  164. container
  165. .LineVertical(1)
  166. .LineGradient([Colors.Red.Medium, Colors.Green.Medium, Colors.Blue.Medium]);
  167. var line = container.Child as Line;
  168. Assert.That(line?.GradientColors, Is.EquivalentTo([ Colors.Red.Medium, Colors.Green.Medium, Colors.Blue.Medium ]));
  169. }
  170. #endregion
  171. #region Companion Hint
  172. [Test]
  173. public void VerticalLineCompanionHint()
  174. {
  175. var container = EmptyContainer.Create();
  176. container.LineVertical(123.45f);
  177. var line = container.Child as Line;
  178. Assert.That(line?.GetCompanionHint(), Is.EqualTo("Vertical 123.5"));
  179. }
  180. [Test]
  181. public void HorizontalLineCompanionHint()
  182. {
  183. var container = EmptyContainer.Create();
  184. container.LineHorizontal(234.56f);
  185. var line = container.Child as Line;
  186. Assert.That(line?.GetCompanionHint(), Is.EqualTo("Horizontal 234.6"));
  187. }
  188. #endregion
  189. [Test]
  190. [Repeat(10)]
  191. public void LineSupportsStatefulOperations()
  192. {
  193. var container = EmptyContainer.Create();
  194. container.LineHorizontal(1);
  195. var line = container.Child as Line;
  196. Assert.That(line.GetState(), Is.False);
  197. line.SetState(true);
  198. Assert.That(line.GetState(), Is.True);
  199. line.ResetState();
  200. Assert.That(line.GetState(), Is.False);
  201. }
  202. }