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