diff --git a/tests/Avalonia.Controls.UnitTests/ApplicationTests.cs b/tests/Avalonia.Controls.UnitTests/ApplicationTests.cs index 58ddc8ca60..dbfe18f0b8 100644 --- a/tests/Avalonia.Controls.UnitTests/ApplicationTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ApplicationTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ApplicationTests + public class ApplicationTests : ScopedTestBase { [Fact] public void Throws_ArgumentNullException_On_Run_If_MainWindow_Is_Null() diff --git a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs index 67f55055ec..a50e501023 100644 --- a/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/AutoCompleteBoxTests.cs @@ -16,7 +16,7 @@ using Moq; namespace Avalonia.Controls.UnitTests { - public class AutoCompleteBoxTests + public class AutoCompleteBoxTests : ScopedTestBase { [Fact] public void Search_Filters() diff --git a/tests/Avalonia.Controls.UnitTests/Automation/ControlAutomationPeerTests.cs b/tests/Avalonia.Controls.UnitTests/Automation/ControlAutomationPeerTests.cs index 5cd47cf27b..1e6b2d0025 100644 --- a/tests/Avalonia.Controls.UnitTests/Automation/ControlAutomationPeerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Automation/ControlAutomationPeerTests.cs @@ -2,6 +2,7 @@ using Avalonia.Automation.Peers; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; +using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; @@ -11,7 +12,7 @@ namespace Avalonia.Controls.UnitTests.Automation { public class ControlAutomationPeerTests { - public class Children + public class Children : ScopedTestBase { [Fact] public void Creates_Children_For_Controls_In_Visual_Tree() @@ -149,7 +150,7 @@ namespace Avalonia.Controls.UnitTests.Automation } } - public class Parent + public class Parent : ScopedTestBase { [Fact] public void Connects_Peer_To_Tree_When_GetParent_Called() diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj index 2d077f4837..dcff6ea10a 100644 --- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj +++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj @@ -20,8 +20,7 @@ - - + diff --git a/tests/Avalonia.Controls.UnitTests/BorderTests.cs b/tests/Avalonia.Controls.UnitTests/BorderTests.cs index dcfa9931c4..e31eb08964 100644 --- a/tests/Avalonia.Controls.UnitTests/BorderTests.cs +++ b/tests/Avalonia.Controls.UnitTests/BorderTests.cs @@ -8,7 +8,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class BorderTests + public class BorderTests : ScopedTestBase { [Fact] public void Measure_Should_Return_BorderThickness_Plus_Padding_When_No_Child_Present() @@ -46,7 +46,7 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Rect(6, 6, 0, 0), content.Bounds); } - public class UseLayoutRounding + public class UseLayoutRounding : ScopedTestBase { [Fact] public void Measure_Rounds_Padding() diff --git a/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs b/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs index 013369f102..9e720c66c8 100644 --- a/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs @@ -11,7 +11,7 @@ using System.Globalization; namespace Avalonia.Controls.UnitTests { - public class CalendarDatePickerTests + public class CalendarDatePickerTests : ScopedTestBase { private static bool CompareDates(DateTime first, DateTime second) { diff --git a/tests/Avalonia.Controls.UnitTests/CalendarTests.cs b/tests/Avalonia.Controls.UnitTests/CalendarTests.cs index 13c6638308..7f464827d7 100644 --- a/tests/Avalonia.Controls.UnitTests/CalendarTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CalendarTests.cs @@ -3,10 +3,11 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using Avalonia.UnitTests; namespace Avalonia.Controls.UnitTests { - public class CalendarTests + public class CalendarTests : ScopedTestBase { private static bool CompareDates(DateTime first, DateTime second) { diff --git a/tests/Avalonia.Controls.UnitTests/CanvasTests.cs b/tests/Avalonia.Controls.UnitTests/CanvasTests.cs index 11a349f53e..5d84f71858 100644 --- a/tests/Avalonia.Controls.UnitTests/CanvasTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CanvasTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class CanvasTests + public class CanvasTests : ScopedTestBase { [Fact] public void Left_Property_Should_Work() diff --git a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs index 2a35787f3b..4bcfe3009f 100644 --- a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class CarouselTests + public class CarouselTests : ScopedTestBase { [Fact] public void First_Item_Should_Be_Selected_By_Default() diff --git a/tests/Avalonia.Controls.UnitTests/ClassesTests.cs b/tests/Avalonia.Controls.UnitTests/ClassesTests.cs index bcd2b6ec1f..59fb1ce725 100644 --- a/tests/Avalonia.Controls.UnitTests/ClassesTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ClassesTests.cs @@ -1,9 +1,10 @@ using System; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class ClassesTests + public class ClassesTests : ScopedTestBase { [Fact] public void Duplicates_Should_Not_Be_Added() diff --git a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs index 3033decca9..96ff5ff786 100644 --- a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs @@ -16,7 +16,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ComboBoxTests + public class ComboBoxTests : ScopedTestBase { MouseTestHelper _helper = new MouseTestHelper(); diff --git a/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs b/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs index 507227eff8..883f8cfd94 100644 --- a/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ContentControlTests.cs @@ -15,7 +15,7 @@ using System.Collections.Generic; namespace Avalonia.Controls.UnitTests { - public class ContentControlTests + public class ContentControlTests : ScopedTestBase { [Fact] public void Template_Should_Be_Instantiated() diff --git a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs index a8b27e004b..e655c32f8e 100644 --- a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs @@ -13,7 +13,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ContextMenuTests + public class ContextMenuTests : ScopedTestBase { private Mock popupImpl; private MouseTestHelper _mouse = new MouseTestHelper(); diff --git a/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs b/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs index 198a3fd1f6..dd34455162 100644 --- a/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs @@ -15,7 +15,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class DatePickerTests + public class DatePickerTests : ScopedTestBase { [Fact] public void SelectedDateChanged_Should_Fire_When_SelectedDate_Set() diff --git a/tests/Avalonia.Controls.UnitTests/DecoratorTests.cs b/tests/Avalonia.Controls.UnitTests/DecoratorTests.cs index fe58cd4c7f..5e37f4b486 100644 --- a/tests/Avalonia.Controls.UnitTests/DecoratorTests.cs +++ b/tests/Avalonia.Controls.UnitTests/DecoratorTests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class DecoratorTests + public class DecoratorTests : ScopedTestBase { [Fact] public void Setting_Content_Should_Set_Child_Controls_Parent() @@ -118,7 +118,7 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Size(16, 16), target.DesiredSize); } - public class UseLayoutRounding + public class UseLayoutRounding : ScopedTestBase { [Fact] public void Measure_Rounds_Padding() diff --git a/tests/Avalonia.Controls.UnitTests/DesktopStyleApplicationLifetimeTests.cs b/tests/Avalonia.Controls.UnitTests/DesktopStyleApplicationLifetimeTests.cs index f015ca7128..7baf4c1f0b 100644 --- a/tests/Avalonia.Controls.UnitTests/DesktopStyleApplicationLifetimeTests.cs +++ b/tests/Avalonia.Controls.UnitTests/DesktopStyleApplicationLifetimeTests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class DesktopStyleApplicationLifetimeTests + public class DesktopStyleApplicationLifetimeTests : ScopedTestBase { IDispatcherImpl CreateDispatcherWithInstantMainLoop() { diff --git a/tests/Avalonia.Controls.UnitTests/DockPanelTests.cs b/tests/Avalonia.Controls.UnitTests/DockPanelTests.cs index f88772af76..9676bd4f2b 100644 --- a/tests/Avalonia.Controls.UnitTests/DockPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/DockPanelTests.cs @@ -1,8 +1,9 @@ +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class DockPanelTests + public class DockPanelTests : ScopedTestBase { [Fact] public void DockPanel_Without_Child() diff --git a/tests/Avalonia.Controls.UnitTests/FlyoutTests.cs b/tests/Avalonia.Controls.UnitTests/FlyoutTests.cs index d748a709a5..c15c8ced20 100644 --- a/tests/Avalonia.Controls.UnitTests/FlyoutTests.cs +++ b/tests/Avalonia.Controls.UnitTests/FlyoutTests.cs @@ -18,7 +18,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class FlyoutTests + public class FlyoutTests : ScopedTestBase { protected bool UseOverlayPopups { get; set; } diff --git a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs index 10e52d1d95..d05b67c4f2 100644 --- a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs +++ b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs @@ -3,11 +3,12 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class GridLengthTests + public class GridLengthTests : ScopedTestBase { [Fact] public void Parse_Should_Parse_Auto() diff --git a/tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs b/tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs index 78012a4d25..9b7ad06b28 100644 --- a/tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs +++ b/tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs @@ -2,11 +2,12 @@ using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.LogicalTree; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class HeaderedItemsControlTests + public class HeaderedItemsControlTests : ScopedTestBase { [Fact] public void Control_Header_Should_Be_Logical_Child_Before_ApplyTemplate() diff --git a/tests/Avalonia.Controls.UnitTests/HotKeyedControlsTests.cs b/tests/Avalonia.Controls.UnitTests/HotKeyedControlsTests.cs index c15fc7b916..9494fd0aab 100644 --- a/tests/Avalonia.Controls.UnitTests/HotKeyedControlsTests.cs +++ b/tests/Avalonia.Controls.UnitTests/HotKeyedControlsTests.cs @@ -71,7 +71,7 @@ namespace Avalonia.Controls.UnitTests } } - public class HotKeyedControlsTests + public class HotKeyedControlsTests : ScopedTestBase { private static Window PreparedWindow(object content = null) { diff --git a/tests/Avalonia.Controls.UnitTests/ImageTests.cs b/tests/Avalonia.Controls.UnitTests/ImageTests.cs index 47158f4811..5e6f82ac3c 100644 --- a/tests/Avalonia.Controls.UnitTests/ImageTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ImageTests.cs @@ -1,11 +1,12 @@ using Moq; using Avalonia.Media; using Avalonia.Media.Imaging; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class ImageTests + public class ImageTests : ScopedTestBase { [Fact] public void Measure_Should_Return_Correct_Size_For_No_Stretch() diff --git a/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs b/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs index 3983ac503d..423c141d07 100644 --- a/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ItemsControlTests.cs @@ -24,7 +24,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ItemsControlTests + public class ItemsControlTests : ScopedTestBase { [Fact] public void Setting_ItemsSource_Should_Populate_Items() diff --git a/tests/Avalonia.Controls.UnitTests/ItemsSourceViewTests.cs b/tests/Avalonia.Controls.UnitTests/ItemsSourceViewTests.cs index faa143bb8e..ab5f4c5e16 100644 --- a/tests/Avalonia.Controls.UnitTests/ItemsSourceViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ItemsSourceViewTests.cs @@ -5,11 +5,12 @@ using System.Collections.Specialized; using System.Text; using Avalonia.Collections; using Avalonia.Diagnostics; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class ItemsSourceViewTests + public class ItemsSourceViewTests : ScopedTestBase { [Fact] public void Only_Subscribes_To_Source_CollectionChanged_When_CollectionChanged_Subscribed() diff --git a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs index c8a5af05a4..2fcc15f434 100644 --- a/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/LayoutTransformControlTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class LayoutTransformControlTests + public class LayoutTransformControlTests : ScopedTestBase { [Fact] public void Measure_On_Scale_x2_Is_Correct() diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs index 107ce4d33f..8dc9a0c412 100644 --- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs +++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Multiple.cs @@ -14,7 +14,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ListBoxTests_Multiple + public class ListBoxTests_Multiple : ScopedTestBase { private MouseTestHelper _helper = new MouseTestHelper(); diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs index e7acceb2c4..4e7b06e6e0 100644 --- a/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs +++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs @@ -16,7 +16,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ListBoxTests_Single + public class ListBoxTests_Single : ScopedTestBase { MouseTestHelper _mouse = new MouseTestHelper(); diff --git a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs index 288b48c0ab..8153a49a09 100644 --- a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs +++ b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests; -public class LoadedTests +public class LoadedTests : ScopedTestBase { [Fact] public void Window_Loads_And_Unloads() diff --git a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs index 39728ed865..25b0780f8b 100644 --- a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs @@ -18,7 +18,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class MaskedTextBoxTests + public class MaskedTextBoxTests : ScopedTestBase { [Fact] public void Opening_Context_Menu_Does_not_Lose_Selection() diff --git a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs index 64c675fa18..e7979cedcf 100644 --- a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs @@ -15,7 +15,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class MenuItemTests + public class MenuItemTests : ScopedTestBase { private Mock popupImpl; diff --git a/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs b/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs index 0ff1f40121..7a2d0bda73 100644 --- a/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs @@ -4,7 +4,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Mixins { - public class PressedMixinTests + public class PressedMixinTests : ScopedTestBase { private MouseTestHelper _mouse = new MouseTestHelper(); diff --git a/tests/Avalonia.Controls.UnitTests/Mixins/SelectableMixinTests.cs b/tests/Avalonia.Controls.UnitTests/Mixins/SelectableMixinTests.cs index c0610146b7..10509d4c89 100644 --- a/tests/Avalonia.Controls.UnitTests/Mixins/SelectableMixinTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Mixins/SelectableMixinTests.cs @@ -1,10 +1,11 @@ using Avalonia.Controls.Mixins; using Avalonia.Controls.Primitives; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Mixins { - public class SelectableMixinTests + public class SelectableMixinTests : ScopedTestBase { [Fact] public void Selected_Class_Should_Not_Initially_Be_Added() diff --git a/tests/Avalonia.Controls.UnitTests/NameScopeTests.cs b/tests/Avalonia.Controls.UnitTests/NameScopeTests.cs index 888b3b3d24..e613b2499d 100644 --- a/tests/Avalonia.Controls.UnitTests/NameScopeTests.cs +++ b/tests/Avalonia.Controls.UnitTests/NameScopeTests.cs @@ -1,9 +1,10 @@ using System; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class NameScopeTests + public class NameScopeTests : ScopedTestBase { [Fact] public void Register_Registers_Element() diff --git a/tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs b/tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs index 10139be0d4..03213cd0d1 100644 --- a/tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs +++ b/tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs @@ -11,7 +11,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class NumericUpDownTests + public class NumericUpDownTests : ScopedTestBase { private static TestServices Services => TestServices.StyledWindow; diff --git a/tests/Avalonia.Controls.UnitTests/PanelTests.cs b/tests/Avalonia.Controls.UnitTests/PanelTests.cs index 313473a76a..b2680c02d7 100644 --- a/tests/Avalonia.Controls.UnitTests/PanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/PanelTests.cs @@ -10,7 +10,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class PanelTests + public class PanelTests : ScopedTestBase { [Fact] public void Adding_Control_To_Panel_Should_Set_Child_Controls_Parent() diff --git a/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs index 3259ec1a4c..1e59a2ea9a 100644 --- a/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs @@ -4,13 +4,14 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Input.GestureRecognizers; using Avalonia.Interactivity; +using Avalonia.UnitTests; using Avalonia.VisualTree; using Moq; using Xunit; namespace Avalonia.Controls.UnitTests.Platform { - public class DefaultMenuInteractionHandlerTests + public class DefaultMenuInteractionHandlerTests : ScopedTestBase { static PointerPressedEventArgs CreatePressed(object source) => new PointerPressedEventArgs(source, new FakePointer(), (Visual)source, default,0, new PointerPointProperties (RawInputModifiers.None, PointerUpdateKind.LeftButtonPressed), @@ -21,7 +22,7 @@ namespace Avalonia.Controls.UnitTests.Platform new PointerPointProperties(RawInputModifiers.None, PointerUpdateKind.LeftButtonReleased), default, MouseButton.Left); - public class TopLevel + public class TopLevel : ScopedTestBase { [Fact] public void Up_Opens_MenuItem_With_SubMenu() @@ -227,7 +228,7 @@ namespace Avalonia.Controls.UnitTests.Platform } } - public class NonTopLevel + public class NonTopLevel : ScopedTestBase { [Fact] public void Up_Selects_Previous_MenuItem() @@ -546,7 +547,7 @@ namespace Avalonia.Controls.UnitTests.Platform } } - public class ContextMenu + public class ContextMenu : ScopedTestBase { [Fact] public void Down_Selects_Selects_First_MenuItem_When_No_Selection() diff --git a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs index e9aae23214..c389106de5 100644 --- a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs @@ -102,10 +102,11 @@ public class ScreensTests : ScopedTestBase } [Fact] - public async Task Should_Raise_Event_When_Screen_Changed_From_Another_Thread() + public void Should_Raise_Event_When_Screen_Changed_From_Another_Thread() { using var _ = UnitTestApplication.Start(TestServices.MockThreadingInterface); + Dispatcher.UIThread.VerifyAccess(); var hasChangedTimes = 0; var screens = new TestScreens(); screens.Changed = () => @@ -114,7 +115,7 @@ public class ScreensTests : ScopedTestBase hasChangedTimes += 1; }; - await Task.Run(() => screens.PushNewScreens([1, 2])); + ThreadRunHelper.RunOnDedicatedThread(() => screens.PushNewScreens([1, 2])).GetAwaiter().GetResult(); Dispatcher.UIThread.RunJobs(); Assert.Equal(1, hasChangedTimes); diff --git a/tests/Avalonia.Controls.UnitTests/Platform/StorageProviderHelperTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/StorageProviderHelperTests.cs index 301301f61d..bae8497bf1 100644 --- a/tests/Avalonia.Controls.UnitTests/Platform/StorageProviderHelperTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Platform/StorageProviderHelperTests.cs @@ -2,11 +2,12 @@ using System; using System.Linq; using System.Text; using Avalonia.Platform.Storage.FileIO; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Platform; -public class StorageProviderHelperTests +public class StorageProviderHelperTests : ScopedTestBase { [Fact] public void Can_Encode_And_Decode_Bookmark() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs index 34a2776bcd..740d32e647 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs @@ -16,7 +16,7 @@ namespace Avalonia.Controls.UnitTests.Presenters /// /// Tests for ContentControls that are hosted in a control template. /// - public class ContentPresenterTests_InTemplate + public class ContentPresenterTests_InTemplate : ScopedTestBase { [Fact] public void Should_Register_With_Host_When_TemplatedParent_Set() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Layout.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Layout.cs index e82050528f..f3165b30e0 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Layout.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Layout.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Presenters { - public class ContentPresenterTests_Layout + public class ContentPresenterTests_Layout : ScopedTestBase { [Theory] [InlineData(HorizontalAlignment.Stretch, VerticalAlignment.Stretch, 0, 0, 100, 100)] @@ -234,7 +234,7 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(new Rect(32, 32, 0, 0), content.Bounds); } - public class UseLayoutRounding + public class UseLayoutRounding : ScopedTestBase { [Fact] public void Measure_Rounds_Padding() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs index c31b85ddf7..53887a90cd 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Standalone.cs @@ -18,7 +18,7 @@ namespace Avalonia.Controls.UnitTests.Presenters /// /// Tests for ContentControls that aren't hosted in a control template. /// - public class ContentPresenterTests_Standalone + public class ContentPresenterTests_Standalone : ScopedTestBase { [Fact] public void Should_Set_Childs_Parent_To_Itself_Standalone() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Unrooted.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Unrooted.cs index f94c782b00..dcdd75fbb0 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Unrooted.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_Unrooted.cs @@ -9,7 +9,7 @@ namespace Avalonia.Controls.UnitTests.Presenters /// /// Tests for ContentControls that are not attached to a logical tree. /// - public class ContentPresenterTests_Unrooted + public class ContentPresenterTests_Unrooted : ScopedTestBase { [Fact] public void Setting_Content_To_Control_Should_Not_Set_Child_Unless_UpdateChild_Called() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs index 24aff3b566..47692d4c29 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests.cs @@ -13,7 +13,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Presenters { - public class ItemsPresenterTests + public class ItemsPresenterTests : ScopedTestBase { [Fact] public void Should_Register_With_Host_When_TemplatedParent_Set() @@ -37,7 +37,7 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(target.Panel, child); } - public class NonVirtualizingPanel + public class NonVirtualizingPanel : ScopedTestBase { [Fact] public void Creates_Containers_For_Initial_Items() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs index eb2129ae77..09ce6d5d27 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs @@ -9,7 +9,7 @@ using Xunit.Sdk; namespace Avalonia.Controls.UnitTests.Presenters { - public class ScrollContentPresenterTests + public class ScrollContentPresenterTests : NameScopeTests { [Theory] [InlineData(HorizontalAlignment.Stretch, VerticalAlignment.Stretch, 10, 10, 80, 80)] diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests_ILogicalScrollable.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests_ILogicalScrollable.cs index 8d7e634de9..7b66266523 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests_ILogicalScrollable.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests_ILogicalScrollable.cs @@ -3,11 +3,12 @@ using System.Reactive.Linq; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Input; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class ScrollContentPresenterTests_ILogicalScrollable + public class ScrollContentPresenterTests_ILogicalScrollable : ScopedTestBase { [Fact] public void Measure_Should_Pass_Unchanged_Bounds_To_ILogicalScrollable() diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs index 69d30883c6..2d085fc25b 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Presenters { - public class TextPresenter_Tests + public class TextPresenter_Tests : ScopedTestBase { [Fact] public void TextPresenter_Can_Contain_Null_With_Password_Char_Set() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs index 38bbc875c5..92c60c5010 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs @@ -15,7 +15,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class PopupRootTests + public class PopupRootTests : ScopedTestBase { [Fact] public void PopupRoot_IsAttachedToLogicalTree_Is_True() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs index 86eb5f83a4..139c4656a1 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs @@ -23,7 +23,7 @@ using Avalonia.Media; namespace Avalonia.Controls.UnitTests.Primitives { - public class PopupTests + public class PopupTests : ScopedTestBase { protected bool UsePopupHost; diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs index e5d39212f7..38e5392c79 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs @@ -12,7 +12,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class RangeBaseTests + public class RangeBaseTests : ScopedTestBase { [Fact] public void Maximum_Should_Be_Coerced_To_Minimum() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs index 49fda57092..8ec007c203 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs @@ -4,11 +4,12 @@ using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Input; using Avalonia.Media; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class ScrollBarTests + public class ScrollBarTests : ScopedTestBase { [Fact] public void Setting_Value_Should_Update_Track_Value() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs index 13c6ee50a5..d5dce89cdf 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs @@ -1844,27 +1844,29 @@ namespace Avalonia.Controls.UnitTests.Primitives } [Fact(Timeout = 2000)] - public async Task MoveSelection_Wrap_Does_Not_Hang_With_No_Focusable_Controls() - { - // Issue #3094. - var target = new TestSelector + public Task MoveSelection_Wrap_Does_Not_Hang_With_No_Focusable_Controls() => + // Timeout in xUnit doesn't work with synchronous methods so we need to apply hack below. + // https://github.com/xunit/xunit/issues/2222 + ThreadRunHelper.RunOnDedicatedThread(() => { - Template = Template(), - Items = + using var _ = UnitTestApplication.Start(); + // Issue #3094. + var target = new TestSelector { - new ListBoxItem { Focusable = false }, - new ListBoxItem { Focusable = false }, - }, - SelectedIndex = 0, - }; - - target.Measure(new Size(100, 100)); - target.Arrange(new Rect(0, 0, 100, 100)); + Template = Template(), + Items = + { + new ListBoxItem { Focusable = false }, + new ListBoxItem { Focusable = false }, + }, + SelectedIndex = 0, + }; - // Timeout in xUnit doesn't work with synchronous methods so we need to apply hack below. - // https://github.com/xunit/xunit/issues/2222 - await Task.Run(() => target.MoveSelection(NavigationDirection.Next, true)); - } + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(0, 0, 100, 100)); + + target.MoveSelection(NavigationDirection.Next, true); + }); [Fact] public void MoveSelection_Skips_Non_Focusable_Controls_When_Moving_To_Last_Item() @@ -1907,50 +1909,54 @@ namespace Avalonia.Controls.UnitTests.Primitives } [Fact(Timeout = 2000)] - public async Task MoveSelection_Does_Not_Hang_When_All_Items_Are_Non_Focusable_And_We_Move_To_First_Item() - { - var target = new TestSelector - { - Template = Template(), - Items = - { - new ListBoxItem { Focusable = false }, - new ListBoxItem { Focusable = false }, - } - }; - - target.Measure(new Size(100, 100)); - target.Arrange(new Rect(0, 0, 100, 100)); - + public Task MoveSelection_Does_Not_Hang_When_All_Items_Are_Non_Focusable_And_We_Move_To_First_Item() => // Timeout in xUnit doesn't work with synchronous methods so we need to apply hack below. // https://github.com/xunit/xunit/issues/2222 - await Task.Run(() => target.MoveSelection(NavigationDirection.First, true)); + ThreadRunHelper.RunOnDedicatedThread( + () => + { + using var _ = UnitTestApplication.Start(); + var target = new TestSelector + { + Template = Template(), + Items = + { + new ListBoxItem { Focusable = false }, + new ListBoxItem { Focusable = false }, + } + }; - Assert.Equal(-1, target.SelectedIndex); - } + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(0, 0, 100, 100)); + + target.MoveSelection(NavigationDirection.First, true); + + Assert.Equal(-1, target.SelectedIndex); + }); [Fact(Timeout = 2000)] - public async Task MoveSelection_Does_Not_Hang_When_All_Items_Are_Non_Focusable_And_We_Move_To_Last_Item() - { - var target = new TestSelector + public Task MoveSelection_Does_Not_Hang_When_All_Items_Are_Non_Focusable_And_We_Move_To_Last_Item() + // Timeout in xUnit doesn't work with synchronous methods so we need to apply hack below. + // https://github.com/xunit/xunit/issues/2222 + => ThreadRunHelper.RunOnDedicatedThread(() => { - Template = Template(), - Items = + var target = new TestSelector { - new ListBoxItem { Focusable = false }, - new ListBoxItem { Focusable = false }, - } - }; - - target.Measure(new Size(100, 100)); - target.Arrange(new Rect(0, 0, 100, 100)); + Template = Template(), + Items = + { + new ListBoxItem { Focusable = false }, + new ListBoxItem { Focusable = false }, + } + }; - // Timeout in xUnit doesn't work with synchronous methods so we need to apply hack below. - // https://github.com/xunit/xunit/issues/2222 - await Task.Run(() => target.MoveSelection(NavigationDirection.Last, true)); + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(0, 0, 100, 100)); + + target.MoveSelection(NavigationDirection.Last, true); - Assert.Equal(-1, target.SelectedIndex); - } + Assert.Equal(-1, target.SelectedIndex); + }); [Fact] public void MoveSelection_Does_Select_Disabled_Controls() @@ -2247,9 +2253,7 @@ namespace Avalonia.Controls.UnitTests.Primitives [Fact] public void Setting_IsTextSearchEnabled_Enables_Or_Disables_Text_Search() { - var pti = Mock.Of(x => x.CurrentThreadIsLoopThread == true); - - using (UnitTestApplication.Start(TestServices.StyledWindow.With(dispatcherImpl: pti))) + using (UnitTestApplication.Start(TestServices.StyledWindow.With())) { var items = new[] { diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs index 3ef93c7cda..dea04867c6 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs @@ -9,7 +9,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class SelectingItemsControlTests_AutoSelect + public class SelectingItemsControlTests_AutoSelect : ScopedTestBase { [Fact] public void First_Item_Should_Be_Selected() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs index 368da442ef..5e8c9daeb2 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs @@ -22,7 +22,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class SelectingItemsControlTests_Multiple + public class SelectingItemsControlTests_Multiple : ScopedTestBase { [Fact] public void Setting_SelectedIndex_Should_Add_To_SelectedItems() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs index a779e8d074..9625a31b9d 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_SelectedValue.cs @@ -13,7 +13,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class SelectingItemsControlTests_SelectedValue + public class SelectingItemsControlTests_SelectedValue : ScopedTestBase { [Fact] public void Setting_SelectedItem_Sets_SelectedValue() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/TabStripTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/TabStripTests.cs index d50f6e1d0d..b7a3d2d60a 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/TabStripTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/TabStripTests.cs @@ -5,11 +5,12 @@ using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.LogicalTree; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class TabStripTests + public class TabStripTests : ScopedTestBase { [Fact] public void First_Tab_Should_Be_Selected_By_Default() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs index cb90e1217f..0d76484a34 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/TemplatedControlTests.cs @@ -14,7 +14,7 @@ using Avalonia.Media; namespace Avalonia.Controls.UnitTests.Primitives { - public class TemplatedControlTests + public class TemplatedControlTests : ScopedTestBase { [Fact] public void Template_Doesnt_Get_Executed_On_Set() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/ToggleButtonTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/ToggleButtonTests.cs index dbb3e0691d..9fc14f0b34 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/ToggleButtonTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/ToggleButtonTests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Avalonia.Controls.Primitives.UnitTests { - public class ToggleButtonTests + public class ToggleButtonTests : ScopedTestBase { private const string uncheckedClass = ":unchecked"; private const string checkedClass = ":checked"; diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs index f4001a8ca1..5441e522a5 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs @@ -1,11 +1,12 @@ using Avalonia.Controls.Primitives; using Avalonia.Layout; using Avalonia.LogicalTree; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class TrackTests + public class TrackTests : ScopedTestBase { [Fact] public void Measure_Should_Return_Thumb_DesiredWidth_In_Vertical_Orientation() diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/UniformGridTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/UniformGridTests.cs index d5cc450587..8f5d008ad3 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/UniformGridTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/UniformGridTests.cs @@ -1,9 +1,10 @@ using Avalonia.Controls.Primitives; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class UniformGridTests + public class UniformGridTests : ScopedTestBase { [Fact] public void Grid_Columns_Equals_Rows_For_Auto_Columns_And_Rows() diff --git a/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs b/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs index d5e6f4885e..9d6447d7e0 100644 --- a/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs +++ b/tests/Avalonia.Controls.UnitTests/RadioButtonTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class RadioButtonTests + public class RadioButtonTests : ScopedTestBase { [Theory] [InlineData(false)] diff --git a/tests/Avalonia.Controls.UnitTests/RelativePanelTests.cs b/tests/Avalonia.Controls.UnitTests/RelativePanelTests.cs index b3a75dafa7..26d7744566 100644 --- a/tests/Avalonia.Controls.UnitTests/RelativePanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/RelativePanelTests.cs @@ -4,7 +4,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class RelativePanelTests + public class RelativePanelTests : ScopedTestBase { [Fact] public void Lays_Out_1_Child_Next_the_other() diff --git a/tests/Avalonia.Controls.UnitTests/Selection/InternalSelectionModelTests.cs b/tests/Avalonia.Controls.UnitTests/Selection/InternalSelectionModelTests.cs index 224b89bf85..468b278c91 100644 --- a/tests/Avalonia.Controls.UnitTests/Selection/InternalSelectionModelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Selection/InternalSelectionModelTests.cs @@ -4,11 +4,12 @@ using System.Collections.Generic; using System.Collections.Specialized; using Avalonia.Collections; using Avalonia.Controls.Selection; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Selection { - public class InternalSelectionModelTests + public class InternalSelectionModelTests : ScopedTestBase { [Fact] public void Selecting_Item_Adds_To_WritableSelectedItems() diff --git a/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Multiple.cs b/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Multiple.cs index dbbff91fcc..bad0f4ce32 100644 --- a/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Multiple.cs +++ b/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Multiple.cs @@ -3,15 +3,16 @@ using System.Collections.Generic; using System.Collections.Specialized; using Avalonia.Collections; using Avalonia.Controls.Selection; +using Avalonia.UnitTests; using Xunit; #nullable enable namespace Avalonia.Controls.UnitTests.Selection { - public class SelectionModelTests_Multiple + public class SelectionModelTests_Multiple : ScopedTestBase { - public class No_Source + public class No_Source : ScopedTestBase { [Fact] public void Can_Select_Multiple_Items_Before_Source_Assigned() @@ -210,7 +211,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedIndex + public class SelectedIndex : ScopedTestBase { [Fact] public void SelectedIndex_Larger_Than_Source_Clears_Selection() @@ -301,7 +302,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedIndexes + public class SelectedIndexes : ScopedTestBase { [Fact] public void PropertyChanged_Is_Raised_When_SelectedIndex_Changes() @@ -323,7 +324,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedItem + public class SelectedItem : ScopedTestBase { [Fact] public void PropertyChanged_Is_Raised_When_SelectedIndex_Changes() @@ -345,7 +346,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedItems + public class SelectedItems : ScopedTestBase { [Fact] public void PropertyChanged_Is_Raised_When_SelectedIndex_Changes() @@ -367,7 +368,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Select + public class Select : ScopedTestBase { [Fact] public void Select_Sets_SelectedIndex_If_Previously_Unset() @@ -449,7 +450,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectRange + public class SelectRange : ScopedTestBase { [Fact] public void SelectRange_Selects_Items() @@ -517,7 +518,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Deselect + public class Deselect : ScopedTestBase { [Fact] public void Deselect_Clears_Selected_Item() @@ -558,7 +559,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class DeselectRange + public class DeselectRange : ScopedTestBase { [Fact] public void DeselectRange_Clears_Identical_Range() @@ -630,7 +631,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Clear + public class Clear : ScopedTestBase { [Fact] public void Clear_Raises_SelectionChanged() @@ -656,7 +657,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class AnchorIndex + public class AnchorIndex : ScopedTestBase { [Fact] public void Setting_SelectedIndex_Sets_AnchorIndex() @@ -768,7 +769,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SingleSelect + public class SingleSelect : ScopedTestBase { [Fact] public void Converting_To_Single_Selection_Removes_Multiple_Selection() @@ -816,7 +817,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class CollectionChanges + public class CollectionChanges : ScopedTestBase { [Fact] public void Adding_Item_Before_Selected_Item_Updates_Indexes() @@ -1377,7 +1378,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class BatchUpdate + public class BatchUpdate : ScopedTestBase { [Fact] public void Correctly_Batches_Selects() @@ -1584,7 +1585,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class LostSelection + public class LostSelection : ScopedTestBase { [Fact] public void LostSelection_Called_On_Clear() @@ -1644,7 +1645,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SourceReset + public class SourceReset : ScopedTestBase { [Fact] public void Can_Restore_Selection_In_SourceReset_Event() diff --git a/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Single.cs b/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Single.cs index f4dbdf5418..5eac2fc359 100644 --- a/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Single.cs +++ b/tests/Avalonia.Controls.UnitTests/Selection/SelectionModelTests_Single.cs @@ -5,6 +5,7 @@ using System.Linq; using Avalonia.Collections; using Avalonia.Controls.Selection; using Avalonia.Controls.Utils; +using Avalonia.UnitTests; using Xunit; using CollectionChangedEventManager = Avalonia.Controls.Utils.CollectionChangedEventManager; @@ -14,7 +15,7 @@ namespace Avalonia.Controls.UnitTests.Selection { public class SelectionModelTests_Single { - public class Source + public class Source : ScopedTestBase { [Fact] public void Can_Select_Index_Before_Source_Assigned() @@ -324,7 +325,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedIndex + public class SelectedIndex : ScopedTestBase { [Fact] public void SelectedIndex_Larger_Than_Source_Clears_Selection() @@ -454,7 +455,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedItem + public class SelectedItem : ScopedTestBase { [Fact] public void Setting_SelectedItem_To_Valid_Item_Updates_Selection() @@ -496,7 +497,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedIndexes + public class SelectedIndexes : ScopedTestBase { [Fact] public void PropertyChanged_Is_Raised_When_SelectedIndex_Changes() @@ -538,7 +539,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectedItems + public class SelectedItems : ScopedTestBase { [Fact] public void PropertyChanged_Is_Raised_When_SelectedIndex_Changes() @@ -580,7 +581,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Select + public class Select : ScopedTestBase { [Fact] public void Select_Sets_SelectedIndex() @@ -664,7 +665,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SelectRange + public class SelectRange : ScopedTestBase { [Fact] public void SelectRange_Throws() @@ -675,7 +676,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Deselect + public class Deselect : ScopedTestBase { [Fact] public void Deselect_Clears_Current_Selection() @@ -721,7 +722,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class DeselectRange + public class DeselectRange : ScopedTestBase { [Fact] public void DeselectRange_Clears_Current_Selection_For_Intersecting_Range() @@ -767,7 +768,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class Clear + public class Clear : ScopedTestBase { [Fact] public void Clear_Raises_SelectionChanged() @@ -792,7 +793,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class AnchorIndex + public class AnchorIndex : ScopedTestBase { [Fact] public void Setting_SelectedIndex_Sets_AnchorIndex() @@ -898,7 +899,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class SingleSelect + public class SingleSelect : ScopedTestBase { [Fact] public void Converting_To_Multiple_Selection_Preserves_Selection() @@ -939,7 +940,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class CollectionChanges + public class CollectionChanges : ScopedTestBase { [Fact] public void Adding_Item_Before_Selected_Item_Updates_Indexes() @@ -1273,7 +1274,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class BatchUpdate + public class BatchUpdate : ScopedTestBase { [Fact] public void Changes_Do_Not_Take_Effect_Until_EndUpdate_Called() @@ -1309,7 +1310,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class LostSelection + public class LostSelection : ScopedTestBase { [Fact] public void LostSelection_Called_On_Clear() @@ -1421,7 +1422,7 @@ namespace Avalonia.Controls.UnitTests.Selection } } - public class UntypedInterface + public class UntypedInterface : ScopedTestBase { [Fact] public void Raises_Untyped_SelectionChanged_Event() diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/EllipseTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/EllipseTests.cs index 626945894f..9bae5e923d 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/EllipseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/EllipseTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Shapes { - public class EllipseTests + public class EllipseTests : ScopedTestBase { [Fact] public void Measure_Does_Not_Set_RenderedGeometry_Rect() diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs index 8b8656a76b..9e83f469b6 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Shapes { - public class PathTests + public class PathTests : ScopedTestBase { [Fact] public void Path_With_Null_Data_Does_Not_Throw_On_Measure() diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/PolygonTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/PolygonTests.cs index 1584e836e8..1775a01cd3 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/PolygonTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/PolygonTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Shapes; -public class PolygonTests +public class PolygonTests : ScopedTestBase { [Fact] public void Polygon_Will_Update_Geometry_On_Shapes_Collection_Content_Change() diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/PolylineTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/PolylineTests.cs index a68dc9d4b4..971cd81f4a 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/PolylineTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/PolylineTests.cs @@ -5,7 +5,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Shapes; -public class PolylineTests +public class PolylineTests : ScopedTestBase { [Fact] public void Polyline_Will_Update_Geometry_On_Shapes_Collection_Content_Change() diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs index 65be7fadaf..554acb7df0 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/RectangleTests.cs @@ -6,7 +6,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests.Shapes { - public class RectangleTests + public class RectangleTests : ScopedTestBase { [Fact] public void Measure_Does_Not_Set_RenderedGeometry_Rect() diff --git a/tests/Avalonia.Controls.UnitTests/SliderTests.cs b/tests/Avalonia.Controls.UnitTests/SliderTests.cs index 1c3c052144..f6ebeea7f4 100644 --- a/tests/Avalonia.Controls.UnitTests/SliderTests.cs +++ b/tests/Avalonia.Controls.UnitTests/SliderTests.cs @@ -2,11 +2,12 @@ using System.Collections.Generic; using System.Text; using Avalonia.Layout; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class SliderTests + public class SliderTests : ScopedTestBase { [Fact] public void Default_Orientation_Should_Be_Horizontal() diff --git a/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs b/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs index 47383fa9ad..26d572d416 100644 --- a/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/SplitViewTests.cs @@ -7,7 +7,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class SplitViewTests + public class SplitViewTests : ScopedTestBase { [Fact] public void SplitView_PaneOpening_Should_Fire_Before_PaneOpened() diff --git a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs index 101bf044e8..28ad64bac0 100644 --- a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs @@ -1,10 +1,11 @@ using System.Linq; using Avalonia.Layout; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class StackPanelTests + public class StackPanelTests : ScopedTestBase { [Fact] public void Lays_Out_Children_Vertically() diff --git a/tests/Avalonia.Controls.UnitTests/TabControlTests.cs b/tests/Avalonia.Controls.UnitTests/TabControlTests.cs index 37b15a2b4f..f600d3aaba 100644 --- a/tests/Avalonia.Controls.UnitTests/TabControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TabControlTests.cs @@ -21,7 +21,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class TabControlTests + public class TabControlTests : ScopedTestBase { static TabControlTests() { diff --git a/tests/Avalonia.Controls.UnitTests/Templates/TemplateExtensionsTests.cs b/tests/Avalonia.Controls.UnitTests/Templates/TemplateExtensionsTests.cs index 33593a0631..d540ae9444 100644 --- a/tests/Avalonia.Controls.UnitTests/Templates/TemplateExtensionsTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Templates/TemplateExtensionsTests.cs @@ -1,10 +1,11 @@ using System.Linq; using Avalonia.Controls.UnitTests; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.Templates.UnitTests { - public class TemplateExtensionsTests + public class TemplateExtensionsTests : ScopedTestBase { /// /// Control templates can themselves contain templated controls. Make sure that diff --git a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs index a98b20f66d..fd854ed2b3 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs @@ -10,7 +10,7 @@ using static System.Net.Mime.MediaTypeNames; namespace Avalonia.Controls.UnitTests { - public class TextBlockTests + public class TextBlockTests : ScopedTestBase { [Fact] public void DefaultBindingMode_Should_Be_OneWay() diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index 6c1fe6648d..0173f36581 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -22,7 +22,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class TextBoxTests + public class TextBoxTests : ScopedTestBase { [Fact] public void Opening_Context_Menu_Does_not_Lose_Selection() diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs index 0eaa3092e9..431426efa8 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs @@ -18,7 +18,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class TextBoxTests_DataValidation + public class TextBoxTests_DataValidation : ScopedTestBase { [Fact] public void Setter_Exceptions_Should_Set_Error_Pseudoclass() diff --git a/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs b/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs index 00e5c4d385..3a7c07bb8d 100644 --- a/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs @@ -15,7 +15,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class TimePickerTests + public class TimePickerTests : ScopedTestBase { [Fact] public void SelectedTimeChanged_Should_Fire_When_SelectedTime_Set() diff --git a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs index 12ecbb0c68..7729d33d47 100644 --- a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs @@ -63,7 +63,7 @@ namespace Avalonia.Controls.UnitTests } } - public abstract class ToolTipTests + public abstract class ToolTipTests : ScopedTestBase { protected abstract TestServices ConfigureServices(TestServices baseServices); diff --git a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs index 8da5265ecc..458f068ae7 100644 --- a/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TopLevelTests.cs @@ -17,7 +17,7 @@ using static Avalonia.Controls.UnitTests.MaskedTextBoxTests; namespace Avalonia.Controls.UnitTests { - public class TopLevelTests + public class TopLevelTests : ScopedTestBase { [Fact] public void IsAttachedToLogicalTree_Is_True() diff --git a/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs b/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs index f92fc96c2b..62430deb09 100644 --- a/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs @@ -16,7 +16,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class TransitioningContentControlTests + public class TransitioningContentControlTests : ScopedTestBase { [Fact] public void Transition_Should_Not_Be_Run_When_First_Shown() diff --git a/tests/Avalonia.Controls.UnitTests/UserControlTests.cs b/tests/Avalonia.Controls.UnitTests/UserControlTests.cs index 9cc6c0156b..bc4426cbb4 100644 --- a/tests/Avalonia.Controls.UnitTests/UserControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/UserControlTests.cs @@ -8,7 +8,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class UserControlTests + public class UserControlTests : ScopedTestBase { [Fact] public void Should_Be_Styled_As_UserControl() diff --git a/tests/Avalonia.Controls.UnitTests/Utils/AncestorFinderTests.cs b/tests/Avalonia.Controls.UnitTests/Utils/AncestorFinderTests.cs index de4c572a73..0687c36886 100644 --- a/tests/Avalonia.Controls.UnitTests/Utils/AncestorFinderTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Utils/AncestorFinderTests.cs @@ -4,12 +4,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Avalonia.Controls.Utils; +using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; namespace Avalonia.Controls.UnitTests.Utils { - public class AncestorFinderTests + public class AncestorFinderTests : ScopedTestBase { [Fact] public void SanityCheck() diff --git a/tests/Avalonia.Controls.UnitTests/Utils/CollectionChangedEventManagerTests.cs b/tests/Avalonia.Controls.UnitTests/Utils/CollectionChangedEventManagerTests.cs index 8bbb5e456f..004e6b0f73 100644 --- a/tests/Avalonia.Controls.UnitTests/Utils/CollectionChangedEventManagerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Utils/CollectionChangedEventManagerTests.cs @@ -4,12 +4,13 @@ using System.Collections.Specialized; using System.Text; using Avalonia.Collections; using Avalonia.Controls.Utils; +using Avalonia.UnitTests; using Xunit; using CollectionChangedEventManager = Avalonia.Controls.Utils.CollectionChangedEventManager; namespace Avalonia.Controls.UnitTests.Utils { - public class CollectionChangedEventManagerTests + public class CollectionChangedEventManagerTests : ScopedTestBase { [Fact] public void AddListener_Listens_To_Events() diff --git a/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs b/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs index 6d47f2504b..e9891ca2fd 100644 --- a/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs @@ -10,7 +10,7 @@ using Factory = System.Func, Avalonia.Controls.Window namespace Avalonia.Controls.UnitTests.Utils { - public class HotKeyManagerTests + public class HotKeyManagerTests : ScopedTestBase { [Fact] public void HotKeyManager_Should_Register_And_Unregister_Key_Binding() diff --git a/tests/Avalonia.Controls.UnitTests/Utils/SafeEnumerableHashSetTests.cs b/tests/Avalonia.Controls.UnitTests/Utils/SafeEnumerableHashSetTests.cs index 022ed52685..cf09a1c5d7 100644 --- a/tests/Avalonia.Controls.UnitTests/Utils/SafeEnumerableHashSetTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Utils/SafeEnumerableHashSetTests.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; +using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; namespace Avalonia.Controls.UnitTests.Utils { - public class SafeEnumerableHashSetTests + public class SafeEnumerableHashSetTests : ScopedTestBase { [Fact] public void Set_Is_Not_Copied_Outside_Enumeration() diff --git a/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs b/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs index 02ae8b47bc..cc798afb19 100644 --- a/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ViewboxTests.cs @@ -7,7 +7,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class ViewboxTests + public class ViewboxTests : ScopedTestBase { [Fact] public void Viewbox_Stretch_Uniform_Child() diff --git a/tests/Avalonia.Controls.UnitTests/VirtualizingCarouselPanelTests.cs b/tests/Avalonia.Controls.UnitTests/VirtualizingCarouselPanelTests.cs index b636c69488..4c0ec8436a 100644 --- a/tests/Avalonia.Controls.UnitTests/VirtualizingCarouselPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/VirtualizingCarouselPanelTests.cs @@ -10,6 +10,7 @@ using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Layout; +using Avalonia.Threading; using Avalonia.UnitTests; using Avalonia.VisualTree; using Moq; @@ -19,7 +20,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class VirtualizingCarouselPanelTests + public class VirtualizingCarouselPanelTests : ScopedTestBase { [Fact] public void Initial_Item_Is_Displayed() @@ -134,7 +135,7 @@ namespace Avalonia.Controls.UnitTests }); } - public class Transitions + public class Transitions : ScopedTestBase { [Fact] public void Initial_Item_Does_Not_Start_Transition() @@ -175,49 +176,59 @@ namespace Avalonia.Controls.UnitTests public void Changing_SelectedIndex_transitions_forward_cycle() { using var app = Start(); - var items = new Control[] { new Button(), new Canvas(), new Label() }; - var transition = new Mock(); - var (target, carousel) = CreateTarget(items, transition.Object); - var cycleindexes = new[] { 1, 2, 0}; - - for (int cycleIndex = 0; cycleIndex < cycleindexes.Length; cycleIndex++) + Dispatcher.UIThread.Invoke(() => // This sets up a proper sync context { - carousel.SelectedIndex = cycleindexes[cycleIndex]; - Layout(target); - - var index = cycleIndex; - transition.Verify(x => x.Start( - index > 0 ? items[cycleindexes[index - 1]] : items[0], - items[cycleindexes[index]], - true, - It.IsAny()), - Times.Once); - } + var items = new Control[] { new Button(), new Canvas(), new Label() }; + var transition = new Mock(); + var (target, carousel) = CreateTarget(items, transition.Object); + var cycleindexes = new[] { 1, 2, 0 }; + + for (int cycleIndex = 0; cycleIndex < cycleindexes.Length; cycleIndex++) + { + carousel.SelectedIndex = cycleindexes[cycleIndex]; + Layout(target); + + Dispatcher.UIThread.RunJobs(); + + var index = cycleIndex; + transition.Verify(x => x.Start( + index > 0 ? items[cycleindexes[index - 1]] : items[0], + items[cycleindexes[index]], + true, + It.IsAny()), + Times.Once); + } + }); } [Fact] public void Changing_SelectedIndex_transitions_backward_cycle() { using var app = Start(); - var items = new Control[] { new Button(), new Canvas(), new Label() }; - var transition = new Mock(); - var (target, carousel) = CreateTarget(items, transition.Object); + Dispatcher.UIThread.Invoke(() => // This sets up a proper sync context + { + var items = new Control[] { new Button(), new Canvas(), new Label() }; + var transition = new Mock(); + var (target, carousel) = CreateTarget(items, transition.Object); - var cycleindexes = new[] { 2, 1, 0}; + var cycleindexes = new[] { 2, 1, 0 }; - for (int cycleIndex = 0; cycleIndex < cycleindexes.Length; cycleIndex++) - { - carousel.SelectedIndex = cycleindexes[cycleIndex]; - Layout(target); - - var index = cycleIndex; - transition.Verify(x => x.Start( - index > 0 ? items[cycleindexes[index - 1]] : items[0], - items[cycleindexes[index]], - false, - It.IsAny()), - Times.Once); - } + for (int cycleIndex = 0; cycleIndex < cycleindexes.Length; cycleIndex++) + { + carousel.SelectedIndex = cycleindexes[cycleIndex]; + Layout(target); + + Dispatcher.UIThread.RunJobs(); + + var index = cycleIndex; + transition.Verify(x => x.Start( + index > 0 ? items[cycleindexes[index - 1]] : items[0], + items[cycleindexes[index]], + false, + It.IsAny()), + Times.Once); + } + }); } [Fact] diff --git a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs index a4c12744ab..c8ab19d9f6 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowBaseTests.cs @@ -17,7 +17,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class WindowBaseTests + public class WindowBaseTests : ScopedTestBase { [Fact] public void Activate_Should_Call_Impl_Activate() diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index 747608983b..a7f2692a57 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -12,7 +12,7 @@ using Xunit; namespace Avalonia.Controls.UnitTests { - public class WindowTests + public class WindowTests : ScopedTestBase { [Fact] public void Setting_Title_Should_Set_Impl_Title() @@ -672,7 +672,7 @@ namespace Avalonia.Controls.UnitTests } } - public class SizingTests + public class SizingTests : ScopedTestBase { [Fact] public void Child_Should_Be_Measured_With_Width_And_Height_If_SizeToContent_Is_Manual() diff --git a/tests/Avalonia.Controls.UnitTests/WrapPanelTests.cs b/tests/Avalonia.Controls.UnitTests/WrapPanelTests.cs index fa48e68953..530d7a4956 100644 --- a/tests/Avalonia.Controls.UnitTests/WrapPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WrapPanelTests.cs @@ -1,10 +1,11 @@ using System; using Avalonia.Layout; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests { - public class WrapPanelTests + public class WrapPanelTests : ScopedTestBase { [Fact] public void Lays_Out_Horizontally_On_Separate_Lines() diff --git a/tests/Avalonia.LeakTests/AvaloniaObjectTests.cs b/tests/Avalonia.LeakTests/AvaloniaObjectTests.cs index 5c012ac725..da33bc6c79 100644 --- a/tests/Avalonia.LeakTests/AvaloniaObjectTests.cs +++ b/tests/Avalonia.LeakTests/AvaloniaObjectTests.cs @@ -11,6 +11,7 @@ using Avalonia.Data.Core; using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings; using Avalonia.Threading; +using Avalonia.UnitTests; using JetBrains.dotMemoryUnit; using Xunit; using Xunit.Abstractions; @@ -18,7 +19,7 @@ using Xunit.Abstractions; namespace Avalonia.LeakTests { [DotMemoryUnit(FailIfRunWithoutSupport = false)] - public class AvaloniaObjectTests + public class AvaloniaObjectTests : ScopedTestBase { public AvaloniaObjectTests(ITestOutputHelper atr) { @@ -159,7 +160,7 @@ namespace Avalonia.LeakTests } var weakTarget = SetupBinding(); - + CollectGarbage(); Assert.False(weakTarget.IsAlive); } diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index 7ff3642b9a..832e258788 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -16,8 +16,7 @@ - - + diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs index 6b9b209208..0c91e0a6bc 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs @@ -7,12 +7,13 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Threading; +using Avalonia.UnitTests; using Moq; using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests + public class BindingTests : ScopedTestBase { [Fact] public void OneWay_Binding_Should_Be_Set_Up() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Converters.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Converters.cs index cd1c45b513..9a001b9ad9 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Converters.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Converters.cs @@ -4,12 +4,13 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Data.Core; +using Avalonia.UnitTests; using Moq; using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_Converters + public class BindingTests_Converters : ScopedTestBase { [Fact] public void Converter_Should_Be_Used() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_DataValidation.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_DataValidation.cs index 35e9370c4c..cd2db21082 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_DataValidation.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_DataValidation.cs @@ -13,7 +13,7 @@ namespace Avalonia.Markup.UnitTests.Data { public class BindingTests_DataValidation { - public abstract class TestBase + public abstract class TestBase : ScopedTestBase where T : AvaloniaProperty { [Fact] diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs index 9ebf38a2cd..ec9149a86e 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs @@ -10,7 +10,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data; -public class BindingTests_Delay : IDisposable +public class BindingTests_Delay : ScopedTestBase, IDisposable { private const int DelayMilliseconds = 10; private const string InitialFooValue = "foo"; @@ -39,6 +39,7 @@ public class BindingTests_Delay : IDisposable public void Dispose() { _app.Dispose(); + base.Dispose(); } [Fact] diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_ElementName.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_ElementName.cs index 69dfc6c062..2091c9977a 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_ElementName.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_ElementName.cs @@ -7,7 +7,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_ElementName + public class BindingTests_ElementName : ScopedTestBase { [Fact] public void Should_Bind_To_Element_Path() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Logging.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Logging.cs index a7a1e5a9e0..ba5ff6c488 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Logging.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Logging.cs @@ -20,9 +20,9 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_Logging + public class BindingTests_Logging : ScopedTestBase { - public class DataContext + public class DataContext : ScopedTestBase { [Fact] public void Should_Not_Log_Missing_Member_On_Null_DataContext() @@ -68,7 +68,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class Source + public class Source : ScopedTestBase { [Fact] public void Should_Log_Null_Source() @@ -96,7 +96,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class LogicalAncestor + public class LogicalAncestor : ScopedTestBase { [Fact] public void Should_Log_Ancestor_Not_Found() @@ -124,7 +124,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class VisualAncestor + public class VisualAncestor : ScopedTestBase { [Fact] public void Should_Log_Ancestor_Not_Found() @@ -187,7 +187,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class NamedElement + public class NamedElement : ScopedTestBase { [Fact] public void Should_Log_NameScope_Not_Found() @@ -233,7 +233,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class Converter + public class Converter : ScopedTestBase { [Fact] public void Should_Log_Error_For_Unconvertible_Type() @@ -275,7 +275,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class Fallback + public class Fallback : ScopedTestBase { [Theory] [InlineData(true)] @@ -324,7 +324,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class NonControlDataContext + public class NonControlDataContext : ScopedTestBase { [Fact] public void Should_Not_Log_Missing_Member_On_Null_DataContext() @@ -369,7 +369,7 @@ namespace Avalonia.Markup.UnitTests.Data } } - public class CompiledBinding + public class CompiledBinding : ScopedTestBase { [Fact] public void Should_Log_For_Invalid_DataContext_Type() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Method.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Method.cs index 4b2c2494af..1b757f3fbc 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Method.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Method.cs @@ -2,11 +2,12 @@ using Avalonia.Data; using Avalonia.Input; using Avalonia.Interactivity; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_Method + public class BindingTests_Method : ScopedTestBase { [Fact] public void Binding_To_Private_Methods_Shouldnt_Work() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_RelativeSource.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_RelativeSource.cs index 4cbe80c580..e30920a91a 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_RelativeSource.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_RelativeSource.cs @@ -10,7 +10,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_RelativeSource + public class BindingTests_RelativeSource : ScopedTestBase { [Fact] public void Should_Bind_To_First_Ancestor() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs index 7cc8fc26cf..cd1e0cd0a2 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs @@ -7,10 +7,11 @@ using Xunit; using System.Reactive.Disposables; using Avalonia.Markup.Data; using Avalonia.Controls.Primitives; +using Avalonia.UnitTests; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_Self + public class BindingTests_Self : ScopedTestBase { [Fact] public void Binding_To_Property_On_Self_Should_Work() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Source.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Source.cs index e78fedc439..fc82253342 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Source.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_Source.cs @@ -5,10 +5,11 @@ using Avalonia.Markup.Data; using Xunit; using System.ComponentModel; using System.Runtime.CompilerServices; +using Avalonia.UnitTests; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_Source + public class BindingTests_Source : ScopedTestBase { [Fact] public void Source_Should_Be_Used() diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_TemplatedParent.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_TemplatedParent.cs index f04b95aaff..c927e2a3b0 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests_TemplatedParent.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests_TemplatedParent.cs @@ -4,12 +4,13 @@ using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class BindingTests_TemplatedParent + public class BindingTests_TemplatedParent : ScopedTestBase { [Fact] public void OneWay_Binding_Should_Be_Set_Up() diff --git a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs index 45c7c8daa7..0be9b1649a 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class MultiBindingTests + public class MultiBindingTests : ScopedTestBase { [Fact] public void OneWay_Binding_Should_Be_Set_Up() diff --git a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests_Converters.cs b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests_Converters.cs index ac1dad194d..5527ee8d4e 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests_Converters.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/MultiBindingTests_Converters.cs @@ -6,11 +6,12 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Layout; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class MultiBindingTests_Converters + public class MultiBindingTests_Converters : ScopedTestBase { [Fact] public void StringFormat_Should_Be_Applied() diff --git a/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs index 32a9fce7d9..685ff2cdc0 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class TemplateBindingTests + public class TemplateBindingTests : ScopedTestBase { [Fact] public void OneWay_Binding_Should_Be_Set_Up() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/BindingExpressionGrammarTests.cs b/tests/Avalonia.Markup.UnitTests/Parsers/BindingExpressionGrammarTests.cs index 7ecfd4e894..3dcb7b1bfe 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/BindingExpressionGrammarTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/BindingExpressionGrammarTests.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public partial class BindingExpressionGrammarTests + public partial class BindingExpressionGrammarTests : ScopedTestBase { [Fact] public void Should_Parse_Single_Property() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeFactoryTests.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeFactoryTests.cs index c43334e661..21884f7ddc 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeFactoryTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeFactoryTests.cs @@ -4,12 +4,13 @@ using System.Linq; using Avalonia.Data.Core.ExpressionNodes; using Avalonia.Data.Core.ExpressionNodes.Reflection; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionNodeFactoryTests + public class ExpressionNodeFactoryTests : ScopedTestBase { [Fact] public void Should_Build_Single_Property() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AttachedProperty.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AttachedProperty.cs index cc2dc35f0b..9af7997c32 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AttachedProperty.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AttachedProperty.cs @@ -8,10 +8,11 @@ using Xunit; using Avalonia.Markup.Parsers; using Avalonia.Utilities; using Avalonia.Data.Core.ExpressionNodes; +using Avalonia.UnitTests; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_AttachedProperty + public class ExpressionObserverBuilderTests_AttachedProperty : ScopedTestBase { private readonly Func _typeResolver; diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AvaloniaProperty.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AvaloniaProperty.cs index ff81ed1fe8..0578689dbc 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AvaloniaProperty.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_AvaloniaProperty.cs @@ -8,10 +8,11 @@ using Xunit; using Avalonia.Markup.Parsers; using Avalonia.Utilities; using Avalonia.Data.Core.ExpressionNodes; +using Avalonia.UnitTests; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_AvaloniaProperty + public class ExpressionObserverBuilderTests_AvaloniaProperty : ScopedTestBase { public ExpressionObserverBuilderTests_AvaloniaProperty() { diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs index 16c4834095..2469fdaa15 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs @@ -16,7 +16,7 @@ using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_Indexer + public class ExpressionObserverBuilderTests_Indexer : ScopedTestBase { [Fact] public async Task Should_Get_Array_Value() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Method.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Method.cs index b727f0bbf5..30e0314844 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Method.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Method.cs @@ -9,11 +9,12 @@ using System.Linq; using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_Method + public class ExpressionObserverBuilderTests_Method : ScopedTestBase { private class TestObject { diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Negation.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Negation.cs index ad0f53feb4..5a516e3da0 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Negation.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Negation.cs @@ -8,12 +8,13 @@ using Avalonia.Data; using Avalonia.Data.Core; using Avalonia.Data.Core.ExpressionNodes; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_Negation + public class ExpressionObserverBuilderTests_Negation : ScopedTestBase { [Fact] public async Task Should_Negate_0() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Property.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Property.cs index 7914b03859..97b9671f1d 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Property.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Property.cs @@ -6,12 +6,13 @@ using Avalonia.Data; using Avalonia.Data.Core; using Avalonia.Data.Core.ExpressionNodes; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Avalonia.Utilities; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class ExpressionObserverBuilderTests_Property + public class ExpressionObserverBuilderTests_Property : ScopedTestBase { [Fact] public async Task Should_Return_BindingNotification_Error_For_Broken_Chain() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/SelectorGrammarTests.cs b/tests/Avalonia.Markup.UnitTests/Parsers/SelectorGrammarTests.cs index b41f37eb3d..b3d5064b48 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/SelectorGrammarTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/SelectorGrammarTests.cs @@ -1,11 +1,12 @@ using System.Linq; using Avalonia.Data.Core; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class SelectorGrammarTests + public class SelectorGrammarTests : ScopedTestBase { [Fact] public void OfType() diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/SelectorParserTests.cs b/tests/Avalonia.Markup.UnitTests/Parsers/SelectorParserTests.cs index 338bdb3ae1..b30c953d62 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/SelectorParserTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/SelectorParserTests.cs @@ -1,11 +1,12 @@ using System; using Avalonia.Controls; using Avalonia.Markup.Parsers; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.UnitTests.Parsers { - public class SelectorParserTests + public class SelectorParserTests : ScopedTestBase { static SelectorParserTests() { diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj index bd63ddd496..50e30546c7 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj @@ -35,6 +35,7 @@ PlatformFactAttribute.cs + diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs index 069c3a3426..a263f6126a 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs @@ -31,7 +31,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions { - public class CompiledBindingExtensionTests + public class CompiledBindingExtensionTests : XamlTestBase { static CompiledBindingExtensionTests() { diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Parsers/PropertyParserTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Parsers/PropertyParserTests.cs index 2209ff4c83..bf2dfe755e 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Parsers/PropertyParserTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Parsers/PropertyParserTests.cs @@ -7,7 +7,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Parsers { - public class PropertyParserTests + public class PropertyParserTests : XamlTestBase { [Fact] public void Parses_Name() diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs index e79ac058fe..b034c6135c 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs @@ -3,7 +3,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Templates { - public class DataTemplateTests + public class DataTemplateTests : XamlTestBase { [Fact] public void DataTemplate_Should_Match_Data_Of_Type() diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/GenericTemplateTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/GenericTemplateTests.cs index 9fee5285aa..8fc76bc024 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/GenericTemplateTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/GenericTemplateTests.cs @@ -26,7 +26,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml public SampleTemplatedObjectTemplate Template { get; set; } } - public class GenericTemplateTests + public class GenericTemplateTests : XamlTestBase { [Fact] public void DataTemplate_Can_Be_Empty() diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ItemsPanelTemplateTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ItemsPanelTemplateTests.cs index d3e29b302a..e0b9846c83 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ItemsPanelTemplateTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ItemsPanelTemplateTests.cs @@ -7,7 +7,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml; -public class ItemsPanelTemplateTests +public class ItemsPanelTemplateTests : XamlTestBase { [Fact] public void ItemsPanelTemplate_In_Style_Allows_TemplateBinding() diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/MergeResourceIncludeTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/MergeResourceIncludeTests.cs index d6f554cdfe..608e10f739 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/MergeResourceIncludeTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/MergeResourceIncludeTests.cs @@ -11,7 +11,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml; -public class MergeResourceIncludeTests +public class MergeResourceIncludeTests : XamlTestBase { static MergeResourceIncludeTests() { diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleIncludeTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleIncludeTests.cs index 9d7d575803..d099d6f3aa 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleIncludeTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleIncludeTests.cs @@ -15,7 +15,7 @@ using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml; -public class StyleIncludeTests +public class StyleIncludeTests : XamlTestBase { static StyleIncludeTests() { diff --git a/tests/Avalonia.UnitTests/ThreadRunHelper.cs b/tests/Avalonia.UnitTests/ThreadRunHelper.cs new file mode 100644 index 0000000000..d1391581c9 --- /dev/null +++ b/tests/Avalonia.UnitTests/ThreadRunHelper.cs @@ -0,0 +1,34 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Avalonia.UnitTests; + +public class ThreadRunHelper +{ + public static Task RunOnDedicatedThread(Func cb) + { + // Task.Run(...).GetAwaiter().GetResult() can be inlined, so we have this cursed thing instead + var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + new Thread(() => + { + try + { + tcs.SetResult(cb()); + } + catch (Exception e) + { + tcs.SetException(e); + } + }).Start(); + return tcs.Task; + } + + public static Task RunOnDedicatedThread(Action cb) => RunOnDedicatedThread(() => + { + cb(); + return null; + }); + + public static void RunOnDedicatedThreadAndWait(Action cb) => RunOnDedicatedThread(cb).GetAwaiter().GetResult(); +} \ No newline at end of file diff --git a/tests/Avalonia.UnitTests/UnitTestApplication.cs b/tests/Avalonia.UnitTests/UnitTestApplication.cs index 453c6c05d1..047dc630f7 100644 --- a/tests/Avalonia.UnitTests/UnitTestApplication.cs +++ b/tests/Avalonia.UnitTests/UnitTestApplication.cs @@ -42,7 +42,7 @@ namespace Avalonia.UnitTests var scope = AvaloniaLocator.EnterScope(); var oldContext = SynchronizationContext.Current; _ = new UnitTestApplication(services); - Dispatcher.ResetForUnitTests(); + Dispatcher.ResetBeforeUnitTests(); return Disposable.Create(() => { if (Dispatcher.UIThread.CheckAccess()) @@ -51,9 +51,10 @@ namespace Avalonia.UnitTests } ((ToolTipService)AvaloniaLocator.Current.GetService())?.Dispose(); - - scope.Dispose(); + Dispatcher.ResetForUnitTests(); + scope.Dispose(); + Dispatcher.ResetBeforeUnitTests(); SynchronizationContext.SetSynchronizationContext(oldContext); }); } diff --git a/tests/Shared/ScopedSanityCheck.cs b/tests/Shared/ScopedSanityCheck.cs new file mode 100644 index 0000000000..d89c6859d4 --- /dev/null +++ b/tests/Shared/ScopedSanityCheck.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using Avalonia.UnitTests; +using Xunit; + +namespace Avalonia.UnitTests.Helpers; + +static class ScopedSanityCheck +{ + [ModuleInitializer] + public static void SanityCheck() + { + var offendingTypes = new List(); + void CheckRecursive(Type type) + { + if (type.GetMethods().Any(m => m.GetCustomAttributes(true).Any(a => a is FactAttribute or TheoryAttribute))) + { + if (!typeof(ScopedTestBase).IsAssignableFrom(type)) + offendingTypes.Add(type.ToString()); + } + + foreach (var t in type.GetNestedTypes()) + CheckRecursive(t); + } + + foreach(var t in typeof(ScopedSanityCheck).Assembly.GetTypes()) + CheckRecursive(t); + + if (offendingTypes.Count > 0) + throw new Exception( + $"Test types:\n{string.Join("\n", offendingTypes.ToArray())}\n don't inherit from ScopedTestBase"); + } +} \ No newline at end of file