Repository navigation
[tests] Re-enable Android memory-leak UI tests (#27411) - #36480
Conversation
Re-enable Bugzilla40955 (MemoryLeakInFormsAppCompatActivity) and Bugzilla42329 (MemoryLeakB42329) on Android — both now pass on net10 (verified locally on an Android API 30 emulator across multiple runs). Bugzilla44166 (FlyoutPage disposal) still leaks on Android, so it stays skipped but now points at the dedicated tracking issue #36479 instead of the umbrella #27411. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4963cebd-6bf0-4911-aff9-c2d2ab398cfe
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36480Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36480" |
This comment has been minimized.
This comment has been minimized.
|
/azp run maui-pr-devicetests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Pull request overview
Re-enables previously skipped Android UI memory-leak tests in the Controls test suite by removing Android-only [Ignore] attributes for the tests that are now stable, while keeping the remaining failing test skipped with an updated tracking link.
Changes:
- Removed Android-only
[Ignore]fromBugzilla40955.MemoryLeakInFormsAppCompatActivityso it runs again on Android. - Removed Android-only
[Ignore]fromBugzilla42329.MemoryLeakB42329so it runs again on Android. - Kept
Bugzilla44166.Bugzilla44166Testignored on Android, updating the ignore message to point to the new dedicated tracking issue (#36479).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla44166.cs | Updates Android ignore reason/link while continuing to skip the still-failing leak test on Android. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla42329.cs | Re-enables the test on Android by removing the Android-only ignore. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla40955.cs | Re-enables the test on Android by removing the Android-only ignore. |
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@kubaflo — new AI review results are available based on this last commit:
75e298a. To request a fresh review after new comments or commits, comment/review rerun.
🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix
Gate Result: ⚠️ INCONCLUSIVE
Platform: ANDROID
⚠️ verify-tests-fail.ps1exited before writing a verification report. Diagnostics below.
Exit code: 3
Likely cause:
- Device/emulator setup failed (env error class).
Artifacts written before exit:
test-failure-Bugzilla40955.log(7.5 KB)test-failure-Bugzilla42329.log(7.4 KB)test-failure-Bugzilla44166.log(7.5 KB)verification-log.txt(0.2 KB)
Gate output log (last 60 lines)
🔹 Collecting test artifacts (screenshots, page source)...
ℹ️ Test artifacts collected: 0 screenshot(s), 0 page source(s) (copied 0 from assembly dir)
🔹 Capturing device logs...
ℹ️ Dumping Android logcat buffer (filtered to HostApp)...
ℹ️ Android logcat saved to: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/android-device.log
═══════════════════════════════════════════════════════
Android Device Logs (Last 100 lines)
═══════════════════════════════════════════════════════
07-09 09:55:29.107 4014 4044 I appium : Created the new session with id 95982ce0-97fd-40ff-a0bc-9274dff4a916 and capabilities {appPackage=com.microsoft.maui.uitests, networkConnectionEnabled=true, disableWindowAnimation=true, noReset=true, warnings={}, reportFormat=xml, disableAndroidWatchers=true, databaseEnabled=false, deviceName=emulator-5554, platform=LINUX, deviceUDID=emulator-5554, appActivity=com.microsoft.maui.uitests.MainActivity, androidInstallTimeout=60000.0, desired={platformName=Android, automationName=UIAutomator2, reportDirectory=reports, reportFormat=xml, newCommandTimeout=3000.0, noReset=true, appPackage=com.microsoft.maui.uitests, appActivity=com.microsoft.maui.uitests.MainActivity, disableAndroidWatchers=true, androidInstallTimeout=60000.0, waitForIdleTimeout=5000.0, disableWindowAnimation=true, ignoreHiddenApiPolicyError=true}, newCommandTimeout=3000.0, automationName=UIAutomator2, webStorageEnabled=false, locationContextEnabled=false, reportDirectory=reports, takesScreenshot=true, javascriptEnabled=true, platformName=Android, ignoreHiddenApiPolicyError=true}
07-09 09:55:29.113 4014 4044 I appium : AppiumResponse: {"sessionId":"95982ce0-97fd-40ff-a0bc-9274dff4a916","value":{"capabilities":{"firstMatch":[{"platformName":"Android","automationName":"UIAutomator2","reportDirectory":"reports","reportFormat":"xml","newCommandTimeout":3000.0,"noReset":true,"appPackage":"com.microsoft.maui.uitests","appActivity":"com…
07-09 09:55:29.566 13944 14198 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.microsoft.maui.uitests/.MainActivity} from uid 2000
07-09 09:55:30.431 13944 13971 D ArtManagerInternalImpl: /data/misc/iorapd/com.microsoft.maui.uitests/1/com.microsoft.maui.uitests.MainActivity/compiled_traces/compiled_trace.pb doesn't exist
07-09 09:55:30.496 13944 13971 I ActivityTaskManager: Displayed com.microsoft.maui.uitests/.MainActivity: +862ms
07-09 09:55:31.090 4014 4044 I appium : method: 'id', selector: 'com.microsoft.maui.uitests:id/GoToTestButton'
07-09 09:55:31.615 4014 4044 I appium : method: 'id', selector: 'com.microsoft.maui.uitests:id/SearchBar'
07-09 09:55:31.959 4014 4044 I appium : method: 'id', selector: 'com.microsoft.maui.uitests:id/GoToTestButton'
07-09 09:55:32.226 4014 4044 I appium : method: 'id', selector: 'com.microsoft.maui.uitests:id/GoToTestButton'
07-09 09:55:33.818 13944 14325 I ActivityManager: Force stopping com.microsoft.maui.uitests appid=10154 user=0: from pid 4111
07-09 09:55:33.819 13944 14325 I ActivityManager: Killing 3704:com.microsoft.maui.uitests/u0a154 (adj 0): stop com.microsoft.maui.uitests due to from pid 4111
07-09 09:55:33.825 13944 14325 W ActivityTaskManager: Force removing ActivityRecord{f596c43 u0 com.microsoft.maui.uitests/.MainActivity t48 f}}: app died, no saved state
07-09 09:55:34.830 13944 16965 D AutofillSession: handling death of Token{78bddf2 ActivityRecord{f596c43 u0 com.microsoft.maui.uitests/.MainActivity t-1 f}}} when saving=false
07-09 09:55:35.599 13944 16965 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.microsoft.maui.uitests/.MainActivity} from uid 2000
07-09 09:55:36.077 13944 13973 I ActivityManager: Start proc 4133:com.microsoft.maui.uitests/u0a154 for pre-top-activity {com.microsoft.maui.uitests/com.microsoft.maui.uitests.MainActivity}
07-09 09:55:36.990 4133 4133 W monodroid: Failed to create directory '/data/user/0/com.microsoft.maui.uitests/files/.__override__/x86_64'. File exists
07-09 09:55:36.990 4133 4133 W monodroid: Creating public update directory: `/data/user/0/com.microsoft.maui.uitests/files/.__override__/x86_64`
07-09 09:55:37.019 4133 4133 D DOTNET : AndroidCryptoNative_InitLibraryOnLoad: jint AndroidCryptoNative_InitLibraryOnLoad(JavaVM *, void *) in /__w/1/s/src/runtime/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.c
07-09 09:55:37.021 4133 4133 D DOTNET : GetOptionalClassGRef: optional class com/android/org/conscrypt/OpenSSLEngineImpl was not found
07-09 09:55:37.636 4133 4133 W ft.maui.uitest: ClassLoaderContext classpath size mismatch. expected=15, found=2 (DLC[];PCL[base.apk*1604962157:base.apk!classes2.dex*892330443:base.apk!classes3.dex*4132208247:base.apk!classes4.dex*1189418256:base.apk!classes5.dex*603145810:base.apk!classes6.dex*3249919879:base.apk!classes7.dex*4272712489:base.apk!classes8.dex*2286867051:base.apk!classes9.dex*1990284164:base.apk!classes10.dex*1304220855:base.apk!classes11.dex*2113592843:base.apk!classes12.dex*567841885:base.apk!classes13.dex*1284683107:base.apk!classes14.dex*287099224:base.apk!classes15.dex*3381648213]{PCL[/system/framework/org.apache.http.legacy.jar*1452144318]#PCL[/system/framework/com.android.location.provider.jar*4177849200]#PCL[/system/framework/com.android.media.remotedisplay.jar*1128910120]#PCL[/system_ext/framework/androidx.window.sidecar.jar*709954415]} | DLC[];PCL[/data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk*3243068382:/data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk!classes2.dex*2864831927]{PCL[/system/framework/org.apache.http.legacy.jar*1452144318]#PCL[/system_ext/framework/androidx.window.sidecar.jar*709954415]})
07-09 09:55:37.637 4133 4133 W ft.maui.uitest: Found duplicated class when checking oat files: 'Landroid/support/v4/graphics/drawable/IconCompatParcelizer;' in /data/app/~~ZlkzjixvWGeOIuReL3RWDQ==/com.google.android.gms-HtXi96UN3vYSHEpVV2M57g==/split_MapsDynamite_installtime.apk!classes2.dex and /data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk
07-09 09:55:39.583 13944 13971 D ArtManagerInternalImpl: /data/misc/iorapd/com.microsoft.maui.uitests/1/com.microsoft.maui.uitests.MainActivity/compiled_traces/compiled_trace.pb doesn't exist
07-09 09:55:40.064 14668 15926 I PhenotypeResourceReader: unable to find any Phenotype resource metadata for com.microsoft.maui.uitests
07-09 09:55:40.081 13944 13971 I ActivityTaskManager: Displayed com.microsoft.maui.uitests/.MainActivity: +3s983ms
07-09 09:55:40.109 4133 4215 W ft.maui.uitest: ClassLoaderContext classpath size mismatch. expected=15, found=2 (DLC[];PCL[base.apk*1604962157:base.apk!classes2.dex*892330443:base.apk!classes3.dex*4132208247:base.apk!classes4.dex*1189418256:base.apk!classes5.dex*603145810:base.apk!classes6.dex*3249919879:base.apk!classes7.dex*4272712489:base.apk!classes8.dex*2286867051:base.apk!classes9.dex*1990284164:base.apk!classes10.dex*1304220855:base.apk!classes11.dex*2113592843:base.apk!classes12.dex*567841885:base.apk!classes13.dex*1284683107:base.apk!classes14.dex*287099224:base.apk!classes15.dex*3381648213]{PCL[/system/framework/org.apache.http.legacy.jar*1452144318]#PCL[/system/framework/com.android.location.provider.jar*4177849200]#PCL[/system/framework/com.android.media.remotedisplay.jar*1128910120]#PCL[/system_ext/framework/androidx.window.sidecar.jar*709954415]} | DLC[];PCL[/data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk*3243068382:/data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk!classes2.dex*2864831927]{PCL[/system/framework/org.apache.http.legacy.jar*1452144318]#PCL[/system_ext/framework/androidx.window.sidecar.jar*709954415]})
07-09 09:55:40.109 4133 4215 W ft.maui.uitest: Found duplicated class when checking oat files: 'Landroid/support/v4/graphics/drawable/IconCompatParcelizer;' in /data/app/~~ZlkzjixvWGeOIuReL3RWDQ==/com.google.android.gms-HtXi96UN3vYSHEpVV2M57g==/split_GoogleCertificates_installtime.apk!classes2.dex and /data/app/~~3RgJYNVixA9BRl8Qovpd9A==/com.microsoft.maui.uitests-WBYqBpMCYV2rEbRhtKsXLw==/base.apk
07-09 09:55:40.230 4133 4206 I PhClient: Shared storage file not found for com.google.android.gms.clearcut_client#com.microsoft.maui.uitests
07-09 09:55:40.232 4133 4206 I PhClient: Unable to retrieve flag snapshot for com.google.android.gms.clearcut_client#com.microsoft.maui.uitests, using defaults.
ℹ️ Full device log: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests/android-device.log
═══════════════════════════════════════════════════════
✅ All tests passed
╔═══════════════════════════════════════════════════════════╗
║ Test Summary ║
╠═══════════════════════════════════════════════════════════╣
║ Platform: ANDROID ║
║ Device: emulator-5554 ║
║ Test Filter: Bugzilla44166 ║
║ Result: SUCCESS ✅ ║
║ Logs: /home/vsts/work/1/s/CustomAgentLogsTmp/UITests
╚═══════════════════════════════════════════════════════════╝
==========================================
VERIFICATION RESULTS
==========================================
🖥️ [UITest] Bugzilla40955: PASSED ❌ (should fail!)
🖥️ [UITest] Bugzilla42329: PASSED ❌ (should fail!)
🖥️ [UITest] Bugzilla44166: PASSED ❌ (should fail!)
╔═══════════════════════════════════════════════════════════╗
║ VERIFICATION FAILED ❌ ║
╠═══════════════════════════════════════════════════════════╣
║ 3/3 test(s) PASSED but should FAIL! ║
║ Those tests don't reproduce the bug. Revise them! ║
╚═══════════════════════════════════════════════════════════╝
📱 UI Tests — FlyoutPage,ListView,Performance
Detected UI test categories: FlyoutPage,ListView,Performance
❌ Deep UI tests — 175 passed, 3 failed across 3 categories on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
FlyoutPage |
61/64 (3 ❌) | — |
ListView |
109/109 ✓ | — |
Performance |
5/6 ✓ | — |
❌ FlyoutPage — 3 failed tests
VerifyFlyoutPage_IsGestureEnabled
Flyout did not open after multiple drag attempts
Assert.That(flyoutOpened, Is.True)
Expected: True
But was: False
at Microsoft.Maui.TestCases.Tests.FlyoutPageFeatureTests.VerifyFlyoutPage_IsGestureEnabled() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlyoutPageFeatureTests.cs:line 92
1) at Microsoft.Maui.TestCases.Tests.FlyoutPageFeatureTests.VerifyFlyoutPage_IsGestureEnabled() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlyoutPageFeatureTests.cs:line 92
ShouldKeepFlyoutLockedWhenSwitchingLandScapeToPortrait
OpenQA.Selenium.InvalidElementStateException : Screen rotation cannot be changed to ROTATION_0 after 2000ms. Is it locked programmatically?
at OpenQA.Selenium.WebDriver.UnpackAndThrowOnError(Response errorResponse, String commandToExecute)
at OpenQA.Selenium.WebDriver.ExecuteAsync(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Appium.AppiumDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Appium.AppiumDriver.set_Orientation(ScreenOrientation value)
at UITest.Appium.AppiumOrientationActions.SetOrientationPortrait(IDictionary`2 parameters) in /_/src/TestUtils/src/UITest.Appium/Actions/AppiumOrientationActions.cs:line 43
at UITest.Appium.AppiumOrientationActions.Execute(String commandName, IDictionary`2 parameters) in /_/src/TestUtils/src/UITest.Appium/Actions/AppiumOrientationActions.cs:line 34
at UITest.Appium.AppiumCommandExecutor.Execute(String commandName, IDictionary`2 parameters) in /_/src/TestUti
...
VerifyFlyoutPage_IsGestureEnabled_FlyoutBehaviorPopover
Flyout did not open after multiple drag attempts
Assert.That(flyoutOpened, Is.True)
Expected: True
But was: False
at Microsoft.Maui.TestCases.Tests.FlyoutPageFeatureTests.VerifyFlyoutPage_IsGestureEnabled_FlyoutBehaviorPopover() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlyoutPageFeatureTests.cs:line 149
1) at Microsoft.Maui.TestCases.Tests.FlyoutPageFeatureTests.VerifyFlyoutPage_IsGestureEnabled_FlyoutBehaviorPopover() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlyoutPageFeatureTests.cs:line 149
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)
📋 Pre-Flight — Context & Validation
Issue: #36479 - FlyoutPage instances are not collected on Android (inferred from local diff; GitHub CLI/web access unavailable)
PR: #36480 - Re-enable Android memory leak UI tests except known FlyoutPage leak (inferred from local diff)
Platforms Affected: Android
Files Changed: 0 implementation, 3 test
Key Findings
- PR is test-metadata only: it removes Android
[Ignore]fromBugzilla40955andBugzilla42329, and retargets the remaining Android skip onBugzilla44166from umbrella issue #27411 to #36479. - The affected tests are Appium UI tests in
TestCases.Shared.Tests; likely impacted categories arePerformance,ListView, andFlyoutPage. - GitHub CLI authentication and GitHub web fetch were unavailable, so issue/PR comments and required checks could not be independently gathered in this environment.
Code Review Summary
Verdict: NEEDS_DISCUSSION
Confidence: low
Errors: 0 | Warnings: 0 | Suggestions: 0
Key code review findings:
- ℹ No code-review findings; blast radius is limited to UI test execution metadata.
- ℹ CI/check status is undetermined because
gh pr checks --requiredcould not run without authentication.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #36480 | Remove obsolete Android ignores from Bugzilla40955 and Bugzilla42329; keep Bugzilla44166 ignored on Android with issue #36479. |
Bugzilla40955.cs, Bugzilla42329.cs, Bugzilla44166.cs |
Original PR; gate build/run was inconclusive per caller. |
🔬 Code Review — Deep Analysis
Code Review — PR #36480
Independent Assessment
What this changes: Re-enables two Android UI memory-leak tests by removing Android-only [Ignore] attributes, while keeping Bugzilla44166Test skipped on Android with a newer tracking issue link.
Inferred motivation: The umbrella Android memory-leak skip (#27411) appears partially resolved; only the FlyoutPage collection leak remains.
Reconciliation with PR Narrative
Author claims: Bugzilla40955 and Bugzilla42329 now pass locally on Android; Bugzilla44166 still fails and is tracked by #36479.
Agreement/disagreement: Matches the code and linked issue #36479. I could not independently verify local Android execution.
Prior Review Reconciliation
| Prior ❌ Error Finding | Source | Status | Evidence |
|---|---|---|---|
| No prior ❌ Error findings found. | Reviews, inline comments, issue comments | n/a | GitHub API showed one Copilot summary review with no comments, no inline review comments, and no error-level issue comments. |
CI Status
- Required-check result: undetermined / pending
- Classification: CI still in progress; no failing check observed from public check-runs at review time
- Action taken:
ghauth unavailable, sogh pr checks --requiredcould not run. Used local diff plus public GitHub API.azdo-build-investigatorwas invoked;ci-analysisskill was unavailable. Confidence capped low and no LGTM per skill rules.
Findings
No ❌ Errors,
Failure-Mode Probing
- Re-enabled tests compile on Android? Yes: Android test project defines
TEST_FAILS_ON_WINDOWS/TEST_FAILS_ON_CATALYST, so these files remain included; removing[Ignore]makes only Android start executing them. - Remaining known Android leak accidentally unskipped? No:
Bugzilla44166Teststill has#if ANDROID [Ignore(...#36479)]. - Platform blast radius? Limited to UI test execution metadata; no product code or startup/runtime path is changed.
Verdict: NEEDS_DISCUSSION
Confidence: low
Summary: Code changes look sound and narrowly scoped, with no review findings. However, required CI could not be verified via gh and public check data still showed pending/queued checks, so the skill rules prohibit LGTM until CI is complete.
🛠️ Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix | Split Bugzilla44166 into existing leak assertion plus Android-only navigation smoke coverage. | ✅ PASS | 1 file | Passed after fixing helper extraction; viable but adds a new test method. |
| 2 | try-fix | Run Bugzilla44166 on Android and quarantine only the final known leak assertion with Assert.Ignore. |
✅ PASS | 1 file | Selected: narrower than PR method-level skip and less complex than Candidate 1. |
| PR | PR #36480 | Remove obsolete Android ignores from Bugzilla40955/Bugzilla42329; keep Bugzilla44166 ignored on Android with #36479. | 3 files | Original PR; prior gate could not build/run per caller. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| maui-expert-reviewer | 1 | Yes | Suggested splitting Bugzilla44166 to preserve Android smoke coverage while keeping leak assertion skipped. |
| maui-expert-reviewer | 2 | Yes | Suggested late Android quarantine: run the known repro path and skip only at the final unresolved leak assertion. |
Exhausted: No — stopped because Candidate #2 passed the affected Android filter and is demonstrably narrower than the PR's method-level skip.
Selected Fix: Candidate #2 — it executes more of the Android regression path than the PR while keeping the unresolved #36479 leak from failing CI, and avoids Candidate #1's additional test method.
Candidate Details
try-fix-1
See ../try-fix-1/content.md and attempt-1/ artifacts. Summary: passed after one compile correction, but adds extra Android-only smoke coverage and is therefore more complex than necessary.
try-fix-2
See ../try-fix-2/content.md and attempt-2/ artifacts. Summary: passed with 3 total affected tests and 1 skipped known-failure assertion after executing the Bugzilla44166 repro path.
🏁 Report — Final Recommendation
Comparative Candidate Report — PR #36480
Ranking
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | try-fix-2 |
✅ PASS | Best balance: re-enables Bugzilla40955 and Bugzilla42329, executes the Android Bugzilla44166 navigation/GC repro path, and quarantines only the final known unresolved leak assertion tracked by #36479. If the leak is fixed later, the test can return success before the Android quarantine. |
| 2 | try-fix-1 |
✅ PASS | Viable and safer than a method-level skip because it adds Android FlyoutPage navigation smoke coverage while keeping the leak assertion skipped. It is more complex and provides less leak-path coverage than try-fix-2. |
| 3 | pr |
Simple and accurate for closing the umbrella skip, but keeps the entire Bugzilla44166 Android test skipped, so Android gets no coverage for the repro path while #36479 remains open. |
|
| 4 | pr-plus-reviewer |
Equivalent to pr; the expert reviewer produced no actionable findings and no patch was applied. |
Candidate analysis
pr is a clean metadata-only change: it removes obsolete Android skips from two tests that are believed stable and updates the remaining Android skip to the dedicated FlyoutPage leak issue. The weakness is that the remaining Bugzilla44166 method-level skip hides all Android coverage for that scenario, not just the unresolved leak assertion.
pr-plus-reviewer does not differ from pr because the expert reviewer returned no inline findings.
try-fix-1 improves coverage by adding a separate Android-only smoke test for the FlyoutPage navigation path while preserving the skipped leak assertion. It passed the affected Android filter, but adds an extra test method and additional platform-scoped test metadata.
try-fix-2 is the strongest candidate. It lets the existing Bugzilla44166Test run through the repro path on Android and only skips when it reaches the known unresolved leak assertion. This is narrower than the PR's method-level skip and more direct than adding a separate smoke test. Its inline Android quarantine is a tradeoff, but it is localized, issue-linked, and empirically passed the affected Android run.
Winner
Winner: try-fix-2
try-fix-2 wins because it passed regression verification and preserves the most Android coverage while still quarantining the known #36479 leak. The raw PR and pr-plus-reviewer are acceptable but unverified and broader than necessary for Bugzilla44166.
🧭 Next Steps — alternative fix proposed (try-fix-2)
Automated review — alternative fix proposed
The expert-reviewer evaluation compared the PR fix against automatically generated candidates and selected try-fix-2 as the strongest fix.
Why: try-fix-2 passed the affected Android regression run and preserves more Android coverage than the PR by executing the Bugzilla44166 repro path before quarantining only the known #36479 leak assertion. The raw PR and pr-plus-reviewer remain broader method-level skips for Bugzilla44166, and pr-plus-reviewer is identical because the expert reviewer found no actionable issues.
Please consider applying the candidate diff below (or use it as guidance). Once you push an update, this workflow will re-trigger and re-evaluate.
Candidate diff (try-fix-2)
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla40955.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla40955.cs
index 44d0514b5b..66f0e045ac 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla40955.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla40955.cs
@@ -23,9 +23,6 @@ public class Bugzilla40955 : _IssuesUITest
public override string Issue => "Memory leak with FormsAppCompatActivity and NavigationPage";
[Test]
-#if ANDROID
- [Ignore("Failing on net10 https://github.com/dotnet/maui/issues/27411")]
-#endif
[Category(UITestCategories.Performance)]
public void MemoryLeakInFormsAppCompatActivity()
{
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla42329.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla42329.cs
index 5824acb249..5e63e38a28 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla42329.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla42329.cs
@@ -20,9 +20,6 @@ public class Bugzilla42329 : _IssuesUITest
public override string Issue => "ListView in Frame and FormsAppCompatActivity Memory Leak";
[Test]
-#if ANDROID
- [Ignore("Failing on net10 https://github.com/dotnet/maui/issues/27411")]
-#endif
[Category(UITestCategories.ListView)]
public async Task MemoryLeakB42329()
{
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla44166.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla44166.cs
index a3378990d7..0c48938d0c 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla44166.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Bugzilla/Bugzilla44166.cs
@@ -15,9 +15,6 @@ public class Bugzilla44166 : _IssuesUITest
[Test]
-#if ANDROID
- [Ignore("Failing on net10 https://github.com/dotnet/maui/issues/27411")]
-#endif
[Category(UITestCategories.Performance)]
public void Bugzilla44166Test()
{
@@ -41,6 +38,9 @@ public class Bugzilla44166 : _IssuesUITest
// The previous content retrieves the value of the page that was still allocated,
// which is only used for displaying in the error message.
// We can ignore this in Appium tests since we can't access those properties from the sample.
+#if ANDROID
+ Assert.Ignore("FlyoutPage instances are not collected on Android https://github.com/dotnet/maui/issues/36479");
+#endif
Assert.Fail($"At least one of the pages was not collected");
}
}
b28d9c1 to
f9f3c80
Compare
<!-- Please let the below note in for people that find this PR --> > [!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](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Re-enables the Android memory-leak UI tests that were disabled under #27411. Verified locally on an Android API 30 emulator (multiple runs, stable): | Test | Result | | --- | --- | | `Bugzilla40955.MemoryLeakInFormsAppCompatActivity` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla42329.MemoryLeakB42329` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla44166.Bugzilla44166Test` | ❌ still leaks (`FlyoutPage` not collected) — kept skipped, now points at #36479 | The device-level memory tests referenced by #27411 (`MemoryTests.PagesDoNotLeak`, `NavigationPageTests.ChildPagesDoNotLeak`, `ShellTests.PagesDoNotLeak`) are already enabled on `main`. This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue. ### Issues Fixed Fixes #27411 Tracks remaining leak: #36479 --- _This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification._ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!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](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Re-enables the Android memory-leak UI tests that were disabled under #27411. Verified locally on an Android API 30 emulator (multiple runs, stable): | Test | Result | | --- | --- | | `Bugzilla40955.MemoryLeakInFormsAppCompatActivity` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla42329.MemoryLeakB42329` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla44166.Bugzilla44166Test` | ❌ still leaks (`FlyoutPage` not collected) — kept skipped, now points at #36479 | The device-level memory tests referenced by #27411 (`MemoryTests.PagesDoNotLeak`, `NavigationPageTests.ChildPagesDoNotLeak`, `ShellTests.PagesDoNotLeak`) are already enabled on `main`. This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue. ### Issues Fixed Fixes #27411 Tracks remaining leak: #36479 --- _This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification._ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!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](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Re-enables the Android memory-leak UI tests that were disabled under #27411. Verified locally on an Android API 30 emulator (multiple runs, stable): | Test | Result | | --- | --- | | `Bugzilla40955.MemoryLeakInFormsAppCompatActivity` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla42329.MemoryLeakB42329` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla44166.Bugzilla44166Test` | ❌ still leaks (`FlyoutPage` not collected) — kept skipped, now points at #36479 | The device-level memory tests referenced by #27411 (`MemoryTests.PagesDoNotLeak`, `NavigationPageTests.ChildPagesDoNotLeak`, `ShellTests.PagesDoNotLeak`) are already enabled on `main`. This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue. ### Issues Fixed Fixes #27411 Tracks remaining leak: #36479 --- _This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification._ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!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](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Re-enables the Android memory-leak UI tests that were disabled under #27411. Verified locally on an Android API 30 emulator (multiple runs, stable): | Test | Result | | --- | --- | | `Bugzilla40955.MemoryLeakInFormsAppCompatActivity` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla42329.MemoryLeakB42329` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla44166.Bugzilla44166Test` | ❌ still leaks (`FlyoutPage` not collected) — kept skipped, now points at #36479 | The device-level memory tests referenced by #27411 (`MemoryTests.PagesDoNotLeak`, `NavigationPageTests.ChildPagesDoNotLeak`, `ShellTests.PagesDoNotLeak`) are already enabled on `main`. This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue. ### Issues Fixed Fixes #27411 Tracks remaining leak: #36479 --- _This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification._ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!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](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Re-enables the Android memory-leak UI tests that were disabled under #27411. Verified locally on an Android API 30 emulator (multiple runs, stable): | Test | Result | | --- | --- | | `Bugzilla40955.MemoryLeakInFormsAppCompatActivity` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla42329.MemoryLeakB42329` | ✅ now passes — Android `[Ignore]` removed | | `Bugzilla44166.Bugzilla44166Test` | ❌ still leaks (`FlyoutPage` not collected) — kept skipped, now points at #36479 | The device-level memory tests referenced by #27411 (`MemoryTests.PagesDoNotLeak`, `NavigationPageTests.ChildPagesDoNotLeak`, `ShellTests.PagesDoNotLeak`) are already enabled on `main`. This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue. ### Issues Fixed Fixes #27411 Tracks remaining leak: #36479 --- _This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification._ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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!
Description of Change
Re-enables the Android memory-leak UI tests that were disabled under #27411.
Verified locally on an Android API 30 emulator (multiple runs, stable):
Bugzilla40955.MemoryLeakInFormsAppCompatActivity[Ignore]removedBugzilla42329.MemoryLeakB42329[Ignore]removedBugzilla44166.Bugzilla44166TestFlyoutPagenot collected) — kept skipped, now points at #36479The device-level memory tests referenced by #27411 (
MemoryTests.PagesDoNotLeak,NavigationPageTests.ChildPagesDoNotLeak,ShellTests.PagesDoNotLeak) are already enabled onmain.This closes out the umbrella #27411 and carves the one remaining Android leak into a dedicated tracking issue.
Issues Fixed
Fixes #27411
Tracks remaining leak: #36479
This PR was prepared by GitHub Copilot CLI on behalf of @kubaflo, based on local device-test verification.