diff --git a/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj b/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj
index 510923b34aa5..b4c9e52899f0 100644
--- a/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj
+++ b/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj
@@ -9,7 +9,7 @@
false
disable
- IL2036;0618;0612
+ IL2036;0618;0612;CS0672;CS0618
- 0612
+ 0612;CS0672;CS0618
diff --git a/src/Compatibility/ControlGallery/src/WinUI/Compatibility.ControlGallery.WinUI.csproj b/src/Compatibility/ControlGallery/src/WinUI/Compatibility.ControlGallery.WinUI.csproj
index 124debe0e66e..20a7df92f02f 100644
--- a/src/Compatibility/ControlGallery/src/WinUI/Compatibility.ControlGallery.WinUI.csproj
+++ b/src/Compatibility/ControlGallery/src/WinUI/Compatibility.ControlGallery.WinUI.csproj
@@ -8,7 +8,7 @@
10.0.17134.0
Microsoft.Maui.Controls.Compatibility.ControlGallery.WinUI
app.manifest
- 1701;1702;CS8305;8305;CA1416;0612
+ 1701;1702;CS8305;8305;CA1416;0612;CS0672;CS0618
true
false
diff --git a/src/Compatibility/ControlGallery/src/iOS/Compatibility.ControlGallery.iOS.csproj b/src/Compatibility/ControlGallery/src/iOS/Compatibility.ControlGallery.iOS.csproj
index 72e8ac30406f..0e61c3c61132 100644
--- a/src/Compatibility/ControlGallery/src/iOS/Compatibility.ControlGallery.iOS.csproj
+++ b/src/Compatibility/ControlGallery/src/iOS/Compatibility.ControlGallery.iOS.csproj
@@ -9,7 +9,7 @@
disable
- 0612
+ 0612;CS0672;CS0618
15.0
15.0
diff --git a/src/Compatibility/ControlGallery/test/Android.UITests/Compatibility.ControlGallery.Android.UITests.csproj b/src/Compatibility/ControlGallery/test/Android.UITests/Compatibility.ControlGallery.Android.UITests.csproj
index 7df152ae03e4..509b95814821 100644
--- a/src/Compatibility/ControlGallery/test/Android.UITests/Compatibility.ControlGallery.Android.UITests.csproj
+++ b/src/Compatibility/ControlGallery/test/Android.UITests/Compatibility.ControlGallery.Android.UITests.csproj
@@ -7,7 +7,7 @@
false
disable
$(DefineConstants);__ANDROID__;UITEST;__SHELL__;ANDROID
- 1701;1702;0618;0612;CA1307;CA1309
+ 1701;1702;0618;0612;CA1307;CA1309;CS0672;CS0618
true
diff --git a/src/Compatibility/ControlGallery/test/WinUI.UITests/WinUI.UITests.csproj b/src/Compatibility/ControlGallery/test/WinUI.UITests/WinUI.UITests.csproj
index d3f92c002a91..ec9e195bb301 100644
--- a/src/Compatibility/ControlGallery/test/WinUI.UITests/WinUI.UITests.csproj
+++ b/src/Compatibility/ControlGallery/test/WinUI.UITests/WinUI.UITests.csproj
@@ -7,7 +7,7 @@
false
disable
$(DefineConstants);WINDOWS;UITEST
- 0114;0108;4014;0649;0169;0168;0219;0618;0612;CA1307;CA1309
+ 0114;0108;4014;0649;0169;0168;0219;0618;0612;CA1307;CA1309;CS0672;CS0618
diff --git a/src/Compatibility/ControlGallery/test/iOS.UITests/Compatibility.ControlGallery.iOS.UITests.csproj b/src/Compatibility/ControlGallery/test/iOS.UITests/Compatibility.ControlGallery.iOS.UITests.csproj
index b76a900ce507..8db27a53d51c 100644
--- a/src/Compatibility/ControlGallery/test/iOS.UITests/Compatibility.ControlGallery.iOS.UITests.csproj
+++ b/src/Compatibility/ControlGallery/test/iOS.UITests/Compatibility.ControlGallery.iOS.UITests.csproj
@@ -7,7 +7,7 @@
false
disable
$(DefineConstants);__IOS__;UITEST;__SHELL__;IOS;iOS
- 1701;1702;0618;0612;CA1307;CA1309
+ 1701;1702;0618;0612;CA1307;CA1309;CS0672;CS0618
true
diff --git a/src/Compatibility/Core/src/Compatibility.csproj b/src/Compatibility/Core/src/Compatibility.csproj
index 56cf3d239ba8..e1c0c386d7ea 100644
--- a/src/Compatibility/Core/src/Compatibility.csproj
+++ b/src/Compatibility/Core/src/Compatibility.csproj
@@ -11,7 +11,7 @@
true
true
true
- $(NoWarn);CS1591
+ $(NoWarn);CS1591;CS0672;CS0618
$(DefineConstants);COMPATIBILITY
diff --git a/src/Compatibility/Core/tests/Compatibility.UnitTests/BaseTestFixture.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/BaseTestFixture.cs
new file mode 100644
index 000000000000..6df23fa7410e
--- /dev/null
+++ b/src/Compatibility/Core/tests/Compatibility.UnitTests/BaseTestFixture.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Globalization;
+using System.Threading;
+using Microsoft.Maui.ApplicationModel;
+using Microsoft.Maui.Controls.Internals;
+using Microsoft.Maui.Devices;
+using Microsoft.Maui.Dispatching;
+using Microsoft.Maui.UnitTests;
+using Xunit;
+
+// By default, xUnit will run test collections (the tests in each class) in parallel
+// with other test collections. Unfortunately, a _ton_ of the Controls legacy tests
+// interact with properties on static classes (e.g., Application.Current), and if we
+// let them run in parallel they'll step on one another. So we tell xUnit to consider
+// the whole assembly as a single collection for now, so all the tests run in sequence.
+// (Hopefully in the future we can untangle some of the singletons and run these in parallel,
+// because it'll be a lot faster.)
+[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]
+
+namespace Microsoft.Maui.Controls.Core.UnitTests
+{
+ public class BaseTestFixture : IDisposable
+ {
+ CultureInfo _defaultCulture;
+ CultureInfo _defaultUICulture;
+
+ public BaseTestFixture()
+ {
+ Microsoft.Maui.Controls.Hosting.CompatibilityCheck.UseCompatibility();
+ _defaultCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
+ _defaultUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
+ DispatcherProvider.SetCurrent(new DispatcherProviderStub());
+ DeviceDisplay.SetCurrent(null);
+ DeviceInfo.SetCurrent(null);
+ AppInfo.SetCurrent(null);
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ bool _disposed;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (_disposed)
+ {
+ return;
+ }
+
+ if (disposing)
+ {
+ AppInfo.SetCurrent(null);
+ DeviceDisplay.SetCurrent(null);
+ DeviceInfo.SetCurrent(null);
+ System.Threading.Thread.CurrentThread.CurrentCulture = _defaultCulture;
+ System.Threading.Thread.CurrentThread.CurrentUICulture = _defaultUICulture;
+ DispatcherProvider.SetCurrent(null);
+ }
+
+ _disposed = true;
+ }
+ }
+}
diff --git a/src/Controls/tests/Core.UnitTests/FlexLayoutAlignContentTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignContentTests.cs
similarity index 100%
rename from src/Controls/tests/Core.UnitTests/FlexLayoutAlignContentTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignContentTests.cs
diff --git a/src/Controls/tests/Core.UnitTests/FlexLayoutAlignItemsTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignItemsTests.cs
similarity index 100%
rename from src/Controls/tests/Core.UnitTests/FlexLayoutAlignItemsTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignItemsTests.cs
diff --git a/src/Controls/tests/Core.UnitTests/FlexLayoutAlignSelfTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignSelfTests.cs
similarity index 100%
rename from src/Controls/tests/Core.UnitTests/FlexLayoutAlignSelfTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutAlignSelfTests.cs
diff --git a/src/Controls/tests/Core.UnitTests/FlexLayoutFlexDirectionTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutFlexDirectionTests.cs
similarity index 97%
rename from src/Controls/tests/Core.UnitTests/FlexLayoutFlexDirectionTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutFlexDirectionTests.cs
index 4fd0c39e2341..83ca15f64c88 100644
--- a/src/Controls/tests/Core.UnitTests/FlexLayoutFlexDirectionTests.cs
+++ b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutFlexDirectionTests.cs
@@ -29,7 +29,7 @@ public void TestFlexDirectionColumnWithoutHeight()
Direction = FlexDirection.Column,
};
- var sizeRequest = layout.Measure(100, double.PositiveInfinity);
+ var sizeRequest = layout.Measure(100, double.PositiveInfinity, MeasureFlags.None);
layout.Layout(new Rect(0, 0, sizeRequest.Request.Width, sizeRequest.Request.Height));
Assert.Equal(layout.Bounds, new Rect(0, 0, 100, 30));
Assert.Equal(view0.Bounds, new Rect(0, 0, 100, 10));
@@ -56,7 +56,7 @@ public void TestFlexDirectionRowNoWidth()
};
- var measure = layout.Measure(double.PositiveInfinity, 100);
+ var measure = layout.Measure(double.PositiveInfinity, 100, MeasureFlags.None);
layout.Layout(new Rect(0, 0, measure.Request.Width, measure.Request.Height));
Assert.Equal(layout.Bounds, new Rect(0, 0, 30, 100));
Assert.Equal(view0.Bounds, new Rect(0, 0, 10, 100));
diff --git a/src/Controls/tests/Core.UnitTests/FlexLayoutTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutTests.cs
similarity index 97%
rename from src/Controls/tests/Core.UnitTests/FlexLayoutTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutTests.cs
index f832139a7647..9b7710112043 100644
--- a/src/Controls/tests/Core.UnitTests/FlexLayoutTests.cs
+++ b/src/Compatibility/Core/tests/Compatibility.UnitTests/FlexLayoutTests.cs
@@ -259,11 +259,11 @@ public void TestSizeThatFits()
layout.Children.Add(label2);
layout.Layout(new Rect(0, 0, 320, 50));
- var label2Size = label2.Measure(double.PositiveInfinity, double.PositiveInfinity);
+ var label2Size = label2.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.None);
Assert.Equal(10, label2Size.Request.Height);
Assert.Equal(10, label2Size.Request.Width);
- var label1Size = label1.Measure(double.PositiveInfinity, double.PositiveInfinity);
+ var label1Size = label1.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.None);
// var layoutSize = layout.Measure(-1, -1);
}
@@ -331,15 +331,15 @@ public void TestMeasuring()
};
//measure sith +inf as main-axis
- var measure = Layout.Measure(double.PositiveInfinity, 40);
+ var measure = Layout.Measure(double.PositiveInfinity, 40, MeasureFlags.None);
Assert.Equal(measure.Request, new Size(100, 40));
//measure sith +inf as cross-axis
- measure = Layout.Measure(200, double.PositiveInfinity);
+ measure = Layout.Measure(200, double.PositiveInfinity, MeasureFlags.None);
Assert.Equal(measure.Request, new Size(200, 20));
//measure with +inf as both axis
- measure = Layout.Measure(double.PositiveInfinity, double.PositiveInfinity);
+ measure = Layout.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.None);
Assert.Equal(measure.Request, new Size(100, 20));
}
@@ -370,7 +370,7 @@ public void TestMarginsWithWrap()
}
};
- var measure = layout.Measure(300, double.PositiveInfinity);
+ var measure = layout.Measure(300, double.PositiveInfinity, MeasureFlags.None);
Assert.Equal(measure.Request, new Size(300, 52));
layout.Layout(new Rect(0, 0, 300, 300));
Assert.Equal(label0.Bounds, new Rect(6, 6, 138, 20));
diff --git a/src/Compatibility/Core/tests/Compatibility.UnitTests/FrameUnitTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/FrameUnitTests.cs
new file mode 100644
index 000000000000..0b12bbcc7db1
--- /dev/null
+++ b/src/Compatibility/Core/tests/Compatibility.UnitTests/FrameUnitTests.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections;
+using System.Linq;
+using Microsoft.Maui.Graphics;
+using Xunit;
+
+
+namespace Microsoft.Maui.Controls.Core.UnitTests;
+
+public class FrameUnitTests : BaseTestFixture
+{
+ [Fact]
+ public void TestPackWithoutChild()
+ {
+ Frame frame = new Frame();
+
+ var parent = new NaiveLayout();
+
+ bool thrown = false;
+ try
+ {
+ parent.Children.Add(frame);
+ }
+ catch
+ {
+ thrown = true;
+ }
+
+ Assert.False(thrown);
+ }
+
+ [Fact]
+ public void TestPackWithChild()
+ {
+ Frame frame = new Frame
+ {
+ Content = new View()
+ };
+
+ var parent = new NaiveLayout();
+
+ bool thrown = false;
+ try
+ {
+ parent.Children.Add(frame);
+ }
+ catch
+ {
+ thrown = true;
+ }
+
+ Assert.False(thrown);
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/Core.UnitTests/GridTests.cs b/src/Compatibility/Core/tests/Compatibility.UnitTests/GridTests.cs
similarity index 98%
rename from src/Controls/tests/Core.UnitTests/GridTests.cs
rename to src/Compatibility/Core/tests/Compatibility.UnitTests/GridTests.cs
index 75746757a8cf..411d396fcb7e 100644
--- a/src/Controls/tests/Core.UnitTests/GridTests.cs
+++ b/src/Compatibility/Core/tests/Compatibility.UnitTests/GridTests.cs
@@ -5,9 +5,10 @@
using Microsoft.Maui.Controls.Internals;
using Microsoft.Maui.Graphics;
using Microsoft.Maui.Handlers;
-using Microsoft.Maui.UnitTests;
+using Microsoft.Maui.Controls.Core.UnitTests;
using NSubstitute;
using Xunit;
+using Microsoft.Maui.UnitTests;
namespace Microsoft.Maui.Controls.Core.UnitTests
{
@@ -221,7 +222,7 @@ void SetupStarRowOverlapTest(bool rowAIsOnTop, out VisualElement rowAControl,
Grid.SetRow(rowAControl, 1);
}
- var sizeRequest = grid.Measure(300, double.PositiveInfinity);
+ var sizeRequest = grid.Measure(300, double.PositiveInfinity, MeasureFlags.None);
grid.Layout(new Rect(0, 0, sizeRequest.Request.Width, sizeRequest.Request.Height));
}
@@ -269,7 +270,7 @@ void SetupStarColumnOverlapTest(bool colAIsAtStart, out VisualElement colAContro
Grid.SetColumn(colAControl, 1);
}
- var sizeRequest = grid.Measure(double.PositiveInfinity, 300);
+ var sizeRequest = grid.Measure(double.PositiveInfinity, 300, MeasureFlags.None);
grid.Layout(new Rect(0, 0, sizeRequest.Request.Width, sizeRequest.Request.Height));
}
@@ -630,7 +631,7 @@ public void Issue13127()
outerStackLayout.Children.Add(innerGrid);
outerGrid.Children.Add(outerStackLayout);
- var sizeRequest = outerGrid.Measure(500, 1000);
+ var sizeRequest = outerGrid.Measure(500, 1000, MeasureFlags.None);
outerGrid.Layout(new Rect(0, 0, sizeRequest.Request.Width, 1000));
Assert.Equal(innerGrid.Height, foreground.Height);
@@ -1428,9 +1429,9 @@ public void TestZeroSizeConstraints()
{
var layout = new Grid();
- Assert.Equal(new Size(0, 0), layout.Measure(0, 0).Request);
- Assert.Equal(new Size(0, 0), layout.Measure(0, 10).Request);
- Assert.Equal(new Size(0, 0), layout.Measure(10, 0).Request);
+ Assert.Equal(new Size(0, 0), layout.Measure(0, 0, MeasureFlags.None).Request);
+ Assert.Equal(new Size(0, 0), layout.Measure(0, 10, MeasureFlags.None).Request);
+ Assert.Equal(new Size(0, 0), layout.Measure(10, 0, MeasureFlags.None).Request);
}
[Fact]
@@ -1443,7 +1444,7 @@ public void TestSizeRequest()
MockPlatformSizeService.Sub()
});
- var result = layout.Measure(double.PositiveInfinity, double.PositiveInfinity).Request;
+ var result = layout.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.None).Request;
Assert.Equal(new Size(100, 72), result);
}
@@ -1457,7 +1458,7 @@ public void TestLimitedSizeRequest()
MockPlatformSizeService.Sub()
});
- var result = layout.Measure(10, 10).Request;
+ var result = layout.Measure(10, 10, MeasureFlags.None).Request;
Assert.Equal(new Size(100, 72), result);
}
@@ -1471,7 +1472,7 @@ public void TestLimitedWidthSizeRequest()
MockPlatformSizeService.Sub()
});
- var result = layout.Measure(10, double.PositiveInfinity).Request;
+ var result = layout.Measure(10, double.PositiveInfinity, MeasureFlags.None).Request;
Assert.Equal(new Size(100, 72), result);
}
@@ -1486,7 +1487,7 @@ public void TestLimitedHeightSizeRequest()
MockPlatformSizeService.Sub()
});
- var result = layout.Measure(double.PositiveInfinity, 10).Request;
+ var result = layout.Measure(double.PositiveInfinity, 10, MeasureFlags.None).Request;
Assert.Equal(new Size(100, 72), result);
}
@@ -1528,7 +1529,7 @@ public void TestSizeRequestWithPadding()
MockPlatformSizeService.Sub()
});
- var result = layout.Measure(double.PositiveInfinity, double.PositiveInfinity).Request;
+ var result = layout.Measure(double.PositiveInfinity, double.PositiveInfinity, MeasureFlags.None).Request;
Assert.Equal(new Size(135, 87), result);
}
@@ -1709,7 +1710,7 @@ public void TestStarLayout()
layout.Children.Add(label2, 1, 1);
layout.Children.Add(label3, 2, 2);
- var request = layout.Measure(1002, 462);
+ var request = layout.Measure(1002, 462, MeasureFlags.None);
Assert.Equal(312, request.Request.Width);
Assert.Equal(72, request.Request.Height);
@@ -2030,7 +2031,7 @@ public void SizeRequestForStar()
grid.Children.Add(MockPlatformSizeService.Sub