GridTests.cs 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Xunit;
  5. using Xunit.Abstractions;
  6. namespace Avalonia.Controls.UnitTests
  7. {
  8. public class GridTests
  9. {
  10. private readonly ITestOutputHelper output;
  11. public GridTests(ITestOutputHelper output)
  12. {
  13. this.output = output;
  14. }
  15. private Grid CreateGrid(params (string name, GridLength width)[] columns)
  16. {
  17. return CreateGrid(columns.Select(c =>
  18. (c.name, c.width, ColumnDefinition.MinWidthProperty.GetDefaultValue(typeof(ColumnDefinition)))).ToArray());
  19. }
  20. private Grid CreateGrid(params (string name, GridLength width, double minWidth)[] columns)
  21. {
  22. return CreateGrid(columns.Select(c =>
  23. (c.name, c.width, c.minWidth, ColumnDefinition.MaxWidthProperty.GetDefaultValue(typeof(ColumnDefinition)))).ToArray());
  24. }
  25. private Grid CreateGrid(params (string name, GridLength width, double minWidth, double maxWidth)[] columns)
  26. {
  27. var grid = new Grid();
  28. foreach (var k in columns.Select(c => new ColumnDefinition
  29. {
  30. SharedSizeGroup = c.name,
  31. Width = c.width,
  32. MinWidth = c.minWidth,
  33. MaxWidth = c.maxWidth
  34. }))
  35. grid.ColumnDefinitions.Add(k);
  36. return grid;
  37. }
  38. private Control AddSizer(Grid grid, int column, double size = 30)
  39. {
  40. var ctrl = new Control { MinWidth = size, MinHeight = size };
  41. ctrl.SetValue(Grid.ColumnProperty, column);
  42. grid.Children.Add(ctrl);
  43. output.WriteLine($"[AddSizer] Column: {column} MinWidth: {size} MinHeight: {size}");
  44. return ctrl;
  45. }
  46. private void PrintColumnDefinitions(Grid grid)
  47. {
  48. output.WriteLine($"[Grid] ActualWidth: {grid.Bounds.Width} ActualHeight: {grid.Bounds.Width}");
  49. output.WriteLine($"[ColumnDefinitions]");
  50. for (int i = 0; i < grid.ColumnDefinitions.Count; i++)
  51. {
  52. var cd = grid.ColumnDefinitions[i];
  53. output.WriteLine($"[{i}] ActualWidth: {cd.ActualWidth} SharedSizeGroup: {cd.SharedSizeGroup}");
  54. }
  55. }
  56. [Fact]
  57. public void Calculates_Colspan_Correctly()
  58. {
  59. var target = new Grid
  60. {
  61. ColumnDefinitions = new ColumnDefinitions
  62. {
  63. new ColumnDefinition(GridLength.Auto),
  64. new ColumnDefinition(new GridLength(4, GridUnitType.Pixel)),
  65. new ColumnDefinition(GridLength.Auto),
  66. },
  67. RowDefinitions = new RowDefinitions
  68. {
  69. new RowDefinition(GridLength.Auto),
  70. new RowDefinition(GridLength.Auto),
  71. },
  72. Children =
  73. {
  74. new Border
  75. {
  76. Width = 100,
  77. Height = 25,
  78. [Grid.ColumnSpanProperty] = 3,
  79. },
  80. new Border
  81. {
  82. Width = 150,
  83. Height = 25,
  84. [Grid.RowProperty] = 1,
  85. },
  86. new Border
  87. {
  88. Width = 50,
  89. Height = 25,
  90. [Grid.RowProperty] = 1,
  91. [Grid.ColumnProperty] = 2,
  92. }
  93. },
  94. };
  95. target.Measure(Size.Infinity);
  96. // Issue #25 only appears after a second measure
  97. target.InvalidateMeasure();
  98. target.Measure(Size.Infinity);
  99. target.Arrange(new Rect(target.DesiredSize));
  100. Assert.Equal(new Size(204, 50), target.Bounds.Size);
  101. Assert.Equal(150d, target.ColumnDefinitions[0].ActualWidth);
  102. Assert.Equal(4d, target.ColumnDefinitions[1].ActualWidth);
  103. Assert.Equal(50d, target.ColumnDefinitions[2].ActualWidth);
  104. Assert.Equal(new Rect(52, 0, 100, 25), target.Children[0].Bounds);
  105. Assert.Equal(new Rect(0, 25, 150, 25), target.Children[1].Bounds);
  106. Assert.Equal(new Rect(154, 25, 50, 25), target.Children[2].Bounds);
  107. }
  108. [Fact]
  109. public void Layout_EmptyColumnRow_LayoutLikeANormalPanel()
  110. {
  111. // Arrange & Action
  112. var grid = GridMock.New(arrange: new Size(600, 200));
  113. // Assert
  114. GridAssert.ChildrenWidth(grid, 600);
  115. GridAssert.ChildrenHeight(grid, 200);
  116. }
  117. [Fact]
  118. public void Layout_PixelRowColumn_BoundsCorrect()
  119. {
  120. // Arrange & Action
  121. var rowGrid = GridMock.New(new RowDefinitions("100,200,300"));
  122. var columnGrid = GridMock.New(new ColumnDefinitions("50,100,150"));
  123. // Assert
  124. GridAssert.ChildrenHeight(rowGrid, 100, 200, 300);
  125. GridAssert.ChildrenWidth(columnGrid, 50, 100, 150);
  126. }
  127. [Fact]
  128. public void Layout_StarRowColumn_BoundsCorrect()
  129. {
  130. // Arrange & Action
  131. var rowGrid = GridMock.New(new RowDefinitions("1*,2*,3*"), 600);
  132. var columnGrid = GridMock.New(new ColumnDefinitions("*,*,2*"), 600);
  133. // Assert
  134. GridAssert.ChildrenHeight(rowGrid, 100, 200, 300);
  135. GridAssert.ChildrenWidth(columnGrid, 150, 150, 300);
  136. }
  137. [Fact]
  138. public void Layout_MixPixelStarRowColumn_BoundsCorrect()
  139. {
  140. // Arrange & Action
  141. var rowGrid = GridMock.New(new RowDefinitions("1*,2*,150"), 600);
  142. var columnGrid = GridMock.New(new ColumnDefinitions("1*,2*,150"), 600);
  143. // Assert
  144. GridAssert.ChildrenHeight(rowGrid, 150, 300, 150);
  145. GridAssert.ChildrenWidth(columnGrid, 150, 300, 150);
  146. }
  147. [Fact]
  148. public void Layout_StarRowColumnWithMinLength_BoundsCorrect()
  149. {
  150. // Arrange & Action
  151. var rowGrid = GridMock.New(new RowDefinitions
  152. {
  153. new RowDefinition(1, GridUnitType.Star) { MinHeight = 200 },
  154. new RowDefinition(1, GridUnitType.Star),
  155. new RowDefinition(1, GridUnitType.Star),
  156. }, 300);
  157. var columnGrid = GridMock.New(new ColumnDefinitions
  158. {
  159. new ColumnDefinition(1, GridUnitType.Star) { MinWidth = 200 },
  160. new ColumnDefinition(1, GridUnitType.Star),
  161. new ColumnDefinition(1, GridUnitType.Star),
  162. }, 300);
  163. // Assert
  164. GridAssert.ChildrenHeight(rowGrid, 200, 50, 50);
  165. GridAssert.ChildrenWidth(columnGrid, 200, 50, 50);
  166. }
  167. [Fact]
  168. public void Layout_StarRowColumnWithMaxLength_BoundsCorrect()
  169. {
  170. // Arrange & Action
  171. var rowGrid = GridMock.New(new RowDefinitions
  172. {
  173. new RowDefinition(1, GridUnitType.Star) { MaxHeight = 200 },
  174. new RowDefinition(1, GridUnitType.Star),
  175. new RowDefinition(1, GridUnitType.Star),
  176. }, 800);
  177. var columnGrid = GridMock.New(new ColumnDefinitions
  178. {
  179. new ColumnDefinition(1, GridUnitType.Star) { MaxWidth = 200 },
  180. new ColumnDefinition(1, GridUnitType.Star),
  181. new ColumnDefinition(1, GridUnitType.Star),
  182. }, 800);
  183. // Assert
  184. GridAssert.ChildrenHeight(rowGrid, 200, 300, 300);
  185. GridAssert.ChildrenWidth(columnGrid, 200, 300, 300);
  186. }
  187. [Fact]
  188. public void Changing_Child_Column_Invalidates_Measure()
  189. {
  190. Border child;
  191. var target = new Grid
  192. {
  193. ColumnDefinitions = new ColumnDefinitions("*,*"),
  194. Children =
  195. {
  196. (child = new Border
  197. {
  198. [Grid.ColumnProperty] = 0,
  199. }),
  200. }
  201. };
  202. target.Measure(Size.Infinity);
  203. target.Arrange(new Rect(target.DesiredSize));
  204. Assert.True(target.IsMeasureValid);
  205. Grid.SetColumn(child, 1);
  206. Assert.False(target.IsMeasureValid);
  207. }
  208. [Fact]
  209. public void Grid_GridLength_Same_Size_Pixel_0()
  210. {
  211. var grid = CreateGrid(
  212. (null, new GridLength()),
  213. (null, new GridLength()),
  214. (null, new GridLength()),
  215. (null, new GridLength()));
  216. var scope = new Grid();
  217. scope.Children.Add(grid);
  218. var root = new Grid();
  219. root.UseLayoutRounding = false;
  220. root.SetValue(Grid.IsSharedSizeScopeProperty, false);
  221. root.Children.Add(scope);
  222. grid.Measure(new Size(200, 200));
  223. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  224. PrintColumnDefinitions(grid);
  225. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == null), cd => Assert.Equal(0, cd.ActualWidth));
  226. }
  227. [Fact]
  228. public void Grid_GridLength_Same_Size_Pixel_50()
  229. {
  230. var grid = CreateGrid(
  231. (null, new GridLength(50)),
  232. (null, new GridLength(50)),
  233. (null, new GridLength(50)),
  234. (null, new GridLength(50)));
  235. var scope = new Grid();
  236. scope.Children.Add(grid);
  237. var root = new Grid();
  238. root.UseLayoutRounding = false;
  239. root.SetValue(Grid.IsSharedSizeScopeProperty, false);
  240. root.Children.Add(scope);
  241. grid.Measure(new Size(200, 200));
  242. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  243. PrintColumnDefinitions(grid);
  244. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == null), cd => Assert.Equal(50, cd.ActualWidth));
  245. }
  246. [Fact]
  247. public void Grid_GridLength_Same_Size_Auto()
  248. {
  249. var grid = CreateGrid(
  250. (null, new GridLength(0, GridUnitType.Auto)),
  251. (null, new GridLength(0, GridUnitType.Auto)),
  252. (null, new GridLength(0, GridUnitType.Auto)),
  253. (null, new GridLength(0, GridUnitType.Auto)));
  254. var scope = new Grid();
  255. scope.Children.Add(grid);
  256. var root = new Grid();
  257. root.UseLayoutRounding = false;
  258. root.SetValue(Grid.IsSharedSizeScopeProperty, false);
  259. root.Children.Add(scope);
  260. grid.Measure(new Size(200, 200));
  261. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  262. PrintColumnDefinitions(grid);
  263. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == null), cd => Assert.Equal(0, cd.ActualWidth));
  264. }
  265. [Fact]
  266. public void Grid_GridLength_Same_Size_Star()
  267. {
  268. var grid = CreateGrid(
  269. (null, new GridLength(1, GridUnitType.Star)),
  270. (null, new GridLength(1, GridUnitType.Star)),
  271. (null, new GridLength(1, GridUnitType.Star)),
  272. (null, new GridLength(1, GridUnitType.Star)));
  273. var scope = new Grid();
  274. scope.Children.Add(grid);
  275. var root = new Grid();
  276. root.UseLayoutRounding = false;
  277. root.SetValue(Grid.IsSharedSizeScopeProperty, false);
  278. root.Children.Add(scope);
  279. grid.Measure(new Size(200, 200));
  280. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  281. PrintColumnDefinitions(grid);
  282. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == null), cd => Assert.Equal(50, cd.ActualWidth));
  283. }
  284. [Fact]
  285. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0()
  286. {
  287. var grid = CreateGrid(
  288. ("A", new GridLength()),
  289. ("A", new GridLength()),
  290. ("A", new GridLength()),
  291. ("A", new GridLength()));
  292. var scope = new Grid();
  293. scope.Children.Add(grid);
  294. var root = new Grid();
  295. root.UseLayoutRounding = false;
  296. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  297. root.Children.Add(scope);
  298. grid.Measure(new Size(200, 200));
  299. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  300. PrintColumnDefinitions(grid);
  301. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  302. }
  303. [Fact]
  304. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50()
  305. {
  306. var grid = CreateGrid(
  307. ("A", new GridLength(50)),
  308. ("A", new GridLength(50)),
  309. ("A", new GridLength(50)),
  310. ("A", new GridLength(50)));
  311. var scope = new Grid();
  312. scope.Children.Add(grid);
  313. var root = new Grid();
  314. root.UseLayoutRounding = false;
  315. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  316. root.Children.Add(scope);
  317. grid.Measure(new Size(200, 200));
  318. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  319. PrintColumnDefinitions(grid);
  320. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(50, cd.ActualWidth));
  321. }
  322. [Fact]
  323. public void SharedSize_Grid_GridLength_Same_Size_Auto()
  324. {
  325. var grid = CreateGrid(
  326. ("A", new GridLength(0, GridUnitType.Auto)),
  327. ("A", new GridLength(0, GridUnitType.Auto)),
  328. ("A", new GridLength(0, GridUnitType.Auto)),
  329. ("A", new GridLength(0, GridUnitType.Auto)));
  330. var scope = new Grid();
  331. scope.Children.Add(grid);
  332. var root = new Grid();
  333. root.UseLayoutRounding = false;
  334. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  335. root.Children.Add(scope);
  336. grid.Measure(new Size(200, 200));
  337. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  338. PrintColumnDefinitions(grid);
  339. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  340. }
  341. [Fact]
  342. public void SharedSize_Grid_GridLength_Same_Size_Star()
  343. {
  344. var grid = CreateGrid(
  345. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  346. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  347. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  348. ("A", new GridLength(1, GridUnitType.Star))); // Star sizing is treated as Auto, 1 is ignored
  349. var scope = new Grid();
  350. scope.Children.Add(grid);
  351. var root = new Grid();
  352. root.UseLayoutRounding = false;
  353. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  354. root.Children.Add(scope);
  355. grid.Measure(new Size(200, 200));
  356. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  357. PrintColumnDefinitions(grid);
  358. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  359. }
  360. [Fact]
  361. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_First_Column_0()
  362. {
  363. var grid = CreateGrid(
  364. (null, new GridLength()),
  365. ("A", new GridLength()),
  366. ("A", new GridLength()),
  367. ("A", new GridLength()),
  368. ("A", new GridLength()));
  369. var scope = new Grid();
  370. scope.Children.Add(grid);
  371. var root = new Grid();
  372. root.UseLayoutRounding = false;
  373. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  374. root.Children.Add(scope);
  375. grid.Measure(new Size(200, 200));
  376. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  377. PrintColumnDefinitions(grid);
  378. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  379. }
  380. [Fact]
  381. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_First_Column_0()
  382. {
  383. var grid = CreateGrid(
  384. (null, new GridLength()),
  385. ("A", new GridLength(50)),
  386. ("A", new GridLength(50)),
  387. ("A", new GridLength(50)),
  388. ("A", new GridLength(50)));
  389. var scope = new Grid();
  390. scope.Children.Add(grid);
  391. var root = new Grid();
  392. root.UseLayoutRounding = false;
  393. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  394. root.Children.Add(scope);
  395. grid.Measure(new Size(200, 200));
  396. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  397. PrintColumnDefinitions(grid);
  398. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(50, cd.ActualWidth));
  399. }
  400. [Fact]
  401. public void SharedSize_Grid_GridLength_Same_Size_Auto_First_Column_0()
  402. {
  403. var grid = CreateGrid(
  404. (null, new GridLength()),
  405. ("A", new GridLength(0, GridUnitType.Auto)),
  406. ("A", new GridLength(0, GridUnitType.Auto)),
  407. ("A", new GridLength(0, GridUnitType.Auto)),
  408. ("A", new GridLength(0, GridUnitType.Auto)));
  409. var scope = new Grid();
  410. scope.Children.Add(grid);
  411. var root = new Grid();
  412. root.UseLayoutRounding = false;
  413. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  414. root.Children.Add(scope);
  415. grid.Measure(new Size(200, 200));
  416. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  417. PrintColumnDefinitions(grid);
  418. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  419. }
  420. [Fact]
  421. public void SharedSize_Grid_GridLength_Same_Size_Star_First_Column_0()
  422. {
  423. var grid = CreateGrid(
  424. (null, new GridLength()),
  425. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  426. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  427. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  428. ("A", new GridLength(1, GridUnitType.Star))); // Star sizing is treated as Auto, 1 is ignored
  429. var scope = new Grid();
  430. scope.Children.Add(grid);
  431. var root = new Grid();
  432. root.UseLayoutRounding = false;
  433. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  434. root.Children.Add(scope);
  435. grid.Measure(new Size(200, 200));
  436. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  437. PrintColumnDefinitions(grid);
  438. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  439. }
  440. [Fact]
  441. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_Last_Column_0()
  442. {
  443. var grid = CreateGrid(
  444. ("A", new GridLength()),
  445. ("A", new GridLength()),
  446. ("A", new GridLength()),
  447. ("A", new GridLength()),
  448. (null, new GridLength()));
  449. var scope = new Grid();
  450. scope.Children.Add(grid);
  451. var root = new Grid();
  452. root.UseLayoutRounding = false;
  453. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  454. root.Children.Add(scope);
  455. grid.Measure(new Size(200, 200));
  456. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  457. PrintColumnDefinitions(grid);
  458. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  459. }
  460. [Fact]
  461. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_Last_Column_0()
  462. {
  463. var grid = CreateGrid(
  464. ("A", new GridLength(50)),
  465. ("A", new GridLength(50)),
  466. ("A", new GridLength(50)),
  467. ("A", new GridLength(50)),
  468. (null, new GridLength()));
  469. var scope = new Grid();
  470. scope.Children.Add(grid);
  471. var root = new Grid();
  472. root.UseLayoutRounding = false;
  473. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  474. root.Children.Add(scope);
  475. grid.Measure(new Size(200, 200));
  476. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  477. PrintColumnDefinitions(grid);
  478. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(50, cd.ActualWidth));
  479. }
  480. [Fact]
  481. public void SharedSize_Grid_GridLength_Same_Size_Auto_Last_Column_0()
  482. {
  483. var grid = CreateGrid(
  484. ("A", new GridLength(0, GridUnitType.Auto)),
  485. ("A", new GridLength(0, GridUnitType.Auto)),
  486. ("A", new GridLength(0, GridUnitType.Auto)),
  487. ("A", new GridLength(0, GridUnitType.Auto)),
  488. (null, new GridLength()));
  489. var scope = new Grid();
  490. scope.Children.Add(grid);
  491. var root = new Grid();
  492. root.UseLayoutRounding = false;
  493. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  494. root.Children.Add(scope);
  495. grid.Measure(new Size(200, 200));
  496. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  497. PrintColumnDefinitions(grid);
  498. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  499. }
  500. [Fact]
  501. public void SharedSize_Grid_GridLength_Same_Size_Star_Last_Column_0()
  502. {
  503. var grid = CreateGrid(
  504. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  505. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  506. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  507. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  508. (null, new GridLength()));
  509. var scope = new Grid();
  510. scope.Children.Add(grid);
  511. var root = new Grid();
  512. root.UseLayoutRounding = false;
  513. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  514. root.Children.Add(scope);
  515. grid.Measure(new Size(200, 200));
  516. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  517. PrintColumnDefinitions(grid);
  518. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  519. }
  520. [Fact]
  521. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_First_And_Last_Column_0()
  522. {
  523. var grid = CreateGrid(
  524. (null, new GridLength()),
  525. ("A", new GridLength()),
  526. ("A", new GridLength()),
  527. ("A", new GridLength()),
  528. ("A", new GridLength()),
  529. (null, new GridLength()));
  530. var scope = new Grid();
  531. scope.Children.Add(grid);
  532. var root = new Grid();
  533. root.UseLayoutRounding = false;
  534. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  535. root.Children.Add(scope);
  536. grid.Measure(new Size(200, 200));
  537. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  538. PrintColumnDefinitions(grid);
  539. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  540. }
  541. [Fact]
  542. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_First_And_Last_Column_0()
  543. {
  544. var grid = CreateGrid(
  545. (null, new GridLength()),
  546. ("A", new GridLength(50)),
  547. ("A", new GridLength(50)),
  548. ("A", new GridLength(50)),
  549. ("A", new GridLength(50)),
  550. (null, new GridLength()));
  551. var scope = new Grid();
  552. scope.Children.Add(grid);
  553. var root = new Grid();
  554. root.UseLayoutRounding = false;
  555. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  556. root.Children.Add(scope);
  557. grid.Measure(new Size(200, 200));
  558. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  559. PrintColumnDefinitions(grid);
  560. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(50, cd.ActualWidth));
  561. }
  562. [Fact]
  563. public void SharedSize_Grid_GridLength_Same_Size_Auto_First_And_Last_Column_0()
  564. {
  565. var grid = CreateGrid(
  566. (null, new GridLength()),
  567. ("A", new GridLength(0, GridUnitType.Auto)),
  568. ("A", new GridLength(0, GridUnitType.Auto)),
  569. ("A", new GridLength(0, GridUnitType.Auto)),
  570. ("A", new GridLength(0, GridUnitType.Auto)),
  571. (null, new GridLength()));
  572. var scope = new Grid();
  573. scope.Children.Add(grid);
  574. var root = new Grid();
  575. root.UseLayoutRounding = false;
  576. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  577. root.Children.Add(scope);
  578. grid.Measure(new Size(200, 200));
  579. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  580. PrintColumnDefinitions(grid);
  581. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  582. }
  583. [Fact]
  584. public void SharedSize_Grid_GridLength_Same_Size_Star_First_And_Last_Column_0()
  585. {
  586. var grid = CreateGrid(
  587. (null, new GridLength()),
  588. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  589. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  590. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  591. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  592. (null, new GridLength()));
  593. var scope = new Grid();
  594. scope.Children.Add(grid);
  595. var root = new Grid();
  596. root.UseLayoutRounding = false;
  597. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  598. root.Children.Add(scope);
  599. grid.Measure(new Size(200, 200));
  600. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  601. PrintColumnDefinitions(grid);
  602. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  603. }
  604. [Fact]
  605. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_Two_Groups()
  606. {
  607. var grid = CreateGrid(
  608. ("A", new GridLength()),
  609. ("B", new GridLength()),
  610. ("B", new GridLength()),
  611. ("A", new GridLength()));
  612. var scope = new Grid();
  613. scope.Children.Add(grid);
  614. var root = new Grid();
  615. root.UseLayoutRounding = false;
  616. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  617. root.Children.Add(scope);
  618. grid.Measure(new Size(200, 200));
  619. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  620. PrintColumnDefinitions(grid);
  621. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  622. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  623. }
  624. [Fact]
  625. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_Two_Groups()
  626. {
  627. var grid = CreateGrid(
  628. ("A", new GridLength(25)),
  629. ("B", new GridLength(75)),
  630. ("B", new GridLength(75)),
  631. ("A", new GridLength(25)));
  632. var scope = new Grid();
  633. scope.Children.Add(grid);
  634. var root = new Grid();
  635. root.UseLayoutRounding = false;
  636. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  637. root.Children.Add(scope);
  638. grid.Measure(new Size(200, 200));
  639. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  640. PrintColumnDefinitions(grid);
  641. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  642. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  643. }
  644. [Fact]
  645. public void SharedSize_Grid_GridLength_Same_Size_Auto_Two_Groups()
  646. {
  647. var grid = CreateGrid(
  648. ("A", new GridLength(0, GridUnitType.Auto)),
  649. ("B", new GridLength(0, GridUnitType.Auto)),
  650. ("B", new GridLength(0, GridUnitType.Auto)),
  651. ("A", new GridLength(0, GridUnitType.Auto)));
  652. var scope = new Grid();
  653. scope.Children.Add(grid);
  654. var root = new Grid();
  655. root.UseLayoutRounding = false;
  656. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  657. root.Children.Add(scope);
  658. grid.Measure(new Size(200, 200));
  659. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  660. PrintColumnDefinitions(grid);
  661. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  662. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  663. }
  664. [Fact]
  665. public void SharedSize_Grid_GridLength_Same_Size_Star_Two_Groups()
  666. {
  667. var grid = CreateGrid(
  668. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  669. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  670. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  671. ("A", new GridLength(1, GridUnitType.Star))); // Star sizing is treated as Auto, 1 is ignored
  672. var scope = new Grid();
  673. scope.Children.Add(grid);
  674. var root = new Grid();
  675. root.UseLayoutRounding = false;
  676. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  677. root.Children.Add(scope);
  678. grid.Measure(new Size(200, 200));
  679. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  680. PrintColumnDefinitions(grid);
  681. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  682. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  683. }
  684. [Fact]
  685. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_First_Column_0_Two_Groups()
  686. {
  687. var grid = CreateGrid(
  688. (null, new GridLength()),
  689. ("A", new GridLength()),
  690. ("B", new GridLength()),
  691. ("B", new GridLength()),
  692. ("A", new GridLength()));
  693. var scope = new Grid();
  694. scope.Children.Add(grid);
  695. var root = new Grid();
  696. root.UseLayoutRounding = false;
  697. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  698. root.Children.Add(scope);
  699. grid.Measure(new Size(200, 200));
  700. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  701. PrintColumnDefinitions(grid);
  702. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  703. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  704. }
  705. [Fact]
  706. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_First_Column_0_Two_Groups()
  707. {
  708. var grid = CreateGrid(
  709. (null, new GridLength()),
  710. ("A", new GridLength(25)),
  711. ("B", new GridLength(75)),
  712. ("B", new GridLength(75)),
  713. ("A", new GridLength(25)));
  714. var scope = new Grid();
  715. scope.Children.Add(grid);
  716. var root = new Grid();
  717. root.UseLayoutRounding = false;
  718. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  719. root.Children.Add(scope);
  720. grid.Measure(new Size(200, 200));
  721. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  722. PrintColumnDefinitions(grid);
  723. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  724. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  725. }
  726. [Fact]
  727. public void SharedSize_Grid_GridLength_Same_Size_Auto_First_Column_0_Two_Groups()
  728. {
  729. var grid = CreateGrid(
  730. (null, new GridLength()),
  731. ("A", new GridLength(0, GridUnitType.Auto)),
  732. ("B", new GridLength(0, GridUnitType.Auto)),
  733. ("B", new GridLength(0, GridUnitType.Auto)),
  734. ("A", new GridLength(0, GridUnitType.Auto)));
  735. var scope = new Grid();
  736. scope.Children.Add(grid);
  737. var root = new Grid();
  738. root.UseLayoutRounding = false;
  739. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  740. root.Children.Add(scope);
  741. grid.Measure(new Size(200, 200));
  742. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  743. PrintColumnDefinitions(grid);
  744. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  745. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  746. }
  747. [Fact]
  748. public void SharedSize_Grid_GridLength_Same_Size_Star_First_Column_0_Two_Groups()
  749. {
  750. var grid = CreateGrid(
  751. (null, new GridLength()),
  752. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  753. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  754. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  755. ("A", new GridLength(1, GridUnitType.Star))); // Star sizing is treated as Auto, 1 is ignored
  756. var scope = new Grid();
  757. scope.Children.Add(grid);
  758. var root = new Grid();
  759. root.UseLayoutRounding = false;
  760. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  761. root.Children.Add(scope);
  762. grid.Measure(new Size(200, 200));
  763. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  764. PrintColumnDefinitions(grid);
  765. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  766. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  767. }
  768. [Fact]
  769. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_Last_Column_0_Two_Groups()
  770. {
  771. var grid = CreateGrid(
  772. ("A", new GridLength()),
  773. ("B", new GridLength()),
  774. ("B", new GridLength()),
  775. ("A", new GridLength()),
  776. (null, new GridLength()));
  777. var scope = new Grid();
  778. scope.Children.Add(grid);
  779. var root = new Grid();
  780. root.UseLayoutRounding = false;
  781. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  782. root.Children.Add(scope);
  783. grid.Measure(new Size(200, 200));
  784. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  785. PrintColumnDefinitions(grid);
  786. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  787. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  788. }
  789. [Fact]
  790. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_Last_Column_0_Two_Groups()
  791. {
  792. var grid = CreateGrid(
  793. ("A", new GridLength(25)),
  794. ("B", new GridLength(75)),
  795. ("B", new GridLength(75)),
  796. ("A", new GridLength(25)),
  797. (null, new GridLength()));
  798. var scope = new Grid();
  799. scope.Children.Add(grid);
  800. var root = new Grid();
  801. root.UseLayoutRounding = false;
  802. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  803. root.Children.Add(scope);
  804. grid.Measure(new Size(200, 200));
  805. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  806. PrintColumnDefinitions(grid);
  807. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  808. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  809. }
  810. [Fact]
  811. public void SharedSize_Grid_GridLength_Same_Size_Auto_Last_Column_0_Two_Groups()
  812. {
  813. var grid = CreateGrid(
  814. ("A", new GridLength(0, GridUnitType.Auto)),
  815. ("B", new GridLength(0, GridUnitType.Auto)),
  816. ("B", new GridLength(0, GridUnitType.Auto)),
  817. ("A", new GridLength(0, GridUnitType.Auto)),
  818. (null, new GridLength()));
  819. var scope = new Grid();
  820. scope.Children.Add(grid);
  821. var root = new Grid();
  822. root.UseLayoutRounding = false;
  823. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  824. root.Children.Add(scope);
  825. grid.Measure(new Size(200, 200));
  826. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  827. PrintColumnDefinitions(grid);
  828. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  829. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  830. }
  831. [Fact]
  832. public void SharedSize_Grid_GridLength_Same_Size_Star_Last_Column_0_Two_Groups()
  833. {
  834. var grid = CreateGrid(
  835. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  836. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  837. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  838. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  839. (null, new GridLength()));
  840. var scope = new Grid();
  841. scope.Children.Add(grid);
  842. var root = new Grid();
  843. root.UseLayoutRounding = false;
  844. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  845. root.Children.Add(scope);
  846. grid.Measure(new Size(200, 200));
  847. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  848. PrintColumnDefinitions(grid);
  849. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  850. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  851. }
  852. [Fact]
  853. public void SharedSize_Grid_GridLength_Same_Size_Pixel_0_First_And_Last_Column_0_Two_Groups()
  854. {
  855. var grid = CreateGrid(
  856. (null, new GridLength()),
  857. ("A", new GridLength()),
  858. ("B", new GridLength()),
  859. ("B", new GridLength()),
  860. ("A", new GridLength()),
  861. (null, new GridLength()));
  862. var scope = new Grid();
  863. scope.Children.Add(grid);
  864. var root = new Grid();
  865. root.UseLayoutRounding = false;
  866. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  867. root.Children.Add(scope);
  868. grid.Measure(new Size(200, 200));
  869. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  870. PrintColumnDefinitions(grid);
  871. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  872. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  873. }
  874. [Fact]
  875. public void SharedSize_Grid_GridLength_Same_Size_Pixel_50_First_And_Last_Column_0_Two_Groups()
  876. {
  877. var grid = CreateGrid(
  878. (null, new GridLength()),
  879. ("A", new GridLength(25)),
  880. ("B", new GridLength(75)),
  881. ("B", new GridLength(75)),
  882. ("A", new GridLength(25)),
  883. (null, new GridLength()));
  884. var scope = new Grid();
  885. scope.Children.Add(grid);
  886. var root = new Grid();
  887. root.UseLayoutRounding = false;
  888. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  889. root.Children.Add(scope);
  890. grid.Measure(new Size(200, 200));
  891. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  892. PrintColumnDefinitions(grid);
  893. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  894. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  895. }
  896. [Fact]
  897. public void SharedSize_Grid_GridLength_Same_Size_Auto_First_And_Last_Column_0_Two_Groups()
  898. {
  899. var grid = CreateGrid(
  900. (null, new GridLength()),
  901. ("A", new GridLength(0, GridUnitType.Auto)),
  902. ("B", new GridLength(0, GridUnitType.Auto)),
  903. ("B", new GridLength(0, GridUnitType.Auto)),
  904. ("A", new GridLength(0, GridUnitType.Auto)),
  905. (null, new GridLength()));
  906. var scope = new Grid();
  907. scope.Children.Add(grid);
  908. var root = new Grid();
  909. root.UseLayoutRounding = false;
  910. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  911. root.Children.Add(scope);
  912. grid.Measure(new Size(200, 200));
  913. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  914. PrintColumnDefinitions(grid);
  915. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  916. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  917. }
  918. [Fact]
  919. public void SharedSize_Grid_GridLength_Same_Size_Star_First_And_Last_Column_0_Two_Groups()
  920. {
  921. var grid = CreateGrid(
  922. (null, new GridLength()),
  923. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  924. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  925. ("B", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  926. ("A", new GridLength(1, GridUnitType.Star)), // Star sizing is treated as Auto, 1 is ignored
  927. (null, new GridLength()));
  928. var scope = new Grid();
  929. scope.Children.Add(grid);
  930. var root = new Grid();
  931. root.UseLayoutRounding = false;
  932. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  933. root.Children.Add(scope);
  934. grid.Measure(new Size(200, 200));
  935. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  936. PrintColumnDefinitions(grid);
  937. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  938. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(0, cd.ActualWidth));
  939. }
  940. [Fact]
  941. public void Size_Propagation_Is_Constrained_To_Innermost_Scope()
  942. {
  943. var grids = new[] { CreateGrid(("A", new GridLength())), CreateGrid(("A", new GridLength(30)), (null, new GridLength())) };
  944. var innerScope = new Grid();
  945. foreach (var grid in grids)
  946. innerScope.Children.Add(grid);
  947. innerScope.SetValue(Grid.IsSharedSizeScopeProperty, true);
  948. var outerGrid = CreateGrid(("A", new GridLength(0)));
  949. var outerScope = new Grid();
  950. outerScope.Children.Add(outerGrid);
  951. outerScope.Children.Add(innerScope);
  952. var root = new Grid();
  953. root.UseLayoutRounding = false;
  954. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  955. root.Children.Add(outerScope);
  956. root.Measure(new Size(50, 50));
  957. root.Arrange(new Rect(new Point(), new Point(50, 50)));
  958. Assert.Equal(0, outerGrid.ColumnDefinitions[0].ActualWidth);
  959. }
  960. [Fact]
  961. public void Size_Group_Changes_Are_Tracked()
  962. {
  963. var grids = new[] {
  964. CreateGrid((null, new GridLength(0, GridUnitType.Auto)), (null, new GridLength())),
  965. CreateGrid(("A", new GridLength(30)), (null, new GridLength())) };
  966. var scope = new Grid();
  967. foreach (var xgrids in grids)
  968. scope.Children.Add(xgrids);
  969. var root = new Grid();
  970. root.UseLayoutRounding = false;
  971. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  972. root.Children.Add(scope);
  973. root.Measure(new Size(50, 50));
  974. root.Arrange(new Rect(new Point(), new Point(50, 50)));
  975. PrintColumnDefinitions(grids[0]);
  976. Assert.Equal(0, grids[0].ColumnDefinitions[0].ActualWidth);
  977. grids[0].ColumnDefinitions[0].SharedSizeGroup = "A";
  978. root.Measure(new Size(51, 51));
  979. root.Arrange(new Rect(new Point(), new Point(51, 51)));
  980. PrintColumnDefinitions(grids[0]);
  981. Assert.Equal(30, grids[0].ColumnDefinitions[0].ActualWidth);
  982. grids[0].ColumnDefinitions[0].SharedSizeGroup = null;
  983. root.Measure(new Size(52, 52));
  984. root.Arrange(new Rect(new Point(), new Point(52, 52)));
  985. PrintColumnDefinitions(grids[0]);
  986. Assert.Equal(0, grids[0].ColumnDefinitions[0].ActualWidth);
  987. }
  988. [Fact]
  989. public void Size_Group_Definition_Resizes_Are_Tracked()
  990. {
  991. var grids = new[] {
  992. CreateGrid(("A", new GridLength(5, GridUnitType.Pixel)), (null, new GridLength())),
  993. CreateGrid(("A", new GridLength(5, GridUnitType.Pixel)), (null, new GridLength())) };
  994. var scope = new Grid();
  995. foreach (var xgrids in grids)
  996. scope.Children.Add(xgrids);
  997. var root = new Grid();
  998. root.UseLayoutRounding = false;
  999. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  1000. root.Children.Add(scope);
  1001. root.Measure(new Size(50, 50));
  1002. root.Arrange(new Rect(new Point(), new Point(50, 50)));
  1003. PrintColumnDefinitions(grids[0]);
  1004. Assert.Equal(5, grids[0].ColumnDefinitions[0].ActualWidth);
  1005. Assert.Equal(5, grids[1].ColumnDefinitions[0].ActualWidth);
  1006. grids[0].ColumnDefinitions[0].Width = new GridLength(10, GridUnitType.Pixel);
  1007. foreach (Grid grid in grids)
  1008. {
  1009. grid.Measure(new Size(50, 50));
  1010. grid.Arrange(new Rect(new Point(), new Point(50, 50)));
  1011. }
  1012. PrintColumnDefinitions(grids[0]);
  1013. Assert.Equal(10, grids[0].ColumnDefinitions[0].ActualWidth);
  1014. Assert.Equal(10, grids[1].ColumnDefinitions[0].ActualWidth);
  1015. }
  1016. [Fact]
  1017. public void Collection_Changes_Are_Tracked()
  1018. {
  1019. var grid = CreateGrid(
  1020. ("A", new GridLength(20)),
  1021. ("A", new GridLength(30)),
  1022. ("A", new GridLength(40)),
  1023. (null, new GridLength()));
  1024. var scope = new Grid();
  1025. scope.Children.Add(grid);
  1026. var root = new Grid();
  1027. root.UseLayoutRounding = false;
  1028. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  1029. root.Children.Add(scope);
  1030. grid.Measure(new Size(200, 200));
  1031. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1032. PrintColumnDefinitions(grid);
  1033. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(40, cd.ActualWidth));
  1034. grid.ColumnDefinitions.RemoveAt(2);
  1035. // NOTE: THIS IS BROKEN IN WPF
  1036. // grid.Measure(new Size(200, 200));
  1037. // grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1038. // PrintColumnDefinitions(grid);
  1039. // Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(30, cd.ActualWidth));
  1040. grid.ColumnDefinitions.Insert(1, new ColumnDefinition { Width = new GridLength(30), SharedSizeGroup = "A" });
  1041. grid.Measure(new Size(200, 200));
  1042. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1043. PrintColumnDefinitions(grid);
  1044. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(30, cd.ActualWidth));
  1045. grid.ColumnDefinitions[1] = new ColumnDefinition { Width = new GridLength(10), SharedSizeGroup = "A" };
  1046. grid.Measure(new Size(200, 200));
  1047. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1048. PrintColumnDefinitions(grid);
  1049. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(30, cd.ActualWidth));
  1050. grid.ColumnDefinitions[1] = new ColumnDefinition { Width = new GridLength(50), SharedSizeGroup = "A" };
  1051. // NOTE: THIS IS BROKEN IN WPF
  1052. // grid.Measure(new Size(200, 200));
  1053. // grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1054. // PrintColumnDefinitions(grid);
  1055. // Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  1056. }
  1057. [Fact]
  1058. public void Size_Priorities_Are_Maintained()
  1059. {
  1060. var sizers = new List<Control>();
  1061. var grid = CreateGrid(
  1062. ("A", new GridLength(20)),
  1063. ("A", new GridLength(20, GridUnitType.Auto)),
  1064. ("A", new GridLength(1, GridUnitType.Star)),
  1065. ("A", new GridLength(1, GridUnitType.Star)),
  1066. (null, new GridLength()));
  1067. for (int i = 0; i < 3; i++)
  1068. sizers.Add(AddSizer(grid, i, 6 + i * 6));
  1069. var scope = new Grid();
  1070. scope.Children.Add(grid);
  1071. var root = new Grid();
  1072. root.UseLayoutRounding = false;
  1073. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  1074. root.Children.Add(scope);
  1075. grid.Measure(new Size(100, 100));
  1076. grid.Arrange(new Rect(new Point(), new Point(100, 100)));
  1077. PrintColumnDefinitions(grid);
  1078. // all in group are equal to the first fixed column
  1079. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(20, cd.ActualWidth));
  1080. grid.ColumnDefinitions[0].SharedSizeGroup = null;
  1081. grid.Measure(new Size(100, 100));
  1082. grid.Arrange(new Rect(new Point(), new Point(100, 100)));
  1083. PrintColumnDefinitions(grid);
  1084. // NOTE: THIS IS BROKEN IN WPF
  1085. // Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(6 + 2 * 6, cd.ActualWidth));
  1086. // grid.ColumnDefinitions[1].SharedSizeGroup = null;
  1087. // grid.Measure(new Size(100, 100));
  1088. // grid.Arrange(new Rect(new Point(), new Point(100, 100)));
  1089. // PrintColumnDefinitions(grid);
  1090. // NOTE: THIS IS BROKEN IN WPF
  1091. // all in group are equal to width (MinWidth) of the sizer in the second column
  1092. // Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(6 + 1 * 6, cd.ActualWidth));
  1093. // NOTE: THIS IS BROKEN IN WPF
  1094. // grid.ColumnDefinitions[2].SharedSizeGroup = null;
  1095. // NOTE: THIS IS BROKEN IN WPF
  1096. // grid.Measure(new Size(double.PositiveInfinity, 100));
  1097. // grid.Arrange(new Rect(new Point(), new Point(100, 100)));
  1098. // PrintColumnDefinitions(grid);
  1099. // with no constraint star columns default to the MinWidth of the sizer in the column
  1100. // Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(0, cd.ActualWidth));
  1101. }
  1102. [Fact]
  1103. public void ColumnDefinitions_Collection_Is_ReadOnly()
  1104. {
  1105. var grid = CreateGrid(
  1106. ("A", new GridLength(50)),
  1107. ("A", new GridLength(50)),
  1108. ("A", new GridLength(50)),
  1109. ("A", new GridLength(50)));
  1110. var scope = new Grid();
  1111. scope.Children.Add(grid);
  1112. var root = new Grid();
  1113. root.UseLayoutRounding = false;
  1114. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  1115. root.Children.Add(scope);
  1116. grid.Measure(new Size(200, 200));
  1117. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1118. PrintColumnDefinitions(grid);
  1119. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(50, cd.ActualWidth));
  1120. grid.ColumnDefinitions[0] = new ColumnDefinition { Width = new GridLength(25), SharedSizeGroup = "A" };
  1121. grid.ColumnDefinitions[1] = new ColumnDefinition { Width = new GridLength(75), SharedSizeGroup = "B" };
  1122. grid.ColumnDefinitions[2] = new ColumnDefinition { Width = new GridLength(75), SharedSizeGroup = "B" };
  1123. grid.ColumnDefinitions[3] = new ColumnDefinition { Width = new GridLength(25), SharedSizeGroup = "A" };
  1124. grid.Measure(new Size(200, 200));
  1125. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1126. PrintColumnDefinitions(grid);
  1127. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  1128. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  1129. }
  1130. [Fact]
  1131. public void ColumnDefinitions_Collection_Reset_SharedSizeGroup()
  1132. {
  1133. var grid = CreateGrid(
  1134. ("A", new GridLength(25)),
  1135. ("B", new GridLength(75)),
  1136. ("B", new GridLength(75)),
  1137. ("A", new GridLength(25)));
  1138. var scope = new Grid();
  1139. scope.Children.Add(grid);
  1140. var root = new Grid();
  1141. root.UseLayoutRounding = false;
  1142. root.SetValue(Grid.IsSharedSizeScopeProperty, true);
  1143. root.Children.Add(scope);
  1144. grid.Measure(new Size(200, 200));
  1145. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1146. PrintColumnDefinitions(grid);
  1147. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "A"), cd => Assert.Equal(25, cd.ActualWidth));
  1148. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == "B"), cd => Assert.Equal(75, cd.ActualWidth));
  1149. grid.ColumnDefinitions[0].SharedSizeGroup = null;
  1150. grid.ColumnDefinitions[0].Width = new GridLength(50);
  1151. grid.ColumnDefinitions[1].SharedSizeGroup = null;
  1152. grid.ColumnDefinitions[1].Width = new GridLength(50);
  1153. grid.ColumnDefinitions[2].SharedSizeGroup = null;
  1154. grid.ColumnDefinitions[2].Width = new GridLength(50);
  1155. grid.ColumnDefinitions[3].SharedSizeGroup = null;
  1156. grid.ColumnDefinitions[3].Width = new GridLength(50);
  1157. grid.Measure(new Size(200, 200));
  1158. grid.Arrange(new Rect(new Point(), new Point(200, 200)));
  1159. PrintColumnDefinitions(grid);
  1160. Assert.All(grid.ColumnDefinitions.Where(cd => cd.SharedSizeGroup == null), cd => Assert.Equal(50, cd.ActualWidth));
  1161. }
  1162. [Fact]
  1163. public void Correct_Grid_Bounds_When_Child_Control_Has_DesiredSize_Larger_Than_Available_Space()
  1164. {
  1165. // Issue #2746
  1166. var grid = new Grid
  1167. {
  1168. RowDefinitions = RowDefinitions.Parse("Auto"),
  1169. Children =
  1170. {
  1171. new TestControl
  1172. {
  1173. MeasureSize = new Size(150, 150),
  1174. }
  1175. }
  1176. };
  1177. var parent = new Decorator { Child = grid };
  1178. parent.Measure(new Size(100, 100));
  1179. parent.Arrange(new Rect(grid.DesiredSize));
  1180. Assert.Equal(new Size(100, 100), grid.Bounds.Size);
  1181. }
  1182. [Theory]
  1183. [InlineData(true)]
  1184. [InlineData(false)]
  1185. public void Changing_Column_Width_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1186. {
  1187. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1188. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1189. {
  1190. if (setUsingAvaloniaProperty)
  1191. grid.ColumnDefinitions[0][ColumnDefinition.WidthProperty] = new GridLength(5);
  1192. else
  1193. grid.ColumnDefinitions[0].Width = new GridLength(5);
  1194. });
  1195. }
  1196. [Theory]
  1197. [InlineData(true)]
  1198. [InlineData(false)]
  1199. public void Changing_Column_MinWidth_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1200. {
  1201. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1202. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1203. {
  1204. if (setUsingAvaloniaProperty)
  1205. grid.ColumnDefinitions[0][ColumnDefinition.MinWidthProperty] = 5;
  1206. else
  1207. grid.ColumnDefinitions[0].MinWidth = 5;
  1208. });
  1209. }
  1210. [Theory]
  1211. [InlineData(true)]
  1212. [InlineData(false)]
  1213. public void Changing_Column_MaxWidth_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1214. {
  1215. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1216. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1217. {
  1218. if (setUsingAvaloniaProperty)
  1219. grid.ColumnDefinitions[0][ColumnDefinition.MaxWidthProperty] = 5;
  1220. else
  1221. grid.ColumnDefinitions[0].MaxWidth = 5;
  1222. });
  1223. }
  1224. [Theory]
  1225. [InlineData(true)]
  1226. [InlineData(false)]
  1227. public void Changing_Row_Height_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1228. {
  1229. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1230. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1231. {
  1232. if (setUsingAvaloniaProperty)
  1233. grid.RowDefinitions[0][RowDefinition.HeightProperty] = new GridLength(5);
  1234. else
  1235. grid.RowDefinitions[0].Height = new GridLength(5);
  1236. });
  1237. }
  1238. [Theory]
  1239. [InlineData(true)]
  1240. [InlineData(false)]
  1241. public void Changing_Row_MinHeight_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1242. {
  1243. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1244. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1245. {
  1246. if (setUsingAvaloniaProperty)
  1247. grid.RowDefinitions[0][RowDefinition.MinHeightProperty] = 5;
  1248. else
  1249. grid.RowDefinitions[0].MinHeight = 5;
  1250. });
  1251. }
  1252. [Theory]
  1253. [InlineData(true)]
  1254. [InlineData(false)]
  1255. public void Changing_Row_MaxHeight_Should_Invalidate_Grid(bool setUsingAvaloniaProperty)
  1256. {
  1257. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1258. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1259. {
  1260. if (setUsingAvaloniaProperty)
  1261. grid.RowDefinitions[0][RowDefinition.MaxHeightProperty] = 5;
  1262. else
  1263. grid.RowDefinitions[0].MaxHeight = 5;
  1264. });
  1265. }
  1266. [Fact]
  1267. public void Adding_Column_Should_Invalidate_Grid()
  1268. {
  1269. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1270. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1271. {
  1272. grid.ColumnDefinitions.Add(new ColumnDefinition(new GridLength(5)));
  1273. });
  1274. }
  1275. [Fact]
  1276. public void Adding_Row_Should_Invalidate_Grid()
  1277. {
  1278. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1279. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1280. {
  1281. grid.RowDefinitions.Add(new RowDefinition(new GridLength(5)));
  1282. });
  1283. }
  1284. [Fact]
  1285. public void Replacing_Columns_Should_Invalidate_Grid()
  1286. {
  1287. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1288. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1289. {
  1290. grid.ColumnDefinitions = ColumnDefinitions.Parse("2*,1*");
  1291. });
  1292. }
  1293. [Fact]
  1294. public void Replacing_Rows_Should_Invalidate_Grid()
  1295. {
  1296. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1297. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1298. {
  1299. grid.RowDefinitions = RowDefinitions.Parse("2*,1*");
  1300. });
  1301. }
  1302. [Fact]
  1303. public void Removing_Column_Should_Invalidate_Grid()
  1304. {
  1305. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("1*,1*") };
  1306. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1307. {
  1308. grid.ColumnDefinitions.RemoveAt(0);
  1309. });
  1310. }
  1311. [Fact]
  1312. public void Removing_Row_Should_Invalidate_Grid()
  1313. {
  1314. var grid = new Grid { RowDefinitions = RowDefinitions.Parse("1*,1*") };
  1315. Change_Property_And_Verify_Measure_Requested(grid, () =>
  1316. {
  1317. grid.RowDefinitions.RemoveAt(0);
  1318. });
  1319. }
  1320. [Fact]
  1321. public void Removing_Child_Should_Invalidate_Grid_And_Be_Operational()
  1322. {
  1323. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("*,Auto") };
  1324. grid.Children.Add(new Decorator() { [Grid.ColumnProperty] = 0 });
  1325. grid.Children.Add(new Decorator() { Width = 10, Height = 10, [Grid.ColumnProperty] = 1 });
  1326. var size = new Size(100, 100);
  1327. grid.Measure(size);
  1328. grid.Arrange(new Rect(size));
  1329. Assert.True(grid.IsMeasureValid);
  1330. Assert.True(grid.IsArrangeValid);
  1331. Assert.Equal(90, grid.Children[0].Bounds.Width);
  1332. Assert.Equal(10, grid.Children[1].Bounds.Width);
  1333. grid.Children.RemoveAt(1);
  1334. Assert.False(grid.IsMeasureValid);
  1335. Assert.False(grid.IsArrangeValid);
  1336. grid.Measure(size);
  1337. grid.Arrange(new Rect(size));
  1338. Assert.True(grid.IsMeasureValid);
  1339. Assert.True(grid.IsArrangeValid);
  1340. Assert.Equal(100, grid.Children[0].Bounds.Width);
  1341. }
  1342. [Fact]
  1343. public void Adding_Child_Should_Invalidate_Grid_And_Be_Operational()
  1344. {
  1345. var grid = new Grid { ColumnDefinitions = ColumnDefinitions.Parse("*,Auto") };
  1346. grid.Children.Add(new Decorator() { [Grid.ColumnProperty] = 0 });
  1347. var size = new Size(100, 100);
  1348. grid.Measure(size);
  1349. grid.Arrange(new Rect(size));
  1350. Assert.True(grid.IsMeasureValid);
  1351. Assert.True(grid.IsArrangeValid);
  1352. Assert.Equal(100, grid.Children[0].Bounds.Width);
  1353. grid.Children.Add(new Decorator() { Width = 10, Height = 10, [Grid.ColumnProperty] = 1 });
  1354. Assert.False(grid.IsMeasureValid);
  1355. Assert.False(grid.IsArrangeValid);
  1356. grid.Measure(size);
  1357. grid.Arrange(new Rect(size));
  1358. Assert.True(grid.IsMeasureValid);
  1359. Assert.True(grid.IsArrangeValid);
  1360. Assert.Equal(90, grid.Children[0].Bounds.Width);
  1361. Assert.Equal(10, grid.Children[1].Bounds.Width);
  1362. }
  1363. private static void Change_Property_And_Verify_Measure_Requested(Grid grid, Action change)
  1364. {
  1365. grid.Measure(new Size(100, 100));
  1366. grid.Arrange(new Rect(grid.DesiredSize));
  1367. Assert.True(grid.IsMeasureValid);
  1368. Assert.True(grid.IsArrangeValid);
  1369. change();
  1370. Assert.False(grid.IsMeasureValid);
  1371. Assert.False(grid.IsArrangeValid);
  1372. }
  1373. private class TestControl : Control
  1374. {
  1375. public Size MeasureSize { get; set; }
  1376. protected override Size MeasureOverride(Size availableSize) => MeasureSize;
  1377. }
  1378. }
  1379. }