Skip to content

[iOS/macCatalyst] Fix Entry cursor reset when typing with TextTransform - #36079

Merged
kubaflo merged 1 commit into
dotnet:inflight/currentfrom
SyedAbdulAzeemSF4852:fix-36018
Jun 25, 2026
Merged

[iOS/macCatalyst] Fix Entry cursor reset when typing with TextTransform#36079
kubaflo merged 1 commit into
dotnet:inflight/currentfrom
SyedAbdulAzeemSF4852:fix-36018

Conversation

@SyedAbdulAzeemSF4852

Copy link
Copy Markdown
Contributor

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 the cursor is at a mid-text position in an Entry with TextTransform set, typing a character resets the cursor to the end of the text instead of advancing it by one position.

Root Cause

  • On iOS/macCatalyst, each access to UITextField.AttributedText returns a new C# wrapper object around the same native ObjC instance, so the != guard in UpdateMaxLength was always true, causing an unconditional AttributedText assignment on every keystroke — which UIKit uses as a signal to reset the cursor to the end of the text.

Description of Change

  • Cache textField.AttributedText in a local variable and use ReferenceEquals as the guard, so the assignment is skipped when TrimToMaxLength returns the same instance (i.e., no trimming was needed), preserving the cursor position.

Issues Fixed

Fixes #36018

Validated the behaviour in the following platforms

  • Windows
  • Android
  • iOS
  • Mac

Output

Before After
Without_Fix.mov
With_Fix.mov

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36079

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36079"

@dotnet-policy-service dotnet-policy-service Bot added the community ✨ Community Contribution label Jun 23, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hey there @@SyedAbdulAzeemSF4852! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed.

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Jun 23, 2026
@SyedAbdulAzeemSF4852 SyedAbdulAzeemSF4852 changed the title [WIP][iOS/macCatalyst] Fix Entry cursor reset when typing with TextTransform [iOS/macCatalyst] Fix Entry cursor reset when typing with TextTransform Jun 24, 2026
@sheiksyedm
sheiksyedm marked this pull request as ready for review June 24, 2026 11:26
@sheiksyedm

Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests , maui-pr-devicetests

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

@kubaflo

This comment has been minimized.

@github-actions github-actions Bot added the s/agent-review-in-progress AI review is currently running for this PR label Jun 25, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 1 findings

See inline comments for details.

[Fact]
public async Task CursorPositionPreservedDuringInsertTextWithTextTransformUppercase()
{
var entry = new EntryStub();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[moderate] Regression Prevention — The test name CursorPositionPreservedDuringInsertTextWithTextTransformUppercase implies a TextTransform=Uppercase scenario, but EntryStub has no TextTransform property and does not implement ITextElement; there is no way to set it. The test exercises the UpdateMaxLength double-access fix via Core EntryHandler + direct InsertText, which is a valid reproduction of the underlying mechanism, but it does not cover the Controls.Entry.MapText path that applies TextTransform and then calls UpdateMaxLength — the exact flow described in issue #36018. Consider using Controls.Entry with TextTransform = TextTransform.Uppercase (via a Controls-layer handler) to match the reported scenario, or rename the test to CursorPositionPreservedDuringInsertText to accurately describe what is actually being tested.

@MauiBot MauiBot added s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Jun 25, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI Review Summary

@SyedAbdulAzeemSF4852 — new AI review results are available based on this last commit: 21e3585. To request a fresh review after new comments or commits, comment /review rerun.

Gate Passed Confidence Low Platform iOS


🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix

Gate Result: ✅ PASSED

Platform: IOS · Base: main · Merge base: be0b7019

Test Without Fix (expect FAIL) With Fix (expect PASS)
📱 EntryHandlerTests (CursorPositionPreservedDuringInsertTextWithTextTransformUppercase) Category=Entry ✅ FAIL — 457s ✅ PASS — 259s
🔴 Without fix — 📱 EntryHandlerTests (CursorPositionPreservedDuringInsertTextWithTextTransformUppercase): FAIL ✅ · 457s

(truncated to last 15,000 chars)

5230] 2026-06-25 07:41:08.546282-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family and Weight Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5512660] 2026-06-25 07:41:08.550950-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family and Weight Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5552160] 2026-06-25 07:41:08.554865-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family and Weight Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5583540] 2026-06-25 07:41:08.558104-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family and Weight Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5607240] 2026-06-25 07:41:08.560507-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family and Weight Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5655490] 2026-06-25 07:41:08.565298-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Attributes Initialize Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5693730] 2026-06-25 07:41:08.568919-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Attributes Initialize Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5745340] 2026-06-25 07:41:08.574217-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Attributes Initialize Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5773560] 2026-06-25 07:41:08.577169-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Attributes Initialize Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5844350] 2026-06-25 07:41:08.584220-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5876210] 2026-06-25 07:41:08.587267-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5913060] 2026-06-25 07:41:08.591041-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Family Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5957910] 2026-06-25 07:41:08.595552-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Size Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.5993880] 2026-06-25 07:41:08.599185-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Size Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6017380] 2026-06-25 07:41:08.601512-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Size Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6048110] 2026-06-25 07:41:08.604442-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Font Size Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6085840] 2026-06-25 07:41:08.608319-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Auto Scaling Enabled Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6112170] 2026-06-25 07:41:08.611008-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] Auto Scaling Enabled Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6114560] 2026-06-25 07:41:08.611267-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryTextStyleTests 0.0728954 ms
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6116800] 2026-06-25 07:41:08.611480-0700 Microsoft.Maui.Core.DeviceTests[6697:45033]
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.6116900] Test collection for Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryFocusTests
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.7263150] 2026-06-25 07:41:08.726077-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] [RTILog] -[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:]  perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:08.9021900] 2026-06-25 07:41:08.901793-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] UnfocusAndIsFocusedIsWorking
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.0294900] 2026-06-25 07:41:09.029196-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] [RTILog] -[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:]  perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2434640] 2026-06-25 07:41:09.243132-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] FocusAndIsFocusedIsWorking
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2436550] 2026-06-25 07:41:09.243485-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryFocusTests 0.6306354 ms
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2439060] 2026-06-25 07:41:09.243686-0700 Microsoft.Maui.Core.DeviceTests[6697:45033]
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2439230] Test collection for Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryTextInputTests
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2493920] 2026-06-25 07:41:09.249190-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2523910] 2026-06-25 07:41:09.252058-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2564450] 2026-06-25 07:41:09.256146-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2589980] 2026-06-25 07:41:09.258811-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2615290] 2026-06-25 07:41:09.261300-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2636140] 2026-06-25 07:41:09.263435-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2670980] 2026-06-25 07:41:09.266869-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2707070] 2026-06-25 07:41:09.270331-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2750570] 2026-06-25 07:41:09.274740-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2796120] 2026-06-25 07:41:09.279362-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2824270] 2026-06-25 07:41:09.282202-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2851550] 2026-06-25 07:41:09.284903-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2876790] 2026-06-25 07:41:09.287385-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2899640] 2026-06-25 07:41:09.289722-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2927740] 2026-06-25 07:41:09.292549-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.2949500] 2026-06-25 07:41:09.294754-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] TextChanged Events Fire Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5103970] 2026-06-25 07:41:09.509975-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] 	[PASS] CursorPositionDoesntResetWhenNativeTextValueChanges
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5113120] 2026-06-25 07:41:09.511048-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] Microsoft.Maui.DeviceTests.EntryHandlerTests+EntryTextInputTests 0.2592837 ms
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5132840] 2026-06-25 07:41:09.513032-0700 Microsoft.Maui.Core.DeviceTests[6697:45583] Failed tests:
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5134110] 2026-06-25 07:41:09.513224-0700 Microsoft.Maui.Core.DeviceTests[6697:45583] 1) 	[FAIL] CursorPositionPreservedDuringInsertTextWithTextTransformUppercase   Test name: CursorPositionPreservedDuringInsertTextWithTextTransformUppercase
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5135370] 2026-06-25 07:41:09.513339-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    Assembly:  [Microsoft.Maui.Core.DeviceTests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5135510]    Exception messages: Assert.Equal() Failure: Values differ
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5135550] Expected: 3
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5135870] 2026-06-25 07:41:09.513440-0700 Microsoft.Maui.Core.DeviceTests[6697:45583] Actual:   6   Exception stack traces:    at Microsoft.Maui.DeviceTests.EntryHandlerTests.<>c.<CursorPositionPreservedDuringInsertTextWithTextTransformUppercase>b__61_0(EntryHandler handler)
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5137250] 2026-06-25 07:41:09.513568-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.HandlerTestBasement`2.<>c__DisplayClass1_0[[Microsoft.Maui.Handlers.EntryHandler, Microsoft.Maui, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.DeviceTests.Stubs.EntryStub, Microsoft.Maui.Core.DeviceTests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].<AttachAndRun>b__0(EntryHandler handler)
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5138140] 2026-06-25 07:41:09.513692-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.HandlerTestBasement`2.<>c__DisplayClass4_0`1[[Microsoft.Maui.Handlers.EntryHandler, Microsoft.Maui, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.DeviceTests.Stubs.EntryStub, Microsoft.Maui.Core.DeviceTests, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<AttachAndRun>b__0(IPlatformViewHandler handler)
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5139480] 2026-06-25 07:41:09.513780-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.AssertionExtensions.<>c__DisplayClass12_1`2[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Maui.IPlatformViewHandler, Microsoft.Maui, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].<AttachAndRun>b__1()
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5141250] 2026-06-25 07:41:09.513878-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.AssertionExtensions.<AttachAndRun>d__51`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5141340] 2026-06-25 07:41:09.513947-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.AssertionExtensions.<AttachAndRun>d__51`1[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5142810] 2026-06-25 07:41:09.514045-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.AssertionExtensions.<>c__DisplayClass12_0`2.<<AttachAndRun>g__Run|0>d[[System.Boolean, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Microsoft.Maui.IPlatformViewHandler, Microsoft.Maui, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143000] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143130] 2026-06-25 07:41:09.514168-0700 Microsoft.Maui.Core.DeviceTests[6697:45583]    at Microsoft.Maui.DeviceTests.EntryHandlerTests.CursorPositionPreservedDuringInsertTextWithTextTransformUppercase()
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143180] --- End of stack trace from previous location ---
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143210]    Execution time: 0.4355974
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143240]    Test trait name: Category
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5143270]       value: Entry
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5152160] 2026-06-25 07:41:09.515008-0700 Microsoft.Maui.Core.DeviceTests[6697:45583] Tests run: 233 Passed: 231 Inconclusive: 0 Failed: 1 Ignored: 1
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5187750] 2026-06-25 07:41:09.518455-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [07:41:09.5188670] 2026-06-25 07:41:09.518656-0700 Microsoft.Maui.Core.DeviceTests[6697:45033] Tests run: 1258 Passed: 231 Inconclusive: 0 Failed: 1 Ignored: 1026
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.core.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.core.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "G90PQM77TC-1",
        "exitCode": 1,
        "exitCodeName": "TESTS_FAILED",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-A5A2B879-2972-4469-92C6-B6A7C7B57123.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260625_074012.log",
            "type": "devicelist"
          },
          {
            "name": "test-ios-simulator-64_26.0-20260625_074021.log",
            "type": "testlog"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Core.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.core.devicetests.log",
            "type": "applicationlog"
          },
          {
            "name": "xunit-test-ios-simulator-64_26.0-20260625_074021.xml",
            "type": "xmllog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 1 (TESTS_FAILED)
  Passed: 0
  Failed: 0
  Tests completed with exit code: 1

🟢 With fix — 📱 EntryHandlerTests (CursorPositionPreservedDuringInsertTextWithTextTransformUppercase): PASS ✅ · 259s

(truncated to last 15,000 chars)

pplication/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : monoeg_g_log
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7097070] 	0x10a1b2848 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_aot_module
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7097190] 	0x10a28c618 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_load_from
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7097230] 	0x10a28c134 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7097280] 	0x10a28d454 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106250] 	0x109df9ddc - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libxamarin-dotnet.dylib : xamarin_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106470] 	0x10a28e470 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : invoke_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106560] 	0x10a28b3f8 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_byname
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106800] 	0x10a1bc0b0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_image
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106910] 	0x10a1b27e0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_aot_module
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7106960] 	0x10a28c618 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_load_from
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107020] 	0x10a28c134 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107270] 	0x10a28d454 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107360] 	0x109df9ddc - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libxamarin-dotnet.dylib : xamarin_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107400] 	0x10a28e470 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : invoke_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107440] 	0x10a28b3f8 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_byname
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107570] 	0x10a1bc0b0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_image
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107620] 	0x10a1b27e0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_aot_module
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107740] 	0x10a28c618 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_load_from
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7107950] 	0x10a28c134 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108010] 	0x10a28d454 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_open
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108050] 	0x109df9ddc - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libxamarin-dotnet.dylib : xamarin_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108160] 	0x10a28e470 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : invoke_assembly_preload_hook
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108270] 	0x10a28b3f8 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_assembly_request_byname
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108320] 	0x10a1bc0b0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_image
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108820] 	0x10a1b27e0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : load_aot_module
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7108970] 	0x10a1b6fac - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_aot_get_method
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7109030] 	0x10a13bf3c - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_jit_compile_method_with_opt
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7109120] 	0x10a139cac - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_jit_runtime_invoke
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7111480] 	0x10a2fa910 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_runtime_invoke_checked
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7111670] 	0x10a2ad818 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : create_exception_two_strings
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7111730] 	0x10a2ad59c - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_exception_from_name_two_strings_checked
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7111820] 	0x10a28796c - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_runtime_init_checked
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7111880] 	0x10a13963c - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mini_init
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7112040] 	0x10a190d1c - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libmonosgen-2.0.dylib : mono_jit_init
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7112100] 	0x109df9014 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libxamarin-dotnet.dylib : xamarin_bridge_initialize
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7112180] 	0x109dfa1e8 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/libxamarin-dotnet.dylib : xamarin_main
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7841870] 	0x104cfc2c0 - /Users/cloudtest/Library/Developer/CoreSimulator/Devices/A5A2B879-2972-4469-92C6-B6A7C7B57123/data/Containers/Bundle/Application/69147919-D0BA-4EC9-B4DB-D103837A4BBC/Microsoft.Maui.Core.DeviceTests.app/Microsoft.Maui.Core.DeviceTests : main
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7842720] 	0x1099a93d0 - Unknown
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7842800] 	0x109afbda4 - Unknown
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7842860]
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7842920] =================================================================
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7842970] 	Basic Fault Address Reporting
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843010] =================================================================
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843060] Memory around native instruction pointer (0x109cfc88c):0x109cfc87c  c0 03 5f d6 c0 03 5f d6 10 29 80 d2 01 10 00 d4  .._..._..)......
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843100] 0x109cfc88c  e3 00 00 54 fd 7b bf a9 fd 03 00 91 16 e3 ff 97  ...T.{..........
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843130] 0x109cfc89c  bf 03 00 91 fd 7b c1 a8 c0 03 5f d6 c0 03 5f d6  .....{...._..._.
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843160] 0x109cfc8ac  70 0a 80 d2 01 10 00 d4 e3 00 00 54 fd 7b bf a9  p..........T.{..
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843200]
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843360] =================================================================
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843410] 	Managed Stacktrace:
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843450] =================================================================
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843490] 	  at <unknown> <0xffffffff>
�[40m�[37mdbug�[39m�[22m�[49m: [07:44:57.7843600] =================================================================
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.core.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.core.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
      {
        "version": 1,
        "machineName": "G90PQM77TC-1",
        "exitCode": 0,
        "exitCodeName": "SUCCESS",
        "platform": "apple",
        "device": "iPhone 11 Pro",
        "deviceOsVersion": "26.0",
        "files": [
          {
            "name": "test-ios-simulator-64_26.0-A5A2B879-2972-4469-92C6-B6A7C7B57123.log",
            "type": "executionlog"
          },
          {
            "name": "list-ios-simulator-64_26.0-20260625_074448.log",
            "type": "devicelist"
          },
          {
            "name": "iPhone 11 Pro.log",
            "type": "systemlog"
          },
          {
            "name": "Microsoft.Maui.Core.DeviceTests.log",
            "type": "systemlog"
          },
          {
            "name": "com.microsoft.maui.core.devicetests.log",
            "type": "applicationlog"
          }
        ]
      }
      <<XHARNESS_RESULT_END>>
XHarness exit code: 0
  Passed: 0
  Failed: 0
  Tests completed successfully

📁 Fix files reverted (1 files)
  • src/Core/src/Platform/iOS/TextFieldExtensions.cs

📱 UI Tests — ViewBaseTests

Detected UI test categories: ViewBaseTests

Deep UI tests — 13 passed, 99 failed across 1 category on platform-pool agent (replaces in-process counts above).

🧪 UI Test Execution Results (deep, platform pool)

Category Tests Snapshot diffs
ViewBaseTests 13/112 (99 ❌) 198 diff PNGs
ViewBaseTests — 99 failed tests
ContentView_ClipWithShadow
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.ContentView_ClipWithShadow() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 586
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Runt
...
FirstCustomPageWithIconImageChanged
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ContentViewFeatureTests.FirstCustomPageWithIconImageChanged() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ContentViewFeatureTests.cs:line 274
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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
...
DefaultContentWithBackgroundColor
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ContentViewFeatureTests.DefaultContentWithBackgroundColor() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ContentViewFeatureTests.cs:line 106
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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 S
...
ImageButton_ClipWithScale
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.ImageButton_ClipWithScale() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 948
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Runti
...
Image_ClipWithEllipseGeometry
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Image_ClipWithEllipseGeometry() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 303
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.R
...
Image_ClipWithRoundRectangleGeometry
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Image_ClipWithRoundRectangleGeometry() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 319
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Refle
...
DarkTheme_SearchBar_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.DarkTheme_SearchBar_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 266
   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)
VerifyBackgroundColorCleared
System.InvalidOperationException : 
Snapshot different than baseline: VerifyBackgroundColorCleared.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyBackgroundColorCleared.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachmen
...
Border_ClipWithStrokeColorGreen
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Border_ClipWithStrokeColorGreen() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 90
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.
...
VisualTransform_ScaleYWithAnchorXAndRotationY
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_ScaleYWithAnchorXAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_ScaleYWithAnchorXAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the 
...
ContentView_ClipNull_NoCrash
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.ContentView_ClipNull_NoCrash() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 785
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Ru
...
VisualTransform_ScaleWithAnchorXAndRotationY
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_ScaleWithAnchorXAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_ScaleWithAnchorXAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the ba
...
VisualTransform_AnchorY_ScaleXWithRotationX
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_AnchorY_ScaleXWithRotationX.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_AnchorY_ScaleXWithRotationX.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the base
...
ContentView_ClipWithRectangleGeometry
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.ContentView_ClipWithRectangleGeometry() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 533
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Refl
...
Image_ClipWithPolyBezierSegmentPath
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Image_ClipWithPolyBezierSegmentPath() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 415
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Reflec
...
DarkTheme_RadioButton_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.DarkTheme_RadioButton_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 125
   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)
VisualTransform_ScaleXWithAnchorYAndRotationY
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_ScaleXWithAnchorYAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_ScaleXWithAnchorYAndRotationY.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the 
...
VisualTransform_RotationWithRotationX
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_RotationWithRotationX.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_RotationWithRotationX.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.

...
LightTheme_SearchBar_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.LightTheme_SearchBar_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 256
   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)
LightTheme_Editor_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.LightTheme_Editor_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 276
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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 Syste
...
Image_ClipWithPolyQuadraticBezierSegmentPath
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Image_ClipWithPolyQuadraticBezierSegmentPath() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 447
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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 Syst
...
FirstCustomPageWithBackgroundColor
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ContentViewFeatureTests.FirstCustomPageWithBackgroundColor() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ContentViewFeatureTests.cs:line 216
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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 
...
BoxView_ClipWithShadow
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.BoxView_ClipWithShadow() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 197
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.RuntimeM
...
DarkTheme_EditorAndPlaceholderColor_VerifyVisualState
System.InvalidOperationException : 
Snapshot different than baseline: DarkTheme_EditorAndPlaceholderColor_VerifyVisualState.png (size differs - baseline is 1124x1126 pixels, actual is 1206x1312 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: DarkTheme_EditorAndPlaceholderColor_VerifyVisualState.png (size differs - baseline is 1124x1126 pixels, actual is 1206x1312 pixels)
If the correct baseline has changed (this isn't a a bug), 
...
DarkTheme_Editor_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.DarkTheme_Editor_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 286
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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
...
Image_ClipNull_NoCrash
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Image_ClipNull_NoCrash() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 725
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.RuntimeM
...
Button_ClipWithShadow
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.Button_ClipWithShadow() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 264
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.RuntimeMe
...
BoxView_ClipWithCornerRadius
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ClipFeatureTests.BoxView_ClipWithCornerRadius() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ClipFeatureTests.cs:line 176
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   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.Ru
...
DarkTheme_DatePicker_VerifyVisualState
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.AppThemeFeatureTests.DarkTheme_DatePicker_VerifyVisualState() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AppThemeFeatureTests.cs:line 105
   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)
VisualTransform_Rotation
System.InvalidOperationException : 
Snapshot different than baseline: VisualTransform_Rotation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VisualTransform_Rotation.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or dow
...

(+69 more — see TRX in artifact)

📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)


🔗 Regression Cross-Reference

🔍 Regression Cross-Reference

🟡 Overlaps with prior bug-fix PRs — same files modified, but no exact line revert detected.

File Fix PR Fixed issue(s)
src/Core/src/Platform/iOS/TextFieldExtensions.cs #32889 #32886

🧪 Regression Tests to Verify

These tests were added by the overlapping fix PRs. Running them to verify no side-effect regressions:

Fix PR Type Test Filter
#32889 UITest Issue32886 Issue32886

🧪 Regression Test Results

FAILED — 0 passed, 1 failed, 0 skipped

Fix PR Test Type Result
#32889 Issue32886 UITest ❌ FAILED

📋 Pre-Flight — Context & Validation

Issue: #36018 - [MAUI iOS] Cursor jumps to the end of text in an Entry
PR: #36079 - [iOS/macCatalyst] Fix Entry cursor reset when typing with TextTransform
Platforms Affected: iOS, MacCatalyst
Files Changed: 1 implementation, 1 test

Key Findings

  • The PR fixes UITextField/Entry max-length formatting by caching AttributedText before trimming and only assigning when TrimToMaxLength returns a different reference.
  • The linked issue reports iOS Entry cursor jumps with TextTransform=UpperCase; issue comments also validate Android/iOS reproduction, though this PR is scoped to iOS/MacCatalyst Entry platform code.
  • The PR adds an iOS Core device test: EntryHandlerTests.CursorPositionPreservedDuringInsertTextWithTextTransformUppercase.
  • Prior PR/issue comments contain automation and trigger comments only; no prior inline review findings were present in the public review-comment surface.
  • Code review identified an adjacent identical pattern in TextViewExtensions.UpdateMaxLength for Editor; that is a discussion point for whether scope should expand beyond Entry.
  • Impacted UI category: Entry. Mandatory regression cross-reference test: BuildAndRunHostApp.ps1 -Platform ios -TestFilter "Issue32886".

Code Review Summary

Verdict: NEEDS_DISCUSSION
Confidence: low
Errors: 0 | Warnings: 2 | Suggestions: 0

Key code review findings:

  • ⚠️ src/Core/src/Platform/iOS/TextViewExtensions.cs:43-45 has the same double-access AttributedText/!= pattern for UITextView/Editor and may preserve the same cursor-reset behavior outside Entry.
  • ⚠️ src/Core/tests/DeviceTests/Handlers/Entry/EntryHandlerTests.iOS.cs:676 names the test as TextTransform-specific, but the test body does not configure TextTransform; the test still validates the general cursor-preservation behavior.
  • Failure probe: null AttributedText remains safe because TrimToMaxLength returns null and no assignment occurs.
  • Failure probe: default MaxLength returns the same attributed-string reference, so the PR skips redundant assignment on normal typing.
  • Failure probe: actual trimming still returns a new attributed string and assigns it, preserving max-length behavior.
  • Blast radius: runs for all iOS/MacCatalyst Entry instances during formatting/typing, but reduces redundant platform assignments and adds no static/shared state.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #36079 Cache UITextField.AttributedText, call TrimToMaxLength, and assign only when the returned reference differs. ✅ PASSED (Gate) src/Core/src/Platform/iOS/TextFieldExtensions.cs, src/Core/tests/DeviceTests/Handlers/Entry/EntryHandlerTests.iOS.cs Original PR. Gate was pre-run and passed; not re-run in this phase.

🔬 Code Review — Deep Analysis

Code Review — PR #36079

Independent Assessment

What this changes: UpdateMaxLength in TextFieldExtensions.cs now caches textField.AttributedText into a local variable before calling TrimToMaxLength, and replaces the != guard with ReferenceEquals. A new device test verifies that cursor position is preserved after mid-text insertion.

Inferred motivation: Each call to textField.AttributedText through the ObjC bridge returns a new managed wrapper around the same native object. The original != guard was therefore always true, causing textField.AttributedText = newText to be executed on every call even when no trimming was needed. UIKit uses an AttributedText assignment as a signal to reset the cursor to end-of-text. By caching the first read and using ReferenceEquals, the assignment is skipped when TrimToMaxLength returns the same instance.

Is the approach sound? Yes. TrimToMaxLength returns the same reference when no trimming occurs and returns a substring when trimming is needed:

public static NSAttributedString? TrimToMaxLength(this NSAttributedString? attributedString, int maxLength) =>
	maxLength >= 0 && attributedString?.Length > maxLength
		? attributedString.Substring(0, maxLength)
		: attributedString;

ReferenceEquals distinguishes these two paths without content comparison.

Reconciliation with PR Narrative

Author claims: The bug is caused by UITextField.AttributedText returning a new C# wrapper for the same native ObjC instance on each access, making != always true, causing unconditional AttributedText assignment on every keystroke and resetting cursor position. The fix caches the attributed text and uses ReferenceEquals. The linked issue is #36018.

Agreement/disagreement: The root-cause analysis matches the code and the fix is minimal for Entry. The notable gap is that TextViewExtensions.UpdateMaxLength for Editor has the same double-access pattern and is not changed by this PR.

Prior Review Reconciliation

No prior ❌ Error findings found. The public PR issue comments contain automation/trigger comments only, and the public inline review-comments endpoint returned no comments.

Blast Radius Assessment

  • Runs for all instances: Yes. UpdateMaxLength runs for iOS/MacCatalyst Entry formatting updates, but the change only reduces redundant AttributedText assignment.
  • Startup impact: No. This executes when text/formatting updates occur, not during app startup.
  • Static/shared state: No.

CI Status

  • Required-check result: Undetermined in this environment. gh pr checks --required could not run because GitHub CLI is unauthenticated.
  • Classification: Undetermined.
  • Action taken: Confidence capped to low.

Findings

⚠️ Warning — Parallel bug in TextViewExtensions.UpdateMaxLength not fixed

src/Core/src/Platform/iOS/TextViewExtensions.cs:43-45 has the same double-access pattern:

var newText = textView.AttributedText.TrimToMaxLength(editor.MaxLength);
if (newText != null && textView.AttributedText != newText)
	textView.AttributedText = newText;

If UITextView.AttributedText has the same wrapper behavior, Editor can still reset cursor position for the same max-length formatting path. This is not necessarily required for an Entry-only PR, but it is adjacent and should be considered.

⚠️ Warning — Test name does not match the test scenario

src/Core/tests/DeviceTests/Handlers/Entry/EntryHandlerTests.iOS.cs:676 names the test CursorPositionPreservedDuringInsertTextWithTextTransformUppercase, but the test body creates a plain EntryStub and does not configure TextTransform. The test still validates cursor preservation for the relevant UpdateMaxLength path, but the name implies a TextTransform setup that is not present.

Failure-Mode Probing

  • AttributedText is null: TrimToMaxLength returns null; the guard prevents assignment.
  • Default MaxLength: TrimToMaxLength returns the same attributed string reference; ReferenceEquals prevents redundant assignment.
  • Actual over-max-length text: TrimToMaxLength returns a new substring; assignment still occurs, preserving max-length behavior.
  • Handler reconnect/disconnect: no new subscriptions or static state are introduced.
  • Character spacing: non-zero character spacing can still assign AttributedText; this PR is scoped to UpdateMaxLength.

Verdict: NEEDS_DISCUSSION

Confidence: low (platform-specific handler code and CI status undetermined in this environment)
Summary: The Entry fix is technically sound and narrowly targets the redundant iOS attributed-text assignment. The main discussion point is whether the same TextViewExtensions.UpdateMaxLength issue should be fixed for Editor at the same time; the test name should also be aligned with the actual scenario.


🛠️ Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Precondition length guard: return before trimming/assignment when AttributedText is null, MaxLength < 0, or current length is within max; also apply to TextViewExtensions. ✅ PASS 2 files Initially failed compile with nuint/nint comparison; corrected to (nint). Broader than PR because it fixes Editor too.
2 try-fix Semantic post-trim guard: assign only when newText.Length < attributedText.Length. ✅ PASS 1 file Narrowest passing alternative; avoids PR's object identity dependency.
PR PR #36079 Cache UITextField.AttributedText and use ReferenceEquals(attributedText, newText) after TrimToMaxLength. ✅ PASSED (Gate) 2 files Original PR; gate was completed before this run.

Cross-Pollination

Model Round New Ideas? Details
maui-expert-reviewer 1 Yes Suggested try-fix-1: precondition length guard, including the adjacent TextViewExtensions path.
maui-expert-reviewer 2 Yes Suggested try-fix-2: semantic post-trim length comparison, narrower than try-fix-1 and distinct from the PR's ReferenceEquals.
maui-expert-reviewer Exhaustion No NO NEW IDEAS; remaining vectors were helper contract changes or invasive platform-view setter interception, neither better than try-fix-2.

Test Commands

Candidate Primary Test Mandatory Regression
try-fix-1 pwsh .github/skills/run-device-tests/scripts/Run-DeviceTests.ps1 -Project Core -Platform ios -TestFilter "Category=Entry" — ✅ PASS pwsh .github/scripts/BuildAndRunHostApp.ps1 -Platform ios -TestFilter "Issue32886" — ✅ PASS
try-fix-2 pwsh .github/skills/run-device-tests/scripts/Run-DeviceTests.ps1 -Project Core -Platform ios -TestFilter "Category=Entry" — ✅ PASS pwsh .github/scripts/BuildAndRunHostApp.ps1 -Platform ios -TestFilter "Issue32886" — ✅ PASS

Exhausted: Yes
Selected Fix: Candidate #2 — It is a same-scope, one-file alternative that uses the semantic result of trimming rather than managed wrapper/reference identity. Candidate #1 also passed and covers the adjacent Editor path, but that broader scope is less clearly appropriate for an Entry-only PR.


🏁 Report — Final Recommendation

Comparative Report — PR #36079

Candidates

Candidate Approach Regression result Review status Rank
pr-plus-reviewer Keep the PR's one-read AttributedText + ReferenceEquals guard, and apply expert feedback by making test coverage accurately reflect both the Core mechanism and the Controls TextTransform=Uppercase issue path. PR gate passed; reviewer-applied test change was sandbox-only and not rerun. Best combination of sound production fix and corrected regression coverage. 1
pr Cache UITextField.AttributedText, call TrimToMaxLength, and assign only when the returned instance is not the same managed object. ✅ Gate passed — tests fail without fix and pass with fix. Production fix is sound, but the added test is named as a TextTransform regression without setting TextTransform. 2
try-fix-2 Same PR scope, but assign only when TrimToMaxLength returns a shorter attributed string (newText.Length < attributedText.Length). ✅ PASS — Entry device tests and mandatory Issue32886 regression passed. Strong same-scope alternative that avoids object identity, but it inherits the PR's test coverage gap and is not materially safer than the PR helper-contract identity guard. 3
try-fix-1 Precondition guard: return when AttributedText is null, max length is disabled, or current length is already within max; also applies the same guard to TextViewExtensions/Editor. ✅ PASS — Entry device tests and mandatory Issue32886 regression passed. Technically valid and broader, but it expands scope to Editor without this Entry-focused PR requiring it. 4

No candidate failed regression tests. If any candidate had failed, it would be ranked below the passing candidates regardless of design preference.

Analysis

The raw PR production fix is correct for the root cause described in pre-flight: TrimToMaxLength returns the same NSAttributedString argument when no trimming is needed, so caching textField.AttributedText once and comparing the returned value with ReferenceEquals avoids the false inequality caused by multiple managed wrappers over the same native Objective-C instance. Real trimming still produces a substring and assigns it, so max-length behavior is preserved.

try-fix-2 is a good independent alternative because it uses the semantic fact that trimming shortens the text. However, that does not make it clearly superior: the current helper's no-op contract already returns the same argument, and the PR's identity guard is precise about whether the helper returned a replacement object. try-fix-1 also works, but its Editor/TextView change increases blast radius beyond the Entry/iOS issue being fixed.

The expert reviewer found no production-code defect. The only actionable issue is that the added Core handler test does not actually exercise TextTransform=Uppercase; it validates the underlying cursor-preservation mechanism. pr-plus-reviewer is therefore the strongest candidate because it keeps the minimal production fix and corrects the test story rather than changing working production code.

Winner

Winner: pr-plus-reviewer

Rationale: It preserves the PR's localized, passing production fix and incorporates the expert reviewer's only actionable feedback by making regression coverage match the reported TextTransform scenario. The try-fix candidates passed their regression runs, but neither provides a decisive production-code advantage over the PR fix, and both leave the reviewer-identified test coverage issue unaddressed.


🧭 Next Steps — review latest findings

No alternative fix was selected for this run. Review the session findings and CI results before merging.

@MauiBot MauiBot removed the s/agent-review-in-progress AI review is currently running for this PR label Jun 25, 2026
@kubaflo
kubaflo changed the base branch from main to inflight/current June 25, 2026 19:41
@kubaflo
kubaflo merged commit 81295ab into dotnet:inflight/current Jun 25, 2026
@github-actions github-actions Bot added this to the .NET 10 SR9 milestone Jun 25, 2026
@kubaflo kubaflo mentioned this pull request Jul 6, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-entry Entry community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios platform/macos macOS / Mac Catalyst s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[MAUI iOS] Cursor jumps to the end of text in an Entry

5 participants