Fixed Rectangle renders as thin line instead of filled shape for small height - #31651
Fixed Rectangle renders as thin line instead of filled shape for small height#31651Dhivya-SF4094 wants to merge 6 commits into
Conversation
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
There was a problem hiding this comment.
Pull Request Overview
This PR fixes a rendering issue where Rectangle shapes with small height values (e.g., 1.2px) were rendering as thin lines instead of filled rectangles. The issue occurred because the Shape.cs class was always reducing the shape bounds by the stroke thickness, even when no stroke was present.
- Modified stroke bounds adjustment logic to only apply when a stroke is actually present
- Added comprehensive UI tests to validate the fix across platforms
- Ensures small filled shapes render correctly without collapsing to imperceptible lines
Reviewed Changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/Controls/src/Core/Shapes/Shape.cs | Added conditional check to only apply stroke inset when stroke exists |
| src/Controls/tests/TestCases.HostApp/Issues/Issue31330.cs | Created UI test page demonstrating rectangle rendering with small height |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue31330.cs | Added automated test to verify screenshot-based validation |
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
06493b2 to
e574466
Compare
jsuarezruiz
left a comment
There was a problem hiding this comment.
Could you rebase and fix the conflicts?
56a1a23 to
1eb8c9e
Compare
jsuarezruiz
left a comment
There was a problem hiding this comment.
There are some tests failing that I think could be related with the changes. Example: UpdateSizeOnlyWhenStrokeExists
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2566
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 745
at Microsoft.Maui.TestCases.Tests.Issues.Issue31330.UpdateSizeOnlyWhenStrokeExists() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue31330.cs:line 18
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
|
This behavior is related to the known design issue described in #3558. |
22468c2 to
e42a1cb
Compare
ebcdeae to
60fd42f
Compare
StephaneDelcroix
left a comment
There was a problem hiding this comment.
✅ Approved
Summary
This PR correctly fixes Issue #31330 where Rectangle shapes with small heights (e.g., 1.2px) rendered as thin lines instead of filled shapes.
Root Cause
The TransformPathForBounds method in Shape.cs always subtracted StrokeThickness (default 1.0) from the bounds, even when no Stroke was set. For a 1.2px height rectangle: 1.2 - 1.0 = 0.2px → nearly invisible.
The Fix
Only apply stroke inset when a stroke is actually present:
if (Stroke is not null && StrokeThickness > 0)
{
// apply inset
}Changes Reviewed
- Shape.cs: Core fix - logically correct ✅
- BorderTests.cs: Updated test point calculations to account for shapes now filling their full bounds ✅
- Issue31330.cs (HostApp): Good reproduction test ✅
- Issue31330.cs (Shared.Tests): UI test with correct AutomationId ✅
Testing
- Rebased cleanly on current main
- AutomationId mismatch between test and HostApp was fixed
- 383 snapshot images updated to reflect the corrected rendering
LGTM! 🚀
The base branch was changed.
PureWeen
left a comment
There was a problem hiding this comment.
src/Controls/tests/TestCases.HostApp/Issues/Issue31330.cs(101,51): error CS0103: (NETCORE_ENGINEERING_TELEMETRY=Build) The name 'AbsoluteLayoutFlags' does not exist in the current context
Fixed the build error in the test sample. |
|
/review -b feature/refactor-copilot-yml |
|
/review -b feature/refactor-copilot-yml |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
| // Only apply stroke inset if there is an actual stroke. | ||
| // For shapes with no stroke shrinking the bounds by StrokeThickness was | ||
| // effectively collapsing very small heights into a barely visible line. | ||
| var strokeThickness = EffectiveStrokeThickness; |
There was a problem hiding this comment.
[major] Logic and Correctness - This only skips the second stroke inset in TransformPathForBounds, but Rectangle.GetPath() and Ellipse.GetPath() are called before this and still subtract the raw default StrokeThickness even when Stroke is null. For the issue scenario (Rectangle with HeightRequest = 1.2, fill only), GetPath() still builds a path with y = 0.5 and h = 0.2, so the shape can still render as the thin line from #31330. The effective stroke thickness needs to be used when constructing those shape paths too.
🤖 AI Summary
📊 Review Session —
|
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
📱 BorderTests BorderTests |
❌ PASS — 1115s | ✅ PASS — 961s |
🖥️ Issue31330 Issue31330 |
✅ FAIL — 568s | ✅ PASS — 556s |
🔴 Without fix — 📱 BorderTests: PASS ❌ · 1115s
(truncated to last 15,000 chars)
perty
05-26 14:45:55.143 21138 24479 I DOTNET : [PASS] Page Background Updates Correctly With BackgroundColor Property
05-26 14:45:55.352 21138 24484 I DOTNET : [PASS] No issues using Page IsBusy property
05-26 14:45:56.568 21138 24489 I DOTNET : [PASS] Page Background Initializes Correctly With Background Property
05-26 14:45:57.784 21138 24494 I DOTNET : [PASS] Page Background Initializes Correctly With Background Property
05-26 14:45:58.989 21138 24499 I DOTNET : [PASS] Page Background Initializes Correctly With Background Property
05-26 14:45:58.994 21138 24499 I DOTNET : [PASS] Can Create Platform View From ContentPage
05-26 14:46:00.168 21138 24504 I DOTNET : [PASS] Page Background Initializes Correctly With BackgroundColor Property
05-26 14:46:01.383 21138 24510 I DOTNET : [PASS] Page Background Initializes Correctly With BackgroundColor Property
05-26 14:46:02.602 21138 24519 I DOTNET : [PASS] Page Background Initializes Correctly With BackgroundColor Property
05-26 14:46:02.602 21138 24519 I DOTNET : Microsoft.Maui.DeviceTests.PageTests 14.6536116 ms
05-26 14:46:03.009 21138 24525 I DOTNET : [PASS] BasicLoadUnloadingWorks
05-26 14:46:03.009 21138 24525 I DOTNET : Microsoft.Maui.DeviceTests.PlatformBehaviorTests 0.4059544 ms
05-26 14:46:03.190 21138 24530 I DOTNET : [PASS] Can Clear ShellContent
05-26 14:46:03.869 21138 24536 I DOTNET : [PASS] FlyoutContentUpdatesAfterChange
05-26 14:46:04.159 21138 24541 I DOTNET : [PASS] Handlers not recreated when changing tabs
05-26 14:46:04.468 21138 24546 I DOTNET : [PASS] PageLayoutDoesNotExceedWindowBounds
05-26 14:46:04.633 21138 24551 I DOTNET : [PASS] Ensure Default Colors are White for BottomNavigationView
05-26 14:46:04.850 21138 24556 I DOTNET : [PASS] FooterTemplate Measures to Set Flyout Width When Flyout Locked
05-26 14:46:05.306 21138 24561 I DOTNET : [PASS] BasicShellNavigationStructurePermutations
05-26 14:46:05.709 21138 24566 I DOTNET : [PASS] BasicShellNavigationStructurePermutations
05-26 14:46:06.157 21138 24571 I DOTNET : [PASS] BasicShellNavigationStructurePermutations
05-26 14:46:06.617 21138 24576 I DOTNET : [PASS] BasicShellNavigationStructurePermutations
05-26 14:46:06.910 21138 24581 I DOTNET : [PASS] No crash going back using 'Shell.Current.GoToAsync("..")'
05-26 14:46:08.781 21138 24586 I DOTNET : [PASS] Can Reuse Pages
05-26 14:46:10.583 21138 24594 I DOTNET : [PASS] FlyoutCustomContentMargin
05-26 14:46:12.425 21138 24600 I DOTNET : [PASS] FlyoutCustomContentMargin
05-26 14:46:14.344 21138 24606 I DOTNET : [PASS] FlyoutCustomContentMargin
05-26 14:46:14.644 21138 24611 I DOTNET : [PASS] ChangingBottomTabAttributesDoesntRecreateBottomTabs
05-26 14:46:15.551 21138 24617 I DOTNET : [PASS] FlyoutIsPresented=true sets the visible status of the Shell Flyout.
05-26 14:46:16.135 21138 24622 I DOTNET : [PASS] ShellContentFragment.Destroy handles null _shellContext gracefully
05-26 14:46:17.020 21138 24627 I DOTNET : [PASS] Navigation Routes Correctly After Switching Flyout Items
05-26 14:46:17.856 21138 24632 I DOTNET : [PASS] Navigate to Root with BackButtonBehavior no Crash
05-26 14:46:22.151 21138 24638 I DOTNET : [PASS] Shell TabBar UnselectedColor Initializes Correctly
05-26 14:46:26.435 21138 24644 I DOTNET : [PASS] Shell TabBar UnselectedColor Initializes Correctly
05-26 14:46:27.154 21138 24649 I DOTNET : [PASS] Toolbar Title View Updates
05-26 14:46:27.353 21138 24654 I DOTNET : [PASS] Shell with Flyout Disabled Doesn't Render Flyout
05-26 14:46:28.650 21138 24659 I DOTNET : [PASS] Back Button Visibility Changes with push/pop
05-26 14:46:29.409 21138 24664 I DOTNET : [PASS] ChangingToNewMauiContextDoesntCrash
05-26 14:46:29.617 21138 24669 I DOTNET : [PASS] FlyoutContent Renderers When FlyoutBehavior Starts As Locked
05-26 14:46:30.651 21138 24676 I DOTNET : [PASS] Flyout Footer and Default Flyout Items Render
05-26 14:46:30.812 21138 24681 I DOTNET : [PASS] Toolbar Title
05-26 14:46:31.267 21138 24687 I DOTNET : [PASS] LogicalChildrenPropagateCorrectly
05-26 14:46:31.964 21138 24692 I DOTNET : [PASS] Set Has Back Button
05-26 14:46:32.870 21138 24697 I DOTNET : [PASS] Flyout Header Changes When Updated
05-26 14:46:33.668 21138 24703 I DOTNET : [PASS] Navigating During Navigated Doesnt ReFire Appearing
05-26 14:46:34.274 21138 24708 I DOTNET : [PASS] Toolbar Title Updates
05-26 14:46:34.492 21138 24713 I DOTNET : [PASS] Title View Measures
05-26 14:46:34.827 21138 24718 I DOTNET : [PASS] Flyout Width Does Not Crash
05-26 14:46:37.885 21138 24723 I DOTNET : [PASS] PopToRootAsync correctly navigates to root page
05-26 14:46:42.167 21138 24729 I DOTNET : [PASS] ForegroundColor sets icon and title color sets title
05-26 14:46:42.688 21138 24734 I DOTNET : [PASS] LifeCycleEvents Fire When Navigating Top Tabs
05-26 14:46:42.900 21138 24739 I DOTNET : [PASS] Appearing Fires Before NavigatedTo
05-26 14:46:43.156 21138 24744 I DOTNET : [PASS] Swap Shell Root Page for NavigationPage
05-26 14:46:44.158 21138 24751 I DOTNET : [PASS] FlyoutItemsRenderWhenFlyoutHeaderIsSet
05-26 14:46:44.410 21138 24756 I DOTNET : [PASS] AddingBottomTabDoesntRecreateMenu
05-26 14:46:46.682 21138 24761 I DOTNET : [PASS] Flyout Starts as Open correctly
05-26 14:46:47.016 21138 24766 I DOTNET : [PASS] FlyoutWithAsMultipleItemsRendersWithoutCrashing
05-26 14:46:47.659 21138 24771 I DOTNET : [PASS] Correctly Adjust to Making Currently Visible Shell Page Invisible
05-26 14:46:47.884 21138 24776 I DOTNET : [PASS] Empty Shell
05-26 14:46:48.300 21138 24781 I DOTNET : [PASS] SearchHandlerRendersCorrectly
05-26 14:46:48.608 21138 24786 I DOTNET : [PASS] RemovingBottomTabDoesntRecreateMenu
05-26 14:46:49.909 21138 24791 I DOTNET : [PASS] HideSoftInputOnTapped Doesn't Crash If Entry Is Still Focused After Window Is Null
05-26 14:46:53.701 21138 24800 I DOTNET : [PASS] Pages Do Not Leak
05-26 14:46:54.036 21138 24805 I DOTNET : [PASS] FlyoutHeaderRendersCorrectSizeWithFlyoutContentSet
05-26 14:46:54.443 21138 24810 I DOTNET : [PASS] Shell add then remove items from selected item
05-26 14:46:58.754 21138 24816 I DOTNET : [PASS] Shell TabBar Foreground Initializes Correctly
05-26 14:47:03.050 21138 24822 I DOTNET : [PASS] Shell TabBar Foreground Initializes Correctly
05-26 14:47:03.972 21138 24830 I DOTNET : [PASS] FlyoutHeaderMinimumHeight
05-26 14:47:04.765 21138 24836 I DOTNET : [PASS] FlyoutHeaderMinimumHeight
05-26 14:47:05.712 21138 24842 I DOTNET : [PASS] FlyoutHeaderMinimumHeight
05-26 14:47:06.630 21138 24848 I DOTNET : [PASS] FlyoutHeaderMinimumHeight
05-26 14:47:06.952 21138 24853 I DOTNET : [PASS] CanHideNavBarShadow
05-26 14:47:07.236 21138 24858 I DOTNET : [PASS] CanHideNavBarShadow
05-26 14:47:11.535 21138 24864 I DOTNET : [PASS] Shell TabBar Title Color Initializes Correctly
05-26 14:47:15.817 21138 24871 I DOTNET : [PASS] Shell TabBar Title Color Initializes Correctly
05-26 14:47:16.153 21138 24876 I DOTNET : [PASS] FlyoutItems Render When FlyoutBehavior Starts As Locked
05-26 14:47:16.707 21138 24881 I DOTNET : [PASS] TitleView Updates to Currently Visible Page
05-26 14:47:17.581 21138 24886 I DOTNET : [PASS] SwappingOutAndroidContextDoesntCrash
05-26 14:47:19.711 21138 24891 I DOTNET : [PASS] Pushing the Same Page Disconnects Previous Toolbar Items
05-26 14:47:19.711 21138 24891 I DOTNET : Microsoft.Maui.DeviceTests.ShellTests 76.4952712 ms
05-26 14:47:20.784 21138 24896 I DOTNET : [PASS] LoadedFiresOnPushedPage
05-26 14:47:20.951 21138 24902 I DOTNET : [PASS] LoadedAndUnloadedFire
05-26 14:47:21.509 21138 24907 I DOTNET : [PASS] NavigatedToFiresAfterLoaded
05-26 14:47:22.052 21138 24912 I DOTNET : [PASS] LoadedAndUnloadedFireWhenParentRemoved
05-26 14:47:22.052 21138 24912 I DOTNET : Microsoft.Maui.DeviceTests.VisualElementTests+NewWindowCollection 2.2982496 ms
05-26 14:47:22.288 21138 24917 I DOTNET : [PASS] FindPlatformViewViaDefaultContainer
05-26 14:47:22.566 21138 24922 I DOTNET : [PASS] FindPlatformViewInsideView
05-26 14:47:22.679 21138 24927 I DOTNET : [PASS] FindPlatformViewInsideView
05-26 14:47:22.938 21138 24932 I DOTNET : [PASS] GetVisualTreeElements
05-26 14:47:23.124 21138 24937 I DOTNET : [PASS] FindPlatformViewInsideLayout
05-26 14:47:23.322 21138 24942 I DOTNET : [PASS] FindVisualTreeElementWithArbitraryPlatformViewsAdded
05-26 14:47:23.601 21138 24947 I DOTNET : [PASS] FindPlatformViewInsideScrollView
05-26 14:47:23.919 21138 24952 I DOTNET : [PASS] FindFirstMauiParentElement
05-26 14:47:24.131 21138 24957 I DOTNET : [PASS] FindFirstMauiParentElement
05-26 14:47:24.131 21138 24957 I DOTNET : Microsoft.Maui.DeviceTests.VisualElementTreeTests 1.9360105 ms
05-26 14:47:24.405 21138 24962 I DOTNET : [PASS] SwitchBetweenWindowShouldTriggerIsActivated
05-26 14:47:24.792 21138 24967 I DOTNET : [PASS] MainPageSwapTests
05-26 14:47:25.266 21138 24972 I DOTNET : [PASS] MainPageSwapTests
05-26 14:47:25.738 21138 24977 I DOTNET : [PASS] MainPageSwapTests
05-26 14:47:26.257 21138 24982 I DOTNET : [PASS] MainPageSwapTests
05-26 14:47:26.450 21138 24987 I DOTNET : [PASS] WindowDestroyingPreservesWindowScopeOnAndroid
05-26 14:47:27.369 21138 24992 I DOTNET : [PASS] ChangingToNewMauiContextDoesntCrash
05-26 14:47:28.185 21138 24997 I DOTNET : [PASS] ChangingToNewMauiContextDoesntCrash
05-26 14:47:28.749 21138 25002 I DOTNET : [PASS] ChangingToNewMauiContextDoesntCrash
05-26 14:47:29.251 21138 25007 I DOTNET : [PASS] ChangingToNewMauiContextDoesntCrash
05-26 14:47:29.403 21138 25012 I DOTNET : [PASS] WindowIsActivedRespondToMethodsCall
05-26 14:47:29.684 21138 25017 I DOTNET : [PASS] Toolbar Items Update when swapping out Main Page on Handler
05-26 14:47:29.826 21138 25022 I DOTNET : [PASS] Initial Dispatch from Background Thread Succeeds
05-26 14:47:29.826 21138 25022 I DOTNET : Microsoft.Maui.DeviceTests.WindowTests 5.5895193 ms
05-26 14:47:29.826 21138 25022 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.HybridWebViewTests_SendRawMessage
05-26 14:47:31.615 21138 25028 I DOTNET : [PASS] LoadsHtmlAndSendReceiveRawMessage
05-26 14:47:31.615 21138 25028 I DOTNET : Microsoft.Maui.DeviceTests.HybridWebViewTests_SendRawMessage 1.7595422 ms
05-26 14:47:31.615 21138 25028 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.Memory.WindowOverlayTests
05-26 14:47:33.334 21138 25033 I DOTNET : [PASS] Does Not Leak
05-26 14:47:33.335 21138 25033 I DOTNET : Microsoft.Maui.DeviceTests.Memory.WindowOverlayTests 1.7186862 ms
05-26 14:47:33.335 21138 25033 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.EntryTests
05-26 14:47:33.340 21138 25033 I DOTNET : [PASS] ScaleXConsistent
05-26 14:47:33.345 21138 25033 I DOTNET : [PASS] MaxLengthTrims
05-26 14:47:33.349 21138 25033 I DOTNET : [PASS] EntryMaxLengthAndTextOrder_RespectsMaxLength
05-26 14:47:33.353 21138 25033 I DOTNET : [PASS] VerifyEntryIsVisibleProperty
05-26 14:47:33.357 21138 25033 I DOTNET : [PASS] ChangingPlatformTextPreservesTextTransform
05-26 14:47:33.360 21138 25033 I DOTNET : [PASS] ChangingPlatformTextPreservesTextTransform
05-26 14:47:33.363 21138 25033 I DOTNET : [PASS] ScaleConsistent
05-26 14:47:33.384 21138 25033 I DOTNET : [PASS] Entry with longer text and short text updates correctly
05-26 14:47:33.388 21138 25033 I DOTNET : [PASS] InitializingTextTransformBeforeTextShouldUpdateTextProperty
05-26 14:47:33.391 21138 25033 I DOTNET : [PASS] RotationYConsistent
05-26 14:47:33.394 21138 25033 I DOTNET : [PASS] EntryTranslationConsistent
05-26 14:47:33.415 21138 25033 I DOTNET : [PASS] Android crash when Entry has more than 5000 characters
05-26 14:47:33.418 21138 25033 I DOTNET : [PASS] UpdateTextWithTextLongerThanMaxLength
05-26 14:47:33.422 21138 25033 I DOTNET : [PASS] VerifyEntryOpacityProperty
05-26 14:47:33.535 21138 25039 I DOTNET : [PASS] EntryBackgroundColorConsistent
05-26 14:47:33.560 21138 25039 I DOTNET : [PASS] SelectionLengthRightToLeft
05-26 14:47:33.571 21138 25039 I DOTNET : [PASS] RotationXConsistent
05-26 14:47:33.578 21138 25039 I DOTNET : [PASS] CursorPositionPreservedWhenTextTransformPresent
05-26 14:47:33.583 21138 25039 I DOTNET : [PASS] ScaleYConsistent
05-26 14:47:33.587 21138 25039 I DOTNET : [PASS] RotationConsistent
05-26 14:47:33.587 21138 25039 I DOTNET : Microsoft.Maui.DeviceTests.EntryTests 0.2471081 ms
05-26 14:47:33.587 21138 25039 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.StaticResourceTests
05-26 14:47:33.591 21138 25039 I DOTNET : [PASS] Issue #23903: Missing ControlTemplate with exception handler should throw
05-26 14:47:33.591 21138 25039 I DOTNET : Microsoft.Maui.DeviceTests.StaticResourceTests 0.0028136 ms
05-26 14:47:33.625 21138 21170 I DOTNET : Xml file was written to the provided writer.
05-26 14:47:33.626 21138 21170 I DOTNET : Tests run: 955 Passed: 942 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
{
"version": 1,
"machineName": "runnervmfuwn7",
"exitCode": 0,
"exitCodeName": "SUCCESS",
"platform": "android",
"instrumentationExitCode": 0,
"device": "emulator-5554",
"deviceOsVersion": "API 30",
"architecture": "x86_64",
"files": [
{
"name": "testResults.xml",
"type": "test-results"
},
{
"name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
"type": "logcat"
}
]
}
<<XHARNESS_RESULT_END>>
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26230.4/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.controls.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 0
Tests completed successfully
🟢 With fix — 📱 BorderTests: PASS ✅ · 961s
(truncated to last 15,000 chars)
7609 31108 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.307 27609 31113 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.424 27609 31118 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.540 27609 31123 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.657 27609 31128 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.771 27609 31133 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.893 27609 31138 I DOTNET : [PASS] LabelTruncatesCorrectly
05-26 15:12:26.906 27609 31144 I DOTNET : [PASS] VerifyLabelOpacityProperty
05-26 15:12:27.014 27609 31149 I DOTNET : [PASS] FontStuffAppliesEvenInHtmlMode
05-26 15:12:27.016 27609 31149 I DOTNET : [PASS] LabelTranslationConsistent
05-26 15:12:27.018 27609 31149 I DOTNET : [PASS] TextTransformUpdated
05-26 15:12:27.021 27609 31149 I DOTNET : [PASS] TextTransformUpdated
05-26 15:12:27.022 27609 31149 I DOTNET : [PASS] ScaleXConsistent
05-26 15:12:27.024 27609 31149 I DOTNET : [PASS] TextColorAppliesEvenInHtmlMode
05-26 15:12:27.024 27609 31149 I DOTNET : [PASS] Vertical text aligned when RTL is not supported
05-26 15:12:27.026 27609 31149 I DOTNET : [PASS] Using TailTruncation LineBreakMode with 2 MaxLines
05-26 15:12:27.028 27609 31149 I DOTNET : [PASS] LineBreakMode TailTruncation does not affect MaxLines
05-26 15:12:27.028 27609 31149 I DOTNET : [PASS] Horizontal text aligned when RTL is not supported
05-26 15:12:27.417 27609 31154 I DOTNET : [PASS] UpdatingFormattedTextResultsInTheSameLayout
05-26 15:12:27.791 27609 31159 I DOTNET : [PASS] UpdatingFormattedTextResultsInTheSameLayout
05-26 15:12:28.171 27609 31164 I DOTNET : [PASS] UpdatingFormattedTextResultsInTheSameLayout
05-26 15:12:28.704 27609 31169 I DOTNET : [PASS] FormattedStringSpanTextHasCorrectColorWhenChangedAfterCreation
05-26 15:12:28.934 27609 31174 I DOTNET : [PASS] FormattedStringSpanTextHasCorrectColorWhenChanges
05-26 15:12:28.937 27609 31174 I DOTNET : [PASS] LineBreakMode does not affect MaxLines
05-26 15:12:28.939 27609 31174 I DOTNET : [PASS] RotationConsistent
05-26 15:12:29.365 27609 31179 I DOTNET : [PASS] FormattedStringSpanTextHasCorrectLayoutWhenAligned
05-26 15:12:29.715 27609 31184 I DOTNET : [PASS] FormattedStringSpanTextHasCorrectLayoutWhenAligned
05-26 15:12:30.068 27609 31189 I DOTNET : [PASS] FormattedStringSpanTextHasCorrectLayoutWhenAligned
05-26 15:12:30.071 27609 31189 I DOTNET : [PASS] MaxLines Initializes Correctly
05-26 15:12:30.073 27609 31189 I DOTNET : [PASS] RotationXConsistent
05-26 15:12:30.075 27609 31189 I DOTNET : [PASS] LineBreakMode Initializes Correctly
05-26 15:12:30.077 27609 31189 I DOTNET : [PASS] InitialTextTransformApplied
05-26 15:12:30.090 27609 31189 I DOTNET : [PASS] InitialTextTransformApplied
05-26 15:12:30.094 27609 31189 I DOTNET : [PASS] RotationYConsistent
05-26 15:12:30.098 27609 31189 I DOTNET : [PASS] Single LineBreakMode changes MaxLines
05-26 15:12:30.102 27609 31189 I DOTNET : [PASS] VerifyLabelIsEnabledProperty
05-26 15:12:30.103 27609 31189 I DOTNET : [IGNORED] InitialFormattedTextMatchesText
05-26 15:12:30.109 27609 31189 I DOTNET : [PASS] TextTypeAfterFontStuffIsCorrect
05-26 15:12:30.111 27609 31189 I DOTNET : [PASS] ScaleYConsistent
05-26 15:12:30.113 27609 31189 I DOTNET : [PASS] ScaleConsistent
05-26 15:12:32.424 27609 31194 I DOTNET : [PASS] ChangingTextTypeWithFormattedTextSwitchesTextSource
05-26 15:12:32.436 27609 31200 I DOTNET : [PASS] FormattedStringSpanTextTransformApplied
05-26 15:12:32.441 27609 31200 I DOTNET : [PASS] FormattedStringSpanTextTransformApplied
05-26 15:12:32.551 27609 31205 I DOTNET : [PASS] LabelBackgroundColorConsistent
05-26 15:12:36.289 27609 31216 I DOTNET : [PASS] Does Not Leak
05-26 15:12:36.291 27609 31216 I DOTNET : [PASS] Unsetting single LineBreakMode resets MaxLines
05-26 15:12:36.293 27609 31216 I DOTNET : [PASS] Unsetting single LineBreakMode resets MaxLines
05-26 15:12:36.293 27609 31216 I DOTNET : Microsoft.Maui.DeviceTests.LabelTests 11.0085145 ms
05-26 15:12:36.293 27609 31216 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.FrameHandlerTest
05-26 15:12:36.299 27609 31216 I DOTNET : [PASS] Setting Semantic Hint makes element accessible
05-26 15:12:36.303 27609 31216 I DOTNET : [PASS] MinimumHeightInitializes
05-26 15:12:36.304 27609 31216 I DOTNET : [PASS] MinimumHeightInitializes
05-26 15:12:36.305 27609 31216 I DOTNET : [PASS] HandlersHaveAllExpectedContructors
05-26 15:12:36.307 27609 31216 I DOTNET : [PASS] Native View Bounds are not empty
05-26 15:12:36.309 27609 31216 I DOTNET : [PASS] Native View Bounds are not empty
05-26 15:12:36.311 27609 31216 I DOTNET : [PASS] Null Semantics Doesnt throw exception
05-26 15:12:36.314 27609 31216 I DOTNET : [PASS] DisconnectHandlerDoesntCrash
05-26 15:12:36.317 27609 31216 I DOTNET : [PASS] Clip Initializes ContainerView Correctly
05-26 15:12:36.328 27609 31216 I DOTNET : [PASS] PlatformView Transforms are not empty
05-26 15:12:36.330 27609 31216 I DOTNET : [PASS] PlatformView Transforms are not empty
05-26 15:12:36.332 27609 31216 I DOTNET : [PASS] RotationX Initialize Correctly
05-26 15:12:36.336 27609 31216 I DOTNET : [PASS] RotationX Initialize Correctly
05-26 15:12:36.336 27609 31216 I DOTNET : [IGNORED] Semantic Hint is set correctly
05-26 15:12:36.343 27609 31216 I DOTNET : [PASS] Semantic Heading is set correctly
05-26 15:12:36.356 27609 31216 I DOTNET : [PASS] Opacity is set correctly
05-26 15:12:36.359 27609 31216 I DOTNET : [PASS] Opacity is set correctly
05-26 15:12:36.918 27609 31221 I DOTNET : [PASS] ContainerView Adds And Removes
05-26 15:12:36.927 27609 31221 I DOTNET : [PASS] RotationY Initialize Correctly
05-26 15:12:36.968 27609 31221 I DOTNET : [PASS] RotationY Initialize Correctly
05-26 15:12:36.987 27609 31221 I DOTNET : [PASS] View Renders To Image
05-26 15:12:36.997 27609 31221 I DOTNET : [PASS] View Renders To Image
05-26 15:12:37.000 27609 31221 I DOTNET : [PASS] ScaleX Initialize Correctly
05-26 15:12:37.001 27609 31221 I DOTNET : [PASS] ScaleX Initialize Correctly
05-26 15:12:37.003 27609 31221 I DOTNET : [PASS] TranslationX Initialize Correctly
05-26 15:12:37.005 27609 31221 I DOTNET : [PASS] TranslationX Initialize Correctly
05-26 15:12:37.005 27609 31221 I DOTNET : [IGNORED] Semantic Description is set correctly
05-26 15:12:37.007 27609 31221 I DOTNET : [PASS] NeedsContainerWhenInputTransparent
05-26 15:12:37.009 27609 31221 I DOTNET : [PASS] Automation Id is set correctly
05-26 15:12:37.016 27609 31221 I DOTNET : [PASS] FlowDirection is set correctly
05-26 15:12:37.017 27609 31221 I DOTNET : [PASS] FlowDirection is set correctly
05-26 15:12:37.019 27609 31221 I DOTNET : [PASS] MinimumWidthInitializes
05-26 15:12:37.020 27609 31221 I DOTNET : [PASS] MinimumWidthInitializes
05-26 15:12:37.022 27609 31221 I DOTNET : [PASS] ContainerView Remains If Shadow Mapper Runs Again
05-26 15:12:37.072 27609 31221 I DOTNET : [PASS] ScaleY Initialize Correctly
05-26 15:12:37.074 27609 31221 I DOTNET : [PASS] ScaleY Initialize Correctly
05-26 15:12:37.076 27609 31221 I DOTNET : [PASS] Rotation Initialize Correctly
05-26 15:12:37.080 27609 31221 I DOTNET : [PASS] Rotation Initialize Correctly
05-26 15:12:37.082 27609 31221 I DOTNET : [PASS] Native View Bounding Box is not empty
05-26 15:12:37.083 27609 31221 I DOTNET : [PASS] Native View Bounding Box is not empty
05-26 15:12:37.085 27609 31221 I DOTNET : [PASS] Setting Semantic Description makes element accessible
05-26 15:12:37.087 27609 31221 I DOTNET : [PASS] TranslationY Initialize Correctly
05-26 15:12:37.089 27609 31221 I DOTNET : [PASS] TranslationY Initialize Correctly
05-26 15:12:37.096 27609 31221 I DOTNET : [PASS] Visibility is set correctly
05-26 15:12:37.097 27609 31221 I DOTNET : [PASS] Visibility is set correctly
05-26 15:12:37.097 27609 31221 I DOTNET : Microsoft.Maui.DeviceTests.FrameHandlerTest 0.7361892 ms
05-26 15:12:37.097 27609 31221 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.HybridWebViewTests_InvokeJavaScriptAsync
05-26 15:12:37.735 27609 31227 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndVoidReturn
05-26 15:12:38.203 27609 31233 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndComplexResult
05-26 15:12:38.854 27609 31239 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsString
05-26 15:12:39.540 27609 31245 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsString
05-26 15:12:40.202 27609 31251 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsNumber
05-26 15:12:40.706 27609 31257 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsNumber
05-26 15:12:41.382 27609 31263 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullsAndComplexResult
05-26 15:12:42.066 27609 31269 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndVoidReturnUsingNullReturnMethod
05-26 15:12:42.783 27609 31275 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsError
05-26 15:12:43.437 27609 31281 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsError
05-26 15:12:44.126 27609 31287 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndDoubleResult
05-26 15:12:44.805 27609 31293 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndDoubleResult
05-26 15:12:45.478 27609 31300 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndDoubleResult
05-26 15:12:45.902 27609 31306 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNewIntResult
05-26 15:12:46.576 27609 31312 I DOTNET : [PASS] RequestFileFromJS
05-26 15:12:47.242 27609 31318 I DOTNET : [PASS] RequestFileFromJS
05-26 15:12:47.911 27609 31324 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsTypedNumber
05-26 15:12:48.610 27609 31330 I DOTNET : [PASS] InvokeJavaScriptMethodThatThrowsTypedNumber
05-26 15:12:49.252 27609 31336 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableIntResult
05-26 15:12:49.928 27609 31342 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableIntResult
05-26 15:12:50.350 27609 31348 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableIntResult
05-26 15:12:51.025 27609 31354 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableIntResult
05-26 15:12:51.717 27609 31360 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndStringResult
05-26 15:12:52.378 27609 31366 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndStringResult
05-26 15:12:53.054 27609 31372 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndStringResult
05-26 15:12:53.718 27609 31378 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndStringResult
05-26 15:12:54.398 27609 31384 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndStringResult
05-26 15:12:55.074 27609 31390 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableDoubleResult
05-26 15:12:55.746 27609 31396 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableDoubleResult
05-26 15:12:56.406 27609 31402 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableDoubleResult
05-26 15:12:57.075 27609 31408 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNullableDoubleResult
05-26 15:12:57.758 27609 31414 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndDecimalResult
05-26 15:12:58.617 27609 31420 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndVoidReturnUsingObjectReturnMethod
05-26 15:12:59.292 27609 31426 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNewStringResult
05-26 15:12:59.975 27609 31432 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndBoolResult
05-26 15:13:00.666 27609 31438 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndBoolResult
05-26 15:13:01.381 27609 31444 I DOTNET : [PASS] InvokeAsyncJavaScriptMethodWithParametersAndComplexResult
05-26 15:13:02.019 27609 31450 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndNewDoubleResult
05-26 15:13:02.448 27609 31456 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndIntResult
05-26 15:13:03.126 27609 31462 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndIntResult
05-26 15:13:03.870 27609 31468 I DOTNET : [PASS] InvokeJavaScriptMethodWithParametersAndIntResult
05-26 15:13:03.871 27609 31468 I DOTNET : Microsoft.Maui.DeviceTests.HybridWebViewTests_InvokeJavaScriptAsync 26.6829081 ms
05-26 15:13:03.871 27609 31468 I DOTNET : Test collection for Microsoft.Maui.DeviceTests.MapperTests
05-26 15:13:03.876 27609 31468 I DOTNET : [PASS] ValidateMapperGenerics
05-26 15:13:03.876 27609 31468 I DOTNET : [PASS] ValidateMapperGenerics
05-26 15:13:03.876 27609 31468 I DOTNET : Microsoft.Maui.DeviceTests.MapperTests 0.0008462 ms
05-26 15:13:03.908 27609 27637 I DOTNET : Xml file was written to the provided writer.
05-26 15:13:03.909 27609 27637 I DOTNET : Tests run: 955 Passed: 942 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
{
"version": 1,
"machineName": "runnervmfuwn7",
"exitCode": 0,
"exitCodeName": "SUCCESS",
"platform": "android",
"instrumentationExitCode": 0,
"device": "emulator-5554",
"deviceOsVersion": "API 30",
"architecture": "x86_64",
"files": [
{
"name": "testResults.xml",
"type": "test-results"
},
{
"name": "adb-logcat-com.microsoft.maui.controls.devicetests-default.log",
"type": "logcat"
}
]
}
<<XHARNESS_RESULT_END>>
�[40m�[32minfo�[39m�[22m�[49m: Attempting to remove apk 'com.microsoft.maui.controls.devicetests'..
�[40m�[37mdbug�[39m�[22m�[49m: Executing command: '/home/vsts/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26230.4/runtimes/any/native/adb/linux/adb -s emulator-5554 uninstall com.microsoft.maui.controls.devicetests'
�[40m�[32minfo�[39m�[22m�[49m: Successfully uninstalled com.microsoft.maui.controls.devicetests
XHarness exit code: 0
Tests completed successfully
🔴 Without fix — 🖥️ Issue31330: FAIL ✅ · 568s
Determining projects to restore...
Restored /home/vsts/work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 990 ms).
Restored /home/vsts/work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 1.22 sec).
Restored /home/vsts/work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 12 ms).
Restored /home/vsts/work/1/s/src/Essentials/src/Essentials.csproj (in 43 ms).
Restored /home/vsts/work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 125 ms).
Restored /home/vsts/work/1/s/src/Core/maps/src/Maps.csproj (in 34 ms).
Restored /home/vsts/work/1/s/src/Core/src/Core.csproj (in 61 ms).
Restored /home/vsts/work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 35 ms).
3 of 11 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0-android36.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-android36.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Xaml.dll
Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.dll
Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-android36.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Maps.dll
Controls.TestCases.HostApp -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Controls.TestCases.HostApp.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Maps.dll
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Maps.dll
Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.AspNetCore.Components.WebView.Maui.dll
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll
Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Foldable.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:07:15.66
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
Controls.CustomAttributes -> /home/vsts/work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12] Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.33] Discovered: Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 05/26/2026 21:56:53 FixtureSetup for Issue31330(Android)
>>>>> 05/26/2026 21:56:54 UpdateSizeOnlyWhenStrokeExists Start
>>>>> 05/26/2026 21:57:00 UpdateSizeOnlyWhenStrokeExists Stop
>>>>> 05/26/2026 21:57:00 Log types: logcat, bugreport, server
Failed UpdateSizeOnlyWhenStrokeExists [6 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: UpdateSizeOnlyWhenStrokeExists.png (0.72% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
Stack Trace:
at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
at Microsoft.Maui.TestCases.Tests.Issues.Issue31330.UpdateSizeOnlyWhenStrokeExists() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue31330.cs:line 19
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue31330.trx
Total tests: 1
Failed: 1
Test Run Failed.
Total time: 20.0662 Seconds
>>> TRX_RESULT_FILE: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue31330.trx
🟢 With fix — 🖥️ Issue31330: PASS ✅ · 556s
Determining projects to restore...
Restored /home/vsts/work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 532 ms).
Restored /home/vsts/work/1/s/src/Essentials/src/Essentials.csproj (in 532 ms).
Restored /home/vsts/work/1/s/src/Core/maps/src/Maps.csproj (in 155 ms).
Restored /home/vsts/work/1/s/src/Core/src/Core.csproj (in 206 ms).
Restored /home/vsts/work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 67 ms).
Restored /home/vsts/work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 37 ms).
Restored /home/vsts/work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 38 ms).
Restored /home/vsts/work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 42 ms).
3 of 11 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0-android36.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0-android36.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0-android36.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0-android36.0/Microsoft.Maui.Maps.dll
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-android36.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-android36.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Foldable.dll
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Maps.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-android36.0/Microsoft.Maui.Controls.Xaml.dll
Controls.TestCases.HostApp -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Controls.TestCases.HostApp.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Foldable -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Foldable.dll
Microsoft.AspNetCore.Components.WebView.Maui -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.AspNetCore.Components.WebView.Maui.dll
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Xaml.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-android/Microsoft.Maui.Controls.Maps.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:07:10.00
Broadcasting: Intent { act=android.intent.action.CLOSE_SYSTEM_DIALOGS flg=0x400000 }
Broadcast completed: result=0
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
Controls.CustomAttributes -> /home/vsts/work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14198570
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
UITest.Core -> /home/vsts/work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
VisualTestUtils -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
UITest.Appium -> /home/vsts/work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
VisualTestUtils.MagickNet -> /home/vsts/work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.NUnit -> /home/vsts/work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
UITest.Analyzers -> /home/vsts/work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.Android.Tests -> /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12] Discovering: Controls.TestCases.Android.Tests
[xUnit.net 00:00:00.34] Discovered: Controls.TestCases.Android.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /home/vsts/work/1/s/artifacts/bin/Controls.TestCases.Android.Tests/Debug/net10.0/Controls.TestCases.Android.Tests.dll
NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 05/26/2026 22:22:14 FixtureSetup for Issue31330(Android)
>>>>> 05/26/2026 22:22:15 UpdateSizeOnlyWhenStrokeExists Start
>>>>> 05/26/2026 22:22:19 UpdateSizeOnlyWhenStrokeExists Stop
Passed UpdateSizeOnlyWhenStrokeExists [3 s]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue31330.trx
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 17.3652 Seconds
>>> TRX_RESULT_FILE: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue31330.trx
⚠️ Failure Details
- ❌ BorderTests PASSED without fix (should fail) — tests don't catch the bug
📁 Fix files reverted (2 files)
eng/pipelines/ci-copilot.ymlsrc/Controls/src/Core/Shapes/Shape.cs
🧪 UI Tests — Shape
Detected UI test categories: Shape
✅ Deep UI tests — 35 passed, 0 failed across 1 category on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
Shape |
35/35 ✓ | — |
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs) |
🔍 Pre-Flight — Context & Validation
Issue: #31330 - Rectangle renders as thin line instead of filled shape for small height values
PR: #31651 - Fixed Rectangle renders as thin line instead of filled shape for small height
Platforms Affected: Android, iOS (issue); PR also refreshes Android, iOS, Mac, and Windows snapshots
Files Changed: 2 implementation/test source files plus 385 screenshot snapshot files
Key Findings
- The issue reports fill-only
Rectanglerendering as a thin horizontal line for very small fractional heights such as 1.2, whileBoxViewrenders correctly. - The PR changes shared
Shapetransform/measure logic so stroke inset usesEffectiveStrokeThicknessand becomes zero whenStrokeis null. - The PR adds an Appium UI screenshot test for
Issue31330in the Shape category and updates platform snapshots. - Inline PR discussion noted Windows and Mac snapshot/test follow-up, plus earlier requests to make the test clearer and runtime-oriented.
- Gate result was provided externally as failed; pre-flight did not re-run gate verification.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: medium
Errors: 1 | Warnings: 0 | Suggestions: 0
Key code review findings:
- ❌
src/Controls/src/Core/Shapes/Shape.cs:138introducesEffectiveStrokeThickness, butRectangle.GetPath()andEllipse.GetPath()still subtract rawStrokeThicknesswhenStrokeis null. Fill-only shapes at or below the default stroke-thickness boundary can still build a zero-sized path before transform.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #31651 | Treat stroke thickness as zero in shared Shape transform/measure when no Stroke is set | ⏳ PENDING (Gate handled separately) | src/Controls/src/Core/Shapes/Shape.cs, UI test/snapshots |
Original PR; code review found incomplete effective-stroke application in concrete path builders |
🔬 Code Review — Deep Analysis
Code Review — PR #31651
Independent Assessment
What this changes: Shape layout/rendering now treats StrokeThickness as zero when Stroke is null in Shape.TransformPathForBounds and MeasureOverride. The PR also adds a screenshot UI test for a 1.2dp fill-only Rectangle, updates one Border device-test sampling calculation, and refreshes many baselines.
Inferred motivation: Avoid fill-only shapes being inset by the default 1dp stroke and collapsing when the requested size is very small.
Reconciliation with PR Narrative
Author claims: The PR fixes #31330 by applying stroke inset only when a stroke exists, validated on Android, Windows, iOS, and Mac.
Agreement/disagreement: The central diagnosis matches the code, and current GitHub check runs are successful/skipped. However, the implementation only applies the effective stroke thickness in the shared transform/measure path; Rectangle.GetPath() and Ellipse.GetPath() still build their paths with the raw default stroke thickness, leaving a boundary case for fill-only shapes at or below the default stroke thickness.
Findings
❌ Error — Effective stroke thickness is not applied consistently
src/Controls/src/Core/Shapes/Shape.cs:138 introduces EffectiveStrokeThickness, but the concrete path builders for Rectangle and Ellipse still subtract raw StrokeThickness even when Stroke is null. A fill-only rectangle with requested height/width at the default stroke-thickness boundary can still create a zero-sized path before transformation, so the fix is incomplete for the same class of small-size rendering issues. Use the effective thickness in those path computations, or add coverage showing <= 1.0 sizes render correctly.
Devil's Advocate
The reported repro uses 1.2dp, and the transform change likely fixes that exact value because the remaining nonzero inner path is scaled back into the full bounds. But the issue statement describes small filled rectangles more generally, and the code still has an unverified collapse point when size - StrokeThickness reaches zero. I did not flag the broad snapshot churn because CI is currently green and image review is better handled by the existing screenshot infrastructure/human visual review.
Verdict: NEEDS_CHANGES
Confidence: medium
Summary: The approach is directionally correct but incomplete: effective stroke semantics need to be applied where fill-only rectangle/ellipse paths are constructed, not only during transform and measure. CI check runs shown by GitHub are green/skipped, but the remaining boundary case should be addressed before merge.
🔧 Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix-1 | Use effective stroke thickness in concrete Rectangle.GetPath() and Ellipse.GetPath() path construction, in addition to shared Shape transform/measure logic |
✅ PASS | 3 files | Android Issue31330 UI test passed; addresses code-review error left by PR fix |
| PR | PR #31651 | Use effective stroke thickness only in shared Shape.TransformPathForBounds() and Shape.MeasureOverride() when Stroke is null |
❌ FAILED (Gate supplied by caller) | 1 implementation file plus tests/snapshots | Directionally correct but incomplete because concrete path builders still subtract raw StrokeThickness |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 1 | Yes | Candidate #1: fix path construction at source by using EffectiveStrokeThickness in Rectangle.GetPath() and Ellipse.GetPath() |
| claude-opus-4.7 | 2 | Not queried | Stop condition met: candidate #1 passed all requested Android tests and is demonstrably better than PR fix |
| gpt-5.3-codex | 2 | Not queried | Stop condition met |
| gpt-5.5 | 2 | Not queried | Stop condition met |
Exhausted: No
Selected Fix: Candidate #1 — It passed the Android Issue31330 UI test and fixes the same effective-stroke semantics at the concrete geometry construction points that PR #31651 currently misses.
📋 Report — Final Recommendation
Comparative Report
Candidates
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | pr-plus-reviewer |
Equivalent to tested try-fix-1 implementation |
Best candidate. Keeps the PR's shared effective-stroke changes and applies the expert reviewer's required fix in Rectangle.GetPath() and Ellipse.GetPath(). |
| 2 | try-fix-1 |
PASS on Android Issue31330 UI test |
Also correct. It fixes all four affected locations: concrete rectangle/ellipse path construction plus shared transform/measure logic. Ranked just below pr-plus-reviewer because it is the same technical fix expressed as an independent candidate rather than the PR plus review feedback. |
| 3 | pr |
FAILED gate supplied by caller | Directionally correct but incomplete. It uses effective stroke thickness only in Shape.TransformPathForBounds() and Shape.MeasureOverride(), while concrete path construction still subtracts raw StrokeThickness for fill-only rectangles and ellipses. |
Analysis
The raw PR fix improves the shared transform/measure behavior, but it does not fully remove the default stroke inset from fill-only shape geometry. Rectangle.GetPath() and Ellipse.GetPath() still create paths using raw StrokeThickness, so small fill-only shapes can still be constructed from a collapsed or nearly collapsed path.
try-fix-1 directly addresses that missing path-construction layer and passed the Android Issue31330 UI test. The expert reviewer identified the same actionable change, so pr-plus-reviewer is effectively the PR plus the proven try-fix-1 correction.
Winner
Winner: pr-plus-reviewer
This is the strongest candidate because it retains the PR's intended shared effective-stroke semantics and adds the required reviewer feedback at the geometry construction source. The raw PR is ranked lower because its gate result failed and its implementation leaves an identified correctness gap.
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/review -b feature/enhanced-reviewer -p android |
This comment has been minimized.
This comment has been minimized.
|
/review rerun |
This comment has been minimized.
This comment has been minimized.
|
|
|
Could you please resolve conflicts? |
|
Closing as a stale one - please open a new one if this PR is still needed |
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Issue Details:
When height is a small non-integer value (e.g., 1.2), the shape renders incorrectly as a thin stroked line instead of a filled rectangle.
Root Cause
In Shape.cs, the TransformPathForBounds method always adjusts the path bounds for stroke thickness, reducing the dimensions by the StrokeThickness value.
For small heights with the default stroke thickness (1.0px), this resulted in a tiny internal rectangle that appeared as a line rather than a filled shape, unlike BoxView which rendered at the full specified height.
Description of Change
Added a condition to only apply stroke inset when a stroke is actually present (Stroke != null && StrokeThickness > 0). This prevents the shape's interior path from collapsing to an imperceptible height when rendering small filled shapes, particularly when no stroke is applied.
Validated the behaviour in the following platforms
Issues Fixed:
Fixes #31330
Screenshots