RowTests.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using NUnit.Framework;
  5. using QuestPDF.Elements;
  6. using QuestPDF.Fluent;
  7. using QuestPDF.Helpers;
  8. using QuestPDF.Infrastructure;
  9. namespace QuestPDF.UnitTests;
  10. [TestFixture]
  11. public class RowTests
  12. {
  13. #region Spacing
  14. [TestCase(float.MinValue)]
  15. [TestCase(-5)]
  16. [TestCase(-float.Epsilon)]
  17. public void NegativeSpacingThrowsException(float spacingValue)
  18. {
  19. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  20. {
  21. EmptyContainer
  22. .Create()
  23. .Row(row =>
  24. {
  25. row.Spacing(spacingValue);
  26. });
  27. });
  28. Assert.That(exception.Message, Is.EqualTo("The row spacing cannot be negative. (Parameter 'spacing')"));
  29. }
  30. [TestCase(0)]
  31. [TestCase(float.Epsilon)]
  32. [TestCase(10)]
  33. public void ValidSpacingIsCorrectlyApplied(float spacingValue)
  34. {
  35. var container = EmptyContainer.Create();
  36. container.Row(row =>
  37. {
  38. row.Spacing(spacingValue);
  39. });
  40. var rowContainer = container.Child as Row;
  41. Assert.That(rowContainer?.Spacing, Is.EqualTo(spacingValue));
  42. }
  43. [Test]
  44. public void SpacingSupportsUnitConversion()
  45. {
  46. var container = EmptyContainer.Create();
  47. container.Row(row =>
  48. {
  49. row.Spacing(5, Unit.Inch);
  50. });
  51. var rowContainer = container.Child as Row;
  52. Assert.That(rowContainer?.Spacing, Is.EqualTo(360));
  53. }
  54. #endregion
  55. #region Relative Item
  56. [TestCase(-10)]
  57. [TestCase(-float.Epsilon)]
  58. [TestCase(0)]
  59. public void RelativeItemCannotHaveSizeSmallerOrEqualToZero(float size)
  60. {
  61. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  62. {
  63. EmptyContainer
  64. .Create()
  65. .Row(row =>
  66. {
  67. row.RelativeItem(size);
  68. });
  69. });
  70. Assert.That(exception?.Message, Is.EqualTo("The relative item size must be greater than zero. (Parameter 'size')"));
  71. }
  72. [TestCase(float.Epsilon)]
  73. [TestCase(1)]
  74. [TestCase(5)]
  75. public void RelativeItemMustHaveSizeLargerThanZero(float size)
  76. {
  77. var container = EmptyContainer.Create();
  78. container.Row(row =>
  79. {
  80. row.RelativeItem(size);
  81. });
  82. var rowContainer = container.Child as Row;
  83. Assert.That(rowContainer?.Items.Count, Is.EqualTo(1));
  84. var firstItem = rowContainer?.Items.Single();
  85. Assert.That(firstItem.Type, Is.EqualTo(RowItemType.Relative));
  86. Assert.That(firstItem.Size, Is.EqualTo(size));
  87. }
  88. #endregion
  89. #region Constant Item
  90. [TestCase(-10)]
  91. [TestCase(-float.Epsilon)]
  92. public void ConstantItemCannotHaveSizeSmallerThanZero(float size)
  93. {
  94. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  95. {
  96. EmptyContainer
  97. .Create()
  98. .Row(row =>
  99. {
  100. row.ConstantItem(size);
  101. });
  102. });
  103. Assert.That(exception?.Message, Is.EqualTo("The constant item size cannot be negative. (Parameter 'size')"));
  104. }
  105. [TestCase(0)]
  106. [TestCase(100)]
  107. public void ConstantItemMustHaveSizeLargerOrEqualToZero(float size)
  108. {
  109. var container = EmptyContainer.Create();
  110. container.Row(row =>
  111. {
  112. row.ConstantItem(size);
  113. });
  114. var rowContainer = container.Child as Row;
  115. Assert.That(rowContainer?.Items.Count, Is.EqualTo(1));
  116. var firstItem = rowContainer?.Items.Single();
  117. Assert.That(firstItem.Type, Is.EqualTo(RowItemType.Constant));
  118. Assert.That(firstItem.Size, Is.EqualTo(size));
  119. }
  120. [Test]
  121. public void ConstantItemSupportsUnitConversion()
  122. {
  123. var container = EmptyContainer.Create();
  124. container.Row(row =>
  125. {
  126. row.ConstantItem(2, Unit.Inch);
  127. });
  128. var rowContainer = container.Child as Row;
  129. Assert.That(rowContainer?.Items.Count, Is.EqualTo(1));
  130. var firstItem = rowContainer?.Items.Single();
  131. Assert.That(firstItem.Type, Is.EqualTo(RowItemType.Constant));
  132. Assert.That(firstItem.Size, Is.EqualTo(144));
  133. }
  134. #endregion
  135. [Test]
  136. public void CompanionHints()
  137. {
  138. var container = EmptyContainer.Create();
  139. container.Row(row =>
  140. {
  141. row.RelativeItem(3);
  142. row.ConstantItem(2, Unit.Inch);
  143. row.AutoItem();
  144. });
  145. var rowContainer = container.Child as Row;
  146. Assert.That(rowContainer?.Items.Count, Is.EqualTo(3));
  147. var items = rowContainer?.Items;
  148. Assert.That(items[0].GetCompanionHint(), Is.EqualTo("Relative 3"));
  149. Assert.That(items[1].GetCompanionHint(), Is.EqualTo("Constant 144"));
  150. Assert.That(items[2].GetCompanionHint(), Is.EqualTo("Auto"));
  151. }
  152. [Test]
  153. [Repeat(10)]
  154. public void RowSupportsStatefulOperations()
  155. {
  156. var container = EmptyContainer.Create();
  157. container.Row(row =>
  158. {
  159. foreach (var i in Enumerable.Range(0, 10))
  160. row.RelativeItem();
  161. });
  162. var rowContainer = container.Child as Row;
  163. Assert.That(rowContainer?.Items.Count, Is.EqualTo(10));
  164. rowContainer.ResetState();
  165. Assert.That(rowContainer.GetState(), Is.EquivalentTo(new bool[10]));
  166. var newState = Enumerable
  167. .Range(0, 10)
  168. .Select(x => Random.Shared.Next() % 2 == 0)
  169. .ToArray();
  170. rowContainer.SetState(newState);
  171. Assert.That(rowContainer.GetState(), Is.EquivalentTo(newState));
  172. rowContainer.ResetState();
  173. Assert.That(rowContainer.GetState(), Is.EquivalentTo(new bool[10]));
  174. }
  175. }