From a44823e9c774b479870620000914dc9e9052cc7d Mon Sep 17 00:00:00 2001 From: Shane Neuville Date: Mon, 1 Jul 2024 09:19:53 -0500 Subject: [PATCH] [net9.0] Merge main into net9.0 (#23328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Simplify Development.md (#23142) * Simplify Development.md * Update .github/DEVELOPMENT.md Co-authored-by: Eilon Lipton * Update .github/DEVELOPMENT.md Co-authored-by: Eilon Lipton * Update .github/DEVELOPMENT.md Co-authored-by: Eilon Lipton * Update .github/DEVELOPMENT.md Co-authored-by: Eilon Lipton * Update DEVELOPMENT.md * - modify and move advanced tips to different file * Update DEVELOPMENT.md * Update .github/DEVELOPMENT.md Co-authored-by: Gerald Versluis * Update docs/DevelopmentTips.md Co-authored-by: Gerald Versluis * Update docs/DevelopmentTips.md Co-authored-by: Gerald Versluis * - updates based on review --------- Co-authored-by: Eilon Lipton Co-authored-by: Gerald Versluis * Wire RefreshView up to our xplat layout workflow (#23169) (#23218) * Use better layout/measure path with refreshview * - fix naming * - set RefreshView content to maui compatible container * - add test * - fix null operator * Update Issue23029.xaml.cs * - fix content panel so it removes previous content * - add additional check * Remove adding to FutureAccessList as the app is running with runFullTrust capability (#23047) * Call base.OnResume if Existing NavigationFragment Early (#23187) * VSCode no longer uses MAUI to launch (#23222) * [Android] Fix flyout behaviour switching exception (#22453) * Fix flyout behaviour switching exception * Tests added * Flyout test page added * Flyoutpage test fixes * Flyout toggle test added * Remove duplicate ] characters * Flyout test pages added * Check for platforms * Fix title * - fix tests --------- Co-authored-by: Gerald Versluis Co-authored-by: Shane Neuville * Renamed the project because macOS uses .app (#23223) * Renamed the project because macOS uses .app * And the folder * merge first * ns * Move tests to new location (#23251) * Split SingleProject targets (#23269) * Split SingleProject targets * Update Microsoft.Maui.Controls.SingleProject.Before.targets * Update bug-report.yml with 8.0.61 (#23273) * Null terminate Page on TabbedRenderer (#23290) Co-authored-by: Shane Neuville * [Windows] Improve performance in accessibility extensions (#22698) * AccessibilityExtensions: Add missing braces * AccessibilityExtensions: Enable nullability and improve performance * Update shipped & unshipped API --------- Co-authored-by: Javier Suárez * [Android] Avoid double event subscribes in gesture manager (#23242) * [Android] Avoid double event subscribes in gesture manager * Fix typo in test text * Bump Microsoft.Web.WebView2 from 1.0.2151.40 to 1.0.2592.51 (#23209) * [tests] test a lot more things in `MemoryTests.cs` (#23324) * [tests] test a lot more things in `MemoryTests.cs` This expands the tests to cover more controls and areas. * Add test cases for more controls: * `Ellipse` * `Grid` * `Path` * `Line` * `Path` * `RadioButton` * `Rectangle` * `RoundRectangle` * Expand tests for a couple controls: * `Border` has a `StrokeShape` * Any `TemplatedView` gets a `ControlTemplate` * Re-enable `ListView` for Android This should work now after merging: * https://github.com/dotnet/android/pull/8900 * https://github.com/dotnet/maui/pull/23120 * Add a complicated test case for `BindableLayout` Similar to the case at: * https://github.com/dotnet/maui/issues/23199 * Skip `ListView` on API 23 * Bump Appium version to 2.11 (#23337) * Bump Appium version to 2.11 * Update CarouselViewUITests.UpdateCurrentItem.cs * Update appium-install.ps1 * Update CarouselViewUITests.UpdateCurrentItem.cs * Simplify `NavigationRootManager.Connect` on the Windows platform. (#23345) * Simplify `NavigationRootManager.Connect` on the Windows platform. * Use ternary operator syntax * Removed extra tabs * Moved `_disconnected = false;` to `if (_disconnected)` * Bump Appium Drivers (#23349) * Fix Merge --------- Co-authored-by: Eilon Lipton Co-authored-by: Gerald Versluis Co-authored-by: MartyIX <203266+MartyIX@users.noreply.github.com> Co-authored-by: Matthew Leibowitz Co-authored-by: Thomas Muller Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Javier Suárez Co-authored-by: Jonathan Dick Co-authored-by: Jonathan Peppers Co-authored-by: Takym (たかやま) <15681312+Takym@users.noreply.github.com> --- .github/DEVELOPMENT.md | 340 ++---------------- .github/ISSUE_TEMPLATE/bug-report.yml | 2 + .vscode/{launch.json => .launch.json} | 6 - Microsoft.Maui-dev.sln | 2 +- Microsoft.Maui-mac.slnf | 2 +- Microsoft.Maui-vscode.sln | 2 +- Microsoft.Maui-windows.slnf | 2 +- Microsoft.Maui.LegacyControlGallery.slnf | 2 +- Microsoft.Maui.Samples.slnf | 2 +- Microsoft.Maui.sln | 2 +- docs/DevelopmentTips.md | 172 +++++++++ docs/design/UITesting.md | 8 +- eng/Versions.props | 2 +- eng/cake/dotnet.cake | 2 +- eng/devices/devices-shared.cake | 6 +- eng/devices/windows.cake | 4 +- eng/pipelines/ui-tests.yml | 2 +- eng/scripts/appium-install.ps1 | 6 +- ...t.Maui.Controls.Build.Tasks.Before.targets | 1 + ...Maui.Controls.SingleProject.Before.targets | 71 ++++ ...rosoft.Maui.Controls.SingleProject.targets | 67 ---- .../GesturePlatformManager.Android.cs | 9 +- .../Extensions/AccessibilityExtensions.cs | 118 ++++-- .../net-windows/PublicAPI.Shipped.txt | 7 - .../net-windows/PublicAPI.Unshipped.txt | 7 + .../tests/DeviceTests/Memory/MemoryTests.cs | 94 ++++- .../Concepts/AlertsGalleryPage.cs | 0 .../Concepts/ImageLoadingGalleryPage.cs | 0 .../Concepts/InputTransparencyGalleryPage.cs | 0 .../Controls.TestCases.HostApp.csproj} | 0 .../CoreViews/CoreGalleryBasePage.cs | 0 .../CoreViews/CoreGalleryPage.cs | 0 .../CoreViews/CoreNavigationPage.cs | 0 .../CoreViews/CorePageView.cs | 0 .../CoreViews/CoreRootPage.cs | 0 .../ViewContainers/EventViewContainer.cs | 0 .../ExpectedEventViewContainer.cs | 0 .../ViewContainers/IViewContainer.cs | 0 .../ViewContainers/LayeredViewContainer.cs | 0 .../ViewContainers/StateViewContainer.cs | 0 .../ViewContainers/ValueViewContainer.cs | 0 .../CoreViews/ViewContainers/ViewContainer.cs | 0 .../Directory.Build.props | 0 .../Directory.Build.targets | 0 .../ActivityIndicatorCoreGalleryPage.cs | 0 .../Elements/BorderGallery.cs | 0 .../Elements/BordersWithVariousShapes.xaml | 0 .../Elements/BordersWithVariousShapes.xaml.cs | 0 .../Elements/BoxViewCoreGalleryPage.cs | 0 .../Elements/ButtonCoreGalleryPage.cs | 0 .../Elements/CarouselViewCoreGalleryPage.xaml | 0 .../CarouselViewCoreGalleryPage.xaml.cs | 0 .../Elements/CheckBoxCoreGalleryPage.cs | 0 .../AdaptiveCollectionView.xaml | 0 .../AdaptiveCollectionView.xaml.cs | 0 .../AlternateLayoutGallery.cs | 0 .../StaggeredLayout.xaml | 0 .../StaggeredLayout.xaml.cs | 0 .../Elements/CollectionView/CarouselData.cs | 0 .../CollectionView/CollectionModifier.cs | 0 .../CollectionViewCoreGalleryPage.cs | 0 .../CollectionViewGalleryTestItem.cs | 0 .../CollectionView/DataTemplateGallery.cs | 0 ...VariedSizeDataTemplateSelectorGallery.xaml | 0 ...iedSizeDataTemplateSelectorGallery.xaml.cs | 0 .../DataTemplateSelectorGallery.xaml | 0 .../DataTemplateSelectorGallery.xaml.cs | 0 .../CollectionView/DefaultTextGallery.cs | 0 .../CollectionView/DemoFilteredItemSource.cs | 0 .../EmptyViewGalleries/EmptyViewGallery.cs | 0 .../EmptyViewGalleryFilterInfo.cs | 0 .../EmptyViewLoadSimulateGallery.xaml | 0 .../EmptyViewLoadSimulateGallery.xaml.cs | 0 .../EmptyViewNullGallery.xaml | 0 .../EmptyViewNullGallery.xaml.cs | 0 .../EmptyViewRTLGallery.xaml | 0 .../EmptyViewRTLGallery.xaml.cs | 0 .../EmptyViewStringGallery.xaml | 0 .../EmptyViewStringGallery.xaml.cs | 0 .../EmptyViewSwapGallery.xaml | 0 .../EmptyViewSwapGallery.xaml.cs | 0 .../EmptyViewTemplateGallery.xaml | 0 .../EmptyViewTemplateGallery.xaml.cs | 0 .../EmptyViewViewGallery.xaml | 0 .../EmptyViewViewGallery.xaml.cs | 0 .../Elements/CollectionView/EnumSelector.cs | 0 .../CollectionView/ExampleTemplates.cs | 0 .../CollectionView/FilterCollectionView.xaml | 0 .../FilterCollectionView.xaml.cs | 0 .../GroupingGalleries/BasicGrouping.xaml | 0 .../GroupingGalleries/BasicGrouping.xaml.cs | 0 .../GroupingGalleries/GridGrouping.xaml | 0 .../GroupingGalleries/GridGrouping.xaml.cs | 0 .../GroupingGalleries/GroupingGallery.cs | 0 .../GroupingNoTemplates.xaml | 0 .../GroupingNoTemplates.xaml.cs | 0 .../GroupingPlusSelection.xaml | 0 .../GroupingPlusSelection.xaml.cs | 0 .../MeasureFirstStrategy.xaml | 0 .../MeasureFirstStrategy.xaml.cs | 0 .../GroupingGalleries/ObservableGrouping.cs | 0 .../GroupingGalleries/SomeEmptyGroups.xaml | 0 .../GroupingGalleries/SomeEmptyGroups.xaml.cs | 0 .../GroupingGalleries/SwitchGrouping.xaml | 0 .../GroupingGalleries/SwitchGrouping.xaml.cs | 0 .../GroupingGalleries/ViewModel.cs | 0 .../FooterOnlyString.xaml | 0 .../FooterOnlyString.xaml.cs | 0 .../HeaderFooterGallery.cs | 0 .../HeaderFooterGrid.xaml | 0 .../HeaderFooterGrid.xaml.cs | 0 .../HeaderFooterGridHorizontal.xaml | 0 .../HeaderFooterGridHorizontal.xaml.cs | 0 .../HeaderFooterString.xaml | 0 .../HeaderFooterString.xaml.cs | 0 .../HeaderFooterTemplate.xaml | 0 .../HeaderFooterTemplate.xaml.cs | 0 .../HeaderFooterView.xaml | 0 .../HeaderFooterView.xaml.cs | 0 .../Elements/CollectionView/IndexParser.cs | 0 .../Elements/CollectionView/ItemAdder.cs | 0 .../Elements/CollectionView/ItemInsert.cs | 0 .../Elements/CollectionView/ItemMover.cs | 0 .../Elements/CollectionView/ItemRemover.cs | 0 .../Elements/CollectionView/ItemReplacer.cs | 0 .../ItemSizeGalleries/ChatExample.xaml | 0 .../ItemSizeGalleries/ChatExample.xaml.cs | 0 .../DynamicItemSizeGallery.cs | 0 .../ItemSizeGalleries/ItemsSizeGallery.cs | 0 .../VariableSizeTemplateGridGallery.cs | 0 .../CollectionView/ItemsSourceGenerator.cs | 0 .../Elements/CollectionView/MultiItemAdder.cs | 0 .../Elements/CollectionView/MultiItemMover.cs | 0 .../CollectionView/MultiItemRemover.cs | 0 .../CollectionView/MultiItemReplacer.cs | 0 .../MultiTestObservableCollection.cs | 0 .../MultiTestObservableCollectionModifier.cs | 0 .../NestedCollectionViewGallery.xaml | 0 .../NestedCollectionViewGallery.xaml.cs | 0 .../ObservableCodeCollectionViewGallery.cs | 0 .../ObservableCollectionGallery.cs | 0 .../ObservableCollectionModifier.cs | 0 .../ObservableCollectionResetGallery.cs | 0 ...bservableMultiItemCollectionViewGallery.cs | 0 .../Elements/CollectionView/OnlineImages.xaml | 0 .../CollectionView/OnlineImages.xaml.cs | 0 .../CollectionView/PositionControl.cs | 0 .../CollectionView/PropagateCodeGallery.cs | 0 .../CollectionView/PropagationGallery.cs | 0 .../GroupedReorderingGallery.cs | 0 .../ReorderingGalleries/ReorderingGallery.cs | 0 .../UngroupedReorderingGallery.cs | 0 .../Elements/CollectionView/Resetter.cs | 0 .../ScrollModeGalleries/EnumPicker.cs | 0 .../ItemsUpdatingScrollModeGallery.xaml | 0 .../ItemsUpdatingScrollModeGallery.xaml.cs | 0 .../ScrollModeGalleries/ScrollModeGallery.cs | 0 .../ScrollModeTestGallery.xaml | 0 .../ScrollModeTestGallery.xaml.cs | 0 .../CollectionView/ScrollToCodeGallery.cs | 0 .../ScrollToGalleries/ScrollToGroup.xaml | 0 .../ScrollToGalleries/ScrollToGroup.xaml.cs | 0 .../CollectionView/ScrollToGallery.cs | 0 .../CollectionView/ScrollToIndexControl.cs | 0 .../CollectionView/ScrollToItemControl.cs | 0 .../SelectionGalleries/BoundSelectionModel.cs | 0 .../SelectionGalleries/FilterSelection.xaml | 0 .../FilterSelection.xaml.cs | 0 .../MultipleBoundSelection.xaml | 0 .../MultipleBoundSelection.xaml.cs | 0 .../PreselectedItemGallery.xaml | 0 .../PreselectedItemGallery.xaml.cs | 0 .../PreselectedItemsGallery.xaml | 0 .../PreselectedItemsGallery.xaml.cs | 0 .../SelectionChangedCommandParameter.xaml | 0 .../SelectionChangedCommandParameter.xaml.cs | 0 .../SelectionGalleries/SelectionGallery.cs | 0 .../SelectionGalleries/SelectionHelpers.cs | 0 .../SelectionModeGallery.xaml | 0 .../SelectionModeGallery.xaml.cs | 0 .../SelectionSynchronization.xaml | 0 .../SelectionSynchronization.xaml.cs | 0 .../SingleBoundSelection.xaml | 0 .../SingleBoundSelection.xaml.cs | 0 .../VisualStatesGallery.xaml | 0 .../VisualStatesGallery.xaml.cs | 0 .../CollectionView/SnapPointsCodeGallery.cs | 0 .../CollectionView/SnapPointsGallery.cs | 0 .../SpacingGalleries/ItemsSpacingGallery.cs | 0 .../SpacingGalleries/SpacingGallery.cs | 0 .../SpacingGalleries/SpacingModifier.cs | 0 .../Elements/CollectionView/SpanSetter.cs | 0 .../TemplateCodeCollectionViewGallery.cs | 0 .../TemplateCodeCollectionViewGridGallery.cs | 0 .../TextCodeCollectionViewGallery.cs | 0 .../TextCodeCollectionViewGridGallery.cs | 0 .../Elements/ContentViewGalleryPage.cs | 0 .../Elements/DatePickerCoreGalleryPage.cs | 0 .../Elements/DoubleTapGallery.cs | 0 .../Elements/DragAndDropBetweenLayouts.xaml | 0 .../DragAndDropBetweenLayouts.xaml.cs | 0 .../Elements/DragAndDropEventArgs.xaml | 0 .../Elements/DragAndDropEventArgs.xaml.cs | 0 .../Elements/DragAndDropEvents.xaml | 0 .../Elements/DragAndDropEvents.xaml.cs | 0 .../Elements/DragAndDropGallery.cs | 0 .../Elements/DynamicTapGestureGallery.cs | 42 +++ .../Elements/EditorCoreGalleryPage.cs | 0 .../Elements/EntryCoreGalleryPage.cs | 0 .../Elements/FrameCoreGalleryPage.cs | 0 .../Elements/GestureRecognizerGallery.cs | 1 + .../Elements/ImageButtonCoreGalleryPage.cs | 0 .../Elements/ImageCoreGalleryPage.cs | 0 .../KeyboardScrollingEditorsPage.xaml | 0 .../KeyboardScrollingEditorsPage.xaml.cs | 0 .../KeyboardScrollingEntriesPage.xaml | 0 .../KeyboardScrollingEntriesPage.xaml.cs | 0 .../KeyboardScrollingEntryNextEditorPage.xaml | 0 ...yboardScrollingEntryNextEditorPage.xaml.cs | 0 .../Elements/KeyboardScrollingGridGallery.cs | 0 .../Elements/KeyboardScrollingGridPage.xaml | 0 .../KeyboardScrollingGridPage.xaml.cs | 0 ...llingNonScrollingPageLargeTitlesGallery.cs | 0 ...llingNonScrollingPageSmallTitlesGallery.cs | 0 ...crollingScrollingPageLargeTitlesGallery.cs | 0 ...crollingScrollingPageSmallTitlesGallery.cs | 0 .../Elements/LabelCoreGalleryPage.cs | 0 .../Elements/ListViewCoreGalleryPage.cs | 0 .../Elements/PickerCoreGalleryPage.cs | 0 .../PointerGestureRecognizerEvents.xaml | 0 .../PointerGestureRecognizerEvents.xaml.cs | 0 .../Elements/ProgressBarCoreGalleryPage.cs | 0 .../Elements/RadioButtonCoreGalleryPage.cs | 0 .../Elements/ScrollViewCoreGalleryPage.cs | 0 .../Elements/SearchBarCoreGalleryPage.cs | 0 .../Elements/SliderCoreGalleryPage.cs | 0 .../Elements/StepperCoreGalleryPage.cs | 0 .../Elements/SwipeViewCoreGalleryPage.cs | 0 .../Elements/SwitchCoreGalleryPage.cs | 0 .../Elements/TapGestureGallery.cs | 0 .../Elements/TimePickerCoreGalleryPage.cs | 0 .../Elements/WebViewCoreGalleryPage.cs | 0 .../GenericValueConverter.cs | 0 .../Issues/Bugzilla28570.cs | 0 .../Issues/Bugzilla35127.cs | 0 .../Issues/Bugzilla41415.cs | 0 .../Issues/Bugzilla44461.cs | 0 .../Issues/Bugzilla49069.cs | 0 .../CarouselViewAdjustPeekAreaInsets.xaml | 0 .../CarouselViewAdjustPeekAreaInsets.xaml.cs | 0 .../Issues/CarouselViewLoopNoFreeze.cs | 0 .../Issues/CarouselViewNoItemTemplate.cs | 0 .../CarouselViewPositionVisibility.xaml | 0 .../CarouselViewPositionVisibility.xaml.cs | 0 .../Issues/CarouselViewRemoveAt.cs | 0 .../Issues/CarouselViewSetOrientation.cs | 0 .../Issues/CarouselViewUpdateCurrentItem.xaml | 0 .../CarouselViewUpdateCurrentItem.xaml.cs | 0 .../Issues/CarouselViewUpdatePosition.xaml | 0 .../Issues/CarouselViewUpdatePosition.xaml.cs | 0 .../Issues/ClearGroupedNoCrash.cs | 0 .../Issues/CollectionViewBindingErrors.xaml | 0 .../CollectionViewBindingErrors.xaml.cs | 0 .../Issues/CollectionViewDynamicallyLoad.cs | 0 .../Issues/CollectionViewItemsSourceTypes.cs | 0 .../CollectionViewItemsUpdatingScrollMode.cs | 0 .../Issues/CollectionViewTabbedPage.cs | 0 .../Issues/CollectionViewVisibility.cs | 0 .../Issues/EmptyViewNoCrash.xaml | 0 .../Issues/EmptyViewNoCrash.xaml.cs | 0 .../GroupListViewHeaderIndexOutOfRange.cs | 0 .../Issues/HiddenCollectionViewBind.cs | 0 .../Issues/HideSoftInputOnTappedPage.cs | 0 .../Issues/IsInvokeRequiredRaceCondition.cs | 0 .../Issues/Issue10234.cs | 0 .../Issues/Issue10947.xaml | 0 .../Issues/Issue10947.xaml.cs | 0 .../Issues/Issue11501.cs | 0 .../Issues/Issue12211.xaml | 0 .../Issues/Issue12211.xaml.cs | 0 .../Issues/Issue12567.cs | 0 .../Issues/Issue14257.cs | 0 .../Issues/Issue14557.cs | 0 .../Issues/Issue14829.cs | 0 .../Issues/Issue15357.xaml | 0 .../Issues/Issue15357.xaml.cs | 0 .../Issues/Issue15826.xaml | 0 .../Issues/Issue15826.xaml.cs | 0 .../Issues/Issue16386.cs | 0 .../Issues/Issue16499.cs | 0 .../Issues/Issue16787.cs | 0 .../Issues/Issue16918.xaml | 0 .../Issues/Issue16918.xaml.cs | 0 .../Issues/Issue17022.xaml | 0 .../Issues/Issue17022.xaml.cs | 0 .../Issues/Issue17347.cs | 0 .../Issues/Issue17400.xaml | 0 .../Issues/Issue17400.xaml.cs | 0 .../Issues/Issue17453.xaml | 0 .../Issues/Issue17453.xaml.cs | 0 .../Issues/Issue17490.cs | 0 .../Issues/Issue17610.xaml | 0 .../Issues/Issue17610.xaml.cs | 0 .../Issues/Issue17642.xaml | 0 .../Issues/Issue17642.xaml.cs | 0 .../Issues/Issue17694.cs | 0 .../TestCases.HostApp/Issues/Issue18161.xaml | 24 ++ .../Issues/Issue18161.xaml.cs | 38 ++ .../Issues/Issue18242.xaml | 0 .../Issues/Issue18242.xaml.cs | 0 .../Issues/Issue18242_2.xaml | 0 .../Issues/Issue18242_2.xaml.cs | 0 .../Issues/Issue18251.xaml | 0 .../Issues/Issue18251.xaml.cs | 0 .../Issues/Issue18282.xaml | 0 .../Issues/Issue18282.xaml.cs | 0 .../Issues/Issue18457.cs | 0 .../Issues/Issue18526.xaml | 0 .../Issues/Issue18526.xaml.cs | 0 .../Issues/Issue18617.xaml | 0 .../Issues/Issue18617.xaml.cs | 0 .../Issues/Issue18623.xaml | 0 .../Issues/Issue18623.xaml.cs | 0 .../Issues/Issue18645.xaml | 0 .../Issues/Issue18645.xaml.cs | 0 .../Issues/Issue18647.xaml | 0 .../Issues/Issue18647.xaml.cs | 0 .../Issues/Issue18675.xaml | 0 .../Issues/Issue18675.xaml.cs | 0 .../Issues/Issue18706.xaml | 0 .../Issues/Issue18706.xaml.cs | 0 .../Issues/Issue18716.xaml | 0 .../Issues/Issue18716.xaml.cs | 0 .../Issues/Issue18740.xaml | 0 .../Issues/Issue18740.xaml.cs | 0 .../Issues/Issue18740Editor.xaml | 0 .../Issues/Issue18740Editor.xaml.cs | 0 .../Issues/Issue18740Entry.xaml | 0 .../Issues/Issue18740Entry.xaml.cs | 0 .../Issues/Issue18740SearchBar.xaml | 0 .../Issues/Issue18740SearchBar.xaml.cs | 0 .../Issues/Issue18751.xaml | 0 .../Issues/Issue18751.xaml.cs | 0 .../Issues/Issue18754.xaml | 0 .../Issues/Issue18754.xaml.cs | 0 .../Issues/Issue18857.xaml | 0 .../Issues/Issue18857.xaml.cs | 0 .../Issues/Issue18896.xaml | 0 .../Issues/Issue18896.xaml.cs | 0 .../Issues/Issue19283.xaml | 0 .../Issues/Issue19283.xaml.cs | 0 .../Issues/Issue19329.xaml | 0 .../Issues/Issue19329.xaml.cs | 0 .../Issues/Issue19379.xaml | 0 .../Issues/Issue19379.xaml.cs | 0 .../Issues/Issue19509.xaml | 0 .../Issues/Issue19509.xaml.cs | 0 .../Issues/Issue19556.xaml | 0 .../Issues/Issue19556.xaml.cs | 0 .../Issues/Issue19592.xaml | 0 .../Issues/Issue19592.xaml.cs | 0 .../Issues/Issue19657.xaml | 0 .../Issues/Issue19657.xaml.cs | 0 .../Issues/Issue19786.xaml | 0 .../Issues/Issue19786.xaml.cs | 0 .../Issues/Issue19803.xaml | 0 .../Issues/Issue19803.xaml.cs | 0 .../Issues/Issue19877.xaml | 0 .../Issues/Issue19877.xaml.cs | 0 .../Issues/Issue19926.xaml | 0 .../Issues/Issue19926.xaml.cs | 0 .../Issues/Issue19955.cs | 0 .../Issues/Issue19956.xaml | 0 .../Issues/Issue19956.xaml.cs | 0 .../Issues/Issue20156.xaml | 0 .../Issues/Issue20156.xaml.cs | 0 .../Issues/Issue20199.xaml | 0 .../Issues/Issue20199.xaml.cs | 0 .../Issues/Issue20294.xaml | 0 .../Issues/Issue20294.xaml.cs | 0 .../Issues/Issue20439.xaml | 0 .../Issues/Issue20439.xaml.cs | 0 .../Issues/Issue20696.xaml | 0 .../Issues/Issue20696.xaml.cs | 0 .../Issues/Issue20842.xaml | 0 .../Issues/Issue20842.xaml.cs | 0 .../TestCases.HostApp/Issues/Issue20858.xaml | 22 ++ .../Issues/Issue20858.xaml.cs | 23 ++ .../Issues/Issue20903.xaml | 0 .../Issues/Issue20903.xaml.cs | 0 .../Issues/Issue20920.cs | 0 .../Issues/Issue21109.xaml | 0 .../Issues/Issue21109.xaml.cs | 0 .../Issues/Issue21173.xaml | 0 .../Issues/Issue21173.xaml.cs | 0 .../Issues/Issue21202.xaml | 0 .../Issues/Issue21202.xaml.cs | 0 .../Issues/Issue21314.xaml | 0 .../Issues/Issue21314.xaml.cs | 0 .../Issues/Issue21394.xaml | 0 .../Issues/Issue21394.xaml.cs | 0 .../Issues/Issue21513.xaml | 0 .../Issues/Issue21513.xaml.cs | 0 .../Issues/Issue21609.cs | 0 .../Issues/Issue21630.xaml | 0 .../Issues/Issue21630.xaml.cs | 0 .../Issues/Issue21630_navPage.xaml | 0 .../Issues/Issue21630_navPage.xaml.cs | 0 .../Issues/Issue21630_shellPage.xaml | 0 .../Issues/Issue21630_shellPage.xaml.cs | 0 .../Issues/Issue21631.xaml | 0 .../Issues/Issue21631.xaml.cs | 0 .../Issues/Issue21706.xaml | 0 .../Issues/Issue21706.xaml.cs | 0 .../Issues/Issue21711.cs | 0 .../Issues/Issue21726.xaml | 0 .../Issues/Issue21726.xaml.cs | 0 .../Issues/Issue21787.xaml | 0 .../Issues/Issue21787.xaml.cs | 0 .../Issues/Issue21846.xaml | 0 .../Issues/Issue21846.xaml.cs | 0 .../Issues/Issue21846Modal.xaml | 0 .../Issues/Issue21846Modal.xaml.cs | 0 .../Issues/Issue21967.xaml | 0 .../Issues/Issue21967.xaml.cs | 0 .../Issues/Issue22000.xaml | 0 .../Issues/Issue22000.xaml.cs | 0 .../Issues/Issue22035.xaml | 0 .../Issues/Issue22035.xaml.cs | 0 .../Issues/Issue22035Page2.xaml | 0 .../Issues/Issue22035Page2.xaml.cs | 0 .../Issues/Issue22183.xaml | 0 .../Issues/Issue22183.xaml.cs | 0 .../Issues/Issue22288.xaml | 0 .../Issues/Issue22288.xaml.cs | 0 .../Issues/Issue22433_Default.xaml | 0 .../Issues/Issue22433_Default.xaml.cs | 0 .../Issues/Issue22433_Layout.xaml | 0 .../Issues/Issue22433_Layout.xaml.cs | 0 .../Issues/Issue22433_Spacing.xaml | 0 .../Issues/Issue22433_Spacing.xaml.cs | 0 .../Issues/Issue22443.xaml | 0 .../Issues/Issue22443.xaml.cs | 0 .../Issues/Issue22549.xaml | 0 .../Issues/Issue22549.xaml.cs | 0 .../Issues/Issue22606.xaml | 0 .../Issues/Issue22606.xaml.cs | 0 .../Issues/Issue22630.xaml | 0 .../Issues/Issue22630.xaml.cs | 0 .../Issues/Issue22633.xaml | 0 .../Issues/Issue22633.xaml.cs | 0 .../Issues/Issue22682.xaml | 0 .../Issues/Issue22682.xaml.cs | 0 .../Issues/Issue22750.xaml | 0 .../Issues/Issue22750.xaml.cs | 0 .../Issues/Issue23029.xaml | 0 .../Issues/Issue23029.xaml.cs | 0 .../Issues/Issue3525.cs | 0 .../Issues/Issue5191.xaml | 0 .../Issues/Issue5191.xaml.cs | 0 .../Issues/Issue5354.xaml | 0 .../Issues/Issue5354.xaml.cs | 0 .../Issues/Issue5555.cs | 0 .../Issues/Issue5724.cs | 0 .../Issues/Issue5924.xaml | 0 .../Issues/Issue5924.xaml.cs | 0 .../Issues/Issue7562.xaml | 0 .../Issues/Issue7562.xaml.cs | 0 .../Issues/Issue7823.xaml | 0 .../Issues/Issue7823.xaml.cs | 0 .../Issues/Issue7823Page2.xaml | 0 .../Issues/Issue7823Page2.xaml.cs | 0 .../Issues/Issue8761.xaml | 0 .../Issues/Issue8761.xaml.cs | 0 .../Issues/Issue9075.xaml | 0 .../Issues/Issue9075.xaml.cs | 0 .../Issues/Issues15330.xaml | 0 .../Issues/Issues15330.xaml.cs | 0 .../Issues/Issues15815.xaml | 0 .../Issues/Issues15815.xaml.cs | 0 .../Issues/Issues16094.xaml | 0 .../Issues/Issues16094.xaml.cs | 0 .../Issues/Issues16320.xaml | 0 .../Issues/Issues16320.xaml.cs | 0 .../Issues/Issues16321.xaml | 0 .../Issues/Issues16321.xaml.cs | 0 .../Issues/Issues16561.xaml | 0 .../Issues/Issues16561.xaml.cs | 0 .../Issues/Issues17366.xaml | 0 .../Issues/Issues17366.xaml.cs | 0 .../Issues/Issues17789.xaml | 0 .../Issues/Issues17789.xaml.cs | 0 .../Issues/Issues17801.xaml | 0 .../Issues/Issues17801.xaml.cs | 0 .../Issues/Issues18111.xaml | 0 .../Issues/Issues18111.xaml.cs | 0 .../Issues/ReduceInvalidateMeasure.xaml | 0 .../Issues/ReduceInvalidateMeasure.xaml.cs | 0 .../Issues/RefreshViewPage.cs | 0 .../Issues/ScrollChangeOrientation.cs | 0 .../Issues/ScrollViewDelayedContent.cs | 0 .../Issues/ScrollViewDisableScroll.cs | 0 .../Issues/ScrollViewIsEnabled.cs | 0 .../Issues/ScrollViewNoContent.cs | 0 .../Issues/ScrollViewObjectDisposed.cs | 0 .../Issues/SoftInputExtensionsPage.cs | 0 .../Issues/TestContentPage.cs | 0 .../Issues/XFIssue2681.cs | 0 .../MainPage.xaml | 0 .../MainPage.xaml.cs | 0 .../MauiProgram.cs | 0 .../MultiBindingHack.cs | 0 .../Platforms/Android/AndroidManifest.xml | 0 .../Android/Issue21109NumericKeyListener.cs | 0 .../Platforms/Android/MainActivity.cs | 0 .../Platforms/Android/MainApplication.cs | 0 .../Platforms/MacCatalyst/AppDelegate.cs | 0 .../Platforms/MacCatalyst/Info.plist | 0 .../Platforms/MacCatalyst/Main.cs | 0 .../Platforms/Tizen/Main.cs | 0 .../Platforms/Tizen/tizen-manifest.xml | 2 +- .../Platforms/Windows/App.xaml | 0 .../Platforms/Windows/App.xaml.cs | 0 .../Platforms/Windows/Package.appxmanifest | 0 .../Platforms/Windows/PlatformMethods.cs | 0 .../Platforms/Windows/app.manifest | 0 .../Platforms/iOS/AppDelegate.cs | 0 .../Platforms/iOS/Info.plist | 0 .../Platforms/iOS/Main.cs | 0 .../Properties/launchSettings.json | 0 .../Resources/AppIcons/appicon.svg | 0 .../Resources/AppIcons/appicon_foreground.svg | 0 .../Resources/Fonts/FontAwesome.ttf | Bin .../Resources/Fonts/OpenSans-Regular.ttf | Bin .../Resources/Fonts/ionicons.ttf | Bin .../Resources/Images/animated_heart.gif | Bin .../Resources/Images/dotnet_bot.svg | 0 .../Resources/Images/dotnet_bot_resized.svg | 0 .../Resources/Images/groceries.png | Bin .../Images/menu_entry_settings_210.svg | 0 .../Images/menu_entry_settings_40.svg | 0 .../Resources/Images/oasis.jpg | Bin .../Resources/Images/photo21314.jpg | Bin .../Resources/Images/red_is_good.gif | Bin .../Resources/Images/shopping_cart.png | Bin .../Resources/Raw/dotnetmaui.pdf | Bin .../Resources/Splash/splash.svg | 0 .../Resources/Styles/ButtonDefaultStyles.xaml | 0 .../SandboxShell.xaml | 0 .../SandboxShell.xaml.cs | 0 .../TestBuilder.cs | 0 .../TestCases.cs | 0 .../Utils/GarbageCollectionHelper.cs | 0 .../Utils/Utils.cs | 0 .../Tests/GestureRecognizerUITests.cs | 25 ++ ...llectionViewUI.CollectionViewVisibility.cs | 15 +- .../Tests/Issues/Issue17801.cs | 2 +- .../Tests/Issues/Issue18161.cs | 25 ++ .../Tests/Issues/Issue20858.cs | 28 ++ .../ScrollViewUITests.ScrollViewIsEnabled.cs | 2 + .../tests/TestCases.Shared.Tests/UITest.cs | 4 +- .../FlyoutView/FlyoutViewHandler.Android.cs | 5 +- .../Navigation/NavigationViewFragment.cs | 3 + .../Platform/Windows/NavigationRootManager.cs | 24 +- .../src/FilePicker/FilePicker.uwp.cs | 6 - 565 files changed, 718 insertions(+), 511 deletions(-) rename .vscode/{launch.json => .launch.json} (82%) create mode 100644 docs/DevelopmentTips.md create mode 100644 src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.Before.targets rename src/Controls/tests/{TestCases => TestCases.HostApp}/Concepts/AlertsGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Concepts/ImageLoadingGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Concepts/InputTransparencyGalleryPage.cs (100%) rename src/Controls/tests/{TestCases/Controls.TestCases.App.csproj => TestCases.HostApp/Controls.TestCases.HostApp.csproj} (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/CoreGalleryBasePage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/CoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/CoreNavigationPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/CorePageView.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/CoreRootPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/EventViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/ExpectedEventViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/IViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/LayeredViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/StateViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/ValueViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/CoreViews/ViewContainers/ViewContainer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Directory.Build.props (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Directory.Build.targets (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ActivityIndicatorCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/BorderGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/BordersWithVariousShapes.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/BordersWithVariousShapes.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/BoxViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ButtonCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CarouselViewCoreGalleryPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CarouselViewCoreGalleryPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CheckBoxCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/AdaptiveCollectionView.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/AdaptiveCollectionView.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/AlternateLayoutGalleries/AlternateLayoutGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/CarouselData.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/CollectionModifier.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/CollectionViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/CollectionViewGalleryTestItem.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DataTemplateGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DataTemplateSelectorGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DataTemplateSelectorGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DefaultTextGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/DemoFilteredItemSource.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewGalleryFilterInfo.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/EnumSelector.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ExampleTemplates.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/FilterCollectionView.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/FilterCollectionView.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GroupingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/ObservableGrouping.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/GroupingGalleries/ViewModel.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/IndexParser.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemAdder.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemInsert.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemMover.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemRemover.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemReplacer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemSizeGalleries/DynamicItemSizeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemSizeGalleries/ItemsSizeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemSizeGalleries/VariableSizeTemplateGridGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ItemsSourceGenerator.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiItemAdder.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiItemMover.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiItemRemover.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiItemReplacer.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiTestObservableCollection.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/MultiTestObservableCollectionModifier.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ObservableCodeCollectionViewGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ObservableCollectionGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ObservableCollectionModifier.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ObservableCollectionResetGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ObservableMultiItemCollectionViewGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/OnlineImages.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/OnlineImages.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/PositionControl.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/PropagateCodeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/PropagationGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ReorderingGalleries/GroupedReorderingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ReorderingGalleries/ReorderingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ReorderingGalleries/UngroupedReorderingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/Resetter.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/EnumPicker.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/ScrollModeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToCodeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToIndexControl.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/ScrollToItemControl.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/BoundSelectionModel.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionHelpers.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SnapPointsCodeGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SnapPointsGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SpacingGalleries/ItemsSpacingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SpacingGalleries/SpacingGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SpacingGalleries/SpacingModifier.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/SpanSetter.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/TemplateCodeCollectionViewGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/TemplateCodeCollectionViewGridGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/TextCodeCollectionViewGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/CollectionView/TextCodeCollectionViewGridGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ContentViewGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DatePickerCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DoubleTapGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropBetweenLayouts.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropBetweenLayouts.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropEventArgs.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropEventArgs.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropEvents.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropEvents.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/DragAndDropGallery.cs (100%) create mode 100644 src/Controls/tests/TestCases.HostApp/Elements/DynamicTapGestureGallery.cs rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/EditorCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/EntryCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/FrameCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/GestureRecognizerGallery.cs (90%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ImageButtonCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ImageCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEditorsPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEditorsPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEntriesPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEntriesPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEntryNextEditorPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingEntryNextEditorPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingGridGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingGridPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingGridPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingNonScrollingPageLargeTitlesGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingNonScrollingPageSmallTitlesGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingScrollingPageLargeTitlesGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/KeyboardScrollingScrollingPageSmallTitlesGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/LabelCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ListViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/PickerCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/PointerGestureRecognizerEvents.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/PointerGestureRecognizerEvents.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ProgressBarCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/RadioButtonCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/ScrollViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/SearchBarCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/SliderCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/StepperCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/SwipeViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/SwitchCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/TapGestureGallery.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/TimePickerCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Elements/WebViewCoreGalleryPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/GenericValueConverter.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Bugzilla28570.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Bugzilla35127.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Bugzilla41415.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Bugzilla44461.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Bugzilla49069.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewAdjustPeekAreaInsets.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewAdjustPeekAreaInsets.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewLoopNoFreeze.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewNoItemTemplate.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewPositionVisibility.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewPositionVisibility.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewRemoveAt.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewSetOrientation.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewUpdateCurrentItem.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewUpdateCurrentItem.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewUpdatePosition.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CarouselViewUpdatePosition.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ClearGroupedNoCrash.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewBindingErrors.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewBindingErrors.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewDynamicallyLoad.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewItemsSourceTypes.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewItemsUpdatingScrollMode.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewTabbedPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/CollectionViewVisibility.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/EmptyViewNoCrash.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/EmptyViewNoCrash.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/GroupListViewHeaderIndexOutOfRange.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/HiddenCollectionViewBind.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/HideSoftInputOnTappedPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/IsInvokeRequiredRaceCondition.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue10234.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue10947.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue10947.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue11501.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue12211.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue12211.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue12567.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue14257.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue14557.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue14829.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue15357.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue15357.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue15826.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue15826.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue16386.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue16499.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue16787.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue16918.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue16918.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17022.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17022.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17347.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17400.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17400.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17453.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17453.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17490.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17610.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17610.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17642.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17642.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue17694.cs (100%) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue18161.xaml create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue18161.xaml.cs rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18242.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18242.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18242_2.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18242_2.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18251.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18251.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18282.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18282.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18457.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18526.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18526.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18617.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18617.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18623.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18623.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18645.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18645.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18647.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18647.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18675.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18675.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18706.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18706.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18716.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18716.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740Editor.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740Editor.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740Entry.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740Entry.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740SearchBar.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18740SearchBar.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18751.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18751.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18754.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18754.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18857.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18857.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18896.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue18896.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19283.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19283.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19329.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19329.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19379.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19379.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19509.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19509.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19556.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19556.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19592.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19592.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19657.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19657.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19786.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19786.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19803.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19803.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19877.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19877.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19926.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19926.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19955.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19956.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue19956.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20156.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20156.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20199.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20199.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20294.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20294.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20439.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20439.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20696.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20696.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20842.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20842.xaml.cs (100%) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue20858.xaml create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue20858.xaml.cs rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20903.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20903.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue20920.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21109.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21109.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21173.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21173.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21202.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21202.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21314.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21314.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21394.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21394.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21513.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21513.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21609.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630_navPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630_navPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630_shellPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21630_shellPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21631.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21631.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21706.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21706.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21711.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21726.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21726.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21787.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21787.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21846.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21846.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21846Modal.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21846Modal.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21967.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue21967.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22000.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22000.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22035.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22035.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22035Page2.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22035Page2.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22183.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22183.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22288.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22288.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Default.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Default.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Layout.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Layout.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Spacing.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22433_Spacing.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22443.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22443.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22549.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22549.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22606.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22606.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22630.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22630.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22633.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22633.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22682.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22682.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22750.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue22750.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue23029.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue23029.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue3525.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5191.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5191.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5354.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5354.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5555.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5724.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5924.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue5924.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7562.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7562.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7823.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7823.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7823Page2.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue7823Page2.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue8761.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue8761.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue9075.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issue9075.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues15330.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues15330.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues15815.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues15815.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16094.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16094.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16320.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16320.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16321.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16321.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16561.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues16561.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17366.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17366.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17789.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17789.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17801.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues17801.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues18111.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/Issues18111.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ReduceInvalidateMeasure.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ReduceInvalidateMeasure.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/RefreshViewPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollChangeOrientation.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollViewDelayedContent.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollViewDisableScroll.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollViewIsEnabled.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollViewNoContent.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/ScrollViewObjectDisposed.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/SoftInputExtensionsPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/TestContentPage.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Issues/XFIssue2681.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/MainPage.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/MainPage.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/MauiProgram.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/MultiBindingHack.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Android/AndroidManifest.xml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Android/Issue21109NumericKeyListener.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Android/MainActivity.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Android/MainApplication.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/MacCatalyst/AppDelegate.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/MacCatalyst/Info.plist (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/MacCatalyst/Main.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Tizen/Main.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Tizen/tizen-manifest.xml (95%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Windows/App.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Windows/App.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Windows/Package.appxmanifest (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Windows/PlatformMethods.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/Windows/app.manifest (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/iOS/AppDelegate.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/iOS/Info.plist (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Platforms/iOS/Main.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Properties/launchSettings.json (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/AppIcons/appicon.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/AppIcons/appicon_foreground.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Fonts/FontAwesome.ttf (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Fonts/OpenSans-Regular.ttf (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Fonts/ionicons.ttf (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/animated_heart.gif (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/dotnet_bot.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/dotnet_bot_resized.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/groceries.png (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/menu_entry_settings_210.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/menu_entry_settings_40.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/oasis.jpg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/photo21314.jpg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/red_is_good.gif (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Images/shopping_cart.png (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Raw/dotnetmaui.pdf (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Splash/splash.svg (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Resources/Styles/ButtonDefaultStyles.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/SandboxShell.xaml (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/SandboxShell.xaml.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/TestBuilder.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/TestCases.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Utils/GarbageCollectionHelper.cs (100%) rename src/Controls/tests/{TestCases => TestCases.HostApp}/Utils/Utils.cs (100%) rename src/Controls/tests/{UITests => TestCases.Shared.Tests}/Tests/Issues/Issue17801.cs (91%) create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18161.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue20858.cs diff --git a/.github/DEVELOPMENT.md b/.github/DEVELOPMENT.md index 2996296c4b73..4413aad0aac2 100644 --- a/.github/DEVELOPMENT.md +++ b/.github/DEVELOPMENT.md @@ -4,71 +4,36 @@ This page contains steps to build and run the .NET MAUI repository from source. ## Initial setup ### Windows - - Install VS 17.8 or newer + - Install VS 17.10 or newer - Follow [these steps](https://learn.microsoft.com/dotnet/maui/get-started/installation?tabs=vswin) to include MAUI - - Select the 20348 SDK option inside Individual Components or [install 20348 manually](https://go.microsoft.com/fwlink/?linkid=2164145). If you know you have 20348 installed but are still getting an error around this SDK missing, trying uninstalling and reinstalling the SDK. - If building iOS with pair to Mac: Install current stable Xcode on your Mac. Install from the [App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12) or [Apple Developer portal](https://developer.apple.com/download/more/?name=Xcode) - If you're missing any of the Android SDKs, Visual Studio should prompt you to install them. If it doesn't prompt you then use the [Android SDK Manager](https://learn.microsoft.com/xamarin/android/get-started/installation/android-sdk) to install the necessary SDKs. + - Install [Open JDK 17](https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-17) ### Mac - - Install VS Code and dependencies - - Follow [these steps](https://learn.microsoft.com/en-us/dotnet/maui/get-started/installation?view=net-maui-8.0&tabs=visual-studio-code), installing VS Code, MAUI extension, .NET8, Xcode, OpenJDK, and Android SDK - - Install Mono from [Mono Project](https://www.mono-project.com) - - For Xcode, you can install from the [App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12) or [Apple Developer portal](https://developer.apple.com/download/more/?name=Xcode) - - As of 26 March 2024, Xcode 15.3 is not yet supported. Check [this issue](https://github.com/dotnet/maui/issues/21057) for updates - - Edit your `.zprofile` file to ensure that the following environment variables are set/modified (you may need to adjust the version of OpenJDK): - ```shell - export JAVA_HOME=/Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home - export ANDROID_HOME=~/Library/Android/sdk - export ANDROID_SDK_ROOT=~/Library/Android/sdk - export PATH="$PATH:~/.dotnet/tools" - export PATH="$PATH:$ANDROID_HOME/platform-tools" - export PATH="$PATH:$ANDROID_HOME/tools" - export PATH="$PATH:$ANDROID_HOME/tools/bin" - export PATH="$PATH:$ANDROID_HOME/tools/emulator" - ``` - - In VSCode do `command--shift-P` then type `code path` and select the option `Shell Command: Install 'code' in PATH` + - Install [VSCode](https://code.visualstudio.com/download) + - Follow the steps for installing the .NET MAUI Dev Kit for VS Code: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-maui ## Building the Build Tasks Before opening the solution in Visual Studio / VS Code you **MUST** build the build tasks. -### Windows -- Do this to build the build tasks and launch Visual Studio, automatically opening the default solution: +1. Open a command prompt/terminal/shell window +1. Navigate to the location of your cloned `dotnet/maui` repo, for example: + ```shell + cd \repos\maui + ``` +1. Run these commands: + ```dotnetcli + dotnet tool restore + dotnet build ./Microsoft.Maui.BuildTasks.slnf + ``` - ```dotnetcli - dotnet tool restore - dotnet cake --target=VS --workloads=global - ``` +## Windows +Open the `Microsoft.Maui-windows.slnf` file in Visual Studio from the root of the repo. -- OR do this to just build the build tasks. You can then launch Visual Studio manually and open the solution of your choosing: +## Mac - ```dotnetcli - dotnet tool restore - dotnet build ./Microsoft.Maui.BuildTasks.slnf - ``` - -### Mac -- Do this to build the tasks and open the Visual Studio Code codespace: - - ```dotnetcli - dotnet tool restore - dotnet cake --target=VSCode --workloads=global - ``` - -*NOTE*: `--workloads=global` means use the normal (globally installed) .NET workloads. - - -## Available Solutions -- Microsoft.Maui.sln - - Kitchen sink solution. This includes all of the `Compatibility` projects and all of the platforms that we compile for. It is very unlikely you will need to use this solution for development. -- Microsoft.Maui-dev.sln - - `Microsoft.Maui.sln` but without the `Compatibility` projects. Because we can't detect solution filters inside `MSBuild` we had to create a separate `sln` without the `Compatibility` projects. -- Microsoft.Maui-windows.slnf - - `Microsoft.Maui-dev.sln` with all of the targets you can't build on `Windows` removed (GTK/Catalyst). Default solution on Windows. -- Microsoft.Maui-mac.slnf - - `Microsoft.Maui-dev.sln` with all of the `Windows` targets filtered out. Legacy solution for VS Mac. -- Microsoft.Maui-vscode.sln - - Solution for VS Code (VS Code doesn't support solution filters) +Open the root folder of the repository in VS Code. *NOTE*: IntelliSense takes a decent amount of time to fully process your solution. It will eventually work through all the necessary tasks. If you are having IntelliSense issues, usually unloading/reloading the `maui.core` and `maui.controls` projects will resolve. @@ -81,7 +46,7 @@ Use ‘main’ for bug fixes that don’t require API changes. For new features - [net9.0](https://github.com/dotnet/maui/tree/net9.0) -## Repository projects +## Sample projects ### Samples ``` @@ -100,273 +65,12 @@ Use ‘main’ for bug fixes that don’t require API changes. For new features - *Maui.Controls.Sample*: Full gallery sample with all of the controls and features of .NET MAUI - *Maui.Controls.Sample.Sandbox*: Empty project useful for testing reproductions or use cases -- *Essentials.Sample*: Full gallery demonstrating the library previously known as essentials. These are all the non UI related MAUI APIs. - -### Device Test Projects - -[Writing Device Tests](https://github.com/dotnet/maui/wiki/DeviceTests) - -These are tests that will run on an actual device - - ``` -├── Controls -│ ├── test -│ │ ├── Controls.DeviceTests -├── Core -│ ├── test -│ │ ├── Core.DeviceTests -├── Essentials -│ ├── test -│ │ ├── Essentials.DeviceTests -├── BlazorWebView -│ ├── test -│ │ ├── MauiBlazorWebView.DeviceTests -``` - -- *Controls.DeviceTests*: .NET MAUI Controls Visual Runner for running device based xunit tests. This is useful for tests that require XAML features -- *Core.DeviceTests*: .NET MAUI Core Visual Runner for running device based xunit tests. This is for tests that don't require any MAUI Controls based features -- *Essentials.DeviceTests*: Visual Runner running all the .NET MAUI essentials xunit tests. -- *MauiBlazorWebView.DeviceTests*: Visual Runner for BlazorWebView tests. - -### UI Test Projects - -[Writing UI Tests](https://github.com/dotnet/maui/wiki/UITests) - -These are tests used for exercising the UI through accessibility layers to simulate user interactions - -``` -├── Controls -│ ├── tests -│ ├── ├── Controls.TestCases.App -│ │ ├── Controls.TestCases.Shared.Tests -``` - -- *Controls.TestCases.App*: .NET MAUI Sample used for the automated UI tests -- *Controls.TestCases.Shared.Tests*: .NET MAUI library used to define the UI tests - -Each platform has a specific UI tests library project where it is possible to add specific tests per platform. - -``` -├── Controls -│ ├── tests -│ │ ├── Controls.TestCases.Android.Tests -│ │ ├── Controls.TestCases.iOS.Tests -│ │ ├── Controls.TestCases.Mac.Tests -│ │ ├── Controls.TestCases.WinUI.Tests -``` - -### Unit Test Projects - -These are tests that will not run on a device. This is useful for testing device independent logic. - - ``` -├── Controls -│ ├── test -│ │ ├── Controls.Core.UnitTests -├── Core -│ ├── test -│ │ ├── Core.UnitTests -├── Essentials -│ ├── test -│ │ ├── Essentials.UnitTests -``` - -### Reproducing an Issue/Debugging .NET MAUI Code -Open the .NET MAUI workspace in VSCode. -In VSCode, select the device that you will be testing on. Using the command palette (ctrl-shift-P/command-shift-P) type `pick device` and -you will be presented with a set of choices for your target device (Android, iOS, etc). Select one. -There is a sample project in `src/Controls/samples/Controls.Sample.Sandbox`. This is an empty project -into which you can add your code to reproduce an issue and also set breakpoints in .NET MAUI source code. -Let VSCode know this is the project you want to select by going to the command palette (ctrl-shift-P/command-shift-P) -and typing `pick startup` and select ".NET MAUI: Pick Startup Project" and select the Sandbox project. - - Before using the command palette for the first time, you may have to wait a minute -for intellisense and other tasks to complete before using the command palette. If the project hasn't -'settled' yet, you will see an error "Pick Startup Project has resulted in an error." - -*Note:* When you are committing your PR, do not include your changes to the Sandbox project. - -### Integration Tests - -The Integration test project under `src/TestUtils/src/Microsoft.Maui.IntegrationTests` contains tests which build and/or run MAUI templates or other projects. - -These tests can be ran using the test explorer in VS, or from command line with `dotnet test`. Here's how to run an individual test with parameters from command line: - -```bash -dotnet test src/TestUtils/src/Microsoft.Maui.IntegrationTests --logger "console;verbosity=diagnostic" --filter "Name=Build\(%22maui%22,%22net7.0%22,%22Debug%22,False\)" -``` - -You can find detailed information about testing in the [Wiki](https://github.com/dotnet/maui/wiki/Testing). - -### Additional Cake Commands - -#### Clean -`--clean` -- This will do a recursive delete of all your obj/bin folders. This is helpful if for some reason your repository is in a bad state and you don't want to go as scorched earth as `git clean -xdf` - -#### Target a specific platform -`--android` -`--ios` -`--windows` -`--catalyst` - -```bash -dotnet cake --target=VS --workloads=global --android --ios -``` - -*Note* you will have to `git clean -xdf` your project if you change or add platforms. - -### Blazor Desktop - -To build and run Blazor Desktop samples, check out the [Blazor Desktop](https://github.com/dotnet/maui/wiki/Blazor-Desktop) wiki topic. - -### Android - -To workaround a performance issue, all `Resource.designer.cs` -generation is disabled for class libraries in this repo. - -If you need to add a new `@(AndroidResource)` value to be used from C# -code in .NET MAUI: - -1. Comment out the `` in `Directory.Build.targets` that - sets `$(AndroidGenerateResourceDesigner)` and - `$(AndroidUseIntermediateDesignerFile)` to `false`. - -2. Build .NET MAUI as you normally would. You will get compiler errors - about duplicate fields, but `obj\Debug\net[current_sdk_version]-android\Resource.designer.cs` - should now be generated. - -3. Open `obj\Debug\net[current_sdk_version]-android\Resource.designer.cs`, and find the - field you need such as: - -```csharp -// aapt resource value: 0x7F010000 -public static int foo = 2130771968; -``` - -4. Copy this field to the `Resource.designer.cs` checked into source - control, such as: `src\Controls\src\Core\Platform\Android\Resource.designer.cs` - -5. Restore the commented code in `Directory.Build.targets`. - - -# Advanced Scenarios - -### Compile using a local `bin\dotnet` via `dotnet-local.*` - -This method will use the .NET and workload versions that are specific to the branch you are on, which is a good way to ensure compatibility. - -Use `dotnet-local.cmd` on Windows or `dotnet-local.sh` on Unix to ensure that `PATH` is set consistently. - -#### Cake - -You can run a `Cake` target to bootstrap .NET SDK in `bin\dotnet` and launch Visual Studio: - -```dotnetcli -dotnet tool restore -dotnet cake --target=VS -``` - -There is also a `VSCode` target for launching Visual Studio Code. - -```dotnetcli -dotnet tool restore -dotnet cake --target=VSCode -``` - -#### Testing branch against your project -`--sln=` -- This will pack .NET and then open a VS instance using the local pack. This is useful if you want to check to see if the changes in a branch will address your particular issues. Pack only runs the first time so you will need to explicitly add the `--pack` flag if you make changes and need to repack. - -```dotnetcli -dotnet tool restore -dotnet cake --sln="\MauiApp2\MauiApp2.sln" --target=VS -``` - -#### Pack -`--pack` -- This creates .NET MAUI packs inside the local dotnet install. This lets you use the CLI commands with the local dotnet to create/deploy with any changes that have been made on that branch (including template changes). - -```dotnetcli -dotnet tool restore -dotnet cake --target=VS --pack --sln="\MauiApp2\MauiApp2.sln" -``` - -Create new .NET MAUI app using your new packs -```dotnetcli -dotnet tool restore -dotnet cake --pack -mkdir MyMauiApp -cd MyMauiApp -..\bin\dotnet\dotnet new maui -..\bin\dotnet\dotnet build -t:Run -f net[current_sdk_version]-android -``` - -You can also run commands individually: -```dotnetcli -# install local tools required to build (cake, pwsh, etc..) -dotnet tool restore -# Provision .NET SDK in bin\dotnet -dotnet build src\DotNet\DotNet.csproj -# Builds Maui MSBuild tasks -.\bin\dotnet\dotnet build Microsoft.Maui.BuildTasks.slnf -# Builds the rest of Maui -.\bin\dotnet\dotnet build Microsoft.Maui.sln -# Launch Visual Studio -dotnet cake --target=VS -``` - -## Debugging MSBuild Tasks using VS/VSCode - -One thing that is very useful is the ability to debug your Tasks while -they are being run on a build process. This is possible thanks to the -`MSBUILDDEBUGONSTART` environment variable. When set to `2` this will -force MSBuild to wait for a debugger connection before continuing. -You will see the following prompt. - -```dotnetcli -Waiting for debugger to attach (dotnet PID 13001). Press enter to continue... -``` - -You can then use VS or VSCode to attach to this process and debug you tasks. -You can start your test app with the `dotnet-local` script (so it uses your maui build) - -### [MacOS](#tab/macos) - -```dotnetcli -MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 -``` - -### [Linux](#tab/linux) - -```dotnetcli -MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 -``` - -### [Windows](#tab/windows) - -```dotnetcli -set MSBUILDDEBUGONSTART=2 -~//dotnet-local.cmd build -m:1 -``` - ---- - -Note: the `-m:1` is important as it restricts MSBuild to 1 node. - -Once MSBuild starts it will print the following - -```dotnetcli -Waiting for debugger to attach (dotnet PID xxxx). Press enter to continue... -``` - -You need to copy the PID value so we can use this in the IDE. For Visual Studio you can use the `Attach to Process` menu option, while you have the Microsoft.Maui.sln solution open. For VSCode open the workspace then use the `Attach to Process` Run and Debug option. You will be prompted for the PID and it will then connect. +- *Essentials.Sample*: Full gallery demonstrating the library previously known as Essentials. These are all the non UI related MAUI APIs. -Once connected go back to your command prompt and press ENTER so that the MSBuild process can continue. +### Testing -You will be able to set breakpoints in Tasks (but not Targets) and step through code from this point on. +- [Testing Wiki](https://github.com/dotnet/maui/wiki/Testing) -If you want to test in-tree in VSCode the `Build Platform Sample` command will ask you if you want to debug MSBuild tasks and fill in the `MSBUILDDEBUGONSTART` for you. The PID text will appear in the `Terminal` window in VSCode. You can then use the `Attach to Process` Run and Debug option to attach to the process. ## Stats diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index da107f057221..ebcd0e9297d5 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -49,6 +49,7 @@ body: - 9.0.0-preview.3.10457 - 9.0.0-preview.2.10293 - 9.0.0-preview.1.9973 + - 8.0.61 SR6.1 - 8.0.60 SR6 - 8.0.40 SR5 - 8.0.21 SR4.1 @@ -113,6 +114,7 @@ body: - 8.0.21 SR4.1 - 8.0.40 SR5 - 8.0.60 SR6 + - 8.0.61 SR6.1 - 9.0.0-preview.1.9973 - 9.0.0-preview.2.10293 - 9.0.0-preview.3.10457 diff --git a/.vscode/launch.json b/.vscode/.launch.json similarity index 82% rename from .vscode/launch.json rename to .vscode/.launch.json index a83c6d52840e..bb5a49b8dc8f 100644 --- a/.vscode/launch.json +++ b/.vscode/.launch.json @@ -4,12 +4,6 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - { - "name": ".NET MAUI", - "type": "maui", - "request": "launch", - "preLaunchTask": "maui: Build" - }, { "name": "Attach to Process", "type": "coreclr", diff --git a/Microsoft.Maui-dev.sln b/Microsoft.Maui-dev.sln index 98ba3d73220e..00883157264c 100644 --- a/Microsoft.Maui-dev.sln +++ b/Microsoft.Maui-dev.sln @@ -203,7 +203,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.Int EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.App", "src\Controls\tests\TestCases\Controls.TestCases.App.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationTests", "src\TestUtils\src\Microsoft.Maui.IntegrationTests\Microsoft.Maui.IntegrationTests.csproj", "{A6976D43-B3A4-47AF-89D9-FA388B56B52B}" EndProject diff --git a/Microsoft.Maui-mac.slnf b/Microsoft.Maui-mac.slnf index 422f49769588..6721368b416f 100644 --- a/Microsoft.Maui-mac.slnf +++ b/Microsoft.Maui-mac.slnf @@ -11,7 +11,7 @@ "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", - "src\\Controls\\tests\\TestCases\\Controls.TestCases.App.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", "src\\Controls\\src\\Core\\Controls.Core.csproj", diff --git a/Microsoft.Maui-vscode.sln b/Microsoft.Maui-vscode.sln index 0778b1083b69..34ef183cf12e 100644 --- a/Microsoft.Maui-vscode.sln +++ b/Microsoft.Maui-vscode.sln @@ -183,7 +183,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.Int EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.App", "src\Controls\tests\TestCases\Controls.TestCases.App.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationTests", "src\TestUtils\src\Microsoft.Maui.IntegrationTests\Microsoft.Maui.IntegrationTests.csproj", "{A6976D43-B3A4-47AF-89D9-FA388B56B52B}" EndProject diff --git a/Microsoft.Maui-windows.slnf b/Microsoft.Maui-windows.slnf index 2a944c55a9e3..86c788872d59 100644 --- a/Microsoft.Maui-windows.slnf +++ b/Microsoft.Maui-windows.slnf @@ -14,7 +14,7 @@ "src\\Controls\\Maps\\src\\Controls.Maps.csproj", "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\tests\\TestCases\\Controls.TestCases.App.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", diff --git a/Microsoft.Maui.LegacyControlGallery.slnf b/Microsoft.Maui.LegacyControlGallery.slnf index 442bbcc735f2..584133b9af5d 100644 --- a/Microsoft.Maui.LegacyControlGallery.slnf +++ b/Microsoft.Maui.LegacyControlGallery.slnf @@ -17,7 +17,7 @@ "src\\Controls\\Maps\\src\\Controls.Maps.csproj", "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\tests\\TestCases\\Controls.TestCases.App.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", diff --git a/Microsoft.Maui.Samples.slnf b/Microsoft.Maui.Samples.slnf index 242dd66e33e2..63af8f44db25 100644 --- a/Microsoft.Maui.Samples.slnf +++ b/Microsoft.Maui.Samples.slnf @@ -4,7 +4,7 @@ "projects": [ "src\\BlazorWebView\\samples\\MauiRazorClassLibrarySample\\MauiRazorClassLibrarySample.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\tests\\TestCases\\Controls.TestCases.App.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj" ] } diff --git a/Microsoft.Maui.sln b/Microsoft.Maui.sln index ad62ffa3a3a2..f76badf645f8 100644 --- a/Microsoft.Maui.sln +++ b/Microsoft.Maui.sln @@ -245,7 +245,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationT EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.App", "src\Controls\tests\TestCases\Controls.TestCases.App.csproj", "{F39F75DC-671B-4649-8005-1929797B3217}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{F39F75DC-671B-4649-8005-1929797B3217}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{352C2381-1DEC-4487-819D-340D1EA98FBE}" EndProject diff --git a/docs/DevelopmentTips.md b/docs/DevelopmentTips.md new file mode 100644 index 000000000000..0d59b6fc8f4f --- /dev/null +++ b/docs/DevelopmentTips.md @@ -0,0 +1,172 @@ +### Reproducing an Issue/Debugging .NET MAUI Code +Open the .NET MAUI [workspace](https://code.visualstudio.com/docs/editor/workspaces) in VS Code by simply opening the root of your locally cloned .NET MAUI repository folder. VS Code will detect the workspace automatically and suggest that you open it. + +In VS Code, select the device that you will be testing on. Using the Command Palette (CTRL + Shift + P or on macOS Command + Shift + P) type `pick device` and you will be presented with a set of choices for your target device (Android, iOS, etc). First select the option that describes the platform you want to run the project on, and then select the device that is available for that platform in the next menu. + +![VS Code Command Palette to pick a target device](https://github.com/dotnet/maui/assets/939291/d008102f-0295-4034-a60a-8c2b58f86641) + +There is a sample project in `src/Controls/samples/Controls.Sample.Sandbox`. This is an empty project, which directly references the .NET MAUI code. In this project you can add your code to reproduce an issue while allowing you to set breakpoints in .NET MAUI source code and debug through it easily. + +To let VS Code know this is the project you want run, select the Sandbox project by going to the Command Palette (CTRL + Shift + P or on macOS Command + Shift + P) and start typing `pick startup` and select ".NET MAUI: Pick Startup Project" and then select the Sandbox project. + +![VS Code Command Palette to pick the startup project](https://github.com/dotnet/maui/assets/939291/eae00559-4811-4034-95ae-b6fd1ea6d1b7) + +Before using the Command Palette for the first time, you may have to wait a minute +for IntelliSense and other tasks to initialize. If the project hasn't 'settled' yet, you will see an error "Pick Startup Project has resulted in an error." + +*Note:* When you are committing your PR, do not include your changes to the Sandbox project. + + +### Cake Commands + +The below parameters can be used with the `dotnet cake` command in the root of your locally cloned .NET MAUI repository folder. + +#### Clean +`--clean` +- Occasionally, when switching branches or syncing with the main branch, incremental builds may stop working. A common fix for this is to use git clean -xdf to delete all locally cached build information. However, the issue with git clean -xdf is that it will also wipe out any uncommitted changes. Using --clean to recursively delete the local obj/bin folders should hopefully resolve the issue while preserving your changes. + +#### Target a specific platform +`--android` +`--ios` +`--windows` +`--catalyst` + +```bash +dotnet cake --target=VS --workloads=global --android --ios +``` + +*Note* you will have to `git clean -xdf` your project if you change or add platforms. + +### Blazor Hybrid + +To build and run Blazor Desktop samples, check out the [Blazor Desktop](https://github.com/dotnet/maui/wiki/Blazor-Desktop) wiki topic. + +# Advanced Scenarios + +### Compile using a local `bin\dotnet` via `dotnet-local.*` + +This method will use the .NET and workload versions that are specific to the branch you are on. There may be occasions when your global installation of .NET is not compatible with a particular branch. In such cases, this method will create a local folder containing all the .NET versions specific to that branch. + +Use `dotnet-local.cmd` on Windows or `dotnet-local.sh` on Unix to ensure that `PATH` is set consistently. + +#### Cake + +You can run a `Cake` target to bootstrap .NET SDK in `bin\dotnet` and launch Visual Studio: + +```dotnetcli +dotnet tool restore +dotnet cake --target=VS +``` + +There is also a `VSCode` target for launching Visual Studio Code. + +```dotnetcli +dotnet tool restore +dotnet cake --target=VSCode +``` + +#### Testing branch against your project +`--sln=` +- This will pack .NET and then open a VS instance using the local pack. This is useful if you want to check to see if the changes in a branch will address your particular issues. Pack only runs the first time so you will need to explicitly add the `--pack` flag if you make changes and need to repack. + +```dotnetcli +dotnet tool restore +dotnet cake --sln="\MauiApp2\MauiApp2.sln" --target=VS +``` + +#### Pack +`--pack` +- This creates .NET MAUI packs inside the local dotnet install. This lets you use the CLI commands with the local dotnet to create/deploy with any changes that have been made on that branch (including template changes). + +```dotnetcli +dotnet tool restore +dotnet cake --target=VS --pack --sln="\MauiApp2\MauiApp2.sln" +``` + +Create new .NET MAUI app using your new packs +```dotnetcli +dotnet tool restore +dotnet cake --pack +mkdir MyMauiApp +cd MyMauiApp +..\bin\dotnet\dotnet new maui +..\bin\dotnet\dotnet build -t:Run -f net[current_sdk_version]-android +``` + +You can also run commands individually: +```dotnetcli +# install local tools required to build (cake, pwsh, etc..) +dotnet tool restore +# Provision .NET SDK in bin\dotnet +dotnet build src\DotNet\DotNet.csproj +# Builds Maui MSBuild tasks +.\bin\dotnet\dotnet build Microsoft.Maui.BuildTasks.slnf +# Builds the rest of Maui +.\bin\dotnet\dotnet build Microsoft.Maui.sln +# Launch Visual Studio +dotnet cake --target=VS +``` + +## Debugging MSBuild Tasks using VS/VSCode + +One thing that is very useful is the ability to debug your Tasks while +they are being run on a build process. This is possible thanks to the +`MSBUILDDEBUGONSTART` environment variable. When set to `2` this will +force MSBuild to wait for a debugger connection before continuing. +You will see the following prompt. + + +```dotnetcli +Waiting for debugger to attach (dotnet PID 13001). Press enter to continue... +``` + +You can then use VS or VSCode to attach to this process and debug you tasks. +You can start your test app with the `dotnet-local` script (so it uses your maui build) + +### [MacOS](#tab/macos) + +```dotnetcli +MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 +``` + +### [Linux](#tab/linux) + +```dotnetcli +MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 +``` + +### [Windows](#tab/windows) + +```dotnetcli +set MSBUILDDEBUGONSTART=2 +~//dotnet-local.cmd build -m:1 +``` + +--- + +Note: the `-m:1` is important as it restricts MSBuild to 1 node. + +Once MSBuild starts it will print the following + +```dotnetcli +Waiting for debugger to attach (dotnet PID xxxx). Press enter to continue... +``` + +You need to copy the PID value so we can use this in the IDE. For Visual Studio you can use the `Attach to Process` menu option, while you have the Microsoft.Maui.sln solution open. For VSCode open the workspace then use the `Attach to Process` Run and Debug option. You will be prompted for the PID and it will then connect. + +Once connected go back to your command prompt and press ENTER so that the MSBuild process can continue. + +You will be able to set breakpoints in Tasks (but not Targets) and step through code from this point on. + +If you want to test in-tree in VSCode the `Build Platform Sample` command will ask you if you want to debug MSBuild tasks and fill in the `MSBUILDDEBUGONSTART` for you. The PID text will appear in the `Terminal` window in VSCode. You can then use the `Attach to Process` Run and Debug option to attach to the process. + + +### Integration Tests + +The Integration test project under `src/TestUtils/src/Microsoft.Maui.IntegrationTests` contains tests which build and/or run MAUI templates or other projects. + +These tests can be ran using the test explorer in VS, or from command line with `dotnet test`. Here's how to run an individual test with parameters from command line: + +```bash +dotnet test src/TestUtils/src/Microsoft.Maui.IntegrationTests --logger "console;verbosity=diagnostic" --filter "Name=Build\(%22maui%22,%22net7.0%22,%22Debug%22,False\)" +``` diff --git a/docs/design/UITesting.md b/docs/design/UITesting.md index 363f5c6148bd..5995059ea423 100644 --- a/docs/design/UITesting.md +++ b/docs/design/UITesting.md @@ -14,7 +14,7 @@ Appium relies on different implementations called `drivers` for each platform th ### The sample project -The project that is used for UI Tests is located here: `src\Controls\tests\TestCases\Controls.TestCases.App.csproj` +The project that is used for UI Tests is located here: `src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj` There are two types of tests you can add, Issue and Gallery. @@ -26,17 +26,17 @@ You will need to create some kind of UI to test against, which will go in the Co Then in the Controls.AppiumTests project add a new class that derives from `_IssuesUITest` and add your test. -You can use the example for the sample project [here](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases/Issues/RefreshViewPage.cs) and the example for the corresponding test [here](https://github.com/dotnet/maui/tree/main/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/RefreshViewTests.cs). +You can use the example for the sample project [here](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases.HostApp/Issues/RefreshViewPage.cs) and the example for the corresponding test [here](https://github.com/dotnet/maui/tree/main/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/RefreshViewTests.cs). ### Adding a GalleryPage Gallery tests are to make it easier to run the same set of tests on controls, if you are creating a new control you would want to add a new gallery page. -We have some base classes you can derive from to make setting this up easier: [CoreGalleryPage](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases/CoreViews/CoreGalleryPage.cs) and [ContentViewGalleryPage](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases/Elements/ContentViewGalleryPage.cs) +We have some base classes you can derive from to make setting this up easier: [CoreGalleryPage](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases.HostApp/CoreViews/CoreGalleryPage.cs) and [ContentViewGalleryPage](https://github.com/dotnet/maui/blob/main/src/Controls/tests/TestCases.HostApp/Elements/ContentViewGalleryPage.cs) All controls you intend to interact with need to set the 'AutomationId' property as this will be what you use to query for the element. -Once you have created your GalleryPage, add it to [CorePageView](https://github.com/dotnet/maui/blob/5419846b1f20bdab1b5ce1dff40287edc5c38f12/src/Controls/tests/TestCases/CoreViews/CorePageView.cs#L45C41-L45C41) so that it will show up on the main page at launch. +Once you have created your GalleryPage, add it to [CorePageView](https://github.com/dotnet/maui/blob/5419846b1f20bdab1b5ce1dff40287edc5c38f12/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs#L45C41-L45C41) so that it will show up on the main page at launch. ### Adding the test diff --git a/eng/Versions.props b/eng/Versions.props index 7351274a8936..1b1debdea0b2 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -89,7 +89,7 @@ 4.3.0 4.3.0 6.0.0 - <_MicrosoftWebWebView2Version>1.0.2151.40 + <_MicrosoftWebWebView2Version>1.0.2592.51 <_XamarinAndroidGlideVersion>4.15.1.2 diff --git a/eng/cake/dotnet.cake b/eng/cake/dotnet.cake index dca59c1023ac..e275dd3971b8 100644 --- a/eng/cake/dotnet.cake +++ b/eng/cake/dotnet.cake @@ -190,7 +190,7 @@ Task("dotnet-samples") Error(errMsg); throw new Exception(errMsg); } - projectsToBuild = "./src/Controls/tests/TestCases/Controls.TestCases.App.csproj"; + projectsToBuild = "./src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj"; properties["_UseNativeAot"] = "true"; } else diff --git a/eng/devices/devices-shared.cake b/eng/devices/devices-shared.cake index cbe97a3944cc..6e56f48ceb68 100644 --- a/eng/devices/devices-shared.cake +++ b/eng/devices/devices-shared.cake @@ -11,7 +11,7 @@ var projectMappings = new Dictionary ["Graphics.DeviceTests"] = "Graphics.DeviceTests", ["MauiBlazorWebView.DeviceTests"] = "MauiBlazorWebView.DeviceTests", ["Essentials.DeviceTests"] = "Essentials.DeviceTests", - ["Controls.TestCases.App"] = "Controls.TestCases.App", + ["Controls.TestCases.HostApp"] = "Controls.TestCases.HostApp", ["Compatibility.ControlGallery.iOS"] = "Compatibility.ControlGallery.iOS", ["Compatibility.ControlGallery.Android"] = "Compatibility.ControlGallery.Android", }; @@ -24,13 +24,13 @@ string DEFAULT_APP_PROJECT = ""; if (string.Equals(TARGET, "uitest", StringComparison.OrdinalIgnoreCase)) { DEFAULT_PROJECT = "../../src/Controls/tests/TestCases.Shared.Tests/Controls.TestCases.Shared.Tests.csproj"; - DEFAULT_APP_PROJECT = "../../src/Controls/tests/TestCases/Controls.TestCases.App.csproj"; + DEFAULT_APP_PROJECT = "../../src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj"; } if (string.Equals(TARGET, "uitest-build", StringComparison.OrdinalIgnoreCase)) { DEFAULT_PROJECT = "../../src/Controls/tests/TestCases.Shared.Tests/Controls.TestCases.Shared.Tests.csproj"; - DEFAULT_APP_PROJECT = "../../src/Controls/tests/TestCases/Controls.TestCases.App.csproj"; + DEFAULT_APP_PROJECT = "../../src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj"; } if (string.Equals(TARGET, "cg-uitest", StringComparison.OrdinalIgnoreCase)) diff --git a/eng/devices/windows.cake b/eng/devices/windows.cake index 7eea5a540378..fd3d05c3f63f 100644 --- a/eng/devices/windows.cake +++ b/eng/devices/windows.cake @@ -438,9 +438,9 @@ Task("SetupTestPaths") if (apps.Count() == 0) { var arcadeBin = new DirectoryPath("../../artifacts/bin/"); - if(TEST_APP_PROJECT.FullPath.Contains("Controls.TestCases.App")) + if(TEST_APP_PROJECT.FullPath.Contains("Controls.TestCases.HostApp")) { - binDir = MakeAbsolute(new DirectoryPath(arcadeBin + "/Controls.TestCases.App/" + CONFIGURATION + "/" + winVersion).Combine(DOTNET_PLATFORM)); + binDir = MakeAbsolute(new DirectoryPath(arcadeBin + "/Controls.TestCases.HostApp/" + CONFIGURATION + "/" + winVersion).Combine(DOTNET_PLATFORM)); } if(PROJECT.FullPath.Contains("Controls.DeviceTests")) diff --git a/eng/pipelines/ui-tests.yml b/eng/pipelines/ui-tests.yml index 7e5f18d85c20..217c21551e6c 100644 --- a/eng/pipelines/ui-tests.yml +++ b/eng/pipelines/ui-tests.yml @@ -143,7 +143,7 @@ stages: desc: Controls androidApiLevelsExclude: [25] # Ignore for now API25 since the runs's are not stable android: $(System.DefaultWorkingDirectory)/src/Controls/tests/TestCases.Android.Tests/Controls.TestCases.Android.Tests.csproj - app: $(System.DefaultWorkingDirectory)/src/Controls/tests/TestCases/Controls.TestCases.App.csproj + app: $(System.DefaultWorkingDirectory)/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj iosVersionsExclude: [ '12.4'] # Ignore iOS 12.4 while we can't make it work on CI ios: $(System.DefaultWorkingDirectory)/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj winui: $(System.DefaultWorkingDirectory)/src/Controls/tests/TestCases.WinUI.Tests/Controls.TestCases.WinUI.Tests.csproj diff --git a/eng/scripts/appium-install.ps1 b/eng/scripts/appium-install.ps1 index 87cc3bc6729b..3dc9abd3cd03 100644 --- a/eng/scripts/appium-install.ps1 +++ b/eng/scripts/appium-install.ps1 @@ -42,9 +42,9 @@ param ( [string] $appiumVersion = '2.11.0', [string] $windowsDriverVersion = '2.12.23', - [string] $androidDriverVersion = '3.5.1', - [string] $iOSDriverVersion = '7.16.1', - [string] $macDriverVersion = '1.17.3', + [string] $androidDriverVersion = '3.7.0', + [string] $iOSDriverVersion = '7.21.0', + [string] $macDriverVersion = '1.17.4', [string] $logsDir = '../appium-logs' ) diff --git a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Build.Tasks.Before.targets b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Build.Tasks.Before.targets index f122c6362cb8..e4c73b3619b4 100644 --- a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Build.Tasks.Before.targets +++ b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Build.Tasks.Before.targets @@ -1,6 +1,7 @@ + \ No newline at end of file diff --git a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.Before.targets b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.Before.targets new file mode 100644 index 000000000000..e39f88f4bda2 --- /dev/null +++ b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.Before.targets @@ -0,0 +1,71 @@ + + + + + Platforms\ + $([MSBuild]::EnsureTrailingSlash('$(PlatformsProjectFolder)')) + + <_KeepLaunchProfiles>true + + false + $(PlatformsProjectFolder)Android\ + $([MSBuild]::EnsureTrailingSlash('$(AndroidProjectFolder)')) + + false + $(PlatformsProjectFolder)iOS\ + $([MSBuild]::EnsureTrailingSlash('$(iOSProjectFolder)')) + + false + $(PlatformsProjectFolder)MacCatalyst\ + $([MSBuild]::EnsureTrailingSlash('$(MacCatalystProjectFolder)')) + + false + $(PlatformsProjectFolder)Windows\ + $([MSBuild]::EnsureTrailingSlash('$(WindowsProjectFolder)')) + + false + $(PlatformsProjectFolder)Tizen\ + $([MSBuild]::EnsureTrailingSlash('$(TizenProjectFolder)')) + + + + + + + + + + + + $(AndroidProjectFolder)AndroidManifest.xml + $(AndroidProjectFolder)Resources + $(AndroidProjectFolder)Assets + + + + $(iOSProjectFolder)Resources + $(iOSProjectFolder)Entitlements.plist + <_SingleProjectiOSExcludes>$(iOSProjectFolder)/**/.*/** + + + + $(MacCatalystProjectFolder)Resources + $(MacCatalystProjectFolder)Entitlements.plist + <_SingleProjectMacCatalystExcludes>$(MacCatalystProjectFolder)/**/.*/** + + + + $(WindowsProjectFolder)app.manifest + $(WindowsProjectFolder)Package.appxmanifest + False + False + <_SingleProjectWindowsExcludes>$(WindowsProjectFolder)/**/.*/** + + + + $(TizenProjectFolder)tizen-manifest.xml + $(TizenProjectFolder)res + $(TizenProjectFolder)shared + + + \ No newline at end of file diff --git a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.targets b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.targets index 0a64616ac8db..c8183a8997d5 100644 --- a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.targets +++ b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.SingleProject.targets @@ -1,73 +1,6 @@ - - Platforms\ - $([MSBuild]::EnsureTrailingSlash('$(PlatformsProjectFolder)')) - - <_KeepLaunchProfiles>true - - false - $(PlatformsProjectFolder)Android\ - $([MSBuild]::EnsureTrailingSlash('$(AndroidProjectFolder)')) - - false - $(PlatformsProjectFolder)iOS\ - $([MSBuild]::EnsureTrailingSlash('$(iOSProjectFolder)')) - - false - $(PlatformsProjectFolder)MacCatalyst\ - $([MSBuild]::EnsureTrailingSlash('$(MacCatalystProjectFolder)')) - - false - $(PlatformsProjectFolder)Windows\ - $([MSBuild]::EnsureTrailingSlash('$(WindowsProjectFolder)')) - - false - $(PlatformsProjectFolder)Tizen\ - $([MSBuild]::EnsureTrailingSlash('$(TizenProjectFolder)')) - - - - - - - - - - - - $(AndroidProjectFolder)AndroidManifest.xml - $(AndroidProjectFolder)Resources - $(AndroidProjectFolder)Assets - - - - $(iOSProjectFolder)Resources - $(iOSProjectFolder)Entitlements.plist - <_SingleProjectiOSExcludes>$(iOSProjectFolder)/**/.*/** - - - - $(MacCatalystProjectFolder)Resources - $(MacCatalystProjectFolder)Entitlements.plist - <_SingleProjectMacCatalystExcludes>$(MacCatalystProjectFolder)/**/.*/** - - - - $(WindowsProjectFolder)app.manifest - $(WindowsProjectFolder)Package.appxmanifest - False - False - <_SingleProjectWindowsExcludes>$(WindowsProjectFolder)/**/.*/** - - - - $(TizenProjectFolder)tizen-manifest.xml - $(TizenProjectFolder)res - $(TizenProjectFolder)shared - - diff --git a/src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Android.cs b/src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Android.cs index 78750d6a8e4d..da4545f56ab1 100644 --- a/src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Android.cs +++ b/src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Android.cs @@ -207,11 +207,10 @@ void SetupGestures() shouldAddTouchEvent = true; } - if (!shouldAddTouchEvent) - { - platformView.Touch -= OnPlatformViewTouched; - } - else + // Always unsubscribe first to avoid duplicates + platformView.Touch -= OnPlatformViewTouched; + + if (shouldAddTouchEvent) { platformView.Touch += OnPlatformViewTouched; } diff --git a/src/Controls/src/Core/Platform/Windows/Extensions/AccessibilityExtensions.cs b/src/Controls/src/Core/Platform/Windows/Extensions/AccessibilityExtensions.cs index 41ea4aa7073d..b32154f1a34e 100644 --- a/src/Controls/src/Core/Platform/Windows/Extensions/AccessibilityExtensions.cs +++ b/src/Controls/src/Core/Platform/Windows/Extensions/AccessibilityExtensions.cs @@ -1,4 +1,3 @@ -#nullable disable using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Automation.Peers; using NativeAutomationProperties = Microsoft.UI.Xaml.Automation.AutomationProperties; @@ -7,112 +6,153 @@ namespace Microsoft.Maui.Controls.Platform { public static class AccessibilityExtensions { - public static void SetAutomationPropertiesAutomationId(this FrameworkElement Control, string id) + public static void SetAutomationPropertiesAutomationId(this FrameworkElement Control, string? id) { Control.SetValue(NativeAutomationProperties.AutomationIdProperty, id); } - public static string SetAutomationPropertiesName(this FrameworkElement Control, Element Element, string _defaultAutomationPropertiesName = null) + public static string? SetAutomationPropertiesName(this FrameworkElement Control, Element? Element, string? _defaultAutomationPropertiesName = null) { - if (Element == null) + if (Element is null) + { return _defaultAutomationPropertiesName; + } + + string? currentValue = null; - if (_defaultAutomationPropertiesName == null) - _defaultAutomationPropertiesName = (string)Control.GetValue(NativeAutomationProperties.NameProperty); + if (_defaultAutomationPropertiesName is null) + { + _defaultAutomationPropertiesName = currentValue = (string)Control.GetValue(NativeAutomationProperties.NameProperty); + } #pragma warning disable CS0618 // Type or member is obsolete var elemValue = (string)Element.GetValue(AutomationProperties.NameProperty); #pragma warning restore CS0618 // Type or member is obsolete - if (!string.IsNullOrWhiteSpace(elemValue)) - Control.SetValue(NativeAutomationProperties.NameProperty, elemValue); - else + string newValue = !string.IsNullOrWhiteSpace(elemValue) ? elemValue : _defaultAutomationPropertiesName; + + if (currentValue is null || currentValue != newValue) + { Control.SetValue(NativeAutomationProperties.NameProperty, _defaultAutomationPropertiesName); + } return _defaultAutomationPropertiesName; } - public static AccessibilityView? SetAutomationPropertiesAccessibilityView(this FrameworkElement Control, Element Element, AccessibilityView? _defaultAutomationPropertiesAccessibilityView = null) + public static AccessibilityView? SetAutomationPropertiesAccessibilityView(this FrameworkElement Control, Element? Element, AccessibilityView? _defaultAutomationPropertiesAccessibilityView = null) { - if (Element == null) + if (Element is null) + { return _defaultAutomationPropertiesAccessibilityView; + } + + AccessibilityView? currentValue = null; if (!_defaultAutomationPropertiesAccessibilityView.HasValue) - _defaultAutomationPropertiesAccessibilityView = (AccessibilityView)Control.GetValue(NativeAutomationProperties.AccessibilityViewProperty); + { + _defaultAutomationPropertiesAccessibilityView = currentValue = (AccessibilityView)Control.GetValue(NativeAutomationProperties.AccessibilityViewProperty); + } var newValue = _defaultAutomationPropertiesAccessibilityView; var elemValue = (bool?)Element.GetValue(AutomationProperties.IsInAccessibleTreeProperty); if (elemValue == true) + { newValue = AccessibilityView.Content; + } else if (elemValue == false) + { newValue = AccessibilityView.Raw; + } - Control.SetValue(NativeAutomationProperties.AccessibilityViewProperty, newValue); + if (currentValue is null || currentValue != newValue) + { + Control.SetValue(NativeAutomationProperties.AccessibilityViewProperty, newValue); + } return _defaultAutomationPropertiesAccessibilityView; } - public static string SetAutomationPropertiesHelpText(this FrameworkElement Control, Element Element, string _defaultAutomationPropertiesHelpText = null) + public static string? SetAutomationPropertiesHelpText(this FrameworkElement Control, Element? Element, string? _defaultAutomationPropertiesHelpText = null) { if (Element == null) + { return _defaultAutomationPropertiesHelpText; + } - if (_defaultAutomationPropertiesHelpText == null) - _defaultAutomationPropertiesHelpText = (string)Control.GetValue(NativeAutomationProperties.HelpTextProperty); + string? currentValue = null; + + if (_defaultAutomationPropertiesHelpText is null) + { + _defaultAutomationPropertiesHelpText = currentValue = (string)Control.GetValue(NativeAutomationProperties.HelpTextProperty); + } #pragma warning disable CS0618 // Type or member is obsolete var elemValue = (string)Element.GetValue(AutomationProperties.HelpTextProperty); #pragma warning restore CS0618 // Type or member is obsolete - if (!string.IsNullOrWhiteSpace(elemValue)) - Control.SetValue(NativeAutomationProperties.HelpTextProperty, elemValue); - else + string newValue = !string.IsNullOrWhiteSpace(elemValue) ? elemValue : _defaultAutomationPropertiesHelpText; + + if (currentValue is null || newValue != currentValue) + { Control.SetValue(NativeAutomationProperties.HelpTextProperty, _defaultAutomationPropertiesHelpText); + } return _defaultAutomationPropertiesHelpText; } - public static UIElement SetAutomationPropertiesLabeledBy( + public static UIElement? SetAutomationPropertiesLabeledBy( this FrameworkElement Control, - Element Element, - IMauiContext mauiContext, - UIElement _defaultAutomationPropertiesLabeledBy = null) + Element? Element, + IMauiContext? mauiContext, + UIElement? _defaultAutomationPropertiesLabeledBy = null) { - if (Element == null) + if (Element is null) + { return _defaultAutomationPropertiesLabeledBy; + } // TODO Maui: this is a bit of a hack because Elements // currently don't implement IView but they should mauiContext ??= (Element as IView)?.Handler?.MauiContext; - if (_defaultAutomationPropertiesLabeledBy == null) - _defaultAutomationPropertiesLabeledBy = (UIElement)Control.GetValue(NativeAutomationProperties.LabeledByProperty); + UIElement? currentValue = null; + + if (_defaultAutomationPropertiesLabeledBy is null) + { + _defaultAutomationPropertiesLabeledBy = currentValue = (UIElement)Control.GetValue(NativeAutomationProperties.LabeledByProperty); + } #pragma warning disable CS0618 // Type or member is obsolete var elemValue = (VisualElement)Element.GetValue(AutomationProperties.LabeledByProperty); #pragma warning restore CS0618 // Type or member is obsolete - FrameworkElement nativeElement = null; + FrameworkElement? nativeElement = null; if (mauiContext != null) + { nativeElement = (elemValue as IView)?.ToHandler(mauiContext)?.PlatformView as FrameworkElement; + } + + UIElement? newValue = nativeElement is not null ? nativeElement : _defaultAutomationPropertiesLabeledBy; - if (nativeElement != null) + if (currentValue is null || newValue != currentValue) + { #pragma warning disable CS0618 // Type or member is obsolete - Control.SetValue(AutomationProperties.LabeledByProperty, nativeElement); + Control.SetValue(AutomationProperties.LabeledByProperty, newValue); #pragma warning restore CS0618 // Type or member is obsolete - else - Control.SetValue(NativeAutomationProperties.LabeledByProperty, _defaultAutomationPropertiesLabeledBy); + } return _defaultAutomationPropertiesLabeledBy; } // TODO MAUI: This is not having any effect on anything I've tested yet. See if we need it // after we test the FP and NP w/ back button explicitly enabled. - public static void SetBackButtonTitle(this PageControl Control, Element Element) + public static void SetBackButtonTitle(this PageControl Control, Element? Element) { - if (Element == null) + if (Element is null) + { return; + } var elemValue = ConcatenateNameAndHint(Element); @@ -130,11 +170,13 @@ static string ConcatenateNameAndHint(Element Element) #pragma warning restore CS0618 // Type or member is obsolete if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(hint)) + { separator = ""; - + } else + { separator = ". "; - + } return string.Join(separator, name, hint); @@ -142,9 +184,9 @@ static string ConcatenateNameAndHint(Element Element) public static void SetAutomationProperties( this FrameworkElement frameworkElement, - Element element, - IMauiContext mauiContext, - string defaultName = null) + Element? element, + IMauiContext? mauiContext, + string? defaultName = null) { frameworkElement.SetAutomationPropertiesAutomationId(element?.AutomationId); frameworkElement.SetAutomationPropertiesName(element, defaultName); diff --git a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Shipped.txt b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Shipped.txt index 8ceed62a1748..0dbfa8b75f24 100644 --- a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Shipped.txt +++ b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Shipped.txt @@ -2534,13 +2534,6 @@ ~static Microsoft.Maui.Controls.OnPlatform.implicit operator T(Microsoft.Maui.Controls.OnPlatform onPlatform) -> T ~static Microsoft.Maui.Controls.PanGestureRecognizer.CurrentId.get -> Microsoft.Maui.Controls.Internals.AutoId ~static Microsoft.Maui.Controls.Picker.ControlsPickerMapper -> Microsoft.Maui.IPropertyMapper -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationProperties(this Microsoft.UI.Xaml.FrameworkElement frameworkElement, Microsoft.Maui.Controls.Element element, Microsoft.Maui.IMauiContext mauiContext, string defaultName = null) -> void -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesAccessibilityView(this Microsoft.UI.Xaml.FrameworkElement Control, Microsoft.Maui.Controls.Element Element, Microsoft.UI.Xaml.Automation.Peers.AccessibilityView? _defaultAutomationPropertiesAccessibilityView = null) -> Microsoft.UI.Xaml.Automation.Peers.AccessibilityView? -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesAutomationId(this Microsoft.UI.Xaml.FrameworkElement Control, string id) -> void -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesHelpText(this Microsoft.UI.Xaml.FrameworkElement Control, Microsoft.Maui.Controls.Element Element, string _defaultAutomationPropertiesHelpText = null) -> string -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesLabeledBy(this Microsoft.UI.Xaml.FrameworkElement Control, Microsoft.Maui.Controls.Element Element, Microsoft.Maui.IMauiContext mauiContext, Microsoft.UI.Xaml.UIElement _defaultAutomationPropertiesLabeledBy = null) -> Microsoft.UI.Xaml.UIElement -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesName(this Microsoft.UI.Xaml.FrameworkElement Control, Microsoft.Maui.Controls.Element Element, string _defaultAutomationPropertiesName = null) -> string -~static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetBackButtonTitle(this Microsoft.Maui.Controls.Platform.PageControl Control, Microsoft.Maui.Controls.Element Element) -> void ~static Microsoft.Maui.Controls.Platform.AccessKeyHelper.UpdateAccessKey(Microsoft.UI.Xaml.FrameworkElement control, Microsoft.Maui.Controls.VisualElement element) -> void ~static Microsoft.Maui.Controls.Platform.BrushExtensions.ToBrush(this Microsoft.Maui.Controls.Brush brush) -> Microsoft.UI.Xaml.Media.Brush ~static Microsoft.Maui.Controls.Platform.FontExtensions.ApplyFont(this Microsoft.UI.Xaml.Controls.Control self, Microsoft.Maui.Font font, Microsoft.Maui.IFontManager fontManager) -> void diff --git a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt index 93d38a519a45..134d2cfce583 100644 --- a/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt +++ b/src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt @@ -68,6 +68,13 @@ Microsoft.Maui.Controls.PointerGestureRecognizer.PointerReleasedCommand.get -> S Microsoft.Maui.Controls.PointerGestureRecognizer.PointerReleasedCommand.set -> void Microsoft.Maui.Controls.PointerGestureRecognizer.PointerReleasedCommandParameter.get -> object! Microsoft.Maui.Controls.PointerGestureRecognizer.PointerReleasedCommandParameter.set -> void +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationProperties(this Microsoft.UI.Xaml.FrameworkElement! frameworkElement, Microsoft.Maui.Controls.Element? element, Microsoft.Maui.IMauiContext? mauiContext, string? defaultName = null) -> void +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesAccessibilityView(this Microsoft.UI.Xaml.FrameworkElement! Control, Microsoft.Maui.Controls.Element? Element, Microsoft.UI.Xaml.Automation.Peers.AccessibilityView? _defaultAutomationPropertiesAccessibilityView = null) -> Microsoft.UI.Xaml.Automation.Peers.AccessibilityView? +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesAutomationId(this Microsoft.UI.Xaml.FrameworkElement! Control, string? id) -> void +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesHelpText(this Microsoft.UI.Xaml.FrameworkElement! Control, Microsoft.Maui.Controls.Element? Element, string? _defaultAutomationPropertiesHelpText = null) -> string? +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesLabeledBy(this Microsoft.UI.Xaml.FrameworkElement! Control, Microsoft.Maui.Controls.Element? Element, Microsoft.Maui.IMauiContext? mauiContext, Microsoft.UI.Xaml.UIElement? _defaultAutomationPropertiesLabeledBy = null) -> Microsoft.UI.Xaml.UIElement? +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetAutomationPropertiesName(this Microsoft.UI.Xaml.FrameworkElement! Control, Microsoft.Maui.Controls.Element? Element, string? _defaultAutomationPropertiesName = null) -> string? +static Microsoft.Maui.Controls.Platform.AccessibilityExtensions.SetBackButtonTitle(this Microsoft.Maui.Controls.Platform.PageControl! Control, Microsoft.Maui.Controls.Element? Element) -> void Microsoft.Maui.Controls.TimeChangedEventArgs Microsoft.Maui.Controls.TimeChangedEventArgs.NewTime.get -> System.TimeSpan Microsoft.Maui.Controls.TimeChangedEventArgs.OldTime.get -> System.TimeSpan diff --git a/src/Controls/tests/DeviceTests/Memory/MemoryTests.cs b/src/Controls/tests/DeviceTests/Memory/MemoryTests.cs index f8e96469ba49..dbd009a5cac1 100644 --- a/src/Controls/tests/DeviceTests/Memory/MemoryTests.cs +++ b/src/Controls/tests/DeviceTests/Memory/MemoryTests.cs @@ -8,6 +8,7 @@ using Microsoft.Maui.Controls.Handlers.Items; using Microsoft.Maui.Controls.Platform; using Microsoft.Maui.Controls.Shapes; +using Microsoft.Maui.DeviceTests.Stubs; using Microsoft.Maui.Handlers; using Microsoft.Maui.Hosting; using Xunit; @@ -30,6 +31,7 @@ void SetupBuilder() handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); + handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); @@ -39,6 +41,7 @@ void SetupBuilder() handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); + handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); @@ -47,6 +50,7 @@ void SetupBuilder() handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); + handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); handlers.AddHandler(); @@ -133,21 +137,28 @@ await CreateHandlerAndAddToWindow(new Window(navPage), async () => [InlineData(typeof(ContentView))] [InlineData(typeof(CheckBox))] [InlineData(typeof(DatePicker))] + [InlineData(typeof(Ellipse))] [InlineData(typeof(Entry))] [InlineData(typeof(Editor))] #pragma warning disable CS0618 // Type or member is obsolete [InlineData(typeof(Frame))] #pragma warning restore CS0618 // Type or member is obsolete [InlineData(typeof(GraphicsView))] + [InlineData(typeof(Grid))] [InlineData(typeof(Image))] [InlineData(typeof(ImageButton))] [InlineData(typeof(IndicatorView))] + [InlineData(typeof(Line))] [InlineData(typeof(Label))] [InlineData(typeof(ListView))] + [InlineData(typeof(Path))] [InlineData(typeof(Picker))] [InlineData(typeof(Polygon))] [InlineData(typeof(Polyline))] + [InlineData(typeof(RadioButton))] + [InlineData(typeof(Rectangle))] [InlineData(typeof(RefreshView))] + [InlineData(typeof(RoundRectangle))] [InlineData(typeof(ScrollView))] [InlineData(typeof(SearchBar))] [InlineData(typeof(Slider))] @@ -163,12 +174,8 @@ public async Task HandlerDoesNotLeak(Type type) SetupBuilder(); #if ANDROID - // TODO: fixing upstream at https://github.com/xamarin/xamarin-android/pull/8900 - if (type == typeof(ListView)) - return; - // NOTE: skip certain controls on older Android devices - if (type == typeof (DatePicker) && !OperatingSystem.IsAndroidVersionAtLeast(30)) + if ((type == typeof(DatePicker) || type == typeof(ListView)) && !OperatingSystem.IsAndroidVersionAtLeast(30)) return; #endif @@ -189,7 +196,12 @@ await InvokeOnMainThreadAsync(async () => var layout = new Grid(); var view = (View)Activator.CreateInstance(type); layout.Add(view); - if (view is ContentView content) + if (view is Border border) + { + border.StrokeShape = new RoundRectangle { CornerRadius = new CornerRadius(10) }; + border.Content = new Label(); + } + else if (view is ContentView content) { content.Content = new Label(); } @@ -218,6 +230,15 @@ await InvokeOnMainThreadAsync(async () => webView.Source = new HtmlWebViewSource { Html = "

hi

" }; await Task.Delay(1000); } + else if (view is TemplatedView templated) + { + templated.ControlTemplate = new ControlTemplate(() => + new Border + { + StrokeShape = new RoundRectangle { CornerRadius = new CornerRadius(10) }, + Content = new Grid { Children = { new Ellipse(), new ContentPresenter() } } + }); + } var handler = CreateHandler(layout); viewReference = new WeakReference(view); handlerReference = new WeakReference(view.Handler); @@ -329,6 +350,67 @@ await navPage.Navigation.PushAsync(new ContentPage await AssertionExtensions.WaitForGC(references.ToArray()); } + [Fact("BindableLayout Does Not Leak")] + public async Task BindableLayoutDoesNotLeak() + { + SetupBuilder(); + + var references = new List(); + var observable = new ObservableCollection + { + new { Name = "One" }, + new { Name = "Two" }, + new { Name = "Three" }, + }; + + var layout = new VerticalStackLayout(); + + { + BindableLayout.SetItemsSource(layout, observable); + BindableLayout.SetItemTemplate(layout, new DataTemplate(() => + { + var radio = new RadioButton + { + ControlTemplate = new ControlTemplate(() => + { + var radio = new RadioButton + { + ControlTemplate = new ControlTemplate(() => + { + var ellipse = new Ellipse(); + references.Add(new(ellipse)); + + return new HorizontalStackLayout + { + Children = + { + ellipse, + new ContentPresenter(), + } + }; + }) + }; + radio.SetBinding(RadioButton.ContentProperty, "Name"); + return radio; + }) + }; + radio.SetBinding(RadioButton.ContentProperty, "Name"); + return radio; + })); + var page = new ContentPage { Content = layout }; + await CreateHandlerAndAddToWindow(new Window(page), async _ => + { + await OnLoadedAsync(page); + BindableLayout.SetItemsSource(layout, new ObservableCollection(observable)); + page.Content = null; + }); + } + + // 6 Ellipses total: first 3 should not leak, last 3 should still be in the layout & alive + Assert.Equal(6, references.Count); + await AssertionExtensions.WaitForGC(references[0], references[1], references[2]); + } + #if IOS [Fact] public async Task ResignFirstResponderTouchGestureRecognizer() diff --git a/src/Controls/tests/TestCases/Concepts/AlertsGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Concepts/AlertsGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Concepts/AlertsGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Concepts/AlertsGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Concepts/ImageLoadingGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Concepts/ImageLoadingGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Concepts/ImageLoadingGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Concepts/ImageLoadingGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Concepts/InputTransparencyGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Concepts/InputTransparencyGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Concepts/InputTransparencyGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Concepts/InputTransparencyGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Controls.TestCases.App.csproj b/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj similarity index 100% rename from src/Controls/tests/TestCases/Controls.TestCases.App.csproj rename to src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj diff --git a/src/Controls/tests/TestCases/CoreViews/CoreGalleryBasePage.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CoreGalleryBasePage.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/CoreGalleryBasePage.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/CoreGalleryBasePage.cs diff --git a/src/Controls/tests/TestCases/CoreViews/CoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/CoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/CoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/CoreViews/CoreNavigationPage.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CoreNavigationPage.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/CoreNavigationPage.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/CoreNavigationPage.cs diff --git a/src/Controls/tests/TestCases/CoreViews/CorePageView.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/CorePageView.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs diff --git a/src/Controls/tests/TestCases/CoreViews/CoreRootPage.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CoreRootPage.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/CoreRootPage.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/CoreRootPage.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/EventViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/EventViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/EventViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/EventViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/ExpectedEventViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ExpectedEventViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/ExpectedEventViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ExpectedEventViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/IViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/IViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/IViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/IViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/LayeredViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/LayeredViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/LayeredViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/LayeredViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/StateViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/StateViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/StateViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/StateViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/ValueViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ValueViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/ValueViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ValueViewContainer.cs diff --git a/src/Controls/tests/TestCases/CoreViews/ViewContainers/ViewContainer.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ViewContainer.cs similarity index 100% rename from src/Controls/tests/TestCases/CoreViews/ViewContainers/ViewContainer.cs rename to src/Controls/tests/TestCases.HostApp/CoreViews/ViewContainers/ViewContainer.cs diff --git a/src/Controls/tests/TestCases/Directory.Build.props b/src/Controls/tests/TestCases.HostApp/Directory.Build.props similarity index 100% rename from src/Controls/tests/TestCases/Directory.Build.props rename to src/Controls/tests/TestCases.HostApp/Directory.Build.props diff --git a/src/Controls/tests/TestCases/Directory.Build.targets b/src/Controls/tests/TestCases.HostApp/Directory.Build.targets similarity index 100% rename from src/Controls/tests/TestCases/Directory.Build.targets rename to src/Controls/tests/TestCases.HostApp/Directory.Build.targets diff --git a/src/Controls/tests/TestCases/Elements/ActivityIndicatorCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ActivityIndicatorCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ActivityIndicatorCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ActivityIndicatorCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/BorderGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/BorderGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/BorderGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/BorderGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/BordersWithVariousShapes.xaml b/src/Controls/tests/TestCases.HostApp/Elements/BordersWithVariousShapes.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/BordersWithVariousShapes.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/BordersWithVariousShapes.xaml diff --git a/src/Controls/tests/TestCases/Elements/BordersWithVariousShapes.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/BordersWithVariousShapes.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/BordersWithVariousShapes.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/BordersWithVariousShapes.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/BoxViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/BoxViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/BoxViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/BoxViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/ButtonCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ButtonCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ButtonCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ButtonCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/CarouselViewCoreGalleryPage.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CarouselViewCoreGalleryPage.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CarouselViewCoreGalleryPage.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CarouselViewCoreGalleryPage.xaml diff --git a/src/Controls/tests/TestCases/Elements/CarouselViewCoreGalleryPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CarouselViewCoreGalleryPage.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CarouselViewCoreGalleryPage.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CarouselViewCoreGalleryPage.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CheckBoxCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/CheckBoxCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CheckBoxCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CheckBoxCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/AdaptiveCollectionView.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AdaptiveCollectionView.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/AdaptiveCollectionView.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AdaptiveCollectionView.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/AdaptiveCollectionView.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AdaptiveCollectionView.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/AdaptiveCollectionView.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AdaptiveCollectionView.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/AlternateLayoutGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/AlternateLayoutGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/AlternateLayoutGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/AlternateLayoutGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/AlternateLayoutGalleries/StaggeredLayout.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/CarouselData.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CarouselData.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/CarouselData.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CarouselData.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/CollectionModifier.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionModifier.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/CollectionModifier.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionModifier.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/CollectionViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/CollectionViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/CollectionViewGalleryTestItem.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionViewGalleryTestItem.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/CollectionViewGalleryTestItem.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/CollectionViewGalleryTestItem.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGalleries/VariedSizeDataTemplateSelectorGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DataTemplateSelectorGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DataTemplateSelectorGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DefaultTextGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DefaultTextGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DefaultTextGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DefaultTextGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/DemoFilteredItemSource.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DemoFilteredItemSource.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/DemoFilteredItemSource.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/DemoFilteredItemSource.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewGalleryFilterInfo.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewGalleryFilterInfo.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewGalleryFilterInfo.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewGalleryFilterInfo.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewLoadSimulateGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewNullGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewRTLGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewStringGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewSwapGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewTemplateGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EmptyViewGalleries/EmptyViewViewGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/EnumSelector.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EnumSelector.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/EnumSelector.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/EnumSelector.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ExampleTemplates.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ExampleTemplates.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ExampleTemplates.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ExampleTemplates.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/FilterCollectionView.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/FilterCollectionView.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/FilterCollectionView.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/FilterCollectionView.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/FilterCollectionView.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/FilterCollectionView.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/FilterCollectionView.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/FilterCollectionView.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/BasicGrouping.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GridGrouping.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingNoTemplates.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/GroupingPlusSelection.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/MeasureFirstStrategy.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/ObservableGrouping.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/ObservableGrouping.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/ObservableGrouping.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/ObservableGrouping.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SomeEmptyGroups.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/SwitchGrouping.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/ViewModel.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/ViewModel.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/GroupingGalleries/ViewModel.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/GroupingGalleries/ViewModel.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/FooterOnlyString.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGrid.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterGridHorizontal.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterString.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterTemplate.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/HeaderFooterGalleries/HeaderFooterView.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/IndexParser.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/IndexParser.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/IndexParser.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/IndexParser.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemAdder.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemAdder.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemAdder.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemAdder.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemInsert.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemInsert.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemInsert.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemInsert.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemMover.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemMover.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemMover.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemMover.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemRemover.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemRemover.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemRemover.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemRemover.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemReplacer.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemReplacer.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemReplacer.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemReplacer.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ChatExample.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/DynamicItemSizeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/DynamicItemSizeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/DynamicItemSizeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/DynamicItemSizeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ItemsSizeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ItemsSizeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/ItemsSizeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/ItemsSizeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/VariableSizeTemplateGridGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/VariableSizeTemplateGridGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemSizeGalleries/VariableSizeTemplateGridGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemSizeGalleries/VariableSizeTemplateGridGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ItemsSourceGenerator.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemsSourceGenerator.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ItemsSourceGenerator.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ItemsSourceGenerator.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiItemAdder.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemAdder.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiItemAdder.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemAdder.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiItemMover.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemMover.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiItemMover.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemMover.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiItemRemover.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemRemover.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiItemRemover.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemRemover.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiItemReplacer.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemReplacer.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiItemReplacer.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiItemReplacer.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiTestObservableCollection.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiTestObservableCollection.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiTestObservableCollection.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiTestObservableCollection.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/MultiTestObservableCollectionModifier.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiTestObservableCollectionModifier.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/MultiTestObservableCollectionModifier.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/MultiTestObservableCollectionModifier.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/NestedGalleries/NestedCollectionViewGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ObservableCodeCollectionViewGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCodeCollectionViewGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ObservableCodeCollectionViewGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCodeCollectionViewGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionModifier.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionModifier.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionModifier.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionModifier.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionResetGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionResetGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ObservableCollectionResetGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableCollectionResetGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ObservableMultiItemCollectionViewGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableMultiItemCollectionViewGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ObservableMultiItemCollectionViewGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ObservableMultiItemCollectionViewGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/OnlineImages.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/OnlineImages.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/OnlineImages.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/OnlineImages.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/OnlineImages.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/OnlineImages.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/OnlineImages.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/OnlineImages.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/PositionControl.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PositionControl.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/PositionControl.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PositionControl.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/PropagateCodeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PropagateCodeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/PropagateCodeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PropagateCodeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/PropagationGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PropagationGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/PropagationGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/PropagationGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/GroupedReorderingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/GroupedReorderingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/GroupedReorderingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/GroupedReorderingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/ReorderingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/ReorderingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/ReorderingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/ReorderingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/UngroupedReorderingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/UngroupedReorderingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ReorderingGalleries/UngroupedReorderingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ReorderingGalleries/UngroupedReorderingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/Resetter.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/Resetter.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/Resetter.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/Resetter.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/EnumPicker.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/EnumPicker.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/EnumPicker.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/EnumPicker.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ItemsUpdatingScrollModeGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollModeGalleries/ScrollModeTestGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToCodeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToCodeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToCodeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToCodeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGalleries/ScrollToGroup.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToIndexControl.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToIndexControl.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToIndexControl.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToIndexControl.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/ScrollToItemControl.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToItemControl.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/ScrollToItemControl.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/ScrollToItemControl.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/BoundSelectionModel.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/BoundSelectionModel.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/BoundSelectionModel.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/BoundSelectionModel.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/FilterSelection.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/MultipleBoundSelection.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/PreselectedItemsGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionChangedCommandParameter.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionHelpers.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionHelpers.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionHelpers.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionHelpers.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionModeGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SelectionSynchronization.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/SingleBoundSelection.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SelectionGalleries/VisualStatesGallery.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SnapPointsCodeGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SnapPointsCodeGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SnapPointsCodeGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SnapPointsCodeGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SnapPointsGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SnapPointsGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SnapPointsGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SnapPointsGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/ItemsSpacingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/ItemsSpacingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/ItemsSpacingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/ItemsSpacingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/SpacingGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/SpacingGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/SpacingGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/SpacingGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/SpacingModifier.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/SpacingModifier.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SpacingGalleries/SpacingModifier.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpacingGalleries/SpacingModifier.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/SpanSetter.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpanSetter.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/SpanSetter.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/SpanSetter.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/TemplateCodeCollectionViewGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TemplateCodeCollectionViewGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/TemplateCodeCollectionViewGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TemplateCodeCollectionViewGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/TemplateCodeCollectionViewGridGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TemplateCodeCollectionViewGridGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/TemplateCodeCollectionViewGridGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TemplateCodeCollectionViewGridGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/TextCodeCollectionViewGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TextCodeCollectionViewGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/TextCodeCollectionViewGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TextCodeCollectionViewGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/CollectionView/TextCodeCollectionViewGridGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TextCodeCollectionViewGridGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/CollectionView/TextCodeCollectionViewGridGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/CollectionView/TextCodeCollectionViewGridGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/ContentViewGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ContentViewGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ContentViewGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ContentViewGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/DatePickerCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/DatePickerCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DatePickerCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DatePickerCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/DoubleTapGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/DoubleTapGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DoubleTapGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DoubleTapGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropBetweenLayouts.xaml b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropBetweenLayouts.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropBetweenLayouts.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropBetweenLayouts.xaml diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropBetweenLayouts.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropBetweenLayouts.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropBetweenLayouts.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropBetweenLayouts.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropEventArgs.xaml b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEventArgs.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropEventArgs.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEventArgs.xaml diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropEventArgs.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEventArgs.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropEventArgs.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEventArgs.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropEvents.xaml b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEvents.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropEvents.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEvents.xaml diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropEvents.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEvents.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropEvents.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropEvents.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/DragAndDropGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/DragAndDropGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/DragAndDropGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/DragAndDropGallery.cs diff --git a/src/Controls/tests/TestCases.HostApp/Elements/DynamicTapGestureGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/DynamicTapGestureGallery.cs new file mode 100644 index 000000000000..811b349be457 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Elements/DynamicTapGestureGallery.cs @@ -0,0 +1,42 @@ +namespace Maui.Controls.Sample +{ + public class DynamicTapGestureGallery : Microsoft.Maui.Controls.ContentView + { + public DynamicTapGestureGallery() + { + AutomationId = nameof(DynamicTapGestureGallery); + + var layout = new VerticalStackLayout { Margin = 10, Spacing = 10 }; + + var singleTapResults = new Label { AutomationId = "DynamicTapGestureResults", Text = "0" }; + var singleTapSurface = new Grid() + { + HeightRequest = 100, + WidthRequest = 200, + BackgroundColor = Microsoft.Maui.Graphics.Colors.AliceBlue, + Children = { new Label { Text = "DynamicTapSurface", AutomationId = "DynamicTapSurface" } } + }; + + var tapCount = 0; + + var singleTapRecognizer = new TapGestureRecognizer(); + singleTapRecognizer.Tapped += (sender, args) => { + tapCount++; + singleTapResults.Text = tapCount.ToString(); + + var dynamicTapRecognizer = new TapGestureRecognizer(); + dynamicTapRecognizer.Tapped += (sender, args) => + { + Console.WriteLine("DynamicTap"); + }; + singleTapSurface.GestureRecognizers.Add(dynamicTapRecognizer); + }; + singleTapSurface.GestureRecognizers.Add(singleTapRecognizer); + + layout.Add(singleTapSurface); + layout.Add(singleTapResults); + + Content = layout; + } + } +} \ No newline at end of file diff --git a/src/Controls/tests/TestCases/Elements/EditorCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/EditorCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/EditorCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/EditorCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/EntryCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/EntryCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/EntryCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/EntryCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/FrameCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/FrameCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/FrameCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/FrameCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/GestureRecognizerGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/GestureRecognizerGallery.cs similarity index 90% rename from src/Controls/tests/TestCases/Elements/GestureRecognizerGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/GestureRecognizerGallery.cs index a433ed2f3338..58fc058a9c12 100644 --- a/src/Controls/tests/TestCases/Elements/GestureRecognizerGallery.cs +++ b/src/Controls/tests/TestCases.HostApp/Elements/GestureRecognizerGallery.cs @@ -12,6 +12,7 @@ public GestureRecognizerGallery() Add(new PointerGestureRecognizerEvents()); Add(new DoubleTapGallery()); Add(new SingleTapGallery()); + Add(new DynamicTapGestureGallery()); } } } diff --git a/src/Controls/tests/TestCases/Elements/ImageButtonCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ImageButtonCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ImageButtonCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ImageButtonCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/ImageCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ImageCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ImageCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ImageCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEditorsPage.xaml b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEditorsPage.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEditorsPage.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEditorsPage.xaml diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEditorsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEditorsPage.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEditorsPage.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEditorsPage.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEntriesPage.xaml b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntriesPage.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEntriesPage.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntriesPage.xaml diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEntriesPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntriesPage.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEntriesPage.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntriesPage.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEntryNextEditorPage.xaml b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntryNextEditorPage.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEntryNextEditorPage.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntryNextEditorPage.xaml diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingEntryNextEditorPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntryNextEditorPage.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingEntryNextEditorPage.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingEntryNextEditorPage.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingGridGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingGridGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingGridPage.xaml b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridPage.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingGridPage.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridPage.xaml diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingGridPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridPage.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingGridPage.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingGridPage.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingNonScrollingPageLargeTitlesGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingNonScrollingPageLargeTitlesGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingNonScrollingPageLargeTitlesGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingNonScrollingPageLargeTitlesGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingNonScrollingPageSmallTitlesGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingNonScrollingPageSmallTitlesGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingNonScrollingPageSmallTitlesGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingNonScrollingPageSmallTitlesGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingScrollingPageLargeTitlesGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingScrollingPageLargeTitlesGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingScrollingPageLargeTitlesGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingScrollingPageLargeTitlesGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/KeyboardScrollingScrollingPageSmallTitlesGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingScrollingPageSmallTitlesGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/KeyboardScrollingScrollingPageSmallTitlesGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/KeyboardScrollingScrollingPageSmallTitlesGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/LabelCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/LabelCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/LabelCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/LabelCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/ListViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ListViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ListViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ListViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/PickerCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/PickerCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/PickerCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/PickerCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/PointerGestureRecognizerEvents.xaml b/src/Controls/tests/TestCases.HostApp/Elements/PointerGestureRecognizerEvents.xaml similarity index 100% rename from src/Controls/tests/TestCases/Elements/PointerGestureRecognizerEvents.xaml rename to src/Controls/tests/TestCases.HostApp/Elements/PointerGestureRecognizerEvents.xaml diff --git a/src/Controls/tests/TestCases/Elements/PointerGestureRecognizerEvents.xaml.cs b/src/Controls/tests/TestCases.HostApp/Elements/PointerGestureRecognizerEvents.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/PointerGestureRecognizerEvents.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Elements/PointerGestureRecognizerEvents.xaml.cs diff --git a/src/Controls/tests/TestCases/Elements/ProgressBarCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ProgressBarCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ProgressBarCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ProgressBarCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/RadioButtonCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/RadioButtonCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/RadioButtonCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/RadioButtonCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/ScrollViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/ScrollViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/ScrollViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/ScrollViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/SearchBarCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/SearchBarCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/SearchBarCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/SearchBarCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/SliderCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/SliderCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/SliderCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/SliderCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/StepperCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/StepperCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/StepperCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/StepperCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/SwipeViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/SwipeViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/SwipeViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/SwipeViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/SwitchCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/SwitchCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/SwitchCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/SwitchCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/TapGestureGallery.cs b/src/Controls/tests/TestCases.HostApp/Elements/TapGestureGallery.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/TapGestureGallery.cs rename to src/Controls/tests/TestCases.HostApp/Elements/TapGestureGallery.cs diff --git a/src/Controls/tests/TestCases/Elements/TimePickerCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/TimePickerCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/TimePickerCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/TimePickerCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/Elements/WebViewCoreGalleryPage.cs b/src/Controls/tests/TestCases.HostApp/Elements/WebViewCoreGalleryPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Elements/WebViewCoreGalleryPage.cs rename to src/Controls/tests/TestCases.HostApp/Elements/WebViewCoreGalleryPage.cs diff --git a/src/Controls/tests/TestCases/GenericValueConverter.cs b/src/Controls/tests/TestCases.HostApp/GenericValueConverter.cs similarity index 100% rename from src/Controls/tests/TestCases/GenericValueConverter.cs rename to src/Controls/tests/TestCases.HostApp/GenericValueConverter.cs diff --git a/src/Controls/tests/TestCases/Issues/Bugzilla28570.cs b/src/Controls/tests/TestCases.HostApp/Issues/Bugzilla28570.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Bugzilla28570.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Bugzilla28570.cs diff --git a/src/Controls/tests/TestCases/Issues/Bugzilla35127.cs b/src/Controls/tests/TestCases.HostApp/Issues/Bugzilla35127.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Bugzilla35127.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Bugzilla35127.cs diff --git a/src/Controls/tests/TestCases/Issues/Bugzilla41415.cs b/src/Controls/tests/TestCases.HostApp/Issues/Bugzilla41415.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Bugzilla41415.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Bugzilla41415.cs diff --git a/src/Controls/tests/TestCases/Issues/Bugzilla44461.cs b/src/Controls/tests/TestCases.HostApp/Issues/Bugzilla44461.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Bugzilla44461.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Bugzilla44461.cs diff --git a/src/Controls/tests/TestCases/Issues/Bugzilla49069.cs b/src/Controls/tests/TestCases.HostApp/Issues/Bugzilla49069.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Bugzilla49069.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Bugzilla49069.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewAdjustPeekAreaInsets.xaml b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewAdjustPeekAreaInsets.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewAdjustPeekAreaInsets.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewAdjustPeekAreaInsets.xaml diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewAdjustPeekAreaInsets.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewAdjustPeekAreaInsets.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewAdjustPeekAreaInsets.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewAdjustPeekAreaInsets.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewLoopNoFreeze.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewLoopNoFreeze.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewLoopNoFreeze.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewLoopNoFreeze.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewNoItemTemplate.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewNoItemTemplate.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewNoItemTemplate.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewNoItemTemplate.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewPositionVisibility.xaml b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewPositionVisibility.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewPositionVisibility.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewPositionVisibility.xaml diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewPositionVisibility.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewPositionVisibility.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewPositionVisibility.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewPositionVisibility.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewRemoveAt.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewRemoveAt.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewRemoveAt.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewRemoveAt.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewSetOrientation.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewSetOrientation.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewSetOrientation.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewSetOrientation.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewUpdateCurrentItem.xaml b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdateCurrentItem.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewUpdateCurrentItem.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdateCurrentItem.xaml diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewUpdateCurrentItem.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdateCurrentItem.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewUpdateCurrentItem.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdateCurrentItem.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewUpdatePosition.xaml b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdatePosition.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewUpdatePosition.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdatePosition.xaml diff --git a/src/Controls/tests/TestCases/Issues/CarouselViewUpdatePosition.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdatePosition.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CarouselViewUpdatePosition.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CarouselViewUpdatePosition.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/ClearGroupedNoCrash.cs b/src/Controls/tests/TestCases.HostApp/Issues/ClearGroupedNoCrash.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/ClearGroupedNoCrash.cs rename to src/Controls/tests/TestCases.HostApp/Issues/ClearGroupedNoCrash.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewBindingErrors.xaml b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewBindingErrors.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewBindingErrors.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewBindingErrors.xaml diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewBindingErrors.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewBindingErrors.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewBindingErrors.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewBindingErrors.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewDynamicallyLoad.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewDynamicallyLoad.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewDynamicallyLoad.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewDynamicallyLoad.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewItemsSourceTypes.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewItemsSourceTypes.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewItemsSourceTypes.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewItemsSourceTypes.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewItemsUpdatingScrollMode.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewItemsUpdatingScrollMode.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewItemsUpdatingScrollMode.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewItemsUpdatingScrollMode.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewTabbedPage.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewTabbedPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewTabbedPage.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewTabbedPage.cs diff --git a/src/Controls/tests/TestCases/Issues/CollectionViewVisibility.cs b/src/Controls/tests/TestCases.HostApp/Issues/CollectionViewVisibility.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/CollectionViewVisibility.cs rename to src/Controls/tests/TestCases.HostApp/Issues/CollectionViewVisibility.cs diff --git a/src/Controls/tests/TestCases/Issues/EmptyViewNoCrash.xaml b/src/Controls/tests/TestCases.HostApp/Issues/EmptyViewNoCrash.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/EmptyViewNoCrash.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/EmptyViewNoCrash.xaml diff --git a/src/Controls/tests/TestCases/Issues/EmptyViewNoCrash.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/EmptyViewNoCrash.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/EmptyViewNoCrash.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/EmptyViewNoCrash.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/GroupListViewHeaderIndexOutOfRange.cs b/src/Controls/tests/TestCases.HostApp/Issues/GroupListViewHeaderIndexOutOfRange.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/GroupListViewHeaderIndexOutOfRange.cs rename to src/Controls/tests/TestCases.HostApp/Issues/GroupListViewHeaderIndexOutOfRange.cs diff --git a/src/Controls/tests/TestCases/Issues/HiddenCollectionViewBind.cs b/src/Controls/tests/TestCases.HostApp/Issues/HiddenCollectionViewBind.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/HiddenCollectionViewBind.cs rename to src/Controls/tests/TestCases.HostApp/Issues/HiddenCollectionViewBind.cs diff --git a/src/Controls/tests/TestCases/Issues/HideSoftInputOnTappedPage.cs b/src/Controls/tests/TestCases.HostApp/Issues/HideSoftInputOnTappedPage.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/HideSoftInputOnTappedPage.cs rename to src/Controls/tests/TestCases.HostApp/Issues/HideSoftInputOnTappedPage.cs diff --git a/src/Controls/tests/TestCases/Issues/IsInvokeRequiredRaceCondition.cs b/src/Controls/tests/TestCases.HostApp/Issues/IsInvokeRequiredRaceCondition.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/IsInvokeRequiredRaceCondition.cs rename to src/Controls/tests/TestCases.HostApp/Issues/IsInvokeRequiredRaceCondition.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue10234.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue10234.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue10234.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue10234.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue10947.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue10947.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue10947.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue10947.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue10947.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue10947.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue10947.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue10947.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue11501.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue11501.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue11501.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue11501.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue12211.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue12211.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue12211.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue12211.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue12211.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue12211.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue12211.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue12211.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue12567.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue12567.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue12567.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue12567.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue14257.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue14257.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue14257.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue14257.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue14557.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue14557.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue14557.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue14557.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue14829.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue14829.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue14829.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue14829.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue15357.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue15357.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue15357.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue15357.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue15357.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue15357.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue15357.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue15357.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue15826.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue15826.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue15826.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue15826.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue15826.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue15826.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue15826.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue15826.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue16386.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue16386.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue16386.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue16386.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue16499.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue16499.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue16499.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue16499.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue16787.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue16787.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue16787.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue16787.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue16918.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue16918.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue16918.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue16918.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue16918.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue16918.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue16918.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue16918.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17022.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue17022.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17022.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17022.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue17022.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17022.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17022.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17022.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17347.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17347.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17347.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17347.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17400.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue17400.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17400.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17400.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue17400.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17400.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17400.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17400.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17453.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue17453.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17453.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17453.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue17453.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17453.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17453.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17453.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17490.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17490.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17490.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17490.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17610.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue17610.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17610.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17610.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue17610.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17610.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17610.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17610.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17642.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue17642.xaml similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17642.xaml rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17642.xaml diff --git a/src/Controls/tests/TestCases/Issues/Issue17642.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17642.xaml.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17642.xaml.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17642.xaml.cs diff --git a/src/Controls/tests/TestCases/Issues/Issue17694.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue17694.cs similarity index 100% rename from src/Controls/tests/TestCases/Issues/Issue17694.cs rename to src/Controls/tests/TestCases.HostApp/Issues/Issue17694.cs diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue18161.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue18161.xaml new file mode 100644 index 000000000000..762c497588c3 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue18161.xaml @@ -0,0 +1,24 @@ + + + + + +