2
0

AdornmentTests.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. #nullable enable
  2. namespace ViewBaseTests.Adornments;
  3. [Collection ("Global Test Setup")]
  4. public class AdornmentTests
  5. {
  6. //private class TestView : View
  7. //{
  8. // public bool BorderDrawn { get; set; }
  9. // public bool PaddingDrawn { get; set; }
  10. // /// <inheritdoc />
  11. // protected override bool OnDrawingContent (DrawContext? context)
  12. // {
  13. // if (Border is { } && Border.Thickness != Thickness.Empty)
  14. // {
  15. // BorderDrawn = true;
  16. // Border.Draw ();
  17. // }
  18. // if (Padding is { } && Padding.Thickness != Thickness.Empty)
  19. // {
  20. // PaddingDrawn = true;
  21. // Padding.Draw ();
  22. // }
  23. // return base.OnDrawingContent ();
  24. // }
  25. //}
  26. //[Fact]
  27. //public void DrawAdornments_UsesCWPEventHelper ()
  28. //{
  29. // var view = new TestView
  30. // {
  31. // Id = "view"
  32. // };
  33. // view.Border!.Thickness = new Thickness (1);
  34. // view.Padding!.Thickness = new Thickness (1);
  35. // // Test cancellation
  36. // view.DrawingAdornments += OnDrawingAdornmentsHandled;
  37. // view.DoDrawAdornments (originalClip: null);
  38. // Assert.False (view.BorderDrawn);
  39. // Assert.False (view.PaddingDrawn);
  40. // view.DrawingAdornments -= OnDrawingAdornmentsHandled;
  41. // // Test successful drawing
  42. // view.DrawingAdornments += OnDrawingAdornmentsAssert;
  43. // view.BorderDrawn = false;
  44. // view.PaddingDrawn = false;
  45. // view.DoDrawAdornments (originalClip: null);
  46. // Assert.True (view.BorderDrawn);
  47. // Assert.True (view.PaddingDrawn);
  48. // view.Dispose ();
  49. // void OnDrawingAdornmentsHandled (object? sender, DrawAdornmentsEventArgs args) => args.Handled = true;
  50. // void OnDrawingAdornmentsAssert (object? sender, DrawAdornmentsEventArgs args) => Assert.Null (args.Context);
  51. //}
  52. [Fact]
  53. public void Viewport_Location_Always_Empty_Size_Correct ()
  54. {
  55. var view = new View
  56. {
  57. X = 1,
  58. Y = 2,
  59. Width = 20,
  60. Height = 20
  61. };
  62. view.BeginInit ();
  63. view.EndInit ();
  64. Assert.Equal (new (1, 2, 20, 20), view.Frame);
  65. Assert.Equal (new (0, 0, 20, 20), view.Viewport);
  66. var marginThickness = 1;
  67. view.Margin!.Thickness = new (marginThickness);
  68. Assert.Equal (new (0, 0, 18, 18), view.Viewport);
  69. var borderThickness = 2;
  70. view.Border!.Thickness = new (borderThickness);
  71. Assert.Equal (new (0, 0, 14, 14), view.Viewport);
  72. var paddingThickness = 3;
  73. view.Padding!.Thickness = new (paddingThickness);
  74. Assert.Equal (new (0, 0, 8, 8), view.Viewport);
  75. Assert.Equal (new (0, 0, view.Margin!.Frame.Width, view.Margin!.Frame.Height), view.Margin!.Viewport);
  76. Assert.Equal (new (0, 0, view.Border!.Frame.Width, view.Border!.Frame.Height), view.Border!.Viewport);
  77. Assert.Equal (new (0, 0, view.Padding.Frame.Width, view.Padding.Frame.Height), view.Padding.Viewport);
  78. }
  79. // Test that Adornment.Viewport_get override returns Frame.Size minus Thickness
  80. [Theory]
  81. [InlineData (0, 0, 0, 0, 0)]
  82. [InlineData (0, 0, 0, 1, 1)]
  83. [InlineData (0, 0, 0, 1, 0)]
  84. [InlineData (0, 0, 0, 0, 1)]
  85. [InlineData (1, 0, 0, 0, 0)]
  86. [InlineData (1, 0, 0, 1, 1)]
  87. [InlineData (1, 0, 0, 1, 0)]
  88. [InlineData (1, 0, 0, 0, 1)]
  89. [InlineData (1, 0, 0, 4, 4)]
  90. [InlineData (1, 0, 0, 4, 0)]
  91. [InlineData (1, 0, 0, 0, 4)]
  92. [InlineData (0, 1, 0, 0, 0)]
  93. [InlineData (0, 1, 0, 1, 1)]
  94. [InlineData (0, 1, 0, 1, 0)]
  95. [InlineData (0, 1, 0, 0, 1)]
  96. [InlineData (1, 1, 0, 0, 0)]
  97. [InlineData (1, 1, 0, 1, 1)]
  98. [InlineData (1, 1, 0, 1, 0)]
  99. [InlineData (1, 1, 0, 0, 1)]
  100. [InlineData (1, 1, 0, 4, 4)]
  101. [InlineData (1, 1, 0, 4, 0)]
  102. [InlineData (1, 1, 0, 0, 4)]
  103. [InlineData (0, 1, 1, 0, 0)]
  104. [InlineData (0, 1, 1, 1, 1)]
  105. [InlineData (0, 1, 1, 1, 0)]
  106. [InlineData (0, 1, 1, 0, 1)]
  107. [InlineData (1, 1, 1, 0, 0)]
  108. [InlineData (1, 1, 1, 1, 1)]
  109. [InlineData (1, 1, 1, 1, 0)]
  110. [InlineData (1, 1, 1, 0, 1)]
  111. [InlineData (1, 1, 1, 4, 4)]
  112. [InlineData (1, 1, 1, 4, 0)]
  113. [InlineData (1, 1, 1, 0, 4)]
  114. public void Viewport_Width_Is_Frame_Width (int thickness, int x, int y, int w, int h)
  115. {
  116. var adornment = new Adornment (null!);
  117. adornment.Thickness = new (thickness);
  118. adornment.Frame = new (x, y, w, h);
  119. Assert.Equal (new (x, y, w, h), adornment.Frame);
  120. var expectedBounds = new Rectangle (0, 0, w, h);
  121. Assert.Equal (expectedBounds, adornment.Viewport);
  122. }
  123. // Test that Adornment.Viewport_get override uses Parent not SuperView
  124. [Fact]
  125. public void BoundsToScreen_Uses_Parent_Not_SuperView ()
  126. {
  127. var parent = new View { X = 1, Y = 2, Width = 10, Height = 10 };
  128. parent.BeginInit ();
  129. parent.EndInit ();
  130. Assert.Equal (new (1, 2, 10, 10), parent.Frame);
  131. Assert.Equal (new (0, 0, 10, 10), parent.Viewport);
  132. Assert.Equal (new (0, 0, 10, 10), parent.Margin!.Frame);
  133. Assert.Equal (new (0, 0, 10, 10), parent.Margin!.Viewport);
  134. Assert.Null (parent.Margin!.SuperView);
  135. Rectangle boundsAsScreen = parent.Margin!.ViewportToScreen (new Rectangle (1, 2, 5, 5));
  136. Assert.Equal (new (2, 4, 5, 5), boundsAsScreen);
  137. }
  138. [Fact]
  139. public void SetAdornmentFrames_Sets_Frames_Correctly ()
  140. {
  141. var parent = new View { X = 1, Y = 2, Width = 10, Height = 20 };
  142. parent.SetAdornmentFrames ();
  143. Assert.Equal (new (1, 2, 10, 20), parent.Frame);
  144. Assert.Equal (new (0, 0, 10, 20), parent.Viewport);
  145. Assert.Equal (new (0, 0, 10, 20), parent.Margin!.Frame);
  146. Assert.Equal (new (0, 0, 10, 20), parent.Margin!.Viewport);
  147. }
  148. [Fact]
  149. public void Frames_are_Parent_SuperView_Relative ()
  150. {
  151. var view = new View
  152. {
  153. X = 1,
  154. Y = 2,
  155. Width = 20,
  156. Height = 31
  157. };
  158. var marginThickness = 1;
  159. view.Margin!.Thickness = new (marginThickness);
  160. var borderThickness = 2;
  161. view.Border!.Thickness = new (borderThickness);
  162. var paddingThickness = 3;
  163. view.Padding!.Thickness = new (paddingThickness);
  164. view.BeginInit ();
  165. view.EndInit ();
  166. Assert.Equal (new (1, 2, 20, 31), view.Frame);
  167. Assert.Equal (new (0, 0, 8, 19), view.Viewport);
  168. // Margin.Frame is always the same as the view frame
  169. Assert.Equal (new (0, 0, 20, 31), view.Margin!.Frame);
  170. // Border.Frame is View.Frame minus the Margin thickness
  171. Assert.Equal (
  172. new (marginThickness, marginThickness, view.Frame.Width - marginThickness * 2, view.Frame.Height - marginThickness * 2),
  173. view.Border!.Frame);
  174. // Padding.Frame is View.Frame minus the Border thickness plus Margin thickness
  175. Assert.Equal (
  176. new (
  177. marginThickness + borderThickness,
  178. marginThickness + borderThickness,
  179. view.Frame.Width - (marginThickness + borderThickness) * 2,
  180. view.Frame.Height - (marginThickness + borderThickness) * 2),
  181. view.Padding.Frame);
  182. }
  183. // Test that Adornment.FrameToScreen override retains Frame.Size
  184. [Theory]
  185. [InlineData (0, 0, 0)]
  186. [InlineData (0, 1, 1)]
  187. [InlineData (0, 10, 10)]
  188. [InlineData (1, 0, 0)]
  189. [InlineData (1, 1, 1)]
  190. [InlineData (1, 10, 10)]
  191. public void FrameToScreen_Retains_Frame_Size (int marginThickness, int w, int h)
  192. {
  193. var parent = new View { X = 1, Y = 2, Width = w, Height = h };
  194. parent.Margin!.Thickness = new (marginThickness);
  195. parent.BeginInit ();
  196. parent.EndInit ();
  197. Assert.Equal (new (1, 2, w, h), parent.Frame);
  198. Assert.Equal (new (0, 0, w, h), parent.Margin!.Frame);
  199. Assert.Equal (parent.Frame, parent.Margin!.FrameToScreen ());
  200. }
  201. // Test that Adornment.FrameToScreen override returns Frame if Parent is null
  202. [Fact]
  203. public void FrameToScreen_Returns_Frame_If_Parent_Is_Null ()
  204. {
  205. var a = new Adornment
  206. {
  207. X = 1,
  208. Y = 2,
  209. Width = 3,
  210. Height = 4
  211. };
  212. Assert.Null (a.Parent);
  213. Assert.Equal (a.Frame, a.FrameToScreen ());
  214. }
  215. // Test that Adornment.FrameToScreen override returns correct location
  216. [Theory]
  217. [InlineData (0, 0, 0, 0)]
  218. [InlineData (0, 0, 1, 1)]
  219. [InlineData (0, 0, 10, 10)]
  220. [InlineData (1, 0, 0, 0)]
  221. [InlineData (1, 0, 1, 1)]
  222. [InlineData (1, 0, 10, 10)]
  223. [InlineData (0, 1, 0, 0)]
  224. [InlineData (0, 1, 1, 1)]
  225. [InlineData (0, 1, 10, 10)]
  226. [InlineData (1, 1, 0, 0)]
  227. [InlineData (1, 1, 1, 1)]
  228. [InlineData (1, 1, 10, 10)]
  229. public void FrameToScreen_Returns_Screen_Location (int marginThickness, int borderThickness, int x, int y)
  230. {
  231. var superView = new View
  232. {
  233. X = 1,
  234. Y = 1,
  235. Width = 20,
  236. Height = 20
  237. };
  238. superView.Margin!.Thickness = new (marginThickness);
  239. superView.Border!.Thickness = new (borderThickness);
  240. var view = new View { X = x, Y = y, Width = 1, Height = 1 };
  241. superView.Add (view);
  242. superView.BeginInit ();
  243. superView.EndInit ();
  244. Assert.Equal (new (x, y, 1, 1), view.Frame);
  245. Assert.Equal (new (0, 0, 20, 20), superView.Margin!.Frame);
  246. Assert.Equal (
  247. new (marginThickness, marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2),
  248. superView.Border!.Frame
  249. );
  250. Assert.Equal (
  251. new (superView.Frame.X + marginThickness, superView.Frame.Y + marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2),
  252. superView.Border!.FrameToScreen ()
  253. );
  254. }
  255. // Test that Adornment.FrameToScreen override uses Parent not SuperView
  256. [Fact]
  257. public void FrameToScreen_Uses_Parent_Not_SuperView ()
  258. {
  259. var parent = new View { X = 1, Y = 2, Width = 10, Height = 10 };
  260. parent.BeginInit ();
  261. parent.EndInit ();
  262. Assert.Equal (new (1, 2, 10, 10), parent.Frame);
  263. Assert.Equal (new (0, 0, 10, 10), parent.Viewport);
  264. Assert.Equal (new (0, 0, 10, 10), parent.Margin!.Frame);
  265. Assert.Equal (new (0, 0, 10, 10), parent.Margin!.Viewport);
  266. Assert.Null (parent.Margin!.SuperView);
  267. Assert.Equal (new (1, 2, 10, 10), parent.Margin!.FrameToScreen ());
  268. }
  269. [Fact]
  270. public void GetAdornmentsThickness ()
  271. {
  272. var view = new View ();
  273. Assert.Equal (Thickness.Empty, view.GetAdornmentsThickness ());
  274. view.Margin!.Thickness = new (1);
  275. Assert.Equal (new (1), view.GetAdornmentsThickness ());
  276. view.Border!.Thickness = new (1);
  277. Assert.Equal (new (2), view.GetAdornmentsThickness ());
  278. view.Padding!.Thickness = new (1);
  279. Assert.Equal (new (3), view.GetAdornmentsThickness ());
  280. view.Padding.Thickness = new (2);
  281. Assert.Equal (new (4), view.GetAdornmentsThickness ());
  282. view.Padding.Thickness = new (1, 2, 3, 4);
  283. Assert.Equal (new (3, 4, 5, 6), view.GetAdornmentsThickness ());
  284. view.Margin!.Thickness = new (1, 2, 3, 4);
  285. Assert.Equal (new (3, 5, 7, 9), view.GetAdornmentsThickness ());
  286. view.Dispose ();
  287. }
  288. [Fact]
  289. public void Setting_Viewport_Throws ()
  290. {
  291. var adornment = new Adornment (null!);
  292. Assert.Throws<InvalidOperationException> (() => adornment.Viewport = new (1, 2, 3, 4));
  293. }
  294. [Fact]
  295. public void Setting_SuperViewRendersLineCanvas_Throws ()
  296. {
  297. var adornment = new Adornment (null!);
  298. Assert.Throws<InvalidOperationException> (() => adornment.SuperViewRendersLineCanvas = true);
  299. }
  300. [Fact]
  301. public void Setting_Thickness_Changes_Parent_Bounds ()
  302. {
  303. var parent = new View { Width = 10, Height = 10 };
  304. parent.BeginInit ();
  305. parent.EndInit ();
  306. Assert.Equal (new (0, 0, 10, 10), parent.Frame);
  307. Assert.Equal (new (0, 0, 10, 10), parent.Viewport);
  308. parent.Margin!.Thickness = new (1);
  309. Assert.Equal (new (0, 0, 10, 10), parent.Frame);
  310. Assert.Equal (new (0, 0, 8, 8), parent.Viewport);
  311. }
  312. [Fact]
  313. public void Setting_Thickness_Raises_ThicknessChanged ()
  314. {
  315. var adornment = new Adornment (null!);
  316. var super = new View ();
  317. var raised = false;
  318. adornment.ThicknessChanged += (s, e) =>
  319. {
  320. raised = true;
  321. Assert.Equal (new (1, 2, 3, 4), adornment.Thickness);
  322. };
  323. adornment.Thickness = new (1, 2, 3, 4);
  324. Assert.True (raised);
  325. }
  326. [Fact]
  327. public void Setting_Thickness_Causes_Parent_Layout ()
  328. {
  329. var parent = new View ();
  330. var raised = false;
  331. parent.BeginInit ();
  332. parent.EndInit ();
  333. parent.SubViewLayout += LayoutStarted;
  334. parent.Margin!.Thickness = new (1, 2, 3, 4);
  335. Assert.True (parent.NeedsLayout);
  336. Assert.True (parent.Margin!.NeedsLayout);
  337. parent.Layout ();
  338. Assert.True (raised);
  339. return;
  340. void LayoutStarted (object? sender, LayoutEventArgs e) { raised = true; }
  341. }
  342. [Fact]
  343. public void Setting_Thickness_Causes_Adornment_Layout ()
  344. {
  345. var parent = new View ();
  346. var raised = false;
  347. parent.BeginInit ();
  348. parent.EndInit ();
  349. parent.Margin!.SubViewLayout += LayoutStarted;
  350. parent.Margin!.Thickness = new (1, 2, 3, 4);
  351. Assert.True (parent.NeedsLayout);
  352. Assert.True (parent.Margin!.NeedsLayout);
  353. parent.Layout ();
  354. Assert.True (raised);
  355. return;
  356. void LayoutStarted (object? sender, LayoutEventArgs e) { raised = true; }
  357. }
  358. [Fact]
  359. public void Set_Viewport_Throws ()
  360. {
  361. View view = new ();
  362. view.BeginInit ();
  363. view.EndInit ();
  364. view.Padding!.Thickness = new (2, 2, 2, 2);
  365. Assert.Throws<InvalidOperationException> (() => view.Padding.Viewport = view.Padding.Viewport with { Location = new (1, 1) });
  366. }
  367. // Contains tests
  368. [Theory]
  369. [InlineData (0, 0, 0, 0, 0, 0, false)]
  370. [InlineData (0, 0, 0, 1, 0, 0, false)]
  371. [InlineData (0, 0, 1, 0, 0, 0, false)]
  372. [InlineData (0, 0, 1, 1, 0, 0, true)]
  373. [InlineData (0, 0, 1, 2, 0, 0, true)]
  374. [InlineData (1, 1, 0, 0, 0, 0, false)]
  375. [InlineData (1, 1, 0, 1, 0, 0, false)]
  376. [InlineData (1, 1, 1, 0, 0, 0, false)]
  377. [InlineData (1, 1, 1, 0, 0, 1, false)]
  378. [InlineData (1, 1, 1, 1, 1, 0, false)]
  379. [InlineData (1, 1, 1, 1, 0, 0, false)]
  380. [InlineData (1, 1, 1, 1, 1, 1, true)]
  381. [InlineData (1, 1, 1, 2, 1, 1, true)]
  382. public void Contains_Left_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected)
  383. {
  384. Adornment adornment = new () { Id = "adornment" };
  385. adornment.Parent = new() { Id = "parent" };
  386. adornment.Parent.Frame = new (x, y, width, height);
  387. adornment.Thickness = new (1, 0, 0, 0);
  388. adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty };
  389. bool result = adornment.Contains (new (pointX, pointY));
  390. Assert.Equal (expected, result);
  391. }
  392. [Theory]
  393. [InlineData (0, 0, 0, 0, 0, 0, false)]
  394. [InlineData (0, 0, 0, 1, 0, 0, false)]
  395. [InlineData (0, 0, 1, 0, 0, 0, false)]
  396. [InlineData (0, 0, 1, 1, 0, 0, true)]
  397. [InlineData (0, 0, 1, 2, 0, 0, true)]
  398. [InlineData (1, 1, 0, 0, 0, 0, false)]
  399. [InlineData (1, 1, 0, 1, 0, 0, false)]
  400. [InlineData (1, 1, 1, 0, 0, 0, false)]
  401. [InlineData (1, 1, 1, 0, 0, 1, false)]
  402. [InlineData (1, 1, 1, 1, 1, 0, false)]
  403. [InlineData (1, 1, 1, 1, 0, 0, false)]
  404. [InlineData (1, 1, 1, 1, 1, 1, true)]
  405. [InlineData (1, 1, 1, 2, 1, 1, true)]
  406. public void Contains_Right_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected)
  407. {
  408. Adornment adornment = new () { Id = "adornment" };
  409. adornment.Parent = new() { Id = "parent" };
  410. adornment.Parent.Frame = new (x, y, width, height);
  411. adornment.Thickness = new (0, 0, 1, 0);
  412. adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty };
  413. bool result = adornment.Contains (new (pointX, pointY));
  414. Assert.Equal (expected, result);
  415. }
  416. [Theory]
  417. [InlineData (0, 0, 0, 0, 0, 0, false)]
  418. [InlineData (0, 0, 0, 1, 0, 0, false)]
  419. [InlineData (0, 0, 1, 0, 0, 0, false)]
  420. [InlineData (0, 0, 1, 1, 0, 0, true)]
  421. [InlineData (0, 0, 1, 2, 0, 0, true)]
  422. [InlineData (1, 1, 0, 0, 0, 0, false)]
  423. [InlineData (1, 1, 0, 1, 0, 0, false)]
  424. [InlineData (1, 1, 1, 0, 0, 0, false)]
  425. [InlineData (1, 1, 1, 0, 0, 1, false)]
  426. [InlineData (1, 1, 1, 1, 1, 0, false)]
  427. [InlineData (1, 1, 1, 1, 0, 0, false)]
  428. [InlineData (1, 1, 1, 1, 1, 1, true)]
  429. [InlineData (1, 1, 1, 2, 1, 1, true)]
  430. public void Contains_Top_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected)
  431. {
  432. Adornment adornment = new () { Id = "adornment" };
  433. adornment.Parent = new() { Id = "parent" };
  434. adornment.Parent.Frame = new (x, y, width, height);
  435. adornment.Thickness = new (0, 1, 0, 0);
  436. adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty };
  437. bool result = adornment.Contains (new (pointX, pointY));
  438. Assert.Equal (expected, result);
  439. }
  440. [Theory]
  441. [InlineData (0, 0, 0, 0, 0, 0, false)]
  442. [InlineData (0, 0, 0, 1, 0, 0, false)]
  443. [InlineData (0, 0, 1, 0, 0, 0, false)]
  444. [InlineData (0, 0, 1, 1, 0, 0, true)]
  445. [InlineData (0, 0, 1, 2, 0, 0, true)]
  446. [InlineData (1, 1, 0, 0, 0, 0, false)]
  447. [InlineData (1, 1, 0, 1, 0, 0, false)]
  448. [InlineData (1, 1, 1, 0, 0, 0, false)]
  449. [InlineData (1, 1, 1, 0, 0, 1, false)]
  450. [InlineData (1, 1, 1, 1, 1, 0, false)]
  451. [InlineData (1, 1, 1, 1, 0, 0, false)]
  452. [InlineData (1, 1, 1, 1, 1, 1, true)]
  453. [InlineData (1, 1, 1, 2, 1, 1, true)]
  454. public void Contains_TopLeft_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected)
  455. {
  456. Adornment adornment = new () { Id = "adornment" };
  457. adornment.Parent = new() { Id = "parent" };
  458. adornment.Parent.Frame = new (x, y, width, height);
  459. adornment.Thickness = new (1, 1, 0, 0);
  460. adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty };
  461. bool result = adornment.Contains (new (pointX, pointY));
  462. Assert.Equal (expected, result);
  463. }
  464. }