TextSpanTests.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using QuestPDF.Elements.Text;
  5. using QuestPDF.Elements.Text.Items;
  6. using QuestPDF.Fluent;
  7. using QuestPDF.Helpers;
  8. using QuestPDF.Infrastructure;
  9. namespace QuestPDF.UnitTests;
  10. public class TextSpanTests
  11. {
  12. internal (TextSpanDescriptor, TextBlockSpan) CreateTextBlockSpan()
  13. {
  14. var container = EmptyContainer.Create();
  15. var descriptor = container.Text("test");
  16. var textElement = container.Child as TextBlock;
  17. var textBlockSpan = textElement?.Items.SingleOrDefault() as TextBlockSpan;
  18. return (descriptor, textBlockSpan);
  19. }
  20. #region Font Weight
  21. [Test]
  22. public void SetsCorrectSetsCorrectFontWeight_Thin()
  23. {
  24. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  25. descriptor.Thin();
  26. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Thin));
  27. }
  28. [Test]
  29. public void SetsCorrectFontWeight_ExtraLight()
  30. {
  31. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  32. descriptor.ExtraLight();
  33. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.ExtraLight));
  34. }
  35. [Test]
  36. public void SetsCorrectFontWeight_Light()
  37. {
  38. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  39. descriptor.Light();
  40. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Light));
  41. }
  42. [Test]
  43. public void SetsCorrectFontWeight_Normal()
  44. {
  45. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  46. descriptor.NormalWeight();
  47. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Normal));
  48. }
  49. [Test]
  50. public void SetsCorrectFontWeight_Medium()
  51. {
  52. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  53. descriptor.Medium();
  54. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Medium));
  55. }
  56. [Test]
  57. public void SetsCorrectFontWeight_SemiBold()
  58. {
  59. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  60. descriptor.SemiBold();
  61. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.SemiBold));
  62. }
  63. [Test]
  64. public void SetsCorrectFontWeight_Bold()
  65. {
  66. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  67. descriptor.Bold();
  68. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Bold));
  69. }
  70. [Test]
  71. public void SetsCorrectFontWeight_ExtraBold()
  72. {
  73. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  74. descriptor.ExtraBold();
  75. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.ExtraBold));
  76. }
  77. [Test]
  78. public void SetsCorrectFontWeight_Black()
  79. {
  80. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  81. descriptor.Black();
  82. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.Black));
  83. }
  84. [Test]
  85. public void SetsCorrectFontWeight_ExtraBlack()
  86. {
  87. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  88. descriptor.ExtraBlack();
  89. Assert.That(textBlockSpan.Style.FontWeight, Is.EqualTo(FontWeight.ExtraBlack));
  90. }
  91. #endregion
  92. #region Text Position
  93. [Test]
  94. public void SetsCorrectTextPosition_Subscript()
  95. {
  96. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  97. descriptor.Subscript();
  98. Assert.That(textBlockSpan.Style.FontPosition, Is.EqualTo(FontPosition.Subscript));
  99. }
  100. [Test]
  101. public void SetsCorrectTextPosition_Normal()
  102. {
  103. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  104. descriptor.Superscript().NormalPosition(); // first change from default, then normal
  105. Assert.That(textBlockSpan.Style.FontPosition, Is.EqualTo(FontPosition.Normal));
  106. }
  107. [Test]
  108. public void SetsCorrectTextPosition_Superscript()
  109. {
  110. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  111. descriptor.Superscript();
  112. Assert.That(textBlockSpan.Style.FontPosition, Is.EqualTo(FontPosition.Superscript));
  113. }
  114. #endregion
  115. #region Font Features
  116. [Test]
  117. public void EnableFontFeature_SingleFeature()
  118. {
  119. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  120. descriptor.EnableFontFeature(FontFeatures.StandardLigatures);
  121. Assert.That(textBlockSpan.Style.FontFeatures, Has.Length.EqualTo(1));
  122. Assert.That(textBlockSpan.Style.FontFeatures[0], Is.EqualTo((FontFeatures.StandardLigatures, true)));
  123. }
  124. [Test]
  125. public void DisableFontFeature_SingleFeature()
  126. {
  127. var (descriptor, textBlockSpan) = CreateTextBlockSpan();
  128. descriptor.DisableFontFeature(FontFeatures.Kerning);
  129. Assert.That(textBlockSpan.Style.FontFeatures, Has.Length.EqualTo(1));
  130. Assert.That(textBlockSpan.Style.FontFeatures[0], Is.EqualTo((FontFeatures.Kerning, false)));
  131. }
  132. [Test]
  133. public void FontFeatures_MixedEnableDisable()
  134. {
  135. var textStyle = TextStyle.Default
  136. .EnableFontFeature(FontFeatures.StandardLigatures)
  137. .DisableFontFeature(FontFeatures.Kerning)
  138. .DisableFontFeature(FontFeatures.DiscretionaryLigatures)
  139. .EnableFontFeature(FontFeatures.Kerning);
  140. Assert.That(textStyle.FontFeatures, Has.Length.EqualTo(3));
  141. Assert.That(textStyle.FontFeatures[0], Is.EqualTo((FontFeatures.Kerning, true)));
  142. Assert.That(textStyle.FontFeatures[1], Is.EqualTo((FontFeatures.DiscretionaryLigatures, false)));
  143. Assert.That(textStyle.FontFeatures[2], Is.EqualTo((FontFeatures.StandardLigatures, true)));
  144. }
  145. #endregion
  146. }