StyledBoxTests.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. using QuestPDF.Fluent;
  2. using QuestPDF.Helpers;
  3. using QuestPDF.Infrastructure;
  4. namespace QuestPDF.VisualTests;
  5. public class StyledBoxTests
  6. {
  7. #region Background
  8. private static readonly IEnumerable<Color> BackgroundColorValues = [ Colors.Red.Medium, Colors.Green.Medium, Colors.Blue.Medium ];
  9. [Test, TestCaseSource(nameof(BackgroundColorValues))]
  10. public void BackgroundColor(Color color)
  11. {
  12. VisualTest.PerformWithDefaultPageSettings(container =>
  13. {
  14. container
  15. .Width(200)
  16. .Height(100)
  17. .Background(color);
  18. });
  19. }
  20. private static readonly IEnumerable<Color[]> BackgroundGradientColorsValues =
  21. [
  22. [Colors.Red.Medium, Colors.Green.Darken2],
  23. [Colors.Red.Medium, Colors.Yellow.Medium, Colors.Green.Medium],
  24. [Colors.Blue.Medium, Colors.LightBlue.Medium, Colors.Cyan.Medium, Colors.Teal.Medium, Colors.Green.Medium]
  25. ];
  26. [Test, TestCaseSource(nameof(BackgroundGradientColorsValues))]
  27. public void BackgroundGradientColors(Color[] gradientColors)
  28. {
  29. VisualTest.PerformWithDefaultPageSettings(container =>
  30. {
  31. container
  32. .Width(200)
  33. .Height(100)
  34. .BackgroundLinearGradient(0, gradientColors);
  35. });
  36. }
  37. [Test]
  38. public void BackgroundGradientAngle(
  39. [Values(0, 30, 45, 60, 90)] float angle)
  40. {
  41. var gradient = new[]
  42. {
  43. Colors.Black,
  44. Colors.White
  45. };
  46. VisualTest.PerformWithDefaultPageSettings(container =>
  47. {
  48. container
  49. .Width(200)
  50. .Height(100)
  51. .BackgroundLinearGradient(angle, gradient);
  52. });
  53. }
  54. [Test]
  55. public void BackgroundUniformRoundedCorners(
  56. [Values(0, 5, 10, 25, 50, 100)] float radius)
  57. {
  58. VisualTest.PerformWithDefaultPageSettings(container =>
  59. {
  60. container
  61. .Width(200)
  62. .Height(100)
  63. .Background(Colors.Grey.Medium)
  64. .CornerRadius(radius);
  65. });
  66. }
  67. [TestCase(0, 10, 20, 40)]
  68. [TestCase(10, 20, 40, 0)]
  69. [TestCase(20, 40, 0, 10)]
  70. [TestCase(40, 0, 10, 20)]
  71. public void BackgroundRoundedCorners(float topLeft, float topRight, float bottomRight, float bottomLeft)
  72. {
  73. VisualTest.PerformWithDefaultPageSettings(container =>
  74. {
  75. container
  76. .Width(200)
  77. .Height(100)
  78. .Background(Colors.Grey.Medium)
  79. .CornerRadiusTopLeft(topLeft)
  80. .CornerRadiusTopRight(topRight)
  81. .CornerRadiusBottomRight(bottomRight)
  82. .CornerRadiusBottomLeft(bottomLeft);
  83. });
  84. }
  85. #endregion
  86. #region Border
  87. [Test]
  88. public void BorderThicknessUniform(
  89. [Values(1, 2, 4, 8)] float thickness)
  90. {
  91. VisualTest.PerformWithDefaultPageSettings(container =>
  92. {
  93. container
  94. .Width(100)
  95. .Height(100)
  96. .Border(thickness)
  97. .BorderColor(Colors.Black)
  98. .Background(Colors.Grey.Lighten2);
  99. });
  100. }
  101. [Test]
  102. public void BorderThickness(
  103. [Values(0, 2)] float left,
  104. [Values(0, 4)] float top,
  105. [Values(0, 6)] float right,
  106. [Values(0, 8)] float bottom)
  107. {
  108. VisualTest.PerformWithDefaultPageSettings(container =>
  109. {
  110. container
  111. .Width(100)
  112. .Height(100)
  113. .BorderLeft(left)
  114. .BorderTop(top)
  115. .BorderRight(right)
  116. .BorderBottom(bottom)
  117. .BorderColor(Colors.Black)
  118. .Background(Colors.Grey.Lighten2);
  119. });
  120. }
  121. [Test]
  122. public void BorderRoundedCornersUniform(
  123. [Values(0, 5, 10, 25, 50, 100)] float radius)
  124. {
  125. VisualTest.PerformWithDefaultPageSettings(container =>
  126. {
  127. container
  128. .Width(200)
  129. .Height(100)
  130. .Border(2)
  131. .CornerRadius(radius)
  132. .BorderColor(Colors.Black)
  133. .Background(Colors.Grey.Lighten2);
  134. });
  135. }
  136. [Test]
  137. public void BorderRoundedCornersWithVariousCornerRadius(
  138. [Values(0, 5)] float left,
  139. [Values(0, 5)] float top,
  140. [Values(0, 5)] float right,
  141. [Values(0, 5)] float bottom,
  142. [Values(5, 15)] float roundedRadius)
  143. {
  144. VisualTest.PerformWithDefaultPageSettings(container =>
  145. {
  146. container
  147. .Width(100)
  148. .Height(50)
  149. .BorderLeft(left)
  150. .BorderTop(top)
  151. .BorderRight(right)
  152. .BorderBottom(bottom)
  153. .CornerRadius(roundedRadius)
  154. .Background(Colors.Blue.Lighten3);
  155. });
  156. }
  157. public static readonly IEnumerable<Color> BorderColorCases = [ Colors.Red.Medium, Colors.Green.Medium, Colors.Blue.Medium ];
  158. [Test, TestCaseSource(nameof(BorderColorCases))]
  159. public void BorderColor(Color color)
  160. {
  161. VisualTest.PerformWithDefaultPageSettings(container =>
  162. {
  163. container
  164. .Width(200)
  165. .Height(100)
  166. .Border(5)
  167. .BorderColor(color)
  168. .Background(Colors.Grey.Lighten2);
  169. });
  170. }
  171. private static readonly IEnumerable<Color[]> BorderGradientColorsValues =
  172. [
  173. [Colors.Red.Medium, Colors.Green.Darken2],
  174. [Colors.Red.Medium, Colors.Yellow.Medium, Colors.Green.Medium],
  175. [Colors.Blue.Medium, Colors.LightBlue.Medium, Colors.Cyan.Medium, Colors.Teal.Medium, Colors.Green.Medium]
  176. ];
  177. [Test, TestCaseSource(nameof(BorderGradientColorsValues))]
  178. public void BorderGradientColors(Color[] gradientColors)
  179. {
  180. VisualTest.PerformWithDefaultPageSettings(container =>
  181. {
  182. container
  183. .Width(200)
  184. .Height(100)
  185. .Border(10)
  186. .CornerRadius(5)
  187. .BorderLinearGradient(0, gradientColors)
  188. .Background(Colors.Grey.Lighten2);
  189. });
  190. }
  191. [Test]
  192. public void BorderGradientAngle(
  193. [Values(0, 30, 45, 60, 90)] float angle)
  194. {
  195. var gradient = new[]
  196. {
  197. Colors.Black,
  198. Colors.White
  199. };
  200. VisualTest.PerformWithDefaultPageSettings(container =>
  201. {
  202. container
  203. .Width(200)
  204. .Height(100)
  205. .Border(10)
  206. .CornerRadius(5)
  207. .BorderLinearGradient(angle, gradient);
  208. });
  209. }
  210. private void BorderAlignmentTest(Func<IContainer, IContainer> configuration)
  211. {
  212. VisualTest.PerformWithDefaultPageSettings(container =>
  213. {
  214. container
  215. .Width(200)
  216. .Height(100)
  217. .Border(10)
  218. .CornerRadius(10)
  219. .BorderColor(Colors.Black.WithAlpha(0.5f))
  220. .Apply(configuration)
  221. .Background(Colors.Blue.Lighten3);
  222. });
  223. }
  224. [Test]
  225. public void BorderAlignmentInside()
  226. {
  227. BorderAlignmentTest(x => x.BorderAlignmentInside());
  228. }
  229. [Test]
  230. public void BorderAlignmentMiddle()
  231. {
  232. BorderAlignmentTest(x => x.BorderAlignmentMiddle());
  233. }
  234. [Test]
  235. public void BorderAlignmentOutside()
  236. {
  237. BorderAlignmentTest(x => x.BorderAlignmentOutside());
  238. }
  239. #endregion
  240. #region Shadow
  241. private static readonly IEnumerable<Color> ShadowColorValues = [ Colors.Red.Medium, Colors.Green.Medium, Colors.Blue.Medium ];
  242. [Test, TestCaseSource(nameof(ShadowColorValues))]
  243. public void ShadowColor(Color shadowColor)
  244. {
  245. VisualTest.PerformWithDefaultPageSettings(container =>
  246. {
  247. container
  248. .Width(200)
  249. .Height(100)
  250. .Background(Colors.White)
  251. .Shadow(new BoxShadowStyle
  252. {
  253. Color = shadowColor,
  254. Blur = 8
  255. });
  256. });
  257. }
  258. [Test]
  259. public void ShadowBlur(
  260. [Values(2, 4, 8, 16)] float blur)
  261. {
  262. VisualTest.PerformWithDefaultPageSettings(container =>
  263. {
  264. container
  265. .Width(100)
  266. .Height(50)
  267. .Background(Colors.White)
  268. .Shadow(new BoxShadowStyle
  269. {
  270. Color = Colors.Grey.Darken2,
  271. Blur = blur,
  272. });
  273. });
  274. }
  275. [Test]
  276. public void ShadowWithoutBlur(
  277. [Values] bool applyRoundedCorners,
  278. [Values] bool applySpread,
  279. [Values] bool applyOffset)
  280. {
  281. VisualTest.PerformWithDefaultPageSettings(container =>
  282. {
  283. container
  284. .Width(100)
  285. .Height(50)
  286. .CornerRadius(applyRoundedCorners ? 20f : 0f)
  287. .Background(Colors.LightBlue.Medium)
  288. .Shadow(new BoxShadowStyle
  289. {
  290. Color = Colors.Grey.Darken2,
  291. OffsetX = applyOffset ? 4f : 0f,
  292. OffsetY = applyOffset ? 4f : 0f,
  293. Spread = applySpread ? 8f : 0f,
  294. });
  295. });
  296. }
  297. [Test]
  298. public void ShadowSpread(
  299. [Values(-4, 0, 4, 8, 12)] float spread)
  300. {
  301. VisualTest.PerformWithDefaultPageSettings(container =>
  302. {
  303. container
  304. .Width(100)
  305. .Height(100)
  306. .Background(Colors.White)
  307. .Shadow(new BoxShadowStyle
  308. {
  309. Color = Colors.Grey.Darken2,
  310. Blur = 4,
  311. Spread = spread
  312. });
  313. });
  314. }
  315. [Test]
  316. public void ShadowOffsetX(
  317. [Values(-8, -4, 0, 4, 8)] float offsetX)
  318. {
  319. VisualTest.PerformWithDefaultPageSettings(container =>
  320. {
  321. container
  322. .Width(100)
  323. .Height(100)
  324. .Background(Colors.White)
  325. .Shadow(new BoxShadowStyle
  326. {
  327. Color = Colors.Grey.Darken2,
  328. Blur = 8,
  329. OffsetX = offsetX
  330. });
  331. });
  332. }
  333. [Test]
  334. public void ShadowOffsetY(
  335. [Values(-8, -4, 0, 4, 8)] float offsetY)
  336. {
  337. VisualTest.PerformWithDefaultPageSettings(container =>
  338. {
  339. container
  340. .Width(100)
  341. .Height(100)
  342. .Background(Colors.White)
  343. .Shadow(new BoxShadowStyle
  344. {
  345. Color = Colors.Grey.Darken2,
  346. Blur = 8,
  347. OffsetY = offsetY
  348. });
  349. });
  350. }
  351. #endregion
  352. #region Clipping
  353. [Test]
  354. public void ClipImage()
  355. {
  356. VisualTest.PerformWithDefaultPageSettings(container =>
  357. {
  358. container
  359. .Width(200)
  360. .CornerRadius(25)
  361. .Shadow(new BoxShadowStyle
  362. {
  363. Color = Colors.Grey.Darken2,
  364. Blur = 8
  365. })
  366. .Image("Resources/gradient.png");
  367. });
  368. }
  369. [Test]
  370. public void ClipText()
  371. {
  372. VisualTest.PerformWithDefaultPageSettings(container =>
  373. {
  374. container
  375. .Width(300)
  376. .Border(2, Colors.Black)
  377. .CornerRadius(75)
  378. .Text(Placeholders.LoremIpsum());
  379. });
  380. }
  381. [Test]
  382. public void ClipContent()
  383. {
  384. VisualTest.PerformWithDefaultPageSettings(container =>
  385. {
  386. container
  387. .Width(400)
  388. .Border(2, Colors.Black)
  389. .CornerRadius(150)
  390. .Table(table =>
  391. {
  392. table.ColumnsDefinition(columns =>
  393. {
  394. foreach (var i in Enumerable.Range(1, 10))
  395. columns.RelativeColumn();
  396. });
  397. foreach (var i in Enumerable.Range(0, 100))
  398. {
  399. table.Cell()
  400. .Border(1)
  401. .Padding(5)
  402. .AlignCenter()
  403. .Text(i.ToString());
  404. }
  405. });
  406. });
  407. }
  408. #endregion
  409. }