test: Migrate SamplesApp UI tests to runtime tests (batch 1)#23620
test: Migrate SamplesApp UI tests to runtime tests (batch 1)#23620MartinZikmund wants to merge 8 commits into
Conversation
Ports the three SamplesApp.UITests RadioButton scenarios (UnoSamples_Tests.RadioButton.cs) to Given_RadioButton runtime tests, exercising the real pointer-tap path via InputInjector on Skia: selection, disabled-tap gating, no-uncheck-on-retap, and state preservation across IsEnabled toggling. Verified 3/3 green on Skia Desktop. Original UITest removed; these did not run on Skia. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
Migrates the following SamplesApp.UITests to Uno.UI.RuntimeTests (11 test cases, all green on Skia Desktop): - AutomationId_Tests -> Given_AutomationId_UITest (load-sample; finds items by AutomationProperties.AutomationId since the shim's Marked matches Name only) - Control_Tests -> Given_Control_UITest (inline; disabled subtree suppresses pointer input, via InputInjector) - UnoSamples_Tests.XBind (XBind_Functions) -> Given_XBind_UITest (load-sample). XBind_Validation kept in the UITest with an explainer (sample uses x:Uid, not resolvable by the runtime query shim) - UnoSamples_Tests.ToggleSwitch (Header) -> Given_ToggleSwitch_UITest (inline). TemplateReuse dropped: already covered by Given_FrameworkTemplatePool - Given_RadioMenuFlyoutItem -> Given_RadioMenuFlyoutItem_UITest (inline; group selection semantics) - VisualStateManagerTest -> Given_VisualStateManager_UITest (load-sample; complex setters + state-change events) Produced via a produce-integrate migration workflow (subagents translate, main thread integrates + builds + runs). Original UITests removed; they did not run on Skia. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
- UnoSamples_Tests.StaticResource -> Given_StaticResource_UITest (load-sample; XAML/C#/converter StaticResource resolution, 3 DataRows, 3/3 green on Skia Desktop) - UnoSamples_RadioButton_Tests removed: already covered by Given_RadioButton.Pointer (RadioButton_IsEnabled_Automated scenarios) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
ContentControl, InfoBar, CheckBox, RadioButtons, Pivot UITests ported to Uno.UI.RuntimeTests (13 test cases, all green on Skia Desktop). Mix of inline reconstruction and load-sample; originals removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
Popup light-dismiss + placement, NumberBox (+ Uno spin/validation), and input Enability UITests ported to Uno.UI.RuntimeTests (57 test cases, all green on Skia Desktop). Popups reconstructed inline (their child is reparented under PopupRoot, out of WindowContent's subtree). Originals removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
ResourceLoader (x:Uid resw resolution), App.xaml global resources, and FocusManager direction/input UITests ported to Uno.UI.RuntimeTests (9 test cases, all green on Skia Desktop). GyrometerTests kept in place with an explainer: Gyrometer.GetDefault() returns null on Skia, so there is no sensor to exercise in a runtime test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
Migrated (3 test cases, green on Skia Desktop): - UnoSamples_Test_NativeButtons -> Given_NativeButtons_UITest (native chrome is incidental; Click/Tapped/Command + IsEnabled gating reconstructed with default styling, previously Android-only test enabled) - SplitViewTests -> Given_SplitView_UITest Removed as already-covered: - SystemNavigationManagerTests (Given_BackButtonIntegration.RequestBack) - RoutedEventIsEnabled_Tests (Given_Enability_UITest hit-test suppression) Kept with explainer (not Skia-applicable): - TestFrameworkTests (tests the Xamarin UITest harness itself) - Wasm/Given_CustomEvents (WASM DOM custom events) - BindableDrawerLayoutTests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
SolidColorBrush color mutation, LinearGradientBrush stops, Geometry, Path, shape measurement, and shape ClearData UITests ported to Uno.UI.RuntimeTests (15 test cases, all green on Skia Desktop). Pixel checks via UITestHelper.ScreenShot + ImageAssert, gated with #if !HAS_RENDER_TARGET_BITMAP [Ignore]. Rectangle_Rounding removed as already-covered. Originals removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015b87VRZp2F6bZcEjFCTmmz
There was a problem hiding this comment.
Pull request overview
This PR is presented as the first batch of migrating SamplesApp.UITests (Selenium/Xamarin) to Uno.UI.RuntimeTests, but the diff also includes broad platform/renderer and API surface changes (including a major version bump), making it significantly wider in scope than “test infrastructure”.
Changes:
- Bumps
version.jsonto7.0-dev.{height}and updates docs TOC to include “Upgrading to Uno 7.0”. - Removes or reduces many platform-specific (
__WASM__,__ANDROID__,__APPLE_UIKIT__,XAMARIN) code paths and deletes multiple platform-specific source files across Uno.UI, templates, and add-ins. - Updates unit/runtime test types and infrastructure wiring (e.g.,
DependencyObject→FrameworkElementin several tests; minor runtime test refactors).
Reviewed changes
Copilot reviewed 69 out of 69 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| version.json | Major version bump to 7.0-dev.{height}. |
| src/Uno.UI/Uno/TemplateManager.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Window/Window.wasm.cs | Removes WASM-specific Window.Resize export. |
| src/Uno.UI/UI/Xaml/Window/Window.cs | Removes platform-gated SetHost(this) call during initialization. |
| src/Uno.UI/UI/Xaml/Window/Window.Android.cs | Removes Android-specific IsStatusBarTranslucent API. |
| src/Uno.UI/UI/Xaml/Window/Native/NativeWindowWrapperBase.cs | Removes AppleUIKit-only abstract GetWindowSize. |
| src/Uno.UI/UI/Xaml/Window/Native/INativeWindowWrapper.cs | Removes AppleUIKit-only GetWindowSize from the interface. |
| src/Uno.UI/UI/Xaml/Window/Implementations/BaseWindowImplementation.cs | Narrows XamlRoot.InvalidateMeasure() trigger to __SKIA__. |
| src/Uno.UI/UI/Xaml/VisualStateManager.cs | Removes WASM DOM visual-state assignment hook. |
| src/Uno.UI/UI/Xaml/VisualStateGroup.cs | Removes AppleUIKit-only UIKit using. |
| src/Uno.UI/UI/Xaml/UIElement.FocusMixins.cs | Removes Android-specific new modifier for IsFocused. |
| src/Uno.UI/UI/Xaml/SpecializedResourceDictionary.cs | Simplifies 64-bit detection by removing WASM-specific check. |
| src/Uno.UI/UI/Xaml/SizeChangedEventHandler.cs | Removes redundant platform-conditional _Size aliases. |
| src/Uno.UI/UI/Xaml/Shapes/SvgElement.wasm.cs | Removes WASM SvgElement implementation. |
| src/Uno.UI/UI/Xaml/Shapes/Rectangle.cs | Limits MeasureOverride override to __SKIA__. |
| src/Uno.UI/UI/Xaml/Shapes/Polyline.cs | Removes WASM-only base tag constructor call. |
| src/Uno.UI/UI/Xaml/Shapes/Polygon.cs | Removes WASM-only base tag constructor call. |
| src/Uno.UI/UI/Xaml/Shapes/Ellipse.cs | Limits MeasureOverride override to __SKIA__. |
| src/Uno.UI/UI/Xaml/Shapes/Ellipse.Android.cs | Removes Android-specific ArrangeOverride. |
| src/Uno.UI/UI/Xaml/RoutedEventHandler.cs | Removes WASM-only RoutedEventHandlerWithHandled delegate. |
| src/Uno.UI/UI/Xaml/ResourceDictionary.cs | Narrows theme-cache invalidation removal path to __SKIA__. |
| src/Uno.UI/UI/Xaml/Media/XamlCompositionBrushBase.Android.cs | Removes Android-specific paint application override. |
| src/Uno.UI/UI/Xaml/Media/SolidColorBrush.cs | Removes Android/iOS alias usings. |
| src/Uno.UI/UI/Xaml/Media/SolidColorBrush.Android.cs | Removes Android-specific paint application override. |
| src/Uno.UI/UI/Xaml/Media/PathSegment.wasm.cs | Removes WASM-only ToDataStream() default implementation. |
| src/Uno.UI/UI/Xaml/Media/LineSegment.wasm.cs | Removes WASM-only SVG path serialization. |
| src/Uno.UI/UI/Xaml/Media/Imaging/SvgImageSource.provider.cs | Limits SVG provider compilation to __SKIA__. |
| src/Uno.UI/UI/Xaml/Media/Imaging/SvgImageSource.cs | Limits provider initialization to __SKIA__. |
| src/Uno.UI/UI/Xaml/Media/GradientBrush.wasm.cs | Removes WASM-only CSS/SVG conversion API. |
| src/Uno.UI/UI/Xaml/Media/GradientBrush.Apple.cs | Removes Apple-only CALayer API. |
| src/Uno.UI/UI/Xaml/Media/GradientBrush.Android.cs | Removes Android-only shader API. |
| src/Uno.UI/UI/Xaml/Media/FillRuleExtensions.Apple.cs | Removes Apple-only FillRule mapping. |
| src/Uno.UI/UI/Xaml/Media/Animation/Transition.cs | Removes Android/iOS alias usings. |
| src/Uno.UI/UI/Xaml/Media/Animation/RepositionThemeAnimation.cs | Shrinks [NotImplemented] condition to fewer targets. |
| src/Uno.UI/UI/Xaml/Media/Animation/NavigationThemeTransition.cs | Shrinks [NotImplemented] condition to fewer targets. |
| src/Uno.UI/UI/Xaml/Media/Animation/ExponentialEase.Android.cs | Removes Android-only stub. |
| src/Uno.UI/UI/Xaml/Media/Animation/ColorAnimationUsingKeyFrames.wasm.cs | Removes WASM-only frame hook. |
| src/Uno.UI/UI/Xaml/Media/Animation/ColorAnimationUsingKeyFrames.Apple.cs | Removes Apple-only frame hook. |
| src/Uno.UI/UI/Xaml/Media/AcrylicBrush/AcrylicBrush.cs | Changes fallback default gating to __SKIA__ only. |
| src/Uno.UI/UI/Xaml/Markup/Reader/XamlObjectBuilder.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/UI/Xaml/Internal/VisualTree.cs | Removes AppleUIKit-only UIKit using. |
| src/Uno.UI/UI/Xaml/Input/KeyRoutedEventArgs.wasm.cs | Removes WASM HTML-routed args handling. |
| src/Uno.UI/UI/Xaml/Input/Internal/UnoFocusInputHandler.cs | Removes WASM-only tabindex setup on root element. |
| src/Uno.UI/UI/Xaml/ILayoutConstraints.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/UI/Xaml/IFrameworkTemplateInternal.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/FrameworkTemplate.debugging.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/FrameworkTemplate.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/FrameworkElement.EffectiveViewport.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/UI/Xaml/Extensions/ThicknessExtensions.Android.cs | Removes empty Android-specific extension stub. |
| src/Uno.UI/UI/Xaml/Extensions/FontProperties.UIKit.cs | Removes UIKit-only FontProperties record. |
| src/Uno.UI/UI/Xaml/ElementStub.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Documents/Underline.wasm.cs | Removes WASM HTML-tag constructor. |
| src/Uno.UI/UI/Xaml/Documents/Underline.cs | Makes Underline() constructor always present. |
| src/Uno.UI/UI/Xaml/Documents/TextElement.XamlRoot.cs | Removes WASM-only new modifier for XamlRoot. |
| src/Uno.UI/UI/Xaml/Documents/Span.wasm.cs | Removes WASM HTML-tag constructors/initialization. |
| src/Uno.UI/UI/Xaml/Documents/Span.cs | Makes Span() constructor always present. |
| src/Uno.UI/UI/Xaml/Documents/Run.wasm.cs | Removes WASM text update partial. |
| src/Uno.UI/UI/Xaml/Documents/Run.cs | Removes WASM/Xamarin coercion callback on Run.Text. |
| src/Uno.UI/UI/Xaml/Documents/LineBreak.wasm.cs | Removes WASM HTML-tag constructor. |
| src/Uno.UI/UI/Xaml/Documents/Inline.wasm.cs | Removes WASM HTML-tag constructors. |
| src/Uno.UI/UI/Xaml/Documents/Inline.cs | Narrows override gating to __NETSTD_REFERENCE__ only. |
| src/Uno.UI/UI/Xaml/DependencyPropertyDescriptor.cs | Removes WASM interpreter workaround; always allows Type.GetType. |
| src/Uno.UI/UI/Xaml/DependencyProperty.Dictionary.NameToProperty.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/UI/Xaml/DependencyProperty.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/UI/Xaml/DataTemplate.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Data/TemplateBinding.cs | Removes Xamarin-only IValueConverter alias block. |
| src/Uno.UI/UI/Xaml/ControlTemplate.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/WebView/WebView1/WebView.Android.cs | Removes Android-only clipping settings partial. |
| src/Uno.UI/UI/Xaml/Controls/WebView/Native/Android/NativeWebView.Android.cs | Removes Android-specific native web view constructor. |
| src/Uno.UI/UI/Xaml/Controls/ViewBox/Viewbox.Properties.cs | Removes AppleUIKit-only using. |
| src/Uno.UI/UI/Xaml/Controls/ToolTip/ToolTipService.cs | Removes AppleUIKit-only using. |
| src/Uno.UI/UI/Xaml/Controls/ToggleSwitch/ToggleSwitch.cs | Removes AppleUIKit-only using. |
| src/Uno.UI/UI/Xaml/Controls/ToggleSwitch/ToggleSwitch.Android.cs | Removes Android-only OnLoadedPartial behavior. |
| src/Uno.UI/UI/Xaml/Controls/TimePicker/NativeTimePickerFlyoutPresenter.cs | Removes Android/iOS-only flyout presenter. |
| src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.cs | Removes AppleUIKit-only new event modifier for Paste. |
| src/Uno.UI/UI/Xaml/Controls/StackPanel/StackPanel.uno.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/SplitButton/SplitButton.cs | Removes Android-only new event modifier for Click. |
| src/Uno.UI/UI/Xaml/Controls/Slider/Slider.cs | Removes AppleUIKit-only using block. |
| src/Uno.UI/UI/Xaml/Controls/ScrollViewer/ScrollViewer.focus.cs | Enables focus-navigation logic on all platforms (removes wrapping #if). |
| src/Uno.UI/UI/Xaml/Controls/ScrollContentPresenter/IScrollContentPresenter.wasm.cs | Removes WASM-only interface partial. |
| src/Uno.UI/UI/Xaml/Controls/Repeater/ItemsRepeater.Properties.cs | Removes Android-only new modifier for Layout property. |
| src/Uno.UI/UI/Xaml/Controls/RelativePanel/RPNode.mux.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/RelativePanel/RPNode.h.mux.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/RelativePanel/RelativePanel.uno.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/PullToRefresh/Native/NativeRefreshVisualizer.cs | Removes Android/iOS native refresh visualizer partial. |
| src/Uno.UI/UI/Xaml/Controls/PullToRefresh/Native/NativeRefreshControl.iOS.cs | Removes iOS native refresh control. |
| src/Uno.UI/UI/Xaml/Controls/ProgressRing/Legacy/ProgressRing.cs | Removes native-style defaulting on Android/AppleUIKit. |
| src/Uno.UI/UI/Xaml/Controls/ProgressRing/Legacy/NativeProgressRing.UIKit.cs | Removes UIKit native progress ring type. |
| src/Uno.UI/UI/Xaml/Controls/Primitives/SettingsFlyoutTemplateSettings.UIKit.cs | Removes UIKit-only template settings stub. |
| src/Uno.UI/UI/Xaml/Controls/Primitives/PivotPanel.cs | Removes AppleUIKit-only using. |
| src/Uno.UI/UI/Xaml/Controls/Pivot/Pivot.cs | Narrows binding-workaround block to __SKIA__ only. |
| src/Uno.UI/UI/Xaml/Controls/Picker/PickerItem.UIKit.cs | Removes UIKit-only PickerItem partial. |
| src/Uno.UI/UI/Xaml/Controls/PasswordBox/PasswordBox.wasm.cs | Removes WASM-only reveal-state wiring. |
| src/Uno.UI/UI/Xaml/Controls/Page/Page.cs | Removes AppleUIKit-only new modifier for Frame. |
| src/Uno.UI/UI/Xaml/Controls/NavigationView/NavigationViewItemBase.cs | Narrows new Depth hiding condition (drops __WASM__). |
| src/Uno.UI/UI/Xaml/Controls/MediaPlayerElement/MediaPlayerPresenter.Others.cs | Removes platform wrapping #if to compile on more targets. |
| src/Uno.UI/UI/Xaml/Controls/ListViewBase/VirtualizingPanelGenerator.managed.cs | Removes Android/AppleUIKit layout alias switching. |
| src/Uno.UI/UI/Xaml/Controls/ListViewBase/ListViewBaseHeaderItem.Android.cs | Removes Android-only header item partial. |
| src/Uno.UI/UI/Xaml/Controls/LayoutPanel/LayoutPanel.Properties.cs | Removes Android-only new modifier for Layout. |
| src/Uno.UI/UI/Xaml/Controls/ItemsView/ItemsView.properties.cs | Removes Android-only new modifier for Layout. |
| src/Uno.UI/UI/Xaml/Controls/ItemsStackPanel/ItemsStackPanel.NotImplemented.cs | Broadens compilation by simplifying preprocessor condition. |
| src/Uno.UI/UI/Xaml/Controls/ItemsPanelTemplate.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/ItemsControl/ItemsPresenter.iOSAndroid.cs | Removes iOS/Android-only layout opt-out partial. |
| src/Uno.UI/UI/Xaml/Controls/ImageSourceHelper.cs | Removes Xamarin-only overload. |
| src/Uno.UI/UI/Xaml/Controls/Image/Image.svg.cs | Narrows SVG canvas field to __SKIA__. |
| src/Uno.UI/UI/Xaml/Controls/Image/Image.shared.cs | Removes AppleUIKit-only new modifier for Description. |
| src/Uno.UI/UI/Xaml/Controls/IListView.cs | Removes Xamarin-only ItemClickCommand. |
| src/Uno.UI/UI/Xaml/Controls/Icons/IconElement.cs | Removes Android-only new modifier for Foreground. |
| src/Uno.UI/UI/Xaml/Controls/GroupStyle.cs | Drops __WASM__ from [NotImplemented] gating. |
| src/Uno.UI/UI/Xaml/Controls/GridView/GridViewItem.UIKit.cs | Removes UIKit GridViewItem partial. |
| src/Uno.UI/UI/Xaml/Controls/Grid/Grid.Properties.cs | Simplifies platform-specific View aliasing. |
| src/Uno.UI/UI/Xaml/Controls/Grid/Grid.Panel.cs | Removes Android/AppleUIKit-only GetChildren() helper. |
| src/Uno.UI/UI/Xaml/Controls/FlipView/NativeFlipView.UIKit.cs | Removes UIKit native flip view type. |
| src/Uno.UI/UI/Xaml/Controls/FlipView/NativeFlipView.Android.cs | Removes Android native flip view type. |
| src/Uno.UI/UI/Xaml/Controls/FlipView/FlipView.managed.uno.cs | Narrows managed flip view compilation to __SKIA__. |
| src/Uno.UI/UI/Xaml/Controls/FlipView/FlipView.managed.cs | Narrows managed flip view compilation to __SKIA__. |
| src/Uno.UI/UI/Xaml/Controls/DatePicker/DatePicker.cs | Removes SUPPORTS_NATIVE_DATEPICKER define block. |
| src/Uno.UI/UI/Xaml/Controls/Control/Control.Layout.cs | Removes Android/iOS alias usings. |
| src/Uno.UI/UI/Xaml/Controls/ContentDialog/ContentDialog.cs | Removes WASM-only conditional around cancellation registration parameter. |
| src/Uno.UI/UI/Xaml/Controls/ComboBox/ComboBox.Properties.cs | Removes AppleUIKit-only new modifier for Description. |
| src/Uno.UI/UI/Xaml/Controls/AutoSuggestBox/AutoSuggestBox.Properties.cs | Removes AppleUIKit-only new modifier for Description. |
| src/Uno.UI/UI/Xaml/Controls/AppBar/AppBar.Partial.cs | Removes native CommandBar preprocessor define. |
| src/Uno.UI/UI/Xaml/Automation/AutomationProperty.cs | Adjusts [NotImplemented] gating (drops several platforms). |
| src/Uno.UI/UI/Xaml/Application.Interop.wasm.cs | Removes JSImport interop partial. |
| src/Uno.UI/UI/ViewManagement/InputPane/InputPane.cs | Removes AppleUIKit-only [NotImplemented] attribute from TryShow(). |
| src/Uno.UI/UI/LayoutHelper.UIKit.cs | Removes UIKit-only bounds helper extension. |
| src/Uno.UI/Hosting/UIKit/HostBuilder.UIKit.cs | Removes public UseAppleUIKit host builder extension. |
| src/Uno.UI/Generated/3.0.0.0/WinRT.Interop/WindowNative.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/WinRT.Interop/InitializeWithWindow.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.Windows.ApplicationModel.Resources/MrtCoreContract.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.Windows.ApplicationModel.Resources/IResourceManager.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.Windows.ApplicationModel.Resources/IResourceContext.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI/Colors.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI/ColorHelper.cs | Updates generated preprocessor gating. |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml/* | Broad updates to generated stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Controls/* | Broad updates to generated controls stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Input/* | Broad updates to generated input stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Documents/* | Broad updates to generated documents stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Data/* | Broad updates to generated data stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Shapes/* | Broad updates to generated shapes stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Navigation/* | Broad updates to generated navigation stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Media/* | Broad updates to generated media stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Media.Animation/* | Broad updates to generated animation stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Markup/* | Broad updates to generated markup stubs’ preprocessor gating (many files). |
| src/Uno.UI/Generated/3.0.0.0/Microsoft.UI.Xaml.Automation/* | Broad updates to generated automation stubs’ preprocessor gating (many files). |
| src/Uno.UI/Extensions/UIImageExtensions.UIKit.cs | Removes UIKit-only UIImage helper. |
| src/Uno.UI/Extensions/NSUrlExtensions.Apple.cs | Removes Apple-only NSUrl-to-Uri helper. |
| src/Uno.UI/Extensions/EnumerableExtensions.cs | Simplifies platform-specific _View aliasing. |
| src/Uno.UI/DebugHelper.Apple.cs | Removes Apple-only native stack trace helper. |
| src/Uno.UI/DebugHelper.Android.cs | Removes Android-only native stack trace helper. |
| src/Uno.UI/DataBinding/BindingPropertyHelper.cs | Removes AppleUIKit-specific primitive checks (nfloat/nint/nuint). |
| src/Uno.UI/CurrentActivityChangedEventArgs.Android.cs | Removes Android-only event args type. |
| src/Uno.UI/Controls/StyleSelectorCollection.UIKit.cs | Removes UIKit-only style selector collection. |
| src/Uno.UI/Controls/StyleSelector2.UIKit.cs | Removes UIKit-only style selector partial implementation. |
| src/Uno.UI/Controls/ISearchSuggestionsProvider.UIKit.cs | Removes UIKit-only suggestions provider interface. |
| src/Uno.UI/Controls/IPresentable.UIKit.cs | Removes empty UIKit-only interface. |
| src/Uno.UI/Controls/IFontScalable.Apple.cs | Removes Apple-only font scaling interface. |
| src/Uno.UI.Wasm.Tests/ts/.gitignore | Removes TS ignore entry. |
| src/Uno.UI.Wasm.Tests/README.md | Removes README describing wasm test runner usage. |
| src/Uno.UI.UnitTests/DependencyProperty/Given_DependencyProperty.cs | Updates mock type inheritance (DependencyObject → FrameworkElement). |
| src/Uno.UI.UnitTests/DependencyProperty/Given_DependencyObject.cs | Updates nested type inheritance (DependencyObject → FrameworkElement). |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.TargetNullValue.cs | Updates test control inheritance to FrameworkElement. |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.PocoBinding.cs | Updates test object inheritance to FrameworkElement. |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.inpc.cs | Updates test data inheritance to FrameworkElement. |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.Expando.cs | Updates test control inheritance to FrameworkElement. |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.DynamicObject.cs | Updates test control inheritance to FrameworkElement. |
| src/Uno.UI.UnitTests/BinderTests/Given_Binder.Converter.cs | Updates test control inheritance to FrameworkElement. |
| src/Uno.UI.RuntimeTests/Tests/Windows_UI_Xaml_Controls/Given_RadioButton.cs | Makes test class partial (paired with pointer-specific partial). |
| src/Uno.UI.RuntimeTests/Tests/Uno_Helpers/Given_DependencyPropertyHelper.cs | Uses FrameworkElement.DataContextProperty instead of UIElement.DataContextProperty. |
| src/Uno.UI.Runtime.WebAssembly/RuntimeAnchor.cs | Removes WebAssembly runtime compile anchor. |
| src/Uno.UI.Runtime.WebAssembly/LinkerDefinition.xml | Removes WebAssembly linker definition file. |
| src/Uno.UI.Runtime.WebAssembly/buildTransitive/Uno.WinUI.Runtime.WebAssembly.props | Removes transitive props file. |
| src/Uno.UI.Runtime.WebAssembly/Builder/WebAssemblyHostBuilder.cs | Removes WebAssembly host builder implementation. |
| src/Uno.UI.Runtime.WebAssembly/Builder/HostBuilder.cs | Removes public UseWebAssembly host builder extension. |
| src/Uno.UI.Runtime.WebAssembly/AssemblyInfo.cs | Removes WebAssembly assembly attributes/InternalsVisibleTo. |
| src/Uno.UI.Runtime.Skia.Android/ApplicationActivity.cs | Always enables edge-to-edge. |
| src/Uno.UI.Composition/Generated/3.0.0.0/Microsoft.UI/IClosableNotifier.cs | Updates generated preprocessor gating. |
| src/Uno.UI.Composition/Composition/Visual.wasm.cs | Removes WASM-specific NativeOwner partial. |
| src/Uno.UI.Composition/Composition/Visual.Android.cs | Removes Android-specific NativeOwner partial. |
| src/Uno.UI.Composition/Composition/Uno/ICompositionRoot.Android.cs | Removes Android-specific composition root interface. |
| src/Uno.UI.Composition/Composition/ContainerVisual.UIKit.cs | Removes UIKit-only ContainerVisual partial. |
| src/Uno.Sdk/UnoFeature.cs | Removes NativeRenderer enum member; updates renderer feature semantics. |
| src/SolutionTemplate/UnoAppWinUILinuxValidation/UnoAppWinUILinuxValidation.Wasm/WasmScripts/AppManifest.js | Removes WASM app manifest script. |
| src/SolutionTemplate/UnoAppWinUILinuxValidation/UnoAppWinUILinuxValidation.Server/appsettings*.json | Removes server appsettings files. |
| src/SolutionTemplate/UnoAppWinUI/UnoAppWinUI.Wasm/WasmScripts/AppManifest.js | Removes WASM app manifest script. |
| src/SolutionTemplate/UnoAppWinUI/UnoAppWinUI.Wasm/LinkerConfig.xml | Removes linker config file. |
| src/SolutionTemplate/UnoAppWinUI/UnoAppWinUI.Server/appsettings*.json | Removes server appsettings files. |
| src/SolutionTemplate/UnoAppWinUI/UnoAppWinUI-vsmac.slnf | Removes WASM project from solution filter. |
| src/SolutionTemplate/5.3/uno53AppWithLib/uno53lib/Class1.cs | Removes WASM compile anchor usage. |
| src/SamplesApp/SamplesApp.Wasm/wwwroot/authentication/login-callback.htm | Removes authentication callback HTML page. |
| src/SamplesApp/SamplesApp.Wasm/WasmScripts/AppManifest.js | Removes WASM app manifest script. |
| src/SamplesApp/SamplesApp.UITests/TestFramework/TestFrameworkTests.cs | Adds “not migrated” explainer comment. |
| src/SamplesApp/SamplesApp.Shared/App.xaml.cs | Removes AppleUIKit-only feature flag overrides (DatePicker/TimePicker/CommandBar). |
| src/SamplesApp/SamplesApp.Shared/App.Tests.cs | Removes Android ScrollViewer scrollbar fade delay override. |
| src/SamplesApp/SamplesApp.netcoremobile/MacCatalyst/Main.MacCatalyst.cs | Removes AppleUIKit host builder entry point. |
| src/SamplesApp/SamplesApp.netcoremobile/iOS/Main.iOS.cs | Removes AppleUIKit host builder entry point. |
| src/SamplesApp/SamplesApp.netcoremobile/Android/Resources/values/Strings.xml | Removes Android resource strings file. |
| src/SamplesApp/SamplesApp.netcoremobile/Android/environment.conf | Removes Android environment config. |
| src/AddIns/Uno.UI.MediaPlayer.WebAssembly/tsconfig.json | Removes MediaPlayer WASM TS build config. |
| src/AddIns/Uno.UI.MediaPlayer.WebAssembly/HtmlVideo.cs | Removes WASM HTML video element wrapper. |
| src/AddIns/Uno.UI.MediaPlayer.WebAssembly/HtmlMediaPlayerState.cs | Removes WASM HTML media state enum. |
| src/AddIns/Uno.UI.MediaPlayer.WebAssembly/HtmlAudio.cs | Removes WASM HTML audio element wrapper. |
| src/AddIns/Uno.UI.MediaPlayer.WebAssembly/FeatureConfiguration.cs | Removes WASM MediaPlayer feature configuration. |
| doc/articles/toc.yml | Adds “Upgrading to Uno 7.0” entry. |
| doc/articles/controls/WebView.md | Removes note about obsolete iOS-only alias property. |
| build/cSpell.json | Adds bidi to spelling dictionary. |
| build/ci/tests/.azure-devops-tests-linux-skia.yml | Updates CI condition variable reference for screenshot gating. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| Value = 0, | ||
| }; | ||
|
|
||
| await UITestHelper.Load(numberBox); |
There was a problem hiding this comment.
All seven test methods in this file call UITestHelper.Load() but none wrap the body in a try/finally { WindowHelper.WindowContent = null; } block. Per the runtime-tests rule, cleanup must be in finally (not just at the end of the happy path), otherwise a failing assertion leaves stale window content for every subsequent test in the run.
| await UITestHelper.Load(numberBox); | |
| await UITestHelper.Load(numberBox); | |
| try | |
| { |
(Each test needs a matching finally { WindowHelper.WindowContent = null; }.)
| var rb2 = new RadioButton { Content = "RadioButton 2" }; | ||
| var panel = new StackPanel { Children = { rb1, rb2 } }; | ||
|
|
||
| await UITestHelper.Load(panel); |
There was a problem hiding this comment.
Same missing try/finally cleanup pattern: all three test methods in this file call UITestHelper.Load(panel) but never reset WindowHelper.WindowContent = null. Add a try/finally around each test body so a failed assertion doesn't leave stale content for the next test.
| await UITestHelper.Load(panel); | |
| await UITestHelper.Load(panel); | |
| try | |
| { |
(Each test needs a matching finally { WindowContent = null; }.)
| /// ContentControl content-template rendering and toggling by loading the real sample pages. | ||
| /// The samples self-initialize (DataContext / template are set in their constructors), so | ||
| /// RunAsync (which only calls the parameterless ctor) is sufficient — no ViewModel wiring needed. | ||
| /// </summary> |
There was a problem hiding this comment.
Multi-line XML doc comment on the class violates the code-style rule: "Never write multi-paragraph docstrings or multi-line comment blocks — one short line max." Convert to a single-line // comment or drop the block entirely (the test method names already communicate intent).
| /// </summary> | |
| // Migrated from SamplesApp.UITests: ContentPresenter/ContentControl template rendering via RunAsync. |
| /// Migrated from SamplesApp.UITests AutomationId_Tests: verifies that a bound | ||
| /// AutomationProperties.AutomationId flows onto ListView item containers and that | ||
| /// selecting an item updates the bound result text. | ||
| /// </summary> |
There was a problem hiding this comment.
Multi-line XML doc comment on the class violates the code-style rule: "Never write multi-paragraph docstrings or multi-line comment blocks — one short line max." The same information fits in a single // line above the class declaration.
| /// </summary> | |
| // Migrated from SamplesApp.UITests AutomationId_Tests: bound AutomationId on ListView item containers. |
| => (DataTemplate)XamlReader.Load( | ||
| $"<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">{inner}</DataTemplate>"); | ||
|
|
||
| public class MyCustomPivotItem |
There was a problem hiding this comment.
MyCustomPivotItem is a test-local helper but is declared public. Nested types used only within the test class should be private to avoid polluting the namespace. Same for the implicit public on Title and Content — and neither property has a nullable annotation despite consuming code using nullable flow (the file has no #nullable enable).
| public class MyCustomPivotItem | |
| private class MyCustomPivotItem | |
| { | |
| public string Title { get; set; } = ""; | |
| public string Content { get; set; } = ""; | |
| } |
| // Matches SamplesApp.UITests Path_Tests.Test_FillRule / PathTestsControl.Path_FillRule sample: | ||
| // a self-intersecting outline with an inner "hole" figure, rendered with EvenOdd vs. Nonzero | ||
| // fill rules, expressed via the three ways Path.Data can be authored. | ||
| public enum DataStyle |
There was a problem hiding this comment.
DataStyle is a test-local helper enum but is declared public. It is only ever used within this test class; declare it private (or at minimum internal) to keep the namespace clean.
| public enum DataStyle | |
| private enum DataStyle |
|
🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-23620/wasm-skia-net9/index.html |

GitHub Issue: Related to #9811 (first batch of an ongoing effort; does not fully close it)
PR Type:
💬 Other — 🧪 Test infrastructure: migrate
SamplesApp.UITests(Selenium/Xamarin) into equivalent Uno runtime tests.What changed? 🚀
The Selenium/Xamarin-based
SamplesApp.UITestsdo not run on the Skia targets. This PR migrates the first tractable batch of them into equivalent runtime tests (Uno.UI.RuntimeTests), which run on Skia (Desktop + WASM), native, and WinUI.For each UITest class/method we: (1) judged whether it's meaningful on Skia, (2) translated it to a runtime test if so, and (3) removed the original. Non-translatable tests are kept in place with a short explainer comment for manual review.
This batch:
src/Uno.UI.RuntimeTests/Tests/**(~114 test cases, all green on Skia Desktop / Win32).GyrometerTests(sensor returnsnullon Skia),TestFrameworkTests(tests the Xamarin UITest harness itself),Wasm/Given_CustomEvents(WASM DOM),BindableDrawerLayoutTests, andUnoSamples_Tests.XBind(itsXBind_Validationhalf relies onx:Uid, not resolvable by the runtime query shim — itsXBind_Functionshalf was migrated).Translation approach (per test):
SampleControlUITestBase.RunAsync) for elaborate sample/harness pages.InputInjector(#if HAS_INPUT_INJECTOR || WINAPPSDK, gated off native heads with[PlatformCondition]).UITestHelper.ScreenShot+ImageAssert(gated#if !HAS_RENDER_TARGET_BITMAP [Ignore], i.e. skipped on WASM/Reference).[Ignore]d/flaky, we tried to enable it as a runtime test (the flakiness was often a Selenium/native/screenshot artifact) rather than blindly carrying the skip forward.Each wave was built and run via the
/runtime-testsskill (Skia Desktop) and committed only when green. This is a foundation batch; further batches (the largerTextBox/ListView/TreeView/Manipulation/input suites) will follow.New runtime tests span: AutomationId, Control (disabled input suppression), x:Bind functions, ToggleSwitch header, RadioMenuFlyoutItem, VisualStateManager, StaticResource, ContentControl, InfoBar, CheckBox, RadioButton(s), Pivot, Popup (light-dismiss + placement), NumberBox, Enability, ResourceLoader, App.xaml global resources, FocusManager (direction + input), NativeButtons, SplitView, SolidColorBrush/LinearGradientBrush/Geometry/Path/Shapes.
PR Checklist ✅
Screenshots Compare Test Runresults (to validate on CI)🤖 Generated with Claude Code
https://claude.ai/code