BorderTests.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System.Threading.Tasks;
  4. using Avalonia.Controls;
  5. using Avalonia.Layout;
  6. using Avalonia.Media;
  7. using Xunit;
  8. #if AVALONIA_SKIA
  9. namespace Avalonia.Skia.RenderTests
  10. #else
  11. namespace Avalonia.Direct2D1.RenderTests.Controls
  12. #endif
  13. {
  14. public class BorderTests : TestBase
  15. {
  16. public BorderTests()
  17. : base(@"Controls\Border")
  18. {
  19. }
  20. [Fact]
  21. public async Task Border_1px_Border()
  22. {
  23. Decorator target = new Decorator
  24. {
  25. Padding = new Thickness(8),
  26. Width = 200,
  27. Height = 200,
  28. Child = new Border
  29. {
  30. BorderBrush = Brushes.Black,
  31. BorderThickness = new Thickness(1),
  32. }
  33. };
  34. await RenderToFile(target);
  35. CompareImages();
  36. }
  37. [Fact]
  38. public async Task Border_2px_Border()
  39. {
  40. Decorator target = new Decorator
  41. {
  42. Padding = new Thickness(8),
  43. Width = 200,
  44. Height = 200,
  45. Child = new Border
  46. {
  47. BorderBrush = Brushes.Black,
  48. BorderThickness = new Thickness(2),
  49. }
  50. };
  51. await RenderToFile(target);
  52. CompareImages();
  53. }
  54. [Fact]
  55. public async Task Border_Uniform_CornerRadius()
  56. {
  57. Decorator target = new Decorator
  58. {
  59. Padding = new Thickness(8),
  60. Width = 200,
  61. Height = 200,
  62. Child = new Border
  63. {
  64. BorderBrush = Brushes.Black,
  65. BorderThickness = new Thickness(2),
  66. CornerRadius = new CornerRadius(16),
  67. }
  68. };
  69. await RenderToFile(target);
  70. CompareImages();
  71. }
  72. [Fact]
  73. public async Task Border_NonUniform_CornerRadius()
  74. {
  75. Decorator target = new Decorator
  76. {
  77. Padding = new Thickness(8),
  78. Width = 200,
  79. Height = 200,
  80. Child = new Border
  81. {
  82. BorderBrush = Brushes.Black,
  83. BorderThickness = new Thickness(2),
  84. CornerRadius = new CornerRadius(16, 4, 7, 10),
  85. }
  86. };
  87. await RenderToFile(target);
  88. CompareImages();
  89. }
  90. [Fact]
  91. public async Task Border_Fill()
  92. {
  93. Decorator target = new Decorator
  94. {
  95. Padding = new Thickness(8),
  96. Width = 200,
  97. Height = 200,
  98. Child = new Border
  99. {
  100. Background = Brushes.Red,
  101. }
  102. };
  103. await RenderToFile(target);
  104. CompareImages();
  105. }
  106. [Fact]
  107. public async Task Border_Brush_Offsets_Content()
  108. {
  109. Decorator target = new Decorator
  110. {
  111. Padding = new Thickness(8),
  112. Width = 200,
  113. Height = 200,
  114. Child = new Border
  115. {
  116. BorderBrush = Brushes.Black,
  117. BorderThickness = new Thickness(2),
  118. Child = new Border
  119. {
  120. Background = Brushes.Red,
  121. }
  122. }
  123. };
  124. await RenderToFile(target);
  125. CompareImages();
  126. }
  127. [Fact]
  128. public async Task Border_Padding_Offsets_Content()
  129. {
  130. Decorator target = new Decorator
  131. {
  132. Padding = new Thickness(8),
  133. Width = 200,
  134. Height = 200,
  135. Child = new Border
  136. {
  137. BorderBrush = Brushes.Black,
  138. BorderThickness = new Thickness(2),
  139. Padding = new Thickness(2),
  140. Child = new Border
  141. {
  142. Background = Brushes.Red,
  143. }
  144. }
  145. };
  146. await RenderToFile(target);
  147. CompareImages();
  148. }
  149. [Fact]
  150. public async Task Border_Margin_Offsets_Content()
  151. {
  152. Decorator target = new Decorator
  153. {
  154. Padding = new Thickness(8),
  155. Width = 200,
  156. Height = 200,
  157. Child = new Border
  158. {
  159. BorderBrush = Brushes.Black,
  160. BorderThickness = new Thickness(2),
  161. Child = new Border
  162. {
  163. Background = Brushes.Red,
  164. Margin = new Thickness(2),
  165. }
  166. }
  167. };
  168. await RenderToFile(target);
  169. CompareImages();
  170. }
  171. [Fact]
  172. public async Task Border_Centers_Content_Horizontally()
  173. {
  174. Decorator target = new Decorator
  175. {
  176. Padding = new Thickness(8),
  177. Width = 200,
  178. Height = 200,
  179. Child = new Border
  180. {
  181. BorderBrush = Brushes.Black,
  182. BorderThickness = new Thickness(2),
  183. Child = new TextBlock
  184. {
  185. Text = "Foo",
  186. Background = Brushes.Red,
  187. FontFamily = "Segoe UI",
  188. FontSize = 12,
  189. HorizontalAlignment = HorizontalAlignment.Center,
  190. }
  191. }
  192. };
  193. await RenderToFile(target);
  194. CompareImages();
  195. }
  196. [Fact]
  197. public async Task Border_Centers_Content_Vertically()
  198. {
  199. Decorator target = new Decorator
  200. {
  201. Padding = new Thickness(8),
  202. Width = 200,
  203. Height = 200,
  204. Child = new Border
  205. {
  206. BorderBrush = Brushes.Black,
  207. BorderThickness = new Thickness(2),
  208. Child = new TextBlock
  209. {
  210. Text = "Foo",
  211. Background = Brushes.Red,
  212. FontFamily = "Segoe UI",
  213. FontSize = 12,
  214. VerticalAlignment = VerticalAlignment.Center,
  215. }
  216. }
  217. };
  218. await RenderToFile(target);
  219. CompareImages();
  220. }
  221. [Fact]
  222. public async Task Border_Stretches_Content_Horizontally()
  223. {
  224. Decorator target = new Decorator
  225. {
  226. Padding = new Thickness(8),
  227. Width = 200,
  228. Height = 200,
  229. Child = new Border
  230. {
  231. BorderBrush = Brushes.Black,
  232. BorderThickness = new Thickness(2),
  233. Child = new TextBlock
  234. {
  235. Text = "Foo",
  236. Background = Brushes.Red,
  237. FontFamily = "Segoe UI",
  238. FontSize = 12,
  239. HorizontalAlignment = HorizontalAlignment.Stretch,
  240. }
  241. }
  242. };
  243. await RenderToFile(target);
  244. CompareImages();
  245. }
  246. [Fact]
  247. public async Task Border_Stretches_Content_Vertically()
  248. {
  249. Decorator target = new Decorator
  250. {
  251. Padding = new Thickness(8),
  252. Width = 200,
  253. Height = 200,
  254. Child = new Border
  255. {
  256. BorderBrush = Brushes.Black,
  257. BorderThickness = new Thickness(2),
  258. Child = new TextBlock
  259. {
  260. Text = "Foo",
  261. Background = Brushes.Red,
  262. FontFamily = "Segoe UI",
  263. FontSize = 12,
  264. VerticalAlignment = VerticalAlignment.Stretch,
  265. }
  266. }
  267. };
  268. await RenderToFile(target);
  269. CompareImages();
  270. }
  271. [Fact]
  272. public async Task Border_Left_Aligns_Content()
  273. {
  274. Decorator target = new Decorator
  275. {
  276. Padding = new Thickness(8),
  277. Width = 200,
  278. Height = 200,
  279. Child = new Border
  280. {
  281. BorderBrush = Brushes.Black,
  282. BorderThickness = new Thickness(2),
  283. Child = new TextBlock
  284. {
  285. Text = "Foo",
  286. Background = Brushes.Red,
  287. FontFamily = "Segoe UI",
  288. FontSize = 12,
  289. HorizontalAlignment = HorizontalAlignment.Left,
  290. }
  291. }
  292. };
  293. await RenderToFile(target);
  294. CompareImages();
  295. }
  296. [Fact]
  297. public async Task Border_Right_Aligns_Content()
  298. {
  299. Decorator target = new Decorator
  300. {
  301. Padding = new Thickness(8),
  302. Width = 200,
  303. Height = 200,
  304. Child = new Border
  305. {
  306. BorderBrush = Brushes.Black,
  307. BorderThickness = new Thickness(2),
  308. Child = new TextBlock
  309. {
  310. Text = "Foo",
  311. Background = Brushes.Red,
  312. FontFamily = "Segoe UI",
  313. FontSize = 12,
  314. HorizontalAlignment = HorizontalAlignment.Right,
  315. }
  316. }
  317. };
  318. await RenderToFile(target);
  319. CompareImages();
  320. }
  321. [Fact]
  322. public async Task Border_Top_Aligns_Content()
  323. {
  324. Decorator target = new Decorator
  325. {
  326. Padding = new Thickness(8),
  327. Width = 200,
  328. Height = 200,
  329. Child = new Border
  330. {
  331. BorderBrush = Brushes.Black,
  332. BorderThickness = new Thickness(2),
  333. Child = new TextBlock
  334. {
  335. Text = "Foo",
  336. Background = Brushes.Red,
  337. FontFamily = "Segoe UI",
  338. FontSize = 12,
  339. VerticalAlignment = VerticalAlignment.Top,
  340. }
  341. }
  342. };
  343. await RenderToFile(target);
  344. CompareImages();
  345. }
  346. [Fact]
  347. public async Task Border_Bottom_Aligns_Content()
  348. {
  349. Decorator target = new Decorator
  350. {
  351. Padding = new Thickness(8),
  352. Width = 200,
  353. Height = 200,
  354. Child = new Border
  355. {
  356. BorderBrush = Brushes.Black,
  357. BorderThickness = new Thickness(2),
  358. Child = new TextBlock
  359. {
  360. Text = "Foo",
  361. Background = Brushes.Red,
  362. FontFamily = "Segoe UI",
  363. FontSize = 12,
  364. VerticalAlignment = VerticalAlignment.Bottom,
  365. }
  366. }
  367. };
  368. await RenderToFile(target);
  369. CompareImages();
  370. }
  371. [Fact]
  372. public async Task Border_Nested_Rotate()
  373. {
  374. Decorator target = new Decorator
  375. {
  376. Padding = new Thickness(8),
  377. Width = 200,
  378. Height = 200,
  379. Child = new Border
  380. {
  381. Background = Brushes.Coral,
  382. Width = 100,
  383. Height = 100,
  384. HorizontalAlignment = HorizontalAlignment.Center,
  385. VerticalAlignment = VerticalAlignment.Center,
  386. Child = new Border
  387. {
  388. Margin = new Thickness(25),
  389. Background = Brushes.Chocolate,
  390. },
  391. RenderTransform = new RotateTransform(45),
  392. }
  393. };
  394. await RenderToFile(target);
  395. CompareImages();
  396. }
  397. }
  398. }