Repository navigation
Fix the failing fearlessTests: Japanese Welcome glyphs, bold HUD, Send pasteboard, Profile PIN race - #1322
Closed
takemiyamakoto wants to merge 6 commits into
Closed
Fix the failing fearlessTests: Japanese Welcome glyphs, bold HUD, Send pasteboard, Profile PIN race#1322takemiyamakoto wants to merge 6 commits into
takemiyamakoto wants to merge 6 commits into
Conversation
CoreText picks fallback glyphs for kanji by the device language, so the Welcome screen's Japanese text came out in Chinese forms (PingFang SC) on a device not set to Japanese, which is how GitHub's English iOS 26.2 simulator failed three OnboardingStartTests. Welcome labels and buttons now tag their text with the app language (kCTLanguageAttributeName), and the reference test tags its samples the same way. The bundled JetBrains Mono family has only Regular and Medium, so withSymbolicTraits(.traitBold) returns nil and a bold HUD fell back to Medium, its normal weight: Bold Text did nothing to the HUD outside Japanese and Chinese. It now takes the heavier system monospaced face, as the existing fallback does when the bundled font is missing. The bold check runs for an explicit English and Japanese locale instead of the device's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e scene A read of UIPasteboard.general blocked a test host's main thread for two minutes (-[_UIConcretePasteboard items] waiting on a semaphore): reading content another app wrote, such as the Mac clipboard that Simulator syncs, waits for a paste-permission answer. XCTest then relaunched the host, and the next Send form tests ran before its scene was active, where the Solana form refuses to continue by design. SendPresenter and WalletSendConfirmPresenter take a PasteboardStringAccessing, UIPasteboard.general by default, and SendDependencyErrorSurfacingTests hands them an in-memory one. The Solana fixtures wait for an active scene first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ased After an authorization screen leaves, its presenter releases the wireframe's pending request a moment later, and the wireframe ignores a Change PIN tap until then by design. The Profile lifecycle tests tapped as soon as the screen had left, so on GitHub's runner one tap was ignored and testActualProfileExternalAnimatedDismissalRejectsReplyDuringTransition failed. Each open now waits for the release itself, which still fails a test whose dismissed request is never released. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unsigned builds fail 11 keychain and app-group tests, a new simulator takes the Mac's language (GitHub's runs are English), and system pasteboard reads in tests can wait for a paste-permission answer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
popViewController takes the PIN screen off the stack and detaches it at once, but UIKit calls its viewWillDisappear, which cancels the presenter, only at the next layout pass. A save acknowledged in between still called showMain, so PinPersistenceTests.testActualNavigationPopFencesPendingPinChangeCompletion failed now and then under load (3 of 20, 6 of 50 and 7 of 50 repeated runs here). willMove(toParent: nil), which UIKit calls during the pop itself, now cancels the create/change presenter; 100 of 100 repeated runs pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The audit required the literal UIPasteboard.general.string assignment for the TON unknown-outcome copy action. WalletSendConfirmPresenter now copies through its injected pasteboard, so the audit requires that assignment plus the system-pasteboard default, and a new destructive fixture (141) fails a presenter whose default is redirected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1322 +/- ##
=========================================
Coverage ? 78.19%
=========================================
Files ? 285
Lines ? 142070
Branches ? 0
=========================================
Hits ? 111088
Misses ? 30982
Partials ? 0
🚀 New features to boost your workflow:
|
3 of 7 tasks
Contributor
Author
|
Folded into #1326, which brings every open iOS PR into master in one change, so one code-owner approval covers it. This PR's branch is kept. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes every test failure from the latest
fearlessTestsruns: GitHub'sbuildjob on master (dce8790cd) and on #1320, and the local full runs. None came from #1320's change. The full suite now passes locally at this branch's head: 3,599 tests, 0 failures.Japanese Welcome text drew Chinese glyph forms (GitHub: 3
OnboardingStartTests)FWWelcomeViewandFWWelcomeActionButtonnow tag their text with the app language (kCTLanguageAttributeName). The reference test tags its samples the same way.Bold Text left the HUD at its normal weight (GitHub:
FWDesignSystemTests)withSymbolicTraits(.traitBold)returns nil, so a bold HUD fell back to Medium, which is its normal weight. Outside Japanese and Chinese, Bold Text did nothing to the HUD.PIN change could navigate after its screen was popped (local:
PinPersistenceTests, long known as "fails under load")popViewControllertakes the PIN screen off the stack and detaches it at once. UIKit calls itsviewWillDisappear, which cancels the presenter, only at the next layout pass, which I measured with a probe test. A save acknowledged in between still calledshowMain.PinSetupViewController.willMove(toParent: nil)runs during the pop itself and now cancels the create/change presenter.Profile PIN prompt race (GitHub, on #1320 only:
ProfileAuthorizationLifecycleTests)Clipboard hang and a relaunched, inactive test host (local: 4
SendDependencyErrorSurfacingTests)-[_UIConcretePasteboard items]in a semaphore wait. Content another app wrote, such as the Mac clipboard that Simulator syncs, waits for a paste-permission answer.SendPresenterandWalletSendConfirmPresenternow take aPasteboardStringAccessing, which defaults toUIPasteboard.general. The tests pass an in-memory one, and the Solana fixtures wait for an active scene.Run configuration only (local: 13 tests, no code change)
CODE_SIGNING_ALLOWED=NOdrops the simulator entitlements. GitHub's job andscripts/test-matrix.shbuild signed, and so do the runs below.AccountConfirmPresentationTestscases take about 127 s at this Mac's load, past a 2-minute allowance an earlier run set. The runs below allow 5 minutes.AGENTS.mdnotes these traps, how to match GitHub's English runs (-testLanguage en -testRegion US), and system-pasteboard reads in tests.Transaction-builder audit (GitHub: the
buildjob stopped at this pre-build gate on this branch)scripts/audit-transaction-builder-tests.shrequired the literalUIPasteboard.general.string = recovery.messageHashHex, which the pasteboard injection changed.pasteboard.string = recovery.messageHashHexand theUIPasteboard.generaldefault.Evidence
A CoreText probe run inside the simulators gives the same result on iOS 18.4, 26.2 and 26.5:
.HiraKakuInterface-W6under ja-JP. Under English it gives.PingFangUIDisplaySC-Semiboldand.CJKSymbolsFallbackSC-Semibold, the names in GitHub's failure messages.ja, it gives Hiragino under both languages.JetBrainsMono-Mediumwith.traitBoldis nil.On master's code the font tests fail as GitHub shows: run 41823644385 (master push) and run 42376841255 (#1320), on iOS 26.2 in English.
Tests
All runs are local, with a signed simulator build and a 300 s per-test allowance. No hosted CI is required.
fearlessTests1a2437833(head's app and test code;893c7b9fdonly changesscripts/)1a2437833-testLanguage en -testRegion UStestActualNavigationPopFencesPendingPinChangeCompletion×1001a2437833scripts/*-audit*.sh, remote config, native source, XCM boundary)893c7b9fd(head)AccountConfirmPresentationTests+ the changed classesd09ce3f2ccontentNot covered:
AGENTS.mdasks for UIKit text changes could not run. This Mac's Xcode 27.2 Debug build doesn't launch below iOS 26 (dyld: Library not loaded: /usr/lib/swift/libswiftWebKit.dylib; see below). The CoreText probe above did run on iOS 18.4.Native/, and the download check needs the network.Not in this PR
ExactTonMnemonicExportTestsdoes so on purpose./usr/lib/swift/libswiftWebKit.dyliband@rpath/libswiftCompatibilitySpan.dylib, and the app embeds neither. Release archives were not checked.Risk and rollback
🤖 Generated with Claude Code