StyledBoxTests.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  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 StyledBoxTests
  9. {
  10. [Test]
  11. public void BorderShorthandSetsCorrectValues()
  12. {
  13. var container = EmptyContainer.Create();
  14. container.Border(1.23f, Colors.Amber.Darken2);
  15. var styledBox = container.Child as StyledBox;
  16. Assert.That(styledBox?.BorderLeft, Is.EqualTo(1.23f));
  17. Assert.That(styledBox?.BorderRight, Is.EqualTo(1.23f));
  18. Assert.That(styledBox?.BorderTop, Is.EqualTo(1.23f));
  19. Assert.That(styledBox?.BorderBottom, Is.EqualTo(1.23f));
  20. Assert.That(styledBox?.BorderColor, Is.EqualTo(Colors.Amber.Darken2));
  21. Assert.That(styledBox?.BackgroundColor, Is.EqualTo(Colors.Transparent));
  22. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  23. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  24. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  25. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  26. }
  27. #region Background
  28. [Test]
  29. public void BackgroundColorSetsCorrectValue()
  30. {
  31. var container = EmptyContainer.Create();
  32. container.Background(Colors.Green.Medium);
  33. var styledBox = container.Child as StyledBox;
  34. Assert.That(styledBox?.BackgroundColor, Is.EqualTo(Colors.Green.Medium));
  35. }
  36. [Test]
  37. public void BackgroundLinearGradientCannotBeEmpty()
  38. {
  39. var exception = Assert.Throws<ArgumentException>(() =>
  40. {
  41. EmptyContainer.Create().BackgroundLinearGradient(123f, []);
  42. });
  43. Assert.That(exception.Message, Does.Contain("The background linear-gradient colors cannot be empty. (Parameter 'colors')"));
  44. }
  45. [Test]
  46. public void BackgroundLinearGradientSetsCorrectValue()
  47. {
  48. var container = EmptyContainer.Create();
  49. container.BackgroundLinearGradient(30f, [ Colors.Red.Lighten3, Colors.Orange.Lighten3, Colors.Yellow.Lighten3 ]);
  50. var styledBox = container.Child as StyledBox;
  51. Assert.That(styledBox?.BackgroundGradientAngle, Is.EqualTo(30));
  52. Assert.That(styledBox?.BackgroundGradientColors, Is.EqualTo([ Colors.Red.Lighten3, Colors.Orange.Lighten3, Colors.Yellow.Lighten3 ]));
  53. }
  54. #endregion
  55. #region Thickness
  56. [Test]
  57. public void BorderAllSetsCorrectValue()
  58. {
  59. var container = EmptyContainer.Create();
  60. container.Border(1.23f);
  61. var styledBox = container.Child as StyledBox;
  62. Assert.That(styledBox?.BorderLeft, Is.EqualTo(1.23f));
  63. Assert.That(styledBox?.BorderRight, Is.EqualTo(1.23f));
  64. Assert.That(styledBox?.BorderTop, Is.EqualTo(1.23f));
  65. Assert.That(styledBox?.BorderBottom, Is.EqualTo(1.23f));
  66. }
  67. [Test]
  68. public void BorderAllSupportsUnitConversion()
  69. {
  70. var container = EmptyContainer.Create();
  71. container.Border(0.25f, Unit.Inch);
  72. var styledBox = container.Child as StyledBox;
  73. Assert.That(styledBox?.BorderLeft, Is.EqualTo(18));
  74. Assert.That(styledBox?.BorderRight, Is.EqualTo(18));
  75. Assert.That(styledBox?.BorderTop, Is.EqualTo(18));
  76. Assert.That(styledBox?.BorderBottom, Is.EqualTo(18));
  77. }
  78. [Test]
  79. public void BorderVerticalSetsCorrectValue()
  80. {
  81. var container = EmptyContainer.Create();
  82. container.BorderVertical(20);
  83. var styledBox = container.Child as StyledBox;
  84. Assert.That(styledBox?.BorderLeft, Is.EqualTo(20));
  85. Assert.That(styledBox?.BorderRight, Is.EqualTo(20));
  86. Assert.That(styledBox?.BorderTop, Is.Zero);
  87. Assert.That(styledBox?.BorderBottom, Is.Zero);
  88. }
  89. [Test]
  90. public void BorderVerticalSupportsUnitConversion()
  91. {
  92. var container = EmptyContainer.Create();
  93. container.BorderVertical(0.5f, Unit.Inch);
  94. var styledBox = container.Child as StyledBox;
  95. Assert.That(styledBox?.BorderLeft, Is.EqualTo(36));
  96. Assert.That(styledBox?.BorderRight, Is.EqualTo(36));
  97. Assert.That(styledBox?.BorderTop, Is.Zero);
  98. Assert.That(styledBox?.BorderBottom, Is.Zero);
  99. }
  100. [Test]
  101. public void BorderHorizontalSetsCorrectValue()
  102. {
  103. var container = EmptyContainer.Create();
  104. container.BorderHorizontal(25);
  105. var styledBox = container.Child as StyledBox;
  106. Assert.That(styledBox?.BorderLeft, Is.Zero);
  107. Assert.That(styledBox?.BorderRight, Is.Zero);
  108. Assert.That(styledBox?.BorderTop, Is.EqualTo(25));
  109. Assert.That(styledBox?.BorderBottom, Is.EqualTo(25));
  110. }
  111. [Test]
  112. public void BorderHorizontalSupportsUnitConversion()
  113. {
  114. var container = EmptyContainer.Create();
  115. container.BorderHorizontal(0.75f, Unit.Inch);
  116. var styledBox = container.Child as StyledBox;
  117. Assert.That(styledBox?.BorderLeft, Is.Zero);
  118. Assert.That(styledBox?.BorderRight, Is.Zero);
  119. Assert.That(styledBox?.BorderTop, Is.EqualTo(54));
  120. Assert.That(styledBox?.BorderBottom, Is.EqualTo(54));
  121. }
  122. [Test]
  123. public void BorderLeftSetsCorrectValue()
  124. {
  125. var container = EmptyContainer.Create();
  126. container.BorderLeft(5);
  127. var styledBox = container.Child as StyledBox;
  128. Assert.That(styledBox?.BorderLeft, Is.EqualTo(5));
  129. Assert.That(styledBox?.BorderRight, Is.Zero);
  130. Assert.That(styledBox?.BorderTop, Is.Zero);
  131. Assert.That(styledBox?.BorderBottom, Is.Zero);
  132. }
  133. [Test]
  134. public void BorderLeftSupportsUnitConversion()
  135. {
  136. var container = EmptyContainer.Create();
  137. container.BorderLeft(0.25f, Unit.Inch);
  138. var styledBox = container.Child as StyledBox;
  139. Assert.That(styledBox?.BorderLeft, Is.EqualTo(18));
  140. Assert.That(styledBox?.BorderRight, Is.Zero);
  141. Assert.That(styledBox?.BorderTop, Is.Zero);
  142. Assert.That(styledBox?.BorderBottom, Is.Zero);
  143. }
  144. [TestCase(-5)]
  145. [TestCase(-Size.Epsilon)]
  146. public void BorderLeftCannotBeNegative(float border)
  147. {
  148. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  149. {
  150. EmptyContainer.Create().BorderLeft(border);
  151. });
  152. Assert.That(exception.Message, Does.Contain("The left border cannot be negative."));
  153. }
  154. [Test]
  155. public void BorderRightSetsCorrectValue()
  156. {
  157. var container = EmptyContainer.Create();
  158. container.BorderRight(10);
  159. var styledBox = container.Child as StyledBox;
  160. Assert.That(styledBox?.BorderLeft, Is.Zero);
  161. Assert.That(styledBox?.BorderRight, Is.EqualTo(10));
  162. Assert.That(styledBox?.BorderTop, Is.Zero);
  163. Assert.That(styledBox?.BorderBottom, Is.Zero);
  164. }
  165. [Test]
  166. public void BorderRightSupportsUnitConversion()
  167. {
  168. var container = EmptyContainer.Create();
  169. container.BorderRight(0.5f, Unit.Inch);
  170. var styledBox = container.Child as StyledBox;
  171. Assert.That(styledBox?.BorderLeft, Is.Zero);
  172. Assert.That(styledBox?.BorderRight, Is.EqualTo(36));
  173. Assert.That(styledBox?.BorderTop, Is.Zero);
  174. Assert.That(styledBox?.BorderBottom, Is.Zero);
  175. }
  176. [TestCase(-5)]
  177. [TestCase(-Size.Epsilon)]
  178. public void BorderRightCannotBeNegative(float border)
  179. {
  180. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  181. {
  182. EmptyContainer.Create().BorderRight(border);
  183. });
  184. Assert.That(exception.Message, Does.Contain("The right border cannot be negative."));
  185. }
  186. [Test]
  187. public void BorderTopSetsCorrectValue()
  188. {
  189. var container = EmptyContainer.Create();
  190. container.BorderTop(15);
  191. var styledBox = container.Child as StyledBox;
  192. Assert.That(styledBox?.BorderLeft, Is.Zero);
  193. Assert.That(styledBox?.BorderRight, Is.Zero);
  194. Assert.That(styledBox?.BorderTop, Is.EqualTo(15));
  195. Assert.That(styledBox?.BorderBottom, Is.Zero);
  196. }
  197. [Test]
  198. public void BorderTopSupportsUnitConversion()
  199. {
  200. var container = EmptyContainer.Create();
  201. container.BorderTop(0.75f, Unit.Inch);
  202. var styledBox = container.Child as StyledBox;
  203. Assert.That(styledBox?.BorderLeft, Is.Zero);
  204. Assert.That(styledBox?.BorderRight, Is.Zero);
  205. Assert.That(styledBox?.BorderTop, Is.EqualTo(54f));
  206. Assert.That(styledBox?.BorderBottom, Is.Zero);
  207. }
  208. [TestCase(-5)]
  209. [TestCase(-Size.Epsilon)]
  210. public void BorderTopCannotBeNegative(float border)
  211. {
  212. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  213. {
  214. EmptyContainer.Create().BorderTop(border);
  215. });
  216. Assert.That(exception.Message, Does.Contain("The top border cannot be negative."));
  217. }
  218. [Test]
  219. public void BorderBottomSetsCorrectValue()
  220. {
  221. var container = EmptyContainer.Create();
  222. container.BorderBottom(20);
  223. var styledBox = container.Child as StyledBox;
  224. Assert.That(styledBox?.BorderLeft, Is.Zero);
  225. Assert.That(styledBox?.BorderRight, Is.Zero);
  226. Assert.That(styledBox?.BorderTop, Is.Zero);
  227. Assert.That(styledBox?.BorderBottom, Is.EqualTo(20));
  228. }
  229. [Test]
  230. public void BorderBottomSupportsUnitConversion()
  231. {
  232. var container = EmptyContainer.Create();
  233. container.BorderBottom(1f, Unit.Inch);
  234. var styledBox = container.Child as StyledBox;
  235. Assert.That(styledBox?.BorderLeft, Is.Zero);
  236. Assert.That(styledBox?.BorderRight, Is.Zero);
  237. Assert.That(styledBox?.BorderTop, Is.Zero);
  238. Assert.That(styledBox?.BorderBottom, Is.EqualTo(72f));
  239. }
  240. [TestCase(-5)]
  241. [TestCase(-Size.Epsilon)]
  242. public void BorderBottomCannotBeNegative(float border)
  243. {
  244. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  245. {
  246. EmptyContainer.Create().BorderBottom(border);
  247. });
  248. Assert.That(exception.Message, Does.Contain("The bottom border cannot be negative."));
  249. }
  250. [Test]
  251. public void ZeroBorderIsSupported()
  252. {
  253. var container = EmptyContainer.Create();
  254. container
  255. .BorderLeft(0)
  256. .BorderRight(0)
  257. .BorderTop(0)
  258. .BorderBottom(0);
  259. var styledBox = container.Child as StyledBox;
  260. Assert.That(styledBox?.BorderLeft, Is.Zero);
  261. Assert.That(styledBox?.BorderRight, Is.Zero);
  262. Assert.That(styledBox?.BorderTop, Is.Zero);
  263. Assert.That(styledBox?.BorderBottom, Is.Zero);
  264. }
  265. [Test]
  266. public void BorderValuesAreOverridingEachOther()
  267. {
  268. var container = EmptyContainer.Create();
  269. container
  270. .Border(5)
  271. .BorderVertical(10)
  272. .BorderLeft(15)
  273. .BorderBottom(20);
  274. var styledBox = container.Child as StyledBox;
  275. Assert.That(styledBox?.BorderLeft, Is.EqualTo(15));
  276. Assert.That(styledBox?.BorderRight, Is.EqualTo(10));
  277. Assert.That(styledBox?.BorderTop, Is.EqualTo(5));
  278. Assert.That(styledBox?.BorderBottom, Is.EqualTo(20));
  279. }
  280. [Test]
  281. public void BorderSetsColorToBlack()
  282. {
  283. var container = EmptyContainer.Create();
  284. container.Border(5);
  285. var styledBox = container.Child as StyledBox;
  286. Assert.That(styledBox?.BorderColor, Is.EqualTo(Colors.Black));
  287. }
  288. #endregion
  289. #region Corner Radius
  290. [Test]
  291. public void CornerRadiusAllSetsCorrectValue()
  292. {
  293. var container = EmptyContainer.Create();
  294. container.CornerRadius(8);
  295. var styledBox = container.Child as StyledBox;
  296. Assert.That(styledBox?.BorderRadiusTopLeft, Is.EqualTo(8));
  297. Assert.That(styledBox?.BorderRadiusTopRight, Is.EqualTo(8));
  298. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.EqualTo(8));
  299. Assert.That(styledBox?.BorderRadiusBottomRight, Is.EqualTo(8));
  300. }
  301. [Test]
  302. public void CornerRadiusAllSupportsUnitConversion()
  303. {
  304. var container = EmptyContainer.Create();
  305. container.CornerRadius(1.5f, Unit.Inch);
  306. var styledBox = container.Child as StyledBox;
  307. Assert.That(styledBox?.BorderRadiusTopLeft, Is.EqualTo(108));
  308. Assert.That(styledBox?.BorderRadiusTopRight, Is.EqualTo(108));
  309. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.EqualTo(108));
  310. Assert.That(styledBox?.BorderRadiusBottomRight, Is.EqualTo(108));
  311. }
  312. [TestCase(-5)]
  313. [TestCase(-Size.Epsilon)]
  314. public void CornerRadiusAllCannotBeNegative(float cornerRadius)
  315. {
  316. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  317. {
  318. EmptyContainer.Create().CornerRadius(cornerRadius);
  319. });
  320. Assert.That(exception.Message, Does.Contain("The top-left corner radius cannot be negative."));
  321. }
  322. [Test]
  323. public void CornerRadiusTopLeftSetsCorrectValue()
  324. {
  325. var container = EmptyContainer.Create();
  326. container.CornerRadiusTopLeft(8);
  327. var styledBox = container.Child as StyledBox;
  328. Assert.That(styledBox?.BorderRadiusTopLeft, Is.EqualTo(8));
  329. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  330. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  331. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  332. }
  333. [Test]
  334. public void CornerRadiusTopLeftSupportsUnitConversion()
  335. {
  336. var container = EmptyContainer.Create();
  337. container.CornerRadiusTopLeft(0.25f, Unit.Inch);
  338. var styledBox = container.Child as StyledBox;
  339. Assert.That(styledBox?.BorderRadiusTopLeft, Is.EqualTo(18));
  340. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  341. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  342. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  343. }
  344. [TestCase(-5)]
  345. [TestCase(-Size.Epsilon)]
  346. public void CornerRadiusTopLeftCannotBeNegative(float cornerRadius)
  347. {
  348. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  349. {
  350. EmptyContainer.Create().CornerRadiusTopLeft(cornerRadius);
  351. });
  352. Assert.That(exception.Message, Does.Contain("The top-left corner radius cannot be negative."));
  353. }
  354. [Test]
  355. public void CornerRadiusTopRightSetsCorrectValue()
  356. {
  357. var container = EmptyContainer.Create();
  358. container.CornerRadiusTopRight(10);
  359. var styledBox = container.Child as StyledBox;
  360. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  361. Assert.That(styledBox?.BorderRadiusTopRight, Is.EqualTo(10));
  362. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  363. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  364. }
  365. [Test]
  366. public void CornerRadiusTopRightSupportsUnitConversion()
  367. {
  368. var container = EmptyContainer.Create();
  369. container.CornerRadiusTopRight(0.5f, Unit.Inch);
  370. var styledBox = container.Child as StyledBox;
  371. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  372. Assert.That(styledBox?.BorderRadiusTopRight, Is.EqualTo(36));
  373. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  374. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  375. }
  376. [TestCase(-5)]
  377. [TestCase(-Size.Epsilon)]
  378. public void CornerRadiusTopRightCannotBeNegative(float cornerRadius)
  379. {
  380. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  381. {
  382. EmptyContainer.Create().CornerRadiusTopRight(cornerRadius);
  383. });
  384. Assert.That(exception.Message, Does.Contain("The top-right corner radius cannot be negative."));
  385. }
  386. [Test]
  387. public void CornerRadiusBottomLeftSetsCorrectValue()
  388. {
  389. var container = EmptyContainer.Create();
  390. container.CornerRadiusBottomLeft(12);
  391. var styledBox = container.Child as StyledBox;
  392. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  393. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  394. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.EqualTo(12));
  395. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  396. }
  397. [Test]
  398. public void CornerRadiusBottomLeftSupportsUnitConversion()
  399. {
  400. var container = EmptyContainer.Create();
  401. container.CornerRadiusBottomLeft(0.75f, Unit.Inch);
  402. var styledBox = container.Child as StyledBox;
  403. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  404. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  405. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.EqualTo(54));
  406. Assert.That(styledBox?.BorderRadiusBottomRight, Is.Zero);
  407. }
  408. [TestCase(-5)]
  409. [TestCase(-Size.Epsilon)]
  410. public void CornerRadiusBottomLeftCannotBeNegative(float cornerRadius)
  411. {
  412. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  413. {
  414. EmptyContainer.Create().CornerRadiusBottomLeft(cornerRadius);
  415. });
  416. Assert.That(exception.Message, Does.Contain("The bottom-left corner radius cannot be negative."));
  417. }
  418. [Test]
  419. public void CornerRadiusBottomRightSetsCorrectValue()
  420. {
  421. var container = EmptyContainer.Create();
  422. container.CornerRadiusBottomRight(14);
  423. var styledBox = container.Child as StyledBox;
  424. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  425. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  426. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  427. Assert.That(styledBox?.BorderRadiusBottomRight, Is.EqualTo(14));
  428. }
  429. [Test]
  430. public void CornerRadiusBottomRightSupportsUnitConversion()
  431. {
  432. var container = EmptyContainer.Create();
  433. container.CornerRadiusBottomRight(1f, Unit.Inch);
  434. var styledBox = container.Child as StyledBox;
  435. Assert.That(styledBox?.BorderRadiusTopLeft, Is.Zero);
  436. Assert.That(styledBox?.BorderRadiusTopRight, Is.Zero);
  437. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.Zero);
  438. Assert.That(styledBox?.BorderRadiusBottomRight, Is.EqualTo(72));
  439. }
  440. [TestCase(-5)]
  441. [TestCase(-Size.Epsilon)]
  442. public void CornerRadiusBottomRightCannotBeNegative(float cornerRadius)
  443. {
  444. var exception = Assert.Throws<ArgumentOutOfRangeException>(() =>
  445. {
  446. EmptyContainer.Create().CornerRadiusBottomRight(cornerRadius);
  447. });
  448. Assert.That(exception.Message, Does.Contain("The bottom-right corner radius cannot be negative."));
  449. }
  450. [Test]
  451. public void CornerRadiusValuesAreOverridingEachOther()
  452. {
  453. var container = EmptyContainer.Create();
  454. container
  455. .CornerRadius(4)
  456. .CornerRadiusTopLeft(6)
  457. .CornerRadiusTopRight(8)
  458. .CornerRadiusBottomLeft(10)
  459. .CornerRadiusBottomRight(12)
  460. .CornerRadiusBottomRight(14);
  461. var styledBox = container.Child as StyledBox;
  462. Assert.That(styledBox?.BorderRadiusTopLeft, Is.EqualTo(6));
  463. Assert.That(styledBox?.BorderRadiusTopRight, Is.EqualTo(8));
  464. Assert.That(styledBox?.BorderRadiusBottomLeft, Is.EqualTo(10));
  465. Assert.That(styledBox?.BorderRadiusBottomRight, Is.EqualTo(14));
  466. }
  467. #endregion
  468. #region Border Style
  469. [Test]
  470. public void BorderColorSetsCorrectValue()
  471. {
  472. var container = EmptyContainer.Create();
  473. container.BorderColor(Colors.Red.Darken3);
  474. var styledBox = container.Child as StyledBox;
  475. Assert.That(styledBox?.BorderColor, Is.EqualTo(Colors.Red.Darken3));
  476. }
  477. [Test]
  478. public void BorderLinearGradientCannotBeEmpty()
  479. {
  480. var exception = Assert.Throws<ArgumentException>(() =>
  481. {
  482. EmptyContainer.Create().BorderLinearGradient(234f, []);
  483. });
  484. Assert.That(exception.Message, Does.Contain("The border linear-gradient colors cannot be empty. (Parameter 'colors')"));
  485. }
  486. [Test]
  487. public void BorderLinearGradientSetsCorrectValue()
  488. {
  489. var container = EmptyContainer.Create();
  490. container.BorderLinearGradient(123f, [ Colors.Red.Darken3, Colors.Orange.Darken3, Colors.Yellow.Darken3 ]);
  491. var styledBox = container.Child as StyledBox;
  492. Assert.That(styledBox?.BorderGradientAngle, Is.EqualTo(123));
  493. Assert.That(styledBox?.BorderGradientColors, Is.EqualTo([ Colors.Red.Darken3, Colors.Orange.Darken3, Colors.Yellow.Darken3 ]));
  494. }
  495. #endregion
  496. #region Border Alignment
  497. [Test]
  498. public void BorderAlignmentIsMiddleWhenNoRoundedCorners()
  499. {
  500. var container = EmptyContainer.Create();
  501. container.Border(5);
  502. var styledBox = container.Child as StyledBox;
  503. styledBox.AdjustBorderAlignment();
  504. Assert.That(styledBox?.BorderAlignment, Is.EqualTo(0.5f));
  505. }
  506. [Test]
  507. public void BorderAlignmentIsInsideWhenHasRoundedCorners()
  508. {
  509. var container = EmptyContainer.Create();
  510. container.Border(5).CornerRadius(10);
  511. var styledBox = container.Child as StyledBox;
  512. styledBox.AdjustBorderAlignment();
  513. Assert.That(styledBox?.BorderAlignment, Is.EqualTo(0f));
  514. }
  515. [Test]
  516. public void BorderAlignmentInsideSetsCorrectValue()
  517. {
  518. var container = EmptyContainer.Create();
  519. container.BorderAlignmentInside();
  520. var styledBox = container.Child as StyledBox;
  521. Assert.That(styledBox?.BorderAlignment, Is.Zero);
  522. }
  523. [Test]
  524. public void BorderAlignmentMiddleSetsCorrectValue()
  525. {
  526. var container = EmptyContainer.Create();
  527. container.BorderAlignmentMiddle();
  528. var styledBox = container.Child as StyledBox;
  529. Assert.That(styledBox?.BorderAlignment, Is.EqualTo(0.5f));
  530. }
  531. [Test]
  532. public void BorderAlignmentOutsideSetsCorrectValue()
  533. {
  534. var container = EmptyContainer.Create();
  535. container.BorderAlignmentOutside();
  536. var styledBox = container.Child as StyledBox;
  537. Assert.That(styledBox?.BorderAlignment, Is.EqualTo(1f));
  538. }
  539. #endregion
  540. #region Shadow
  541. [Test]
  542. public void ShadowStyleSetsCorrectValue()
  543. {
  544. var container = EmptyContainer.Create();
  545. container.Shadow(new BoxShadowStyle
  546. {
  547. Color = Colors.Black.WithAlpha(0.5f),
  548. OffsetX = 5,
  549. OffsetY = 10,
  550. Blur = 15,
  551. Spread = 20
  552. });
  553. var styledBox = container.Child as StyledBox;
  554. var shadow = styledBox?.Shadow;
  555. Assert.That(shadow.Color, Is.EqualTo(new Color(0x7F000000)));
  556. Assert.That(shadow.OffsetX, Is.EqualTo(5));
  557. Assert.That(shadow.OffsetY, Is.EqualTo(10));
  558. Assert.That(shadow.Blur, Is.EqualTo(15));
  559. Assert.That(shadow.Spread, Is.EqualTo(20));
  560. }
  561. [Test]
  562. public void ShadowStyleCannotBeNull()
  563. {
  564. var exception = Assert.Throws<ArgumentNullException>(() =>
  565. {
  566. EmptyContainer.Create().Shadow(null);
  567. });
  568. Assert.That(exception.Message, Does.Contain("The box shadow style cannot be null."));
  569. }
  570. [TestCase(-10)]
  571. [TestCase(-Size.Epsilon)]
  572. public void ShadowBlurCannotBeNegative(float blur)
  573. {
  574. var exception = Assert.Throws<ArgumentException>(() =>
  575. {
  576. EmptyContainer.Create().Shadow(new BoxShadowStyle { Blur = blur });
  577. });
  578. Assert.That(exception.Message, Does.Contain("Shadow blur radius cannot be negative."));
  579. }
  580. #endregion
  581. }