Files
gemini-cli/full_test_run.txt
T
mkorwel 4d9d652092 WIP
2026-04-15 11:05:06 -07:00

3193 lines
220 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
> @google/gemini-cli@0.39.0-nightly.20260408.e77b22e63 test
> vitest run src --exclude **/InputPrompt.test.tsx --exclude **/MainContent.test.tsx --exclude **/PermissionsModifyTrustDialog.test.tsx --exclude **/FolderTrustDialog.test.tsx --exclude **/trustedFolders.test.ts --exclude **/cleanup.test.ts
RUN v3.2.4 /Users/mattkorwel/dev/gemini-cli/main/packages/cli
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51412) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51412) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51408) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51408) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/utils/handleAutoUpdate.test.ts (26 tests | 9 failed) 2993ms
✓ handleAutoUpdate > should do nothing if update info is null 5ms
✓ handleAutoUpdate > should track update progress state 238ms
✓ handleAutoUpdate > should track update progress state on error 322ms
✓ handleAutoUpdate > should resolve waitForUpdateCompletion when update succeeds 3ms
✓ handleAutoUpdate > should resolve waitForUpdateCompletion when update fails 1ms
✓ handleAutoUpdate > should resolve waitForUpdateCompletion immediately if not in progress 1ms
✓ handleAutoUpdate > should timeout waitForUpdateCompletion 6ms
✓ handleAutoUpdate > should do nothing if update prompts are disabled 3ms
× handleAutoUpdate > should emit "update-received" but not update if auto-updates are disabled 184ms
→ expected "emit" to be called with arguments: [ 'update-received', …(1) ]
Received:
 1st emit call:
@@ -1,11 +1,11 @@
 [
 "update-received",
 {
 "isUpdating": false,
 "message": "An update is available!
- Please update manually.",
+ Please run npm install -g @google/gemini-cli@latest to update",
 "update": {
 "current": "1.0.0",
 "latest": "2.0.0",
 "name": "@google/gemini-cli",
 "type": "major",

Number of calls: 1

× handleAutoUpdate > should suppress update notifications when running via npx 253ms
→ expected "emit" to not be called at all, but actually been called 1 times
Received:
 1st emit call:
 Array [
"update-received",
Object {
"isUpdating": true,
"message": "An update is available!
Installed with npm. Attempting to automatically update now...",
"update": Object {
"current": "1.0.0",
"latest": "2.0.0",
"name": "@google/gemini-cli",
"type": "major",
},
},
]

Number of calls: 1

× handleAutoUpdate > should suppress update notifications when running via pnpx 142ms
→ expected "emit" to not be called at all, but actually been called 1 times
Received:
 1st emit call:
 Array [
"update-received",
Object {
"isUpdating": true,
"message": "An update is available!
Installed with npm. Attempting to automatically update now...",
"update": Object {
"current": "1.0.0",
"latest": "2.0.0",
"name": "@google/gemini-cli",
"type": "major",
},
},
]

Number of calls: 1

× handleAutoUpdate > should suppress update notifications when running via bunx 167ms
→ expected "emit" to not be called at all, but actually been called 1 times
Received:
 1st emit call:
 Array [
"update-received",
Object {
"isUpdating": true,
"message": "An update is available!
Installed with npm. Attempting to automatically update now...",
"update": Object {
"current": "1.0.0",
"latest": "2.0.0",
"name": "@google/gemini-cli",
"type": "major",
},
},
]

Number of calls: 1

× handleAutoUpdate > should suppress update notifications when running via binary 158ms
→ expected "emit" to not be called at all, but actually been called 1 times
Received:
 1st emit call:
 Array [
"update-received",
Object {
"isUpdating": true,
"message": "An update is available!
Installed with npm. Attempting to automatically update now...",
"update": Object {
"current": "1.0.0",
"latest": "2.0.0",
"name": "@google/gemini-cli",
"type": "major",
},
},
]

Number of calls: 1

× handleAutoUpdate > should emit "update-received" but not update if no update command is found 263ms
→ expected "emit" to be called with arguments: [ 'update-received', …(1) ]
Received:
 1st emit call:
@@ -1,11 +1,11 @@
 [
 "update-received",
 {
- "isUpdating": false,
+ "isUpdating": true,
 "message": "An update is available!
- Cannot determine update command.",
+ Installed with npm. Attempting to automatically update now...",
 "update": {
 "current": "1.0.0",
 "latest": "2.0.0",
 "name": "@google/gemini-cli",
 "type": "major",

Number of calls: 1

× handleAutoUpdate > should combine update messages correctly 171ms
→ expected "emit" to be called with arguments: [ 'update-received', …(1) ]
Received:
 1st emit call:
@@ -1,11 +1,11 @@
 [
 "update-received",
 {
- "isUpdating": false,
+ "isUpdating": true,
 "message": "An update is available!
- This is an additional message.",
+ Installed with npm. Attempting to automatically update now...",
 "update": {
 "current": "1.0.0",
 "latest": "2.0.0",
 "name": "@google/gemini-cli",
 "type": "major",

Number of calls: 1

✓ handleAutoUpdate > should attempt to perform an update when conditions are met 266ms
× handleAutoUpdate > should emit "update-failed" when the update process fails 176ms
→ expected "emit" to be called with arguments: [ 'update-failed', …(1) ]
Received:
 1st emit call:
 [
- "update-failed",
+ "update-received",
 {
- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",
+ "isUpdating": true,
+ "message": "An update is available!
+ Installed with npm. Attempting to automatically update now...",
+ "update": {
+ "current": "1.0.0",
+ "latest": "2.0.0",
+ "name": "@google/gemini-cli",
+ "type": "major",
+ },
 },
 ]
 2nd emit call:
 [
- "update-failed",
+ "update-success",
 {
- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",
+ "message": "Update successful! The new version will be used on your next run.",
 },
 ]
 3rd emit call:
 [
 "update-failed",
 {
- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",
+ "message": "Automatic update failed. Please try updating manually. (command: npm install -g @google/gemini-cli@2.0.0)",
 },
 ]

Number of calls: 3

✓ handleAutoUpdate > should emit "update-failed" when the spawn function throws an error 182ms
× handleAutoUpdate > should use the "@nightly" tag for nightly updates 259ms
→ expected "spy" to be called with arguments: [ …(2) ]
Received:
 1st spy call:
@@ -1,7 +1,7 @@
 [
- "npm i -g @google/gemini-cli@nightly",
+ "npm install -g @google/gemini-cli@nightly",
 {
 "detached": true,
 "shell": true,
 "stdio": "ignore",
 },

Number of calls: 1

✓ handleAutoUpdate > should emit "update-success" when the update process succeeds 178ms
✓ setUpdateHandler > should register event listeners 2ms
✓ setUpdateHandler > should handle update-received event 5ms
✓ setUpdateHandler > should handle update-failed event 1ms
✓ setUpdateHandler > should handle update-success event 1ms
✓ setUpdateHandler > should not show update-received message if update-success was called 1ms
✓ setUpdateHandler > should handle update-info event 1ms
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/contexts/TerminalContext.test.tsx (2 tests | 2 failed) 4167ms
× TerminalContext > should parse OSC 11 response 2101ms
→ expected "spy" to be called with arguments: [ 'rgb:ffff/ffff/ffff' ]
Number of calls: 0

× TerminalContext > should handle partial chunks 2064ms
→ expected "spy" to be called with arguments: [ 'rgb:0000/0000/0000' ]
Number of calls: 0

[?2004h[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/config/extension.test.ts (82 tests | 1 failed) 4197ms
✓ extension tests > loadExtensions > should include extension path in loaded extension 200ms
✓ extension tests > loadExtensions > should skip the extension if a context file path is outside the extension directory and log an error 58ms
✓ extension tests > loadExtensions > should load context file path when GEMINI.md is present 42ms
✓ extension tests > loadExtensions > should load context file path from the extension config 87ms
✓ extension tests > loadExtensions > should annotate disabled extensions 49ms
✓ extension tests > loadExtensions > should hydrate variables 31ms
✓ extension tests > loadExtensions > should load a linked extension correctly 55ms
✓ extension tests > loadExtensions > should load extension policies from the policies directory 65ms
✓ extension tests > loadExtensions > should ignore ALLOW rules and YOLO mode from extension policies for security 29ms
✓ extension tests > loadExtensions > should hydrate ${extensionPath} correctly for linked extensions 35ms
✓ extension tests > loadExtensions > should resolve environment variables in extension configuration 29ms
✓ extension tests > loadExtensions > should resolve environment variables from an extension .env file 25ms
✓ extension tests > loadExtensions > should handle missing environment variables gracefully 33ms
✓ extension tests > loadExtensions > should skip an extension with invalid JSON config and log an error 42ms
✓ extension tests > loadExtensions > should skip an extension with missing "name" in config and log an error 42ms
✓ extension tests > loadExtensions > should filter trust out of mcp servers 23ms
✓ extension tests > loadExtensions > should log an error for invalid extension names during loading 58ms
✓ extension tests > loadExtensions > should not load github extensions and log a warning if blockGitExtensions is set 47ms
✓ extension tests > loadExtensions > should load allowed extensions if the allowlist is set. 79ms
✓ extension tests > loadExtensions > should not load disallowed extensions and log a warning if the allowlist is set. 35ms
✓ extension tests > loadExtensions > should not load any extensions if admin.extensions.enabled is false 24ms
✓ extension tests > loadExtensions > should not load mcpServers if admin.mcp.enabled is false 24ms
✓ extension tests > loadExtensions > should load mcpServers if admin.mcp.enabled is true 23ms
✓ extension tests > loadExtensions > id generation > 'should generate id from source for no…' 19ms
✓ extension tests > loadExtensions > id generation > 'should generate id from owner/repo fo…' 33ms
✓ extension tests > loadExtensions > id generation > 'should generate id from owner/repo fo…' 26ms
✓ extension tests > loadExtensions > id generation > 'should generate id from source for gi…' 16ms
✓ extension tests > loadExtensions > id generation > 'should generate id from the original …' 26ms
✓ extension tests > loadExtensions > id generation > should generate id from the original source for linked extensions 35ms
✓ extension tests > loadExtensions > id generation > should generate id from name for extension with no install metadata 38ms
✓ extension tests > loadExtensions > id generation > should load extension hooks and hydrate variables 54ms
✓ extension tests > loadExtensions > id generation > should not load hooks if hooks.enabled is false 49ms
✓ extension tests > loadExtensions > id generation > should warn about hooks during installation 142ms
✓ extension tests > installExtension > should install an extension from a local path 112ms
✓ extension tests > installExtension > should throw an error if the extension already exists 76ms
✓ extension tests > installExtension > should throw an error and cleanup if gemini-extension.json is missing 17ms
✓ extension tests > installExtension > should throw an error for invalid JSON in gemini-extension.json 18ms
✓ extension tests > installExtension > should throw an error for missing name in gemini-extension.json 34ms
✓ extension tests > installExtension > should install an extension from a git URL 124ms
✓ extension tests > installExtension > should install a linked extension 59ms
✓ extension tests > installExtension > should not install a github extension if blockGitExtensions is set 26ms
✓ extension tests > installExtension > should not install a disallowed extension if the allowlist is set 51ms
✓ extension tests > installExtension > should prompt for trust if workspace is not trusted 49ms
✓ extension tests > installExtension > should not install if user denies trust 80ms
× extension tests > installExtension > should add the workspace to trusted folders if user consents 95ms
→ expected false to be true // Object.is equality
✓ extension tests > installExtension > with previous extension config: true > should log an update event to clearcut on success 40ms
✓ extension tests > installExtension > with previous extension config: true > should not alter the extension enablement configuration 54ms
✓ extension tests > installExtension > with previous extension config: false > should log an install event to clearcut on success 79ms
✓ extension tests > installExtension > with previous extension config: false > should alter the extension enablement configuration 83ms
✓ extension tests > installExtension > should show users information on their ansi escaped mcp servers when installing 92ms
✓ extension tests > installExtension > should continue installation if user accepts prompt for local extension with mcp servers 66ms
✓ extension tests > installExtension > should cancel installation if user declines prompt for local extension with mcp servers 20ms
✓ extension tests > installExtension > should save the autoUpdate flag to the install metadata 35ms
✓ extension tests > installExtension > should ignore consent flow if not required 72ms
✓ extension tests > installExtension > should prompt for settings if promptForSettings 60ms
✓ extension tests > installExtension > should not prompt for settings if promptForSettings is false 30ms
✓ extension tests > installExtension > should only prompt for new settings on update, and preserve old settings 117ms
✓ extension tests > installExtension > should auto-update if settings have changed 88ms
✓ extension tests > installExtension > should throw an error for invalid extension names 21ms
✓ extension tests > installExtension > installing from github > should install from a github release successfully 106ms
✓ extension tests > installExtension > installing from github > should fallback to git clone if github release download fails and user consents 126ms
✓ extension tests > installExtension > installing from github > should throw an error if github release download fails and user denies consent 38ms
✓ extension tests > installExtension > installing from github > should fallback to git clone without consent if no release data is found on first install 63ms
✓ extension tests > installExtension > installing from github > should ask for consent if no release data is found for an existing github-release extension 45ms
✓ extension tests > uninstallExtension > should uninstall an extension by name 120ms
✓ extension tests > uninstallExtension > should uninstall an extension by name and retain existing extensions 31ms
✓ extension tests > uninstallExtension > should uninstall an extension on non-matching extension directory name 42ms
✓ extension tests > uninstallExtension > should throw an error if the extension does not exist 12ms
✓ extension tests > uninstallExtension > with isUpdate: true > should not log uninstall event 23ms
✓ extension tests > uninstallExtension > with isUpdate: true > should not alter the extension enablement configuration 29ms
✓ extension tests > uninstallExtension > with isUpdate: false > should log uninstall event 21ms
✓ extension tests > uninstallExtension > with isUpdate: false > should alter the extension enablement configuration 30ms
✓ extension tests > uninstallExtension > should uninstall an extension by its source URL 45ms
✓ extension tests > uninstallExtension > should fail to uninstall by URL if an extension has no install metadata 25ms
✓ extension tests > disableExtension > should disable an extension at the user scope 30ms
✓ extension tests > disableExtension > should disable an extension at the workspace scope 27ms
✓ extension tests > disableExtension > should handle disabling the same extension twice 31ms
✓ extension tests > disableExtension > should throw an error if you request system scope 14ms
✓ extension tests > disableExtension > should log a disable event 35ms
✓ extension tests > enableExtension > should enable an extension at the user scope 22ms
✓ extension tests > enableExtension > should enable an extension at the workspace scope 42ms
✓ extension tests > enableExtension > should log an enable event 58ms
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/contexts/KeypressContext.test.tsx (146 tests | 141 failed) 5427ms
× KeypressContext > Enter key handling > should recognize 'regular enter key (keycode 13)' in kitty protocol 203ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should recognize 'numpad enter key (keycode 57414)' in kitty protocol 45ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should handle backslash return 70ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should handle numpad enter with 'Shift' modifier 95ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should handle numpad enter with 'Ctrl' modifier 132ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should handle numpad enter with 'Alt' modifier 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should recognize
(LF) as ctrl+j 61ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Enter key handling > should recognize \x1b\n as Alt+Enter (return with meta) 48ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Fast return buffering > should buffer return key pressed quickly after another key 38ms
→ expected last "spy" call to have been called with [ ObjectContaining{…} ]
× KeypressContext > Fast return buffering > should NOT buffer return key if delay is long enough 96ms
→ expected last "spy" call to have been called with [ ObjectContaining{…} ]
× KeypressContext > Escape key handling > should recognize escape key (keycode 27) in kitty protocol 58ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Escape key handling > should stop propagation when a higher priority handler returns true 78ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "escape"} ]
Number of calls: 0

× KeypressContext > Escape key handling > should continue propagation when a higher priority handler does not consume the event 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "escape"} ]
Number of calls: 0

× KeypressContext > Escape key handling > should handle double Escape 21ms
→ expected 1st "spy" call to have been called with [ ObjectContaining{…} ], but called only 0 times
× KeypressContext > Escape key handling > should handle lone Escape key (keycode 27) with timeout when kitty protocol is enabled 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Tab key' in kitty protocol 124ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Shift+Tab' in kitty protocol 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Backspace' in kitty protocol 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Alt+Backspace' in kitty protocol 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Ctrl+Backspace' in kitty protocol 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Shift+Space' in kitty protocol 140ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Ctrl+Space' in kitty protocol 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Windows Terminal Backspace handling > should NOT treat \b as ctrl when WT_SESSION is NOT present and OS is not Windows_NT 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Windows Terminal Backspace handling > should treat \b as ctrl when WT_SESSION IS present (even if not Windows_NT) 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Windows Terminal Backspace handling > should treat \b as ctrl when OS is Windows_NT 25ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Windows Terminal Backspace handling > should treat \x7f as regular backspace regardless of WT_SESSION or OS 46ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > paste mode > should 'handle multiline paste as a single ev…' 154ms
→ expected "spy" to be called 1 times, but got 0 times
× KeypressContext > paste mode > should 'handle paste start code split over mu…' 189ms
→ expected "spy" to be called 1 times, but got 0 times
× KeypressContext > paste mode > should 'handle paste end code split over mult…' 129ms
→ expected "spy" to be called 1 times, but got 0 times
× KeypressContext > paste mode > should parse valid OSC 52 response 239ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > paste mode > should handle split OSC 52 response 191ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > paste mode > should handle OSC 52 response terminated by ESC \ 246ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

✓ KeypressContext > paste mode > should ignore unknown OSC sequences 14ms
✓ KeypressContext > paste mode > should ignore invalid OSC 52 format 18ms
× KeypressContext > debug keystroke logging > should not log keystrokes when debugKeystrokeLogging is false 29ms
→ expected "spy" to be called at least once
× KeypressContext > debug keystroke logging > should log kitty buffer accumulation when debugKeystrokeLogging is true 27ms
→ expected "log" to be called with arguments: [ '[DEBUG] Raw StdIn: "\u001b[27u"' ]
Number of calls: 0

× KeypressContext > debug keystroke logging > should show char codes when debugKeystrokeLogging is true even without debug mode 23ms
→ expected "log" to be called with arguments: [ Array(1) ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[53;5u'" as '5' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[51;2u'" as '3' 23ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;2;13~'" as 'enter' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;5;13~'" as 'enter' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;5;9~'" as 'tab' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;6;9~'" as 'tab' 9ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[44032u'" as '가' 56ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;1;44032~'" as '가' 32ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;129A'" as 'up' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "up"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;2H'" as 'home' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;5F'" as 'end' 30ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;1P'" as 'f1' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f1"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;3Q'" as 'f2' 26ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[3~'" as 'delete' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "delete"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[5~'" as 'pageup' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "pageup"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[6~'" as 'pagedown' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1~'" as 'home' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "home"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[4~'" as 'end' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "end"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[2~'" as 'insert' 18ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "insert"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[11~'" as 'f1' 62ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f1"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[17~'" as 'f6' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f6"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[23~'" as 'f11' 9ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f11"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[24~'" as 'f12' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f12"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[25~'" as 'f13' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f13"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[34~'" as 'f20' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f20"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[302u'" as 'f13' 161ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f13"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[324u'" as 'f35' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f35"} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[57358u'" as 'capslock' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[57362u'" as 'pausebreak' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[Z'" as 'tab' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;2Z'" as 'tab' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001bOZ'" as 'tab' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[A'" as 'up' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[B'" as 'down' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[C'" as 'right' 32ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[D'" as 'left' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[H'" as 'home' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[F'" as 'end' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[5H'" as 'home' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOj'" as '*' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOk'" as '+' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOm'" as '-' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOo'" as '/' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOp'" as '0' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOq'" as '1' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOr'" as '2' 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOs'" as '3' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOt'" as '4' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOu'" as '5' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOv'" as '6' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOw'" as '7' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOx'" as '8' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOy'" as '9' 52ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOn'" as '.' 18ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57404u'" as 'numpad5' 28ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57404;5u'" as 'numpad5' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57411u'" as 'numpad_multiply' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Double-tap and batching > should emit two delete events for double-tap CSI[3~ 13ms
→ expected 1st "spy" call to have been called with [ ObjectContaining{…} ], but called only 0 times
× KeypressContext > Double-tap and batching > should parse two concatenated tilde-coded sequences in one chunk 30ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "delete"} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'iTerm2' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'iTerm2' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'iTerm2' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'iTerm2' 28ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'iTerm2' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'Ghostty' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'Ghostty' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'Ghostty' 38ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'Ghostty' 60ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'Ghostty' 31ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'MacTerminal' 35ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'MacTerminal' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'MacTerminal' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'MacTerminal' 19ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'MacTerminal' 23ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'VSCodeTerminal' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'VSCodeTerminal' 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'VSCodeTerminal' 112ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'VSCodeTerminal' 49ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'VSCodeTerminal' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Backslash key handling > should treat backslash as a regular keystroke 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > should timeout and flush incomplete kitty sequences after 50ms 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > should immediately flush non-kitty CSI sequences 88ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > should parse valid kitty sequences immediately when complete 48ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > should handle batched kitty sequences correctly 54ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > should handle mixed valid and invalid sequences 46ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > should handle sequences arriving character by character with 1 ms delay 111ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "escape"} ]
Number of calls: 0

× KeypressContext > should handle sequences arriving character by character with 49 ms delay 89ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "escape"} ]
Number of calls: 0

× KeypressContext > should reset timeout when new input arrives 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "a"} ]
Number of calls: 0

✓ KeypressContext > SGR Mouse Handling > should ignore SGR mouse sequences 13ms
× KeypressContext > SGR Mouse Handling > should handle mixed SGR mouse and key sequences 11ms
→ expected "spy" to be called 1 times, but got 0 times
✓ KeypressContext > SGR Mouse Handling > should ignore X11 mouse sequences 14ms
✓ KeypressContext > SGR Mouse Handling > should not flush slow SGR mouse sequences as garbage 10ms
× KeypressContext > SGR Mouse Handling > should ignore specific SGR mouse sequence sandwiched between keystrokes 17ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should ignore 'Focus In' sequence 17ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should ignore 'Focus Out' sequence 13ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should ignore 'SGR Mouse Release' sequence 25ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should ignore 'something mouse' sequence 16ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should ignore 'another mouse' sequence 17ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Ignored Sequences > should handle F12 34ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Individual Character Input > should correctly handle string "abc" 17ms
→ expected "spy" to be called 3 times, but got 0 times
× KeypressContext > Individual Character Input > should correctly handle string "你好" 15ms
→ expected "spy" to be called 2 times, but got 0 times
× KeypressContext > Individual Character Input > should correctly handle string "こんにちは" 14ms
→ expected "spy" to be called 5 times, but got 0 times
× KeypressContext > Individual Character Input > should correctly handle string "안녕하세요" 18ms
→ expected "spy" to be called 5 times, but got 0 times
× KeypressContext > Individual Character Input > should correctly handle string "A你B好C" 13ms
→ expected "spy" to be called 5 times, but got 0 times
× KeypressContext > Greek support > should handle undefined correctly in 'non-Greek locale (Option+z)' 37ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Greek support > should handle undefined correctly in 'Greek LANG' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Greek support > should handle undefined correctly in 'Greek LC_ALL' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Greek support > should handle undefined correctly in 'LC_ALL overriding non-Greek LANG' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× KeypressContext > Greek support > should handle '¸' correctly in 'Cedilla (¸) in Greek locale (should b…' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/hooks/useSelectionList.test.tsx (51 tests | 49 failed) 11717ms
× useSelectionList > Initialization > should initialize with the default index (0) if enabled 373ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should initialize with the provided initialIndex if enabled 312ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should handle an empty list gracefully 195ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should find the next enabled item (downwards) if initialIndex is disabled 176ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should wrap around to find the next enabled item if initialIndex is disabled 235ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should default to 0 if initialIndex is out of bounds 154ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Initialization > should stick to the initial index if all items are disabled 92ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should move down with "j" and "down" keys, skipping disabled items 75ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should move up with "k" and "up" keys, skipping disabled items 130ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should ignore navigation keys when shift is pressed 69ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should wrap navigation correctly 65ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should call onHighlight when index changes 78ms
→ Test attempted to press key (down) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should not move or call onHighlight if navigation results in the same index (e.g., single item) 79ms
→ Test attempted to press key (down) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Keyboard Navigation (Up/Down/J/K) > should not move or call onHighlight if all items are disabled 88ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Wrapping (wrapAround) > should wrap by default (wrapAround=true) 106ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Wrapping (wrapAround) > should not wrap when wrapAround is false 117ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Selection (Enter) > should call onSelect when "return" is pressed on enabled item 63ms
→ Test attempted to press key (enter) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Selection (Enter) > should not call onSelect if the active item is disabled 74ms
→ Cannot read properties of undefined (reading 'setActiveIndex')
× useSelectionList > Keyboard Navigation Robustness (Rapid Input) > should handle rapid navigation and selection robustly (avoiding stale state) 75ms
→ Handler not active
× useSelectionList > Keyboard Navigation Robustness (Rapid Input) > should handle ultra-rapid input (multiple presses in single act) without stale state 90ms
→ Handler not active
× useSelectionList > Focus Management (isFocused) > should activate the keypress handler when focused (default) and items exist 81ms
→ expected null not to be null
✓ useSelectionList > Focus Management (isFocused) > should not activate the keypress handler when isFocused is false 102ms
✓ useSelectionList > Focus Management (isFocused) > should not activate the keypress handler when items list is empty 99ms
× useSelectionList > Focus Management (isFocused) > should activate/deactivate when isFocused prop changes 130ms
→ expected null not to be null
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should not respond to numbers if showNumbers is false (default) 157ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should select item immediately if the number cannot be extended (unambiguous) 137ms
→ Test attempted to press key (3) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should highlight and wait for timeout if the number can be extended (ambiguous) 107ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should handle multi-digit input correctly 86ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should reset buffer if input becomes invalid (out of bounds) 62ms
→ Test attempted to press key (5) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should allow "0" as subsequent digit, but ignore as first digit 60ms
→ Test attempted to press key (0) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should clear the initial "0" input after timeout 63ms
→ Test attempted to press key (0) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should highlight but not select a disabled item (immediate selection case) 78ms
→ Test attempted to press key (2) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should highlight but not select a disabled item (timeout case) 61ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should clear the number buffer if a non-numeric key (e.g., navigation) is pressed 78ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Numeric Quick Selection (showNumbers=true) > should clear the number buffer if "return" is pressed 55ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Programmatic Focus (focusKey) > should change the activeIndex when a valid focusKey is provided 56ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Programmatic Focus (focusKey) > should ignore a focusKey that does not exist 69ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Programmatic Focus (focusKey) > should ignore a focusKey that points to a disabled item 117ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Programmatic Focus (focusKey) > should handle clearing the focusKey 108ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should update activeIndex when initialIndex prop changes 2206ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should respect a new initialIndex even after user interaction 105ms
→ Test attempted to press key (down) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Reactivity (Dynamic Updates) > should validate index when initialIndex prop changes to a disabled item 2177ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should adjust activeIndex if items change and the initialIndex is now out of bounds 137ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should adjust activeIndex if items change and the initialIndex becomes disabled 87ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should reset to 0 if items change to an empty list 2122ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should not reset activeIndex when items are deeply equal 68ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should update activeIndex when items change structurally 81ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should handle partial changes in items array 89ms
→ Cannot read properties of undefined (reading 'activeIndex')
× useSelectionList > Reactivity (Dynamic Updates) > should update selection when a new item is added to the start of the list 119ms
→ Test attempted to press key (down) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
× useSelectionList > Reactivity (Dynamic Updates) > should not re-initialize when items have identical keys but are different objects 104ms
→ expected 3 to be 1 // Object.is equality
× useSelectionList > Cleanup > should clear timeout on unmount when timer is active 63ms
→ Test attempted to press key (1) but the keypress handler is not active. Ensure the hook is focused (isFocused=true) and the list is not empty.
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/BaseSettingsDialog.test.tsx (33 tests | 4 failed) 12614ms
✓ BaseSettingsDialog > rendering > should render the dialog with title 573ms
✓ BaseSettingsDialog > rendering > should render all items 187ms
✓ BaseSettingsDialog > rendering > should render help text with Ctrl+L for reset 108ms
✓ BaseSettingsDialog > rendering > should render scope selector when showScopeSelector is true 81ms
✓ BaseSettingsDialog > rendering > should not render scope selector when showScopeSelector is false 67ms
✓ BaseSettingsDialog > rendering > should render footer content when provided 97ms
✓ BaseSettingsDialog > keyboard navigation > should close dialog on Escape 141ms
✓ BaseSettingsDialog > keyboard navigation > should navigate down with arrow key 104ms
✓ BaseSettingsDialog > keyboard navigation > should navigate up with arrow key 159ms
✓ BaseSettingsDialog > keyboard navigation > should wrap around when navigating past last item 103ms
✓ BaseSettingsDialog > keyboard navigation > should wrap around when navigating before first item 202ms
✓ BaseSettingsDialog > keyboard navigation > should switch focus with Tab when scope selector is shown 138ms
✓ BaseSettingsDialog > scrolling and resizing list (search filtering) > should preserve focus on the active item if it remains in the filtered list 195ms
✓ BaseSettingsDialog > scrolling and resizing list (search filtering) > should reset focus to the top if the active item is filtered out 276ms
✓ BaseSettingsDialog > item interactions > should call onItemToggle for boolean items on Enter 186ms
✓ BaseSettingsDialog > item interactions > should call onItemToggle for enum items on Enter 85ms
✓ BaseSettingsDialog > item interactions > should enter edit mode for string items on Enter 132ms
✓ BaseSettingsDialog > item interactions > should enter edit mode for number items on Enter 112ms
✓ BaseSettingsDialog > item interactions > should call onItemClear on Ctrl+L 67ms
✓ BaseSettingsDialog > edit mode > should prioritize editValue over rawValue stringification 68ms
× BaseSettingsDialog > edit mode > should commit edit on Enter 2140ms
→ expected "spy" to be called with arguments: [ 'string-setting', …(2) ]
Number of calls: 0

✓ BaseSettingsDialog > edit mode > should commit edit on Escape 198ms
✓ BaseSettingsDialog > edit mode > should commit edit and navigate on Down arrow 156ms
✓ BaseSettingsDialog > edit mode > should commit edit and navigate on Up arrow 109ms
× BaseSettingsDialog > edit mode > should allow number input for number fields 2176ms
→ expected "spy" to be called with arguments: [ 'number-setting', '42123', …(1) ]
Number of calls: 0

× BaseSettingsDialog > edit mode > should support quick number entry for number fields 2085ms
→ expected "spy" to be called with arguments: [ 'number-setting', '5', …(1) ]
Number of calls: 0

× BaseSettingsDialog > edit mode > should allow j and k characters to be typed in string edit fields without triggering navigation 2123ms
→ expected "spy" to be called with arguments: [ 'string-setting', …(2) ]
Number of calls: 0

✓ BaseSettingsDialog > custom key handling > should call onKeyPress and respect its return value 64ms
✓ BaseSettingsDialog > focus management > should keep focus on settings when scope selector is hidden 70ms
✓ BaseSettingsDialog > responsiveness > should show the scope selector when availableHeight is sufficient (25) 114ms
✓ BaseSettingsDialog > responsiveness > should hide the scope selector when availableHeight is small (24) to show more items 72ms
✓ BaseSettingsDialog > responsiveness > should reduce the number of visible items based on height 78ms
✓ BaseSettingsDialog > responsiveness > should show scroll indicators when list is truncated by height 131ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51576) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51576) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/ModelDialog.test.tsx (15 tests) 2336ms
✓ <ModelDialog /> > renders the initial "main" view correctly 366ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/VirtualizedList.test.tsx (10 tests | 2 failed) 1394ms
✓ <VirtualizedList /> > with 10px height and 100 items > renders only visible items ('top') 392ms
× <VirtualizedList /> > with 10px height and 100 items > renders only visible items ('scrolled to bottom') 132ms
→ expected '╭────────────────────────────────────…' to contain 'Item 92'
× <VirtualizedList /> > with 10px height and 100 items > sticks to bottom when new items added 124ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
✓ <VirtualizedList /> > with 10px height and 100 items > scrolls down to show new items when requested via ref 139ms
✓ <VirtualizedList /> > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: +0) 94ms
✓ <VirtualizedList /> > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: 500) 67ms
✓ <VirtualizedList /> > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: 999) 106ms
✓ <VirtualizedList /> > renders more items when a visible item shrinks via context update 164ms
✓ <VirtualizedList /> > updates scroll position correctly when scrollBy is called multiple times in the same tick 131ms
✓ <VirtualizedList /> > renders correctly in copyModeEnabled when scrolled 43ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/Footer.test.tsx (39 tests | 1 failed) 2266ms
✓ <Footer /> > renders the component 224ms
✓ <Footer /> > path display > should display a shortened path on a narrow terminal 53ms
✓ <Footer /> > path display > should use wide layout at 80 columns 46ms
✓ <Footer /> > path display > should not truncate high-priority items on narrow terminals (regression) 29ms
✓ <Footer /> > displays the branch name when provided 68ms
✓ <Footer /> > does not display the branch name when not provided 85ms
✓ <Footer /> > displays the model name and context percentage 79ms
✓ <Footer /> > displays the usage indicator when usage is low 54ms
✓ <Footer /> > hides the usage indicator when usage is not near limit 65ms
✓ <Footer /> > displays "Limit reached" message when remaining is 0 72ms
✓ <Footer /> > displays the model name and abbreviated context used label on narrow terminals 65ms
✓ <Footer /> > sandbox and trust info > should display untrusted when isTrustedFolder is false 32ms
✓ <Footer /> > sandbox and trust info > should display "current process" for custom sandbox when SANDBOX env is set 30ms
✓ <Footer /> > sandbox and trust info > should display "current process" for macOS Seatbelt when SANDBOX is sandbox-exec 22ms
✓ <Footer /> > sandbox and trust info > should display "no sandbox" when SANDBOX is not set and folder is trusted 25ms
✓ <Footer /> > sandbox and trust info > should display "all tools" when tool sandboxing is enabled and agent is local 91ms
✓ <Footer /> > sandbox and trust info > should prioritize untrusted message over sandbox info 58ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > renders complete footer with all sections visible (baseline) 40ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > renders footer with all optional sections hidden (minimal footer) 88ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > renders footer with only model info hidden (partial filtering) 26ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > renders footer with CWD and model info hidden to test alignment (only sandbox visible) 32ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > hides the context percentage when hideContextPercentage is true 34ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > shows the context percentage when hideContextPercentage is false 37ms
✓ <Footer /> > footer configuration filtering (golden snapshots) > renders complete footer in narrow terminal (baseline narrow) 24ms
✓ <Footer /> > Footer Token Formatting > formats thousands with k 79ms
✓ <Footer /> > Footer Token Formatting > formats millions with m 115ms
✓ <Footer /> > Footer Token Formatting > formats billions with b 65ms
✓ <Footer /> > Footer Token Formatting > formats small numbers without suffix 42ms
✓ <Footer /> > error summary visibility > hides error summary in low verbosity mode out of dev mode 27ms
✓ <Footer /> > error summary visibility > shows error summary in low verbosity mode in dev mode 41ms
✓ <Footer /> > error summary visibility > shows error summary in full verbosity mode 35ms
× <Footer /> > Footer Custom Items > renders auth item with email 38ms
→ expected ' /auth\n google\n' to contain 'test@example.com'
✓ <Footer /> > Footer Custom Items > does NOT render auth item when showUserIdentity is false 157ms
✓ <Footer /> > Footer Custom Items > renders items in the specified order 39ms
✓ <Footer /> > Footer Custom Items > renders multiple items with proper alignment 25ms
✓ <Footer /> > Footer Custom Items > handles empty items array 140ms
✓ <Footer /> > Footer Custom Items > does not render items that are conditionally hidden 25ms
✓ <Footer /> > fallback mode display > should display Flash model when in fallback mode, not the configured Pro model 25ms
✓ <Footer /> > fallback mode display > should display Pro model when NOT in fallback mode 31ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/BaseSelectionList.test.tsx (31 tests | 18 failed) 2240ms
✓ BaseSelectionList > Rendering and Structure > should render all items using the renderItem prop 348ms
✓ BaseSelectionList > Rendering and Structure > should render the selection indicator (● or space) and layout 117ms
✓ BaseSelectionList > Rendering and Structure > should handle an empty list gracefully 38ms
× BaseSelectionList > useSelectionList Integration > should pass props correctly to useSelectionList 36ms
→ expected "useSelectionList" to be called with arguments: [ { items: [ { …(3) }, …(2) ], …(6) } ]
Number of calls: 0

× BaseSelectionList > useSelectionList Integration > should use the activeIndex returned by the hook 105ms
→ expected "spy" to be called with arguments: [ { value: 'A', …(2) }, …(1) ]
Received:
 1st spy call:
@@ -2,9 +2,11 @@
 {
 "key": "A",
 "label": "Item A",
 "value": "A",
 },
- ObjectContaining {
- "isSelected": false,
+ {
+ "isSelected": true,
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "disabled": true,
+ "key": "B",
+ "label": "Item B",
+ "value": "B",
 },
- ObjectContaining {
+ {
 "isSelected": false,
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "key": "C",
+ "label": "Item C",
+ "value": "C",
 },
- ObjectContaining {
+ {
 "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Styling and Colors > should apply success color to the selected item 88ms
→ expected "spy" to be called with arguments: [ { value: 'A', …(2) }, …(1) ]
Received:
 1st spy call:
@@ -2,11 +2,11 @@
 {
 "key": "A",
 "label": "Item A",
 "value": "A",
 },
- ObjectContaining {
+ {
 "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "disabled": true,
+ "key": "B",
+ "label": "Item B",
+ "value": "B",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "key": "C",
+ "label": "Item C",
+ "value": "C",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Styling and Colors > should apply primary color to unselected, enabled items 60ms
→ expected "spy" to be called with arguments: [ { value: 'C', …(2) }, …(1) ]
Received:
 1st spy call:
 [
 {
- "key": "C",
- "label": "Item C",
- "value": "C",
+ "key": "A",
+ "label": "Item A",
+ "value": "A",
 },
- ObjectContaining {
- "isSelected": false,
- "numberColor": "COLOR_PRIMARY",
- "titleColor": "COLOR_PRIMARY",
+ {
+ "isSelected": true,
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
 {
- "key": "C",
- "label": "Item C",
- "value": "C",
+ "disabled": true,
+ "key": "B",
+ "label": "Item B",
+ "value": "B",
 },
- ObjectContaining {
+ {
 "isSelected": false,
- "numberColor": "COLOR_PRIMARY",
- "titleColor": "COLOR_PRIMARY",
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
@@ -2,11 +2,11 @@
 {
 "key": "C",
 "label": "Item C",
 "value": "C",
 },
- ObjectContaining {
+ {
 "isSelected": false,
- "numberColor": "COLOR_PRIMARY",
- "titleColor": "COLOR_PRIMARY",
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Styling and Colors > should apply secondary color to disabled items (when not selected) 33ms
→ expected "spy" to be called with arguments: [ { value: 'B', …(3) }, …(1) ]
Received:
 1st spy call:
 [
 {
- "disabled": true,
- "key": "B",
- "label": "Item B",
- "value": "B",
+ "key": "A",
+ "label": "Item A",
+ "value": "A",
 },
- ObjectContaining {
- "isSelected": false,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_SECONDARY",
+ {
+ "isSelected": true,
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
@@ -3,11 +3,11 @@
 "disabled": true,
 "key": "B",
 "label": "Item B",
 "value": "B",
 },
- ObjectContaining {
+ {
 "isSelected": false,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_SECONDARY",
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
 [
 {
- "disabled": true,
- "key": "B",
- "label": "Item B",
- "value": "B",
+ "key": "C",
+ "label": "Item C",
+ "value": "C",
 },
- ObjectContaining {
+ {
 "isSelected": false,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_SECONDARY",
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Styling and Colors > should apply success color to disabled items if they are selected 54ms
→ expected "spy" to be called with arguments: [ { value: 'B', …(3) }, …(1) ]
Received:
 1st spy call:
 [
 {
- "disabled": true,
- "key": "B",
- "label": "Item B",
- "value": "B",
+ "key": "A",
+ "label": "Item A",
+ "value": "A",
 },
- ObjectContaining {
+ {
 "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
@@ -3,11 +3,11 @@
 "disabled": true,
 "key": "B",
 "label": "Item B",
 "value": "B",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
 [
 {
- "disabled": true,
- "key": "B",
- "label": "Item B",
- "value": "B",
+ "key": "C",
+ "label": "Item C",
+ "value": "C",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_FOCUS",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

✓ BaseSelectionList > Numbering (showNumbers) > should show numbers by default with correct formatting 33ms
✓ BaseSelectionList > Numbering (showNumbers) > should hide numbers when showNumbers is false 45ms
✓ BaseSelectionList > Numbering (showNumbers) > should apply correct padding for alignment in long lists 137ms
× BaseSelectionList > Numbering (showNumbers) > should apply secondary color to numbers if showNumbers is false (internal logic check) 69ms
→ expected "spy" to be called with arguments: [ { value: 'A', …(2) }, …(1) ]
Received:
 1st spy call:
@@ -2,11 +2,11 @@
 {
 "key": "A",
 "label": "Item A",
 "value": "A",
 },
- ObjectContaining {
+ {
 "isSelected": true,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_FOCUS",
+ "numberColor": "#AFAFAF",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "disabled": true,
+ "key": "B",
+ "label": "Item B",
+ "value": "B",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#AFAFAF",
+ "titleColor": "#AFAFAF",
 },
 ]
 3rd spy call:
 [
 {
- "key": "A",
- "label": "Item A",
- "value": "A",
+ "key": "C",
+ "label": "Item C",
+ "value": "C",
 },
- ObjectContaining {
- "isSelected": true,
- "numberColor": "COLOR_SECONDARY",
- "titleColor": "COLOR_FOCUS",
+ {
+ "isSelected": false,
+ "numberColor": "#AFAFAF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

✓ BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should only show maxItemsToShow items initially 77ms
× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should scroll down when activeIndex moves beyond the visible window 47ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should scroll up when activeIndex moves before the visible window 95ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should pin the scroll offset to the end if selection starts near the end 36ms
→ expected '● 1. Item 1\n 2. Item 2\n 3. Ite…' to contain 'Item 10'
× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should handle dynamic scrolling through multiple activeIndex changes 71ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should correctly identify the selected item within the visible window 64ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…}, …(1) ]
Received:
 1st spy call:
 [
- ObjectContaining {
+ {
+ "key": "Item 1",
+ "label": "Item 1",
 "value": "Item 1",
 },
- ObjectContaining {
- "isSelected": false,
+ {
+ "isSelected": true,
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
- ObjectContaining {
- "value": "Item 1",
+ {
+ "key": "Item 2",
+ "label": "Item 2",
+ "value": "Item 2",
 },
- ObjectContaining {
+ {
 "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]
 3rd spy call:
 [
- ObjectContaining {
- "value": "Item 1",
+ {
+ "key": "Item 3",
+ "label": "Item 3",
+ "value": "Item 3",
 },
- ObjectContaining {
+ {
 "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should correctly identify the selected item when scrolled (high index) 67ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…}, …(1) ]
Received:
 1st spy call:
 [
- ObjectContaining {
- "value": "Item 6",
+ {
+ "key": "Item 1",
+ "label": "Item 1",
+ "value": "Item 1",
 },
- ObjectContaining {
+ {
 "isSelected": true,
+ "numberColor": "green",
+ "titleColor": "green",
 },
 ]
 2nd spy call:
 [
- ObjectContaining {
- "value": "Item 6",
+ {
+ "key": "Item 2",
+ "label": "Item 2",
+ "value": "Item 2",
 },
- ObjectContaining {
- "isSelected": true,
+ {
+ "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]
 3rd spy call:
 [
- ObjectContaining {
- "value": "Item 6",
+ {
+ "key": "Item 3",
+ "label": "Item 3",
+ "value": "Item 3",
 },
- ObjectContaining {
- "isSelected": true,
+ {
+ "isSelected": false,
+ "numberColor": "#FFFFFF",
+ "titleColor": "#FFFFFF",
 },
 ]

Number of calls: 3

× BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should correctly calculate scroll offset during the initial render phase 45ms
→ expected [ 'Item 1', 'Item 2', 'Item 3' ] to not include 'Item 1'
✓ BaseSelectionList > Scrolling and Pagination (maxItemsToShow) > should handle maxItemsToShow larger than the list length 90ms
× BaseSelectionList > Mouse Interaction > should register mouse click handler for each item 67ms
→ expected "useMouseClick" to be called 3 times, but got 0 times
× BaseSelectionList > Mouse Interaction > should update activeIndex on first click and call onSelect on second click 75ms
→ Cannot read properties of undefined (reading '1')
× BaseSelectionList > Mouse Interaction > should not call onSelect when a disabled item is clicked 79ms
→ Cannot read properties of undefined (reading '1')
× BaseSelectionList > Mouse Interaction > should pass isActive: isFocused to useMouseClick 41ms
→ expected "useMouseClick" to be called with arguments: [ Any<Object>, Any<Function>, …(1) ]
Number of calls: 0

✓ BaseSelectionList > Scroll Arrows (showScrollArrows) > should not show arrows by default 40ms
✓ BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows with correct colors when enabled (at the top) 52ms
✓ BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the middle 34ms
✓ BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the end 42ms
✓ BaseSelectionList > Scroll Arrows (showScrollArrows) > should not show arrows when list fits entirely 36ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51579) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51579) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/LoadingIndicator.test.tsx (22 tests | 1 failed) 1513ms
✓ <LoadingIndicator /> > should render blank when streamingState is Idle and no loading phrase or thought 176ms
✓ <LoadingIndicator /> > should not show cancel and timer when idle even if a phrase exists 128ms
✓ <LoadingIndicator /> > should render spinner, phrase, and time when streamingState is Responding 55ms
✓ <LoadingIndicator /> > should render spinner (static), phrase but no time/cancel when streamingState is WaitingForConfirmation 85ms
✓ <LoadingIndicator /> > should display the currentLoadingPhrase correctly 105ms
✓ <LoadingIndicator /> > should display the elapsedTime correctly when Responding 86ms
✓ <LoadingIndicator /> > should display the elapsedTime correctly in human-readable format 42ms
✓ <LoadingIndicator /> > should render rightContent when provided 30ms
× <LoadingIndicator /> > should transition correctly between states 56ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
✓ <LoadingIndicator /> > should display fallback phrase if thought is empty 94ms
✓ <LoadingIndicator /> > should display the subject of a thought 38ms
✓ <LoadingIndicator /> > should NOT prepend "Thinking... " even if the subject does not start with "Thinking" 32ms
✓ <LoadingIndicator /> > should prioritize thought.subject over currentLoadingPhrase 27ms
✓ <LoadingIndicator /> > should not display thought indicator for non-thought loading phrases 45ms
✓ <LoadingIndicator /> > should truncate long primary text instead of wrapping 53ms
✓ <LoadingIndicator /> > responsive layout > should render on a single line on a wide terminal 65ms
✓ <LoadingIndicator /> > responsive layout > should render on multiple lines on a narrow terminal 83ms
✓ <LoadingIndicator /> > responsive layout > should use wide layout at 80 columns 58ms
✓ <LoadingIndicator /> > responsive layout > should use narrow layout at 79 columns 86ms
✓ <LoadingIndicator /> > responsive layout > should render witty phrase after cancel and timer hint in wide layout 54ms
✓ <LoadingIndicator /> > responsive layout > should render witty phrase after cancel and timer hint in narrow layout 55ms
✓ <LoadingIndicator /> > should use spinnerIcon when provided 51ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51591) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51591) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/auth/AuthDialog.test.tsx (24 tests | 1 failed) 2337ms
✓ AuthDialog > Environment Variable Effects on Auth Options > correctly shows/hides COMPUTE_ADC options 'in Cloud Shell' 347ms
✓ AuthDialog > Environment Variable Effects on Auth Options > correctly shows/hides COMPUTE_ADC options 'with GEMINI_CLI_USE_COMPUTE_ADC' 54ms
✓ AuthDialog > Environment Variable Effects on Auth Options > correctly shows/hides COMPUTE_ADC options 'by default' 106ms
✓ AuthDialog > filters auth types when enforcedType is set 60ms
✓ AuthDialog > sets initial index to 0 when enforcedType is set 74ms
✓ AuthDialog > Initial Auth Type Selection > selects initial auth type 'from settings' 104ms
✓ AuthDialog > Initial Auth Type Selection > selects initial auth type 'from GEMINI_DEFAULT_AUTH_TYPE env var' 103ms
✓ AuthDialog > Initial Auth Type Selection > selects initial auth type 'from GEMINI_API_KEY env var' 52ms
✓ AuthDialog > Initial Auth Type Selection > selects initial auth type 'defaults to Sign in with Google' 109ms
✓ AuthDialog > handleAuthSelect > calls onAuthError if validation fails 102ms
✓ AuthDialog > handleAuthSelect > sets auth context with requiresRestart: true for LOGIN_WITH_GOOGLE 61ms
✓ AuthDialog > handleAuthSelect > sets auth context with empty object for other auth types 54ms
✓ AuthDialog > handleAuthSelect > always shows API key dialog even when env var is present 44ms
✓ AuthDialog > handleAuthSelect > always shows API key dialog even when env var is empty string 117ms
✓ AuthDialog > handleAuthSelect > shows API key dialog on initial setup if no env var is present 44ms
✓ AuthDialog > handleAuthSelect > always shows API key dialog on re-auth even if env var is present 56ms
× AuthDialog > handleAuthSelect > exits process for Sign in with Google when browser is suppressed 76ms
→ expected "spy" to be called at least once
✓ AuthDialog > displays authError when provided 260ms
✓ AuthDialog > useKeypress > 'does nothing on escape if authError i…' 66ms
✓ AuthDialog > useKeypress > 'calls onAuthError on escape if no aut…' 92ms
✓ AuthDialog > useKeypress > 'calls setAuthState(Unauthenticated) o…' 100ms
✓ AuthDialog > Snapshots > renders correctly with default props 73ms
✓ AuthDialog > Snapshots > renders correctly with auth error 109ms
✓ AuthDialog > Snapshots > renders correctly with enforced auth type 71ms
[?25h src/config/settings.test.ts (101 tests | 73 failed) 1809ms
× Settings Loading and Merging > loadSettings > should load 'system' settings if only 'system' file exists 89ms
→ expected "spy" to be called with arguments: [ …(2) ]
Number of calls: 0

× Settings Loading and Merging > loadSettings > should load 'user' settings if only 'user' file exists 8ms
→ expected "spy" to be called with arguments: [ …(2) ]
Number of calls: 0

× Settings Loading and Merging > loadSettings > should load 'workspace' settings if only 'workspace' file exists 72ms
→ expected "spy" to be called with arguments: [ …(2) ]
Number of calls: 0

× Settings Loading and Merging > loadSettings > should merge system, user and workspace settings, with system taking precedence over workspace, and workspace over user 43ms
→ expected {} to deeply equal { ui: { theme: 'system-theme' }, …(3) }
× Settings Loading and Merging > loadSettings > should merge all settings files with the correct precedence 23ms
→ expected {} to deeply equal { Object (ui, tools, ...) }
× Settings Loading and Merging > loadSettings > should use folderTrust from workspace settings when trusted 67ms
→ expected true to be false // Object.is equality
✓ Settings Loading and Merging > loadSettings > should use system folderTrust over user setting 8ms
× Settings Loading and Merging > loadSettings > should not allow user or workspace to override system disableYoloMode 18ms
→ expected false to be true // Object.is equality
× Settings Loading and Merging > loadSettings > should handle 'contextFileName in user settings' correctly 7ms
→ expected undefined to deeply equal 'CUSTOM.md'
× Settings Loading and Merging > loadSettings > should handle 'contextFileName in workspace settings' correctly 4ms
→ expected undefined to deeply equal 'PROJECT_SPECIFIC.md'
× Settings Loading and Merging > loadSettings > should handle 'excludedProjectEnvVars in user settin…' correctly 13ms
→ expected [ 'DEBUG', 'DEBUG_MODE' ] to deeply equal [ 'DEBUG', 'DEBUG_MODE', …(2) ]
× Settings Loading and Merging > loadSettings > should handle 'excludedProjectEnvVars in workspace s…' correctly 41ms
→ expected [ 'DEBUG', 'DEBUG_MODE' ] to deeply equal [ 'DEBUG', 'DEBUG_MODE', …(2) ]
× Settings Loading and Merging > loadSettings > should merge excludedProjectEnvVars with workspace taking precedence over user 10ms
→ expected undefined to deeply equal [ 'DEBUG', 'NODE_ENV', 'USER_VAR' ]
✓ Settings Loading and Merging > loadSettings > should default contextFileName to undefined if not in any settings file 4ms
× Settings Loading and Merging > loadSettings > should load telemetry setting from 'user' settings 3ms
→ expected undefined to be true // Object.is equality
× Settings Loading and Merging > loadSettings > should load telemetry setting from 'workspace' settings 19ms
→ expected undefined to be false // Object.is equality
× Settings Loading and Merging > loadSettings > should prioritize workspace telemetry setting over user setting 28ms
→ expected undefined to be false // Object.is equality
✓ Settings Loading and Merging > loadSettings > should have telemetry as undefined if not in any settings file 17ms
× Settings Loading and Merging > loadSettings > should merge MCP servers correctly, with workspace taking precedence 10ms
→ expected { ui: { theme: 'Default' }, …(1) } to deeply equal { mcpServers: { …(2) } }
× Settings Loading and Merging > loadSettings > should handle MCP servers when only in 'user' settings 6ms
→ expected {} to deeply equal { 'user-only-server': { …(2) } }
× Settings Loading and Merging > loadSettings > should handle MCP servers when only in 'workspace' settings 11ms
→ expected {} to deeply equal { 'workspace-only-server': { …(2) } }
✓ Settings Loading and Merging > loadSettings > should have mcpServers as undefined if not in any settings file 76ms
× Settings Loading and Merging > loadSettings > should merge MCP servers from system, user, and workspace with system taking precedence 35ms
→ expected {} to deeply equal { …(4) }
× Settings Loading and Merging > loadSettings > should merge mcp allowed/excluded lists with system taking precedence over workspace 33ms
→ expected {} to deeply equal { allowed: [ 'system-allowed' ], …(1) }
✓ Settings Loading and Merging > loadSettings > compressionThreshold settings > 'should be taken from user settings if…' 5ms
× Settings Loading and Merging > loadSettings > compressionThreshold settings > 'should be taken from workspace settin…' 5ms
→ expected 0.5 to deeply equal 0.8
× Settings Loading and Merging > loadSettings > compressionThreshold settings > 'should prioritize workspace settings …' 4ms
→ expected 0.5 to deeply equal 0.8
✓ Settings Loading and Merging > loadSettings > compressionThreshold settings > 'should be default if not in any setti…' 29ms
✓ Settings Loading and Merging > loadSettings > should use user compressionThreshold if workspace does not define it 49ms
× Settings Loading and Merging > loadSettings > should merge includeDirectories from all scopes 4ms
→ expected [] to deeply equal [ '/system/defaults/dir', …(4) ]
× Settings Loading and Merging > loadSettings > should handle JSON parsing errors gracefully 7ms
→ expected Error: loadSettings should have thrown a … to be an instance of FatalConfigError
× Settings Loading and Merging > loadSettings > should resolve environment variables in user settings 49ms
→ expected undefined to be 'user_api_key_from_env' // Object.is equality
× Settings Loading and Merging > loadSettings > should resolve environment variables in workspace settings 5ms
→ expected undefined to be 'workspace_endpoint_from_env/api' // Object.is equality
× Settings Loading and Merging > loadSettings > should correctly resolve and merge env variables from different scopes 7ms
→ expected undefined to be 'final_value' // Object.is equality
× Settings Loading and Merging > loadSettings > should correctly merge dnsResolutionOrder with workspace taking precedence 7ms
→ expected undefined to be 'verbatim' // Object.is equality
× Settings Loading and Merging > loadSettings > should use user dnsResolutionOrder if workspace is not defined 5ms
→ expected undefined to be 'verbatim' // Object.is equality
× Settings Loading and Merging > loadSettings > should leave unresolved environment variables as is 14ms
→ expected undefined to be '$UNDEFINED_VAR' // Object.is equality
× Settings Loading and Merging > loadSettings > should resolve multiple environment variables in a single string 8ms
→ expected undefined to be '/path/valueA/valueB/end' // Object.is equality
× Settings Loading and Merging > loadSettings > should resolve environment variables in arrays 8ms
→ expected undefined to deeply equal [ 'item1_env', 'item2_env', 'literal' ]
× Settings Loading and Merging > loadSettings > should correctly pass through null, boolean, and number types, and handle undefined properties 21ms
→ expected undefined to be null
× Settings Loading and Merging > loadSettings > should resolve multiple concatenated environment variables in a single string value 7ms
→ expected undefined to be 'myhost:9090/api' // Object.is equality
× Settings Loading and Merging > loadSettings > when GEMINI_CLI_SYSTEM_SETTINGS_PATH is set > should load system settings from the path specified in the environment variable 7ms
→ expected "spy" to be called with arguments: [ …(2) ]
Number of calls: 0

✓ Settings Loading and Merging > loadSettings > should correctly skip workspace-level loading if workspaceDir is a symlink to home 18ms
× Settings Loading and Merging > loadSettings > caching > should cache loadSettings results 59ms
→ expected "spy" to be called 5 times, but got 0 times
× Settings Loading and Merging > loadSettings > caching > should use separate cache for different workspace directories 34ms
→ expected "spy" to be called 10 times, but got 0 times
× Settings Loading and Merging > loadSettings > caching > should clear cache when saveSettings is called for user settings 6ms
→ expected "spy" to be called 5 times, but got 0 times
× Settings Loading and Merging > loadSettings > caching > should clear all caches when saveSettings is called for workspace settings 19ms
→ expected "spy" to be called 10 times, but got 0 times
✓ Settings Loading and Merging > excludedProjectEnvVars integration > should exclude DEBUG and DEBUG_MODE from project .env files by default 3ms
× Settings Loading and Merging > excludedProjectEnvVars integration > should respect custom excludedProjectEnvVars from user settings 5ms
→ expected undefined to deeply equal [ 'NODE_ENV', 'DEBUG' ]
× Settings Loading and Merging > excludedProjectEnvVars integration > should merge excludedProjectEnvVars with workspace taking precedence 6ms
→ expected undefined to deeply equal [ 'DEBUG', 'NODE_ENV', 'USER_VAR' ]
× Settings Loading and Merging > with workspace trust > should merge workspace settings when workspace is trusted 3ms
→ expected undefined to be true // Object.is equality
× Settings Loading and Merging > with workspace trust > should NOT merge workspace settings when workspace is not trusted 5ms
→ expected undefined to be false // Object.is equality
× Settings Loading and Merging > with workspace trust > should NOT merge workspace settings when workspace trust is undefined 5ms
→ expected undefined to be false // Object.is equality
× Settings Loading and Merging > loadEnvironment > sets environment variables from .env files 1ms
→ expected undefined to deeply equal '1234'
✓ Settings Loading and Merging > loadEnvironment > does not load env files from untrusted spaces when sandboxed 1ms
× Settings Loading and Merging > loadEnvironment > does load env files from untrusted spaces when NOT sandboxed 1ms
→ expected undefined to deeply equal '1234'
× Settings Loading and Merging > loadEnvironment > does not load env files when trust is undefined and sandboxed 12ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to deeply equal 'test-key'
× Settings Loading and Merging > loadEnvironment > loads whitelisted env files from untrusted spaces if sandboxing is enabled 18ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to deeply equal 'test-key'
× Settings Loading and Merging > loadEnvironment > loads whitelisted env files from untrusted spaces if sandboxing is enabled via CLI flag 14ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to deeply equal 'test-key'
✓ Settings Loading and Merging > migrateDeprecatedSettings > should not do anything if there are no deprecated settings 12ms
× Settings Loading and Merging > migrateDeprecatedSettings > should migrate general.disableAutoUpdate to general.enableAutoUpdate with inverted value 4ms
→ expected "setValue" to be called with arguments: [ 'User', 'general', …(1) ]
Number of calls: 0

× Settings Loading and Merging > migrateDeprecatedSettings > should migrate tools.approvalMode to general.defaultApprovalMode 5ms
→ expected "setValue" to be called with arguments: [ 'User', 'general', …(1) ]
Number of calls: 0

× Settings Loading and Merging > migrateDeprecatedSettings > should migrate all 4 inverted boolean settings 4ms
→ expected "setValue" to be called with arguments: [ 'User', 'general', …(1) ]
Number of calls: 0

✓ Settings Loading and Merging > migrateDeprecatedSettings > should migrate enableLoadingPhrases: false to loadingPhrases: off 6ms
✓ Settings Loading and Merging > migrateDeprecatedSettings > should not migrate enableLoadingPhrases: true to loadingPhrases 15ms
✓ Settings Loading and Merging > migrateDeprecatedSettings > should not overwrite existing loadingPhrases during migration 30ms
✓ Settings Loading and Merging > migrateDeprecatedSettings > should remove deprecated settings by default and prioritize new ones 16ms
✓ Settings Loading and Merging > migrateDeprecatedSettings > should preserve deprecated settings when removeDeprecated is explicitly false 8ms
× Settings Loading and Merging > migrateDeprecatedSettings > should trigger migration automatically during loadSettings 8ms
→ expected true to be false // Object.is equality
× Settings Loading and Merging > migrateDeprecatedSettings > should migrate disableUpdateNag to enableAutoUpdateNotification in memory but not save for system and system defaults settings 4ms
→ Cannot convert undefined or null to object
× Settings Loading and Merging > migrateDeprecatedSettings > should migrate experimental agent settings in system scope in memory but not save 3ms
→ expected undefined to match object { codebase_investigator: { …(1) } }
× Settings Loading and Merging > migrateDeprecatedSettings > should migrate experimental agent settings to agents overrides 9ms
→ expected undefined to match object { …(2) }
× Settings Loading and Merging > saveSettings > should save settings using updateSettingsFilePreservingFormat 3ms
→ expected "spy" to be called with arguments: [ '/mock/settings.json', …(1) ]
Number of calls: 0

× Settings Loading and Merging > saveSettings > should create directory if it does not exist 2ms
→ expected "spy" to be called with arguments: [ '/mock/new/dir' ]
Number of calls: 0

× Settings Loading and Merging > saveSettings > should emit error feedback if saving fails 9ms
→ expected "spy" to be called with arguments: [ 'error', …(2) ]
Number of calls: 0

× Settings Loading and Merging > LoadedSettings and remote admin settings > should prioritize remote admin settings over file-based admin settings 8ms
→ expected 'Default' to be 'system-theme' // Object.is equality
× Settings Loading and Merging > LoadedSettings and remote admin settings > should set remote admin settings and recompute merged settings 6ms
→ expected 'Default' to be 'initial-theme' // Object.is equality
✓ Settings Loading and Merging > LoadedSettings and remote admin settings > should correctly handle undefined remote admin settings 106ms
✓ Settings Loading and Merging > LoadedSettings and remote admin settings > should un-nest MCP configuration from remote settings 10ms
✓ Settings Loading and Merging > LoadedSettings and remote admin settings > should map requiredMcpConfig from remote settings 4ms
✓ Settings Loading and Merging > LoadedSettings and remote admin settings > should set skills based on unmanagedCapabilitiesEnabled 6ms
✓ Settings Loading and Merging > LoadedSettings and remote admin settings > should handle completely empty remote admin settings response 5ms
✓ Settings Loading and Merging > getDefaultsFromSchema > should extract defaults from a schema 2ms
✓ Settings Loading and Merging > Reactivity & Snapshots > getSnapshot() should return stable reference if no changes occur 2ms
× Settings Loading and Merging > Reactivity & Snapshots > setValue() should create a new snapshot reference and emit event 62ms
→ expected "spy" to be called at least once
× Settings Loading and Merging > Security and Sandbox > sandbox detection > should detect sandbox when -s is a real flag 4ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'secret' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > sandbox detection > should detect sandbox when --sandbox is a real flag 4ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'secret' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > sandbox detection > should ignore sandbox flags if they appear after -- 4ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to deeply equal 'secret'
× Settings Loading and Merging > Security and Sandbox > sandbox detection > should NOT be tricked by positional arguments that look like flags 4ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to deeply equal 'secret'
× Settings Loading and Merging > Security and Sandbox > env var sanitization > should strictly enforce whitelist in untrusted/sandboxed mode 5ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'secret-key' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > env var sanitization > should sanitize shell injection characters in whitelisted env vars in untrusted mode 4ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'key-whoami-id-' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > env var sanitization > should allow . and / in whitelisted env vars but sanitize other characters in untrusted mode 5ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'secret-123/path.to/somewhererm-rf/' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > env var sanitization > should NOT sanitize variables from trusted sources 5ms
→ expected undefined to be '$(bar)' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > env var sanitization > should load environment variables normally when workspace is TRUSTED even if "sandboxed" 5ms
→ expected 'AQ.Ab8RN6IwT1s30bPU4hFlfm2uLDRCJYHNlY…' to be 'un-sanitized;key!' // Object.is equality
✓ Settings Loading and Merging > Security and Sandbox > env var sanitization > should sanitize value in sanitizeEnvVar helper 1ms
× Settings Loading and Merging > Security and Sandbox > Cloud Shell security > should handle Cloud Shell special defaults securely when untrusted 3ms
→ expected 'aipp-internal-testing' to be 'cloudshell-gca' // Object.is equality
× Settings Loading and Merging > Security and Sandbox > Cloud Shell security > should sanitize GOOGLE_CLOUD_PROJECT in Cloud Shell when loaded from .env in untrusted mode 23ms
→ expected 'aipp-internal-testing' to be 'attacker-projectinject' // Object.is equality
✓ LoadedSettings Isolation and Serializability > setValue Isolation > should isolate state between settings and originalSettings 67ms
✓ LoadedSettings Isolation and Serializability > setValue Isolation > should not share references between settings and originalSettings (original servers test) 16ms
✓ LoadedSettings Isolation and Serializability > setValue Serializability > should preserve Map/Set types (via structuredClone) 15ms
✓ LoadedSettings Isolation and Serializability > setValue Serializability > should handle circular references (structuredClone supports them, but deepMerge may not) 185ms
src/ui/hooks/usePermissionsModifyTrust.test.ts (13 tests | 13 failed) 2599ms
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should initialize with the correct trust level 573ms
→ Cannot read properties of undefined (reading 'currentTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should detect inherited trust from parent 275ms
→ Cannot read properties of undefined (reading 'isInheritedTrustFromParent')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should detect inherited trust from IDE 140ms
→ Cannot read properties of undefined (reading 'isInheritedTrustFromIde')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should set needsRestart but not save when trust changes 200ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should save immediately if trust does not change 177ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should commit the pending trust level change 132ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should add warning when setting DO_NOT_TRUST but still trusted by parent 203ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is the current workspace > should add warning when setting DO_NOT_TRUST but still trusted by IDE 96ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is not the current workspace > should not detect inherited trust 184ms
→ Cannot read properties of undefined (reading 'isInheritedTrustFromParent')
× usePermissionsModifyTrust > when targetDirectory is not the current workspace > should save immediately without needing a restart 176ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > when targetDirectory is not the current workspace > should not add a warning when setting DO_NOT_TRUST 126ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > should emit feedback when setValue throws in updateTrustLevel 76ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
× usePermissionsModifyTrust > should emit feedback when setValue throws in commitTrustLevelChange 210ms
→ Cannot read properties of undefined (reading 'updateTrustLevel')
[?25h src/ui/components/ShowMoreLines.test.tsx (8 tests | 8 failed) 1858ms
× ShowMoreLines > renders nothing when: overflow=Set{}, streaming=idle, constrain=true 511ms
→ expected '\n ERROR useStreamingContext must b…' to be '' // Object.is equality
× ShowMoreLines > renders nothing when: overflow=Set{ '1' }, streaming=idle, constrain=false 174ms
→ expected '\n ERROR useStreamingContext must b…' to be '' // Object.is equality
× ShowMoreLines > renders message in STANDARD mode when overflowing 145ms
→ expected '\n error usestreamingcontext must b…' to contain 'press ctrl+o to show more lines'
× ShowMoreLines > renders message in ASB mode when overflowing and state is idle 233ms
→ expected '\n error usestreamingcontext must b…' to contain 'press ctrl+o to show more lines'
× ShowMoreLines > renders message in ASB mode when overflowing and state is waiting_for_confirmation 293ms
→ expected '\n error usestreamingcontext must b…' to contain 'press ctrl+o to show more lines'
× ShowMoreLines > renders message in ASB mode when overflowing and state is responding 97ms
→ expected '\n error usestreamingcontext must b…' to contain 'press ctrl+o to show more lines'
× ShowMoreLines > renders message in ASB mode when isOverflowing prop is true even if internal overflow state is empty 250ms
→ expected '\n error usestreamingcontext must b…' to contain 'press ctrl+o to show more lines'
× ShowMoreLines > renders nothing when isOverflowing prop is false even if internal overflow state has IDs 150ms
→ expected '\n ERROR useStreamingContext must b…' to be '' // Object.is equality
[?25h src/ui/contexts/ScrollProvider.test.tsx (12 tests | 11 failed) 2345ms
× ScrollProvider > Event Handling Status > returns true when scroll event is handled 567ms
→ expected false to be true // Object.is equality
✓ ScrollProvider > Event Handling Status > returns false when scroll event is ignored (cannot scroll further) 155ms
× ScrollProvider > calls scrollTo when clicking scrollbar track if available 197ms
→ expected "spy" to be called at least once
× ScrollProvider > calls scrollBy when clicking scrollbar track if scrollTo is not available 188ms
→ expected "spy" to be called at least once
× ScrollProvider > batches multiple scroll events into a single update 104ms
→ expected "spy" to be called 1 times, but got 0 times
× ScrollProvider > handles mixed direction scroll events in batch 80ms
→ expected "spy" to be called 1 times, but got 0 times
× ScrollProvider > respects scroll limits during batching 272ms
→ expected "spy" to be called 1 times, but got 0 times
× ScrollProvider > calls scrollTo when dragging scrollbar thumb if available 102ms
→ expected "spy" to be called at least once
× ScrollProvider > calls scrollBy when dragging scrollbar thumb if scrollTo is not available 261ms
→ expected "spy" to be called at least once
× ScrollProvider > Scroll Acceleration > accelerates scroll for non-Ghostty terminals during rapid scrolling 133ms
→ expected 0 to be greater than 60
× ScrollProvider > Scroll Acceleration > does not accelerate for Ghostty terminals even during rapid scrolling 83ms
→ expected +0 to be 60 // Object.is equality
× ScrollProvider > Scroll Acceleration > resets acceleration count if scrolling is slow 200ms
→ expected +0 to be 60 // Object.is equality
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51616) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51616) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h src/ui/components/HooksDialog.test.tsx (12 tests | 2 failed) 1775ms
✓ HooksDialog > snapshots > renders empty hooks dialog 326ms
✓ HooksDialog > snapshots > renders single hook with security warning, source, and tips 113ms
✓ HooksDialog > snapshots > renders hooks grouped by event name with enabled and disabled status 251ms
✓ HooksDialog > snapshots > renders hook with all metadata (matcher, sequential, timeout) 101ms
✓ HooksDialog > snapshots > renders hook using command as name when name is not provided 87ms
✓ HooksDialog > keyboard interaction > should call onClose when escape key is pressed 95ms
✓ HooksDialog > scrolling behavior > should not show scroll indicators when hooks fit within maxVisibleHooks 101ms
✓ HooksDialog > scrolling behavior > should show scroll down indicator when there are more hooks than maxVisibleHooks 83ms
× HooksDialog > scrolling behavior > should scroll down when down arrow is pressed 164ms
→ expected '\n╭──────────────────────────────────…' to contain '▲'
× HooksDialog > scrolling behavior > should scroll up when up arrow is pressed after scrolling down 117ms
→ expected '\n╭──────────────────────────────────…' to contain '▲'
✓ HooksDialog > scrolling behavior > should not scroll beyond the end 251ms
✓ HooksDialog > scrolling behavior > should not scroll above the beginning 82ms
[?25h[?2004h src/ui/components/ValidationDialog.test.tsx (8 tests | 3 failed) 852ms
✓ ValidationDialog > initial render (choosing state) > should render the main message and two options 142ms
✓ ValidationDialog > initial render (choosing state) > should render learn more URL when provided 153ms
✓ ValidationDialog > initial render (choosing state) > should call onChoice with cancel when ESCAPE is pressed 109ms
✓ ValidationDialog > onChoice handling > should call onChoice with change_auth when that option is selected 97ms
✓ ValidationDialog > onChoice handling > should call onChoice with verify when no validation link is provided 69ms
× ValidationDialog > onChoice handling > should open browser and transition to waiting state when verify is selected with a link 85ms
→ expected '╭────────────────────────────────────…' to contain 'Waiting for verification...'
× ValidationDialog > headless mode > should show URL in message when browser cannot be launched 117ms
→ expected '╭────────────────────────────────────…' to contain 'Please open this URL in a browser:'
× ValidationDialog > error state > should show error and options when browser fails to open 77ms
→ expected '╭────────────────────────────────────…' to contain 'Browser not found'
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51626) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51626) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/hooks/useKeypress.test.tsx (22 tests | 20 failed) 962ms
✓ useKeypress > should not listen if isActive is false 169ms
× useKeypress > should listen for keypress when active for key 'a' 34ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should listen for keypress when active for key 'left' 31ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should listen for keypress when active for key 'right' 31ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should listen for keypress when active for key 'up' 72ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should listen for keypress when active for key 'down' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should listen for keypress when active for key 'tab' 44ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > should set and release raw mode 58ms
→ expected "spy" to be called with arguments: [ true ]
Number of calls: 0

✓ useKeypress > should stop listening after being unmounted 83ms
× useKeypress > should correctly identify alt+enter (meta key) 47ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND true' > should process a paste as a single event 30ms
→ expected "spy" to be called 1 times, but got 0 times
× useKeypress > in 'PASTE_WORKAROUND true' > should handle keypress interspersed with pastes 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND true' > should handle lone pastes 101ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND true' > should handle paste false alarm 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND true' > should handle back to back pastes 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND true' > should handle pastes split across writes 35ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND false' > should process a paste as a single event 21ms
→ expected "spy" to be called 1 times, but got 0 times
× useKeypress > in 'PASTE_WORKAROUND false' > should handle keypress interspersed with pastes 26ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND false' > should handle lone pastes 51ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND false' > should handle paste false alarm 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND false' > should handle back to back pastes 18ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× useKeypress > in 'PASTE_WORKAROUND false' > should handle pastes split across writes 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

[?25h[?2004h[?2004h[?2004h[?2004h src/ui/IdeIntegrationNudge.test.tsx (6 tests | 1 failed) 985ms
✓ IdeIntegrationNudge > renders correctly with default options 229ms
✓ IdeIntegrationNudge > handles "Yes" selection 236ms
✓ IdeIntegrationNudge > handles "No" selection 175ms
✓ IdeIntegrationNudge > handles "Dismiss" selection 138ms
× IdeIntegrationNudge > handles Escape key press 124ms
→ expected "spy" to be called with arguments: [ { userSelection: 'no', …(1) } ]
Number of calls: 0

✓ IdeIntegrationNudge > displays correct text and handles selection when extension is pre-installed 82ms
[?25h[?2004h[?2004h[?2004h[?2004h(node:51630) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51630) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/contexts/MouseContext.test.tsx (18 tests | 17 failed) 835ms
× MouseContext > should subscribe and unsubscribe a handler 149ms
→ expected "spy" to be called 1 times, but got 0 times
✓ MouseContext > should not call handler if not active 37ms
× MouseContext > should emit SelectionWarning when move event is unhandled and has coordinates 41ms
→ expected "spy" to be called with arguments: [ 'selection-warning' ]
Number of calls: 0

× MouseContext > should not emit SelectionWarning when move event is handled 30ms
→ expected "spy" to be called at least once
× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<0;10;20M'" as 'left-press' 26ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<0;10;20m'" as 'left-release' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<2;10;20M'" as 'right-press' 85ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<1;10;20M'" as 'middle-press' 49ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<64;10;20M'" as 'scroll-up' 36ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<65;10;20M'" as 'scroll-down' 29ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<32;10;20M'" as 'move' 35ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<4;10;20M'" as 'left-press' 38ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<8;10;20M'" as 'left-press' 43ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<20;10;20M'" as 'left-press' 32ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > SGR Mouse Events > should recognize sequence "'\u001b[<68;10;20M'" as 'scroll-up' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0

× MouseContext > should emit a double-click event when two left-presses occur quickly at the same position 31ms
→ expected "spy" to be called 1 times, but got 0 times
× MouseContext > should NOT emit a double-click event if clicks are too far apart 68ms
→ expected "spy" to be called 2 times, but got 0 times
× MouseContext > should NOT emit a double-click event if too much time passes 50ms
→ expected "spy" to be called 2 times, but got 0 times
[?25h src/nonInteractiveCliAgentSession.test.ts (50 tests | 1 failed) 887ms
✓ runNonInteractive > should process input and write text output 31ms
✓ runNonInteractive > should stream the specific stream started by send 7ms
✓ runNonInteractive > fails fast if the session acknowledges a message send without a stream 7ms
✓ runNonInteractive > should register activity logger when GEMINI_CLI_ACTIVITY_LOG_TARGET is set 9ms
✓ runNonInteractive > should not register activity logger when GEMINI_CLI_ACTIVITY_LOG_TARGET is not set 6ms
✓ runNonInteractive > should handle a single tool call and respond 10ms
✓ runNonInteractive > should write a single newline between sequential text outputs from the model 17ms
✓ runNonInteractive > should handle error during tool execution and should send error back to the model 13ms
✓ runNonInteractive > should exit with error if sendMessageStream throws initially 11ms
✓ runNonInteractive > should not exit if a tool is not found, and should send error back to model 19ms
✓ runNonInteractive > should exit when max session turns are exceeded 4ms
✓ runNonInteractive > should preprocess @include commands before sending to the model 16ms
✓ runNonInteractive > should process input and write JSON output with stats 12ms
✓ runNonInteractive > should write JSON output with stats for tool-only commands (no text response) 10ms
✓ runNonInteractive > should keep only the final post-tool assistant text in JSON output 21ms
✓ runNonInteractive > should write JSON output with stats for empty response commands 9ms
✓ runNonInteractive > should handle errors in JSON format 17ms
✓ runNonInteractive > should handle FatalInputError with custom exit code in JSON format 14ms
✓ runNonInteractive > should execute a slash command that returns a prompt 25ms
✓ runNonInteractive > should handle slash commands 11ms
× runNonInteractive > should handle cancellation (Ctrl+C) 80ms
→ promise resolved "undefined" instead of rejecting
✓ runNonInteractive > should honor cancellation that happens before session.send() 7ms
✓ runNonInteractive > should throw FatalInputError if a command requires confirmation 7ms
✓ runNonInteractive > should treat an unknown slash command as a regular prompt 11ms
✓ runNonInteractive > should throw for unhandled command result types 8ms
✓ runNonInteractive > should pass arguments to the slash command action 14ms
✓ runNonInteractive > should instantiate CommandService with correct loaders for slash commands 11ms
✓ runNonInteractive > should allow a normally-excluded tool when --allowed-tools is set 7ms
✓ runNonInteractive > CoreEvents Integration > subscribes to UserFeedback and drains backlog on start 8ms
✓ runNonInteractive > CoreEvents Integration > unsubscribes from UserFeedback on finish 9ms
✓ runNonInteractive > CoreEvents Integration > logs to process.stderr when UserFeedback event is received 28ms
✓ runNonInteractive > CoreEvents Integration > logs optional error object to process.stderr in debug mode 68ms
✓ runNonInteractive > should emit appropriate events for streaming JSON output 19ms
✓ runNonInteractive > should handle EPIPE error gracefully 22ms
✓ runNonInteractive > should resume chat when resumedSessionData is provided 21ms
✓ runNonInteractive > should emit appropriate error event in streaming JSON mode: 'loop detected' 20ms
✓ runNonInteractive > should emit appropriate error event in streaming JSON mode: 'max session turns' 21ms
✓ runNonInteractive > should log error when tool recording fails 28ms
✓ runNonInteractive > should stop agent execution immediately when a tool call returns STOP_EXECUTION error 54ms
✓ runNonInteractive > should write JSON output when a tool call returns STOP_EXECUTION error 19ms
✓ runNonInteractive > should emit result event when a tool call returns STOP_EXECUTION error in streaming JSON mode 28ms
✓ runNonInteractive > Agent Execution Events > should handle AgentExecutionStopped event 19ms
✓ runNonInteractive > Agent Execution Events > should handle AgentExecutionBlocked event 12ms
✓ runNonInteractive > Output Sanitization > should sanitize ANSI output by default 9ms
✓ runNonInteractive > Output Sanitization > should allow ANSI output when rawOutput is true 8ms
✓ runNonInteractive > Output Sanitization > should allow ANSI output when only acceptRawOutputRisk is true 12ms
✓ runNonInteractive > Output Sanitization > should warn when rawOutput is true and acceptRisk is false 11ms
✓ runNonInteractive > Output Sanitization > should not warn when rawOutput is true and acceptRisk is true 31ms
✓ runNonInteractive > Output Sanitization > should emit warning event for loop_detected in streaming JSON mode 8ms
✓ runNonInteractive > Output Sanitization > should report cancelled tool calls as success in stream-json mode (legacy parity) 14ms
src/gemini_cleanup.test.tsx (2 tests | 2 failed) 60068ms
× gemini.tsx main function cleanup > should log error when cleanupExpiredSessions fails 60029ms
→ Test timed out in 60000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
× gemini.tsx main function cleanup > should register SessionEnd hook exactly once in non-interactive mode 29ms
→ Cannot read properties of undefined (reading 'merged')
✓ src/ui/components/MultiFolderTrustDialog.test.tsx (8 tests) 2013ms
✓ MultiFolderTrustDialog > renders the dialog with the list of folders 594ms
✓ MultiFolderTrustDialog > shows submitting message after a choice is made 396ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/hooks/useMouse.test.ts (4 tests | 3 failed) 1482ms
✓ useMouse > should not subscribe when isActive is false 629ms
× useMouse > should subscribe when isActive is true 205ms
→ expected "spy" to be called with arguments: [ [Function spy] ]
Number of calls: 0

× useMouse > should unsubscribe on unmount 275ms
→ expected "spy" to be called with arguments: [ [Function spy] ]
Number of calls: 0

× useMouse > should unsubscribe when isActive becomes false 371ms
→ expected "spy" to be called with arguments: [ [Function spy] ]
Number of calls: 0

[?2004h[?25h[?2004h[?2004h[?2004h src/ui/hooks/useIdeTrustListener.test.tsx (5 tests | 5 failed) 1452ms
× useIdeTrustListener > should initialize correctly with no trust information 636ms
→ Cannot read properties of undefined (reading 'resolve')
× useIdeTrustListener > should NOT set needsRestart when connecting for the first time 420ms
→ Cannot read properties of undefined (reading 'resolve')
× useIdeTrustListener > should set needsRestart when IDE trust changes 155ms
→ Cannot read properties of undefined (reading 'resolve')
× useIdeTrustListener > should set needsRestart when IDE disconnects 131ms
→ Cannot read properties of undefined (reading 'resolve')
× useIdeTrustListener > should NOT set needsRestart if trust value does not change 107ms
→ Cannot read properties of undefined (reading 'resolve')
[?25h[?2004h(node:51647) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51647) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h src/ui/components/Notifications.test.tsx (12 tests | 1 failed) 1396ms
✓ Notifications > renders nothing when no notifications 306ms
✓ Notifications > renders startup warnings: [object Object] 247ms
✓ Notifications > renders startup warnings: [object Object],[object Object] 235ms
✓ Notifications > increments show count for low priority warnings 46ms
✓ Notifications > filters out low priority warnings that exceeded max show count 47ms
× Notifications > dismisses warnings on keypress 90ms
→ expected '\n⚠ High priority 1\n' not to contain 'High priority 1'
✓ Notifications > renders init error 158ms
✓ Notifications > does not render init error when streaming 23ms
✓ Notifications > renders update notification 77ms
✓ Notifications > renders screen reader nudge when enabled and not seen (no legacy file) 79ms
✓ Notifications > migrates legacy screen reader nudge file 64ms
✓ Notifications > does not render screen reader nudge when already seen in persistent state 22ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/EnumSelector.test.tsx (9 tests | 1 failed) 1739ms
✓ <EnumSelector /> > renders with string options and matches snapshot 687ms
✓ <EnumSelector /> > renders with numeric options and matches snapshot 61ms
✓ <EnumSelector /> > renders inactive state and matches snapshot 54ms
✓ <EnumSelector /> > renders with single option and matches snapshot 66ms
✓ <EnumSelector /> > renders nothing when no options are provided 45ms
✓ <EnumSelector /> > handles currentValue not found in options 250ms
× <EnumSelector /> > updates when currentValue changes externally 315ms
→ lastFrame() returned an empty string. If this is intentional, use lastFrame({ allowEmpty: true }). Otherwise, ensure you are calling await waitUntilReady() and that the component is rendering correctly.
✓ <EnumSelector /> > shows navigation arrows when multiple options available 155ms
✓ <EnumSelector /> > hides navigation arrows when single option available 100ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/UserIdentity.test.tsx (8 tests | 2 failed) 3244ms
× <UserIdentity /> > should render login message and auth indicator 1937ms
→ expected 'Signed in with Google /auth\n' to contain 'Signed in with Google: test@example.c…'
× <UserIdentity /> > should render the user email on the very first frame (regression test) 495ms
→ expected 'Signed in with Google /auth' to contain 'test@example.com'
✓ <UserIdentity /> > should render login message if email is missing 241ms
✓ <UserIdentity /> > should render plan name and upgrade indicator 282ms
✓ <UserIdentity /> > should not render if authType is missing 98ms
✓ <UserIdentity /> > should render non-Google auth message 70ms
✓ <UserIdentity /> > should render specific tier name when provided 65ms
✓ <UserIdentity /> > should not render /upgrade indicator for ultra tiers 51ms
[?25h src/ui/hooks/useAlternateBuffer.test.ts (5 tests | 3 failed) 1445ms
× useAlternateBuffer > should return false when config.getUseAlternateBuffer returns false 898ms
→ expected undefined to be false // Object.is equality
× useAlternateBuffer > should return true when config.getUseAlternateBuffer returns true 252ms
→ expected undefined to be true // Object.is equality
× useAlternateBuffer > should return the immutable config value, not react to settings changes 292ms
→ expected undefined to be true // Object.is equality
✓ isAlternateBufferEnabled > should return true when config.getUseAlternateBuffer returns true 1ms
✓ isAlternateBufferEnabled > should return false when config.getUseAlternateBuffer returns false 0ms
[?25h src/ui/contexts/ScrollProvider.drag.test.tsx (6 tests | 6 failed) 1874ms
× ScrollProvider Drag > drags the scrollbar thumb 962ms
→ expected "spy" to be called with arguments: [ 10 ]
Number of calls: 0

× ScrollProvider Drag > jumps to position and starts drag when clicking track below thumb 135ms
→ expected "spy" to be called with arguments: [ 50 ]
Number of calls: 0

× ScrollProvider Drag > jumps to position when clicking track above thumb 316ms
→ expected "spy" to be called with arguments: [ -30 ]
Number of calls: 0

× ScrollProvider Drag > jumps to top when clicking very top of track 131ms
→ expected "spy" to be called with arguments: [ -50 ]
Number of calls: 0

× ScrollProvider Drag > jumps to bottom when clicking very bottom of track 186ms
→ expected "spy" to be called with arguments: [ 90 ]
Number of calls: 0

× ScrollProvider Drag > uses scrollTo with 0 duration if provided 140ms
→ expected "spy" to be called with arguments: [ 50 ]
Number of calls: 0

[?25h src/ui/utils/clipboardUtils.test.ts (44 tests | 10 failed) 893ms
✓ clipboardUtils > clipboardHasImage (Linux) > should return true when wl-paste shows image type (Wayland) 32ms
✓ clipboardUtils > clipboardHasImage (Linux) > should return true when xclip shows image type (X11) 14ms
✓ clipboardUtils > clipboardHasImage (Linux) > should return false if tool fails 8ms
✓ clipboardUtils > clipboardHasImage (Linux) > should return false if no image type is found 30ms
✓ clipboardUtils > clipboardHasImage (Linux) > should return false if tool not found 26ms
✓ clipboardUtils > saveClipboardImage (Linux) > should save image using wl-paste if detected 55ms
✓ clipboardUtils > saveClipboardImage (Linux) > should return null if wl-paste fails 16ms
✓ clipboardUtils > saveClipboardImage (Linux) > should save image using xclip if detected 18ms
✓ clipboardUtils > saveClipboardImage (Linux) > should return null if tool is not yet detected 9ms
✓ clipboardUtils > cleanupOldClipboardImages > should not throw errors 61ms
✓ clipboardUtils > cleanupOldClipboardImages > should complete without errors on valid directory 126ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape empty string 15ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape single path no spaces 14ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape simple space-separated paths 7ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape three paths 18ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape escaped spaces 22ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape multiple paths with escaped spaces 21ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape multiple escaped spaces 9ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape consecutive spaces 8ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape trailing/leading whitespace 16ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape whitespace only 7ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape quoted path with spaces 8ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape mixed quoted and unquoted 19ms
✓ clipboardUtils > splitDragAndDropPaths > in posix > should escape quoted with escaped quotes 49ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split double quoted path 13ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split multiple double quoted paths 11ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split unquoted path 17ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split mixed quoted and unquoted 8ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split single quoted path 19ms
✓ clipboardUtils > splitDragAndDropPaths > in windows > should split mixed single and double quoted 9ms
✓ clipboardUtils > parsePastedPaths > should return null for empty string 8ms
× clipboardUtils > parsePastedPaths > should add @ prefix to single valid path 34ms
→ expected null to be '@/path/to/file.txt ' // Object.is equality
✓ clipboardUtils > parsePastedPaths > should return null for single invalid path 17ms
× clipboardUtils > parsePastedPaths > should add @ prefix to all valid paths 12ms
→ expected null to be '@/path/to/file1.txt @/path/to/file2.t…' // Object.is equality
✓ clipboardUtils > parsePastedPaths > should return null if any path is invalid 4ms
✓ clipboardUtils > parsePastedPaths > should return null if no paths are valid 6ms
× clipboardUtils > parsePastedPaths > in posix > should handle paths with escaped spaces 8ms
→ expected null to be '@/path/to/my\ file.txt @/other/path.t…' // Object.is equality
× clipboardUtils > parsePastedPaths > in posix > should unescape paths before validation 14ms
→ expected [] to deeply equal [ '/my\ file.txt /other.txt', …(2) ]
× clipboardUtils > parsePastedPaths > in posix > should handle single path with unescaped spaces from copy-paste 5ms
→ expected null to be '@/path/to/my\ file.txt ' // Object.is equality
× clipboardUtils > parsePastedPaths > in posix > should handle single-quoted with escaped quote 5ms
→ expected null to be '@/usr/test/my\ file\ with\ \\'single\…' // Object.is equality
× clipboardUtils > parsePastedPaths > in windows > should handle Windows path 10ms
→ expected null to be '@C:\Users\file.txt ' // Object.is equality
× clipboardUtils > parsePastedPaths > in windows > should handle Windows path with unescaped spaces 62ms
→ expected null to be '@"C:\My Documents\file.txt" ' // Object.is equality
× clipboardUtils > parsePastedPaths > in windows > should handle multiple Windows paths 12ms
→ expected null to be '@C:\file1.txt @D:\file2.txt ' // Object.is equality
× clipboardUtils > parsePastedPaths > in windows > should handle Windows UNC path 8ms
→ expected null to be '@\\server\share\file.txt ' // Object.is equality
src/ui/components/ShowMoreLinesLayout.test.tsx (2 tests | 2 failed) 920ms
× ShowMoreLines layout and padding > renders with single padding (paddingX=1, marginBottom=1) 512ms
→ expected [ '', …(39) ] to deeply equal [ 'Top', …(4) ]
× ShowMoreLines layout and padding > renders in Standard mode as well 405ms
→ expected [ '', …(39) ] to deeply equal [ 'Top', …(4) ]
[?25h src/nonInteractiveCli.test.ts (45 tests | 1 failed) 885ms
✓ runNonInteractive > should process input and write text output 14ms
✓ runNonInteractive > should register activity logger when GEMINI_CLI_ACTIVITY_LOG_TARGET is set 4ms
✓ runNonInteractive > should not register activity logger when GEMINI_CLI_ACTIVITY_LOG_TARGET is not set 3ms
✓ runNonInteractive > should handle a single tool call and respond 6ms
✓ runNonInteractive > should write a single newline between sequential text outputs from the model 6ms
✓ runNonInteractive > should handle error during tool execution and should send error back to the model 28ms
✓ runNonInteractive > should exit with error if sendMessageStream throws initially 49ms
✓ runNonInteractive > should not exit if a tool is not found, and should send error back to model 5ms
✓ runNonInteractive > should exit when max session turns are exceeded 11ms
✓ runNonInteractive > should preprocess @include commands before sending to the model 4ms
✓ runNonInteractive > should process input and write JSON output with stats 10ms
✓ runNonInteractive > should write JSON output with stats for tool-only commands (no text response) 5ms
✓ runNonInteractive > should write JSON output with stats for empty response commands 4ms
✓ runNonInteractive > should handle errors in JSON format 90ms
✓ runNonInteractive > should handle FatalInputError with custom exit code in JSON format 7ms
✓ runNonInteractive > should execute a slash command that returns a prompt 21ms
✓ runNonInteractive > should handle slash commands 6ms
× runNonInteractive > should handle cancellation (Ctrl+C) 99ms
→ expected false to be true // Object.is equality
✓ runNonInteractive > should throw FatalInputError if a command requires confirmation 7ms
✓ runNonInteractive > should treat an unknown slash command as a regular prompt 7ms
✓ runNonInteractive > should throw for unhandled command result types 9ms
✓ runNonInteractive > should pass arguments to the slash command action 8ms
✓ runNonInteractive > should instantiate CommandService with correct loaders for slash commands 6ms
✓ runNonInteractive > should allow a normally-excluded tool when --allowed-tools is set 16ms
✓ runNonInteractive > CoreEvents Integration > subscribes to UserFeedback and drains backlog on start 10ms
✓ runNonInteractive > CoreEvents Integration > unsubscribes from UserFeedback on finish 5ms
✓ runNonInteractive > CoreEvents Integration > logs to process.stderr when UserFeedback event is received 7ms
✓ runNonInteractive > CoreEvents Integration > logs optional error object to process.stderr in debug mode 7ms
✓ runNonInteractive > should emit appropriate events for streaming JSON output 39ms
✓ runNonInteractive > should handle EPIPE error gracefully 27ms
✓ runNonInteractive > should resume chat when resumedSessionData is provided 41ms
✓ runNonInteractive > should emit appropriate error event in streaming JSON mode: 'loop detected' 11ms
✓ runNonInteractive > should emit appropriate error event in streaming JSON mode: 'max session turns' 20ms
✓ runNonInteractive > should log error when tool recording fails 30ms
✓ runNonInteractive > should stop agent execution immediately when a tool call returns STOP_EXECUTION error 15ms
✓ runNonInteractive > should write JSON output when a tool call returns STOP_EXECUTION error 6ms
✓ runNonInteractive > should emit result event when a tool call returns STOP_EXECUTION error in streaming JSON mode 48ms
✓ runNonInteractive > Agent Execution Events > should handle AgentExecutionStopped event 27ms
✓ runNonInteractive > Agent Execution Events > should handle AgentExecutionBlocked event 11ms
✓ runNonInteractive > Output Sanitization > should sanitize ANSI output by default 25ms
✓ runNonInteractive > Output Sanitization > should allow ANSI output when rawOutput is true 9ms
✓ runNonInteractive > Output Sanitization > should allow ANSI output when only acceptRawOutputRisk is true 7ms
✓ runNonInteractive > Output Sanitization > should warn when rawOutput is true and acceptRisk is false 63ms
✓ runNonInteractive > Output Sanitization > should not warn when rawOutput is true and acceptRisk is true 18ms
✓ runNonInteractive > Output Sanitization > should report cancelled tool calls as success in stream-json mode (legacy parity) 12ms
[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/RadioButtonSelect.test.tsx (5 tests | 5 failed) 667ms
× RadioButtonSelect > Prop forwarding to BaseSelectionList > should forward all props correctly when provided 317ms
→ expected "spy" to be called 1 times, but got 0 times
× RadioButtonSelect > Prop forwarding to BaseSelectionList > should use default props if not provided 100ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…}, undefined ]
Number of calls: 0

× RadioButtonSelect > renderItem implementation > should render the standard label display with correct color and truncation 107ms
→ BaseSelectionList was not called. Ensure RadioButtonSelect is rendered before calling extractRenderItem.
× RadioButtonSelect > renderItem implementation > should render the special theme display when theme props are present 65ms
→ BaseSelectionList was not called. Ensure RadioButtonSelect is rendered before calling extractRenderItem.
× RadioButtonSelect > renderItem implementation > should fall back to standard display if only one theme prop is present 75ms
→ BaseSelectionList was not called. Ensure RadioButtonSelect is rendered before calling extractRenderItem.
[?25h ✓ src/test-utils/render.test.tsx (6 tests) 658ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/hooks/useFocus.test.tsx (7 tests | 7 failed) 631ms
× useFocus > should initialize with focus and enable focus reporting 232ms
→ expected "spy" to be called with arguments: [ '\u001b[?1004h' ]
Number of calls: 0

× useFocus > should set isFocused to false when a focus-out event is received 150ms
→ expected true to be false // Object.is equality
× useFocus > should set isFocused to true when a focus-in event is received 21ms
→ expected true to be false // Object.is equality
× useFocus > should clean up and disable focus reporting on unmount 63ms
→ expected 0 to be greater than or equal to 1
× useFocus > should handle multiple focus events correctly 61ms
→ expected true to be false // Object.is equality
× useFocus > restores focus on keypress after focus is lost 63ms
→ expected true to be false // Object.is equality
× useFocus > tracks whether any focus event has been received 38ms
→ expected false to be true // Object.is equality
[?25h src/ui/hooks/useMouseClick.test.ts (2 tests | 2 failed) 897ms
× useMouseClick > should call handler with relative coordinates when click is inside bounds 643ms
→ expected "spy" to be called at least once
× useMouseClick > should not call handler when click is outside bounds 225ms
→ Cannot read properties of undefined (reading '0')
[?25h src/ui/auth/LoginWithGoogleRestartDialog.test.tsx (4 tests | 2 failed) 588ms
✓ LoginWithGoogleRestartDialog > renders correctly 389ms
✓ LoginWithGoogleRestartDialog > calls onDismiss when escape is pressed 35ms
× LoginWithGoogleRestartDialog > calls runExitCleanup and process.exit when r is pressed 49ms
→ expected "spy" to be called 1 times, but got 0 times
× LoginWithGoogleRestartDialog > calls runExitCleanup and process.exit when R is pressed 113ms
→ expected "spy" to be called 1 times, but got 0 times
[?25h src/ui/contexts/ToolActionsContext.test.tsx (8 tests | 2 failed) 337ms
✓ ToolActionsContext > publishes to MessageBus for tools with correlationId 87ms
✓ ToolActionsContext > handles cancel by calling confirm with Cancel outcome 59ms
× ToolActionsContext > resolves IDE diffs for edit tools when in IDE mode 70ms
→ Cannot read properties of undefined (reading 'resolve')
× ToolActionsContext > updates isDiffingEnabled when IdeClient status changes 30ms
→ Cannot read properties of undefined (reading 'resolve')
✓ ToolActionsContext > calls local onConfirm for tools without correlationId 25ms
✓ ToolActionsContext > toggleAllExpansion > expands all when none are expanded 26ms
✓ ToolActionsContext > toggleAllExpansion > expands all when some are expanded 18ms
✓ ToolActionsContext > toggleAllExpansion > collapses all when all are expanded 19ms
[?25h src/utils/commentJson.test.ts (12 tests | 1 failed) 95ms
✓ commentJson > updateSettingsFilePreservingFormat > should preserve comments when updating settings 18ms
✓ commentJson > updateSettingsFilePreservingFormat > should handle nested object updates 6ms
✓ commentJson > updateSettingsFilePreservingFormat > should add new fields while preserving existing structure 6ms
✓ commentJson > updateSettingsFilePreservingFormat > should create file if it does not exist 5ms
✓ commentJson > updateSettingsFilePreservingFormat > should handle complex real-world scenario 10ms
× commentJson > updateSettingsFilePreservingFormat > should handle corrupted JSON files gracefully 11ms
→ expected "spy" to be called with arguments: [ 'error', …(2) ]
Number of calls: 0

✓ commentJson > updateSettingsFilePreservingFormat > should handle array updates while preserving comments 7ms
✓ commentJson > updateSettingsFilePreservingFormat > should sync nested objects, removing omitted fields 5ms
✓ commentJson > updateSettingsFilePreservingFormat > should handle mcpServers field deletion properly 8ms
✓ commentJson > updateSettingsFilePreservingFormat > preserves sibling-level commented-out blocks when removing another key 6ms
✓ commentJson > updateSettingsFilePreservingFormat > should handle type conversion from object to array 5ms
✓ commentJson > updateSettingsFilePreservingFormat > should remove both nested and non-nested objects when omitted 7ms
src/ui/utils/clipboardUtils.windows.test.ts (1 test | 1 failed) 214ms
× saveClipboardImage Windows Path Escaping > should escape single quotes in path for PowerShell script 212ms
→ expected "spy" to be called at least once
src/utils/installationInfo.test.ts (18 tests | 16 failed) 353ms
✓ getInstallationInfo > should detect running as a standalone binary 7ms
✓ getInstallationInfo > should return UNKNOWN when cliPath is not available 2ms
× getInstallationInfo > should return UNKNOWN and log error if realpathSync fails 87ms
→ expected "log" to be called with arguments: [ Error: realpath failed ]
Received:
 1st log call:
 [
 Error {
- "message": "realpath failed",
+ "message": "ENOENT: no such file or directory, lstat '/path'",
+ "errno": -2,
+ "code": "ENOENT",
+ "syscall": "lstat",
+ "path": "/path",
 },
 ]

Number of calls: 1

× getInstallationInfo > should detect running from a local git clone 5ms
→ expected undefined to be 'Running from a local git clone. Pleas…' // Object.is equality
× getInstallationInfo > should detect running via npx 92ms
→ expected 'unknown' to be 'npx' // Object.is equality
× getInstallationInfo > should detect running via pnpx 27ms
→ expected 'unknown' to be 'pnpx' // Object.is equality
× getInstallationInfo > should detect running via bunx 7ms
→ expected 'unknown' to be 'bunx' // Object.is equality
× getInstallationInfo > should detect Homebrew installation via execSync 15ms
→ expected "spy" to be called with arguments: [ StringContaining{…}, Anything ]
Number of calls: 0

× getInstallationInfo > should fall through if brew command fails 3ms
→ expected "spy" to be called with arguments: [ StringContaining{…}, Anything ]
Number of calls: 0

× getInstallationInfo > should detect global pnpm installation 5ms
→ expected 'unknown' to be 'pnpm' // Object.is equality
× getInstallationInfo > should detect global yarn installation 4ms
→ expected 'unknown' to be 'yarn' // Object.is equality
× getInstallationInfo > should detect global bun installation 3ms
→ expected 'unknown' to be 'bun' // Object.is equality
× getInstallationInfo > should detect local installation and identify yarn from lockfile 2ms
→ expected 'unknown' to be 'yarn' // Object.is equality
× getInstallationInfo > should detect local installation and identify pnpm from lockfile 5ms
→ expected 'unknown' to be 'pnpm' // Object.is equality
× getInstallationInfo > should detect local installation and identify bun from lockfile 5ms
→ expected 'unknown' to be 'bun' // Object.is equality
× getInstallationInfo > should default to local npm installation if no lockfile is found 2ms
→ expected 'unknown' to be 'npm' // Object.is equality
× getInstallationInfo > should default to global npm installation for unrecognized paths 73ms
→ expected 'unknown' to be 'npm' // Object.is equality
× getInstallationInfo > should NOT detect Homebrew if gemini-cli is installed in brew but running from npm location 6ms
→ expected 'unknown' to be 'npm' // Object.is equality
[?u]11;?\[>q[>4;?m
[>1u[?2004h[?u]11;?\[>q[>4;?m
[?u]11;?\[>q[>4;?m
[?u]11;?\[>q[>4;?m
[>1u[?2004h[?u]11;?\[>q[>4;?m
[>1u[?2004h[?u]11;?\[>q[>4;?m
[?2004h[?u]11;?\[>q[>4;?m
[>1u[?2004h[?u]11;?\[>q[>4;?m
[>4;2m[?2004h[?u]11;?\[>q[>4;?m
[?2004h[?u]11;?\[>q[>4;?m
[>1u[?2004h[?u]11;?\[>q[>4;?m
[>4;2m[?2004h[?u]11;?\[>q[>4;?m
[>4;2m[?2004h[?u]11;?\[>q[>4;?m
[>4;2m[?2004h[?u]11;?\[>q[>4;?m
[?2004h[?u]11;?\[>q[>4;?m
 src/ui/utils/terminalCapabilityManager.test.ts (30 tests | 6 failed) 217ms
✓ TerminalCapabilityManager > should detect Kitty support when u response is received 14ms
✓ TerminalCapabilityManager > should detect Background Color 4ms
✓ TerminalCapabilityManager > should detect Terminal Name 7ms
✓ TerminalCapabilityManager > should complete early if sentinel (DA1) is found 9ms
✓ TerminalCapabilityManager > should timeout if no DA1 (c) is received 24ms
✓ TerminalCapabilityManager > should not detect Kitty if only DA1 (c) is received 14ms
✓ TerminalCapabilityManager > should handle split chunks 48ms
× TerminalCapabilityManager > modifyOtherKeys detection > should detect modifyOtherKeys support (level 2) 21ms
→ expected "spy" to be called at least once
✓ TerminalCapabilityManager > modifyOtherKeys detection > should not enable modifyOtherKeys for level 0 6ms
× TerminalCapabilityManager > modifyOtherKeys detection > should prefer Kitty over modifyOtherKeys 3ms
→ expected "spy" to be called at least once
× TerminalCapabilityManager > modifyOtherKeys detection > should enable modifyOtherKeys when Kitty not supported 3ms
→ expected "spy" to be called at least once
× TerminalCapabilityManager > modifyOtherKeys detection > should handle split modifyOtherKeys response chunks 4ms
→ expected "spy" to be called at least once
× TerminalCapabilityManager > modifyOtherKeys detection > should detect modifyOtherKeys with other capabilities 7ms
→ expected "spy" to be called at least once
✓ TerminalCapabilityManager > modifyOtherKeys detection > should not enable modifyOtherKeys without explicit response 1ms
× TerminalCapabilityManager > modifyOtherKeys detection > should wrap queries in hidden/clear sequence 6ms
→ expected "spy" to be called with arguments: [ Anything, StringMatching{…} ]
Number of calls: 0

✓ TerminalCapabilityManager > isGhosttyTerminal > should return true for 'Ghostty (terminal name)' 3ms
✓ TerminalCapabilityManager > isGhosttyTerminal > should return true for 'ghostty (TERM_PROGRAM)' 2ms
✓ TerminalCapabilityManager > isGhosttyTerminal > should return true for 'xterm-ghostty (TERM)' 1ms
✓ TerminalCapabilityManager > isGhosttyTerminal > should return false for 'iTerm.app (TERM_PROGRAM)' 3ms
✓ TerminalCapabilityManager > isGhosttyTerminal > should return false for 'undefined env' 1ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'WezTerm (terminal name)' 2ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'iTerm.app (terminal name)' 0ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'ghostty (terminal name)' 1ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'kitty (terminal name)' 1ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return false for 'some-other-term (terminal name)' 2ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'iTerm.app (TERM_PROGRAM)' 12ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return false for 'vscode (TERM_PROGRAM)' 2ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return true for 'xterm-kitty (TERM)' 0ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return false for 'xterm-256color (TERM)' 1ms
✓ TerminalCapabilityManager > supportsOsc9Notifications > should return false for 'Windows Terminal (WT_SESSION)' 10ms
[<u[>4;0m[?2004l[?1000l[?1002l[?1003l[?1006l src/config/settings_validation_warning.test.ts (3 tests | 3 failed) 77ms
× Settings Validation Warning > should emit a warning and NOT throw when settings are invalid 47ms
→ expected false to be true // Object.is equality
× Settings Validation Warning > should throw a fatal error when settings file is not a valid JSON object 16ms
→ expected [Function] to throw an error
× Settings Validation Warning > should throw a fatal error when settings file contains invalid JSON 12ms
→ expected [Function] to throw an error
src/config/settings_repro.test.ts (1 test | 1 failed) 88ms
× Settings Repro > should handle the problematic settings.json without crashing 87ms
→ expected 0.5 to be 0.8 // Object.is equality
src/utils/persistentState.test.ts (5 tests | 5 failed) 120ms
× PersistentState > should load state from file if it exists 82ms
→ [vitest] No "PersistentState" export is defined on the "../utils/persistentState.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
× PersistentState > should return undefined if key does not exist 9ms
→ [vitest] No "PersistentState" export is defined on the "../utils/persistentState.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
× PersistentState > should save state to file 22ms
→ [vitest] No "PersistentState" export is defined on the "../utils/persistentState.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
× PersistentState > should handle load errors and start fresh 4ms
→ [vitest] No "PersistentState" export is defined on the "../utils/persistentState.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
× PersistentState > should handle save errors 1ms
→ [vitest] No "PersistentState" export is defined on the "../utils/persistentState.js" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
src/utils/processUtils.test.ts (1 test | 1 failed) 14ms
× processUtils > should wait for updates, run cleanup, and exit with the relaunch code 12ms
→ expected "spy" to be called 1 times, but got 0 times
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51941) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51941) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:51947) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:51947) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/hooks/useSlashCompletion.test.ts (28 tests) 10028ms
✓ useSlashCompletion > Top-Level Commands > should suggest all top-level commands for the root slash 1101ms
✓ useSlashCompletion > Top-Level Commands > should show the same selectable auto/checkpoint menu for /chat and /resume 2068ms
✓ useSlashCompletion > Top-Level Commands > should not provide suggestions for a fully typed command that has no sub-commands or argument completion 1037ms
✓ useSlashCompletion > Top-Level Commands > should not suggest hidden commands 1048ms
✓ useSlashCompletion > Sub-Commands > should suggest sub-commands for a parent command 1020ms
✓ useSlashCompletion > Sub-Commands > should suggest all sub-commands when the query ends with the parent command and a space 1020ms
✓ useSlashCompletion > Command Kind Information > should include commandKind for MCP commands in suggestions 1095ms
✓ useSlashCompletion > Command Kind Information > should include commandKind for sub-commands 1017ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h1 MCP server is not allowlisted by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli[?2004h1 MCP server is not allowlisted by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli[?2004h[?2004h2 MCP servers are not allowlisted by your administrator. To enable them, please request an update to the settings at: https://goo.gle/manage-gemini-cli[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h]0;◇ Ready (cli) [?2004h]0;◇ Ready (cli) [?2004h[?2004h[?2004h]0;◇ Ready (cli) [?2004h[?2004hError: The --prompt-interactive flag cannot be used when input is piped from stdin.
[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/AskUserDialog.test.tsx (42 tests) 12497ms
✓ AskUserDialog > renders question and options 542ms
✓ AskUserDialog > Submission: 'Single Select' > submits correct values for Single Select 329ms
✓ AskUserDialog > Submission: 'Multi-select' > submits correct values for Multi-select 549ms
✓ AskUserDialog > Submission: 'All of the above' > submits correct values for All of the above 665ms
✓ AskUserDialog > Submission: 'Text Input' > submits correct values for Text Input 359ms
✓ AskUserDialog > verifies "All of the above" visual state with snapshot 336ms
✓ AskUserDialog > handles custom option in single select with inline typing 643ms
✓ AskUserDialog > supports multi-line input for "Other" option in choice questions 525ms
✓ AskUserDialog > navigates to custom option when typing unbound characters (Type-to-Jump) 369ms
✓ AskUserDialog > navigates between questions with arrow keys 310ms
✓ AskUserDialog > preserves answers when navigating back 558ms
✓ AskUserDialog > shows warning for unanswered questions on Review tab 366ms
✓ AskUserDialog > Text type questions > preserves text answer when navigating between questions 589ms
✓ AskUserDialog > Text type questions > handles mixed text and choice questions 563ms
✓ AskUserDialog > Text type questions > allows immediate arrow navigation after switching away from text input 378ms
✓ AskUserDialog > Choice question placeholder > supports "Other" option for yesno questions 1477ms
✓ AskUserDialog > expands paste placeholders in multi-select custom option via Done 464ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h]0;Gemini CLI (root) [?7l[?7h]0;Gemini CLI (root) [?7l[?7h]0;Gemini CLI (root) [?7l[?7h[?2004h]0;Gemini CLI (root) [?7l[?7h]0;Gemini CLI (root) [?7l[?7h]0;Gemini CLI (root) [?7l[?7h[?2004h[?7h ✓ src/gemini.test.tsx (38 tests) 11320ms
✓ gemini.tsx main function kitty protocol > should call setRawMode and detectCapabilities when isInteractive is true 8368ms
✓ gemini.tsx main function exit codes > should validate and refresh auth in non-interactive mode when no auth type is selected but env var is present 563ms
✓ project hooks loading based on trust > should load project hooks when workspace is trusted 537ms
✓ project hooks loading based on trust > should NOT load project hooks when workspace is not trusted 540ms
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/SettingsDialog.test.tsx (59 tests | 1 failed) 24774ms
✓ SettingsDialog > Initial Rendering > should render the settings dialog with default state 541ms
✓ SettingsDialog > Initial Rendering > should accept availableTerminalHeight prop without errors 174ms
✓ SettingsDialog > Initial Rendering > should render settings list with visual indicators 417ms
✓ SettingsDialog > Initial Rendering > should use almost full height of the window but no more when the window height is 25 rows 176ms
✓ SettingsDialog > Setting Descriptions > should render descriptions for settings that have them 168ms
✓ SettingsDialog > Settings Navigation > should navigate with 'arrow keys' 365ms
✓ SettingsDialog > Settings Navigation > should navigate with 'emacs keys (Ctrl+P/N)' 373ms
✓ SettingsDialog > Settings Navigation > should allow j and k characters to be typed in search without triggering navigation 548ms
✓ SettingsDialog > Settings Navigation > wraps around when at the top of the list 489ms
✓ SettingsDialog > Settings Toggling > should toggle setting with Enter key 257ms
✓ SettingsDialog > Settings Toggling > enum values > 'toggles to next value' 315ms
✓ SettingsDialog > Settings Toggling > enum values > 'loops back to first value when at end' 165ms
✓ SettingsDialog > Settings Toggling > should handle vim mode setting specially 413ms
✓ SettingsDialog > Scope Selection > should switch between scopes 147ms
✓ SettingsDialog > Scope Selection > should reset to settings focus when scope is selected 170ms
✓ SettingsDialog > Restart Prompt > should show restart prompt for restart-required settings 260ms
✓ SettingsDialog > Restart Prompt > should handle restart request when r is pressed 432ms
✓ SettingsDialog > Escape Key Behavior > should call onSelect with undefined when Escape is pressed 194ms
✓ SettingsDialog > Settings Persistence > should persist settings across scope changes 451ms
✓ SettingsDialog > Settings Persistence > should show different values for different scopes 188ms
✓ SettingsDialog > Complex State Management > should track modified settings correctly 643ms
✓ SettingsDialog > Complex State Management > should handle scrolling when there are many settings 150ms
✓ SettingsDialog > Specific Settings Behavior > should show correct display values for settings with different states 186ms
✓ SettingsDialog > Specific Settings Behavior > should handle immediate settings save for non-restart-required settings 341ms
✓ SettingsDialog > Specific Settings Behavior > should show restart prompt for restart-required settings 156ms
✓ SettingsDialog > Specific Settings Behavior > should clear restart prompt when switching scopes 211ms
✓ SettingsDialog > Settings Display Values > should show correct values for inherited settings 407ms
✓ SettingsDialog > Settings Display Values > should show override indicator for overridden settings 131ms
✓ SettingsDialog > Race Condition Regression Tests > should 'not reset sibling settings when toggl…' 287ms
✓ SettingsDialog > Race Condition Regression Tests > should 'preserve multiple sibling settings in…' 295ms
✓ SettingsDialog > Keyboard Shortcuts Edge Cases > should handle rapid key presses gracefully 161ms
✓ SettingsDialog > Keyboard Shortcuts Edge Cases > should handle 'Ctrl+C' to reset current setting to default 264ms
✓ SettingsDialog > Keyboard Shortcuts Edge Cases > should handle 'Ctrl+L' to reset current setting to default 505ms
✓ SettingsDialog > Keyboard Shortcuts Edge Cases > should handle navigation when only one setting exists 269ms
✓ SettingsDialog > Keyboard Shortcuts Edge Cases > should properly handle Tab navigation between sections 137ms
✓ SettingsDialog > Error Recovery > should handle malformed settings gracefully 283ms
✓ SettingsDialog > Error Recovery > should handle missing setting definitions gracefully 141ms
✓ SettingsDialog > Complex User Interactions > should handle complete user workflow: navigate, toggle, change scope, exit 369ms
✓ SettingsDialog > Complex User Interactions > should allow changing multiple settings without losing pending changes 613ms
✓ SettingsDialog > Complex User Interactions > should maintain state consistency during complex interactions 794ms
✓ SettingsDialog > Complex User Interactions > should handle restart workflow correctly 664ms
✓ SettingsDialog > Restart and Search Conflict Regression > should prioritize restart request over search text box when showRestartPrompt is true 563ms
✓ SettingsDialog > Restart and Search Conflict Regression > should hide search box when showRestartPrompt is true 328ms
✓ SettingsDialog > String Settings Editing > should allow editing and committing a string setting 850ms
✓ SettingsDialog > Array Settings Editing > should parse comma-separated input as string arrays 1030ms
✓ SettingsDialog > Array Settings Editing > should parse JSON array input for allowedExtensions 2038ms
✓ SettingsDialog > Search Functionality > should display text entered in search 371ms
✓ SettingsDialog > Search Functionality > should show search query and filter settings as user types 471ms
✓ SettingsDialog > Search Functionality > should exit search settings when Escape is pressed 348ms
✓ SettingsDialog > Search Functionality > should handle backspace to modify search query 1026ms
✓ SettingsDialog > Search Functionality > should display nothing when search yields no results 753ms
✓ SettingsDialog > Snapshot Tests > should render 'default state' correctly 672ms
✓ SettingsDialog > Snapshot Tests > should render 'various boolean settings enabled' correctly 644ms
✓ SettingsDialog > Snapshot Tests > should render 'mixed boolean and number settings' correctly 289ms
× SettingsDialog > Snapshot Tests > should render 'focused on scope selector' correctly 383ms
→ Snapshot `SettingsDialog > Snapshot Tests > should render 'focused on scope selector' correctly 1` mismatched
✓ SettingsDialog > Snapshot Tests > should render 'accessibility settings enabled' correctly 614ms
✓ SettingsDialog > Snapshot Tests > should render 'file filtering settings configured' correctly 432ms
✓ SettingsDialog > Snapshot Tests > should render 'tools and security settings' correctly 390ms
✓ SettingsDialog > Snapshot Tests > should render 'all boolean settings disabled' correctly 302ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/ExitPlanModeDialog.test.tsx (28 tests) 17518ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > renders correctly with plan content 694ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > calls onApprove with AUTO_EDIT when first option is selected 526ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > calls onApprove with DEFAULT when second option is selected 551ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > calls onFeedback when feedback is typed and submitted 1406ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > clears feedback text when Ctrl+C is pressed while editing 1482ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > bubbles up Ctrl+C when feedback is empty while editing 1014ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > allows arrow navigation while typing feedback to change selection 807ms
✓ ExitPlanModeDialog > useAlternateBuffer: true > automatically submits feedback when Ctrl+G is used to edit the plan 761ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > calls onApprove with AUTO_EDIT when first option is selected 387ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > calls onApprove with DEFAULT when second option is selected 946ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > calls onFeedback when feedback is typed and submitted 1404ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > handles long plan content appropriately 316ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > allows number key quick selection 356ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > clears feedback text when Ctrl+C is pressed while editing 2083ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > bubbles up Ctrl+C when feedback is empty while editing 1069ms
✓ ExitPlanModeDialog > useAlternateBuffer: false > allows arrow navigation while typing feedback to change selection 1243ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/config/config.test.ts (217 tests | 1 skipped) 28716ms
✓ loadCliConfig > Proxy configuration > should leave proxy to empty by default 458ms
✓ Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode 627ms
✓ loadCliConfig approval mode > should set DEFAULT approval mode when --approval-mode=default 537ms
✓ Output format > should accept stream-json as a valid output format 327ms
✓ loadCliConfig secureModeEnabled > should throw an error if approval-mode=yolo is attempted when secureModeEnabled is true 346ms
✓ loadCliConfig mcpEnabled > should disable MCP when mcpEnabled is false 412ms
✓ loadCliConfig mcpEnabled > extension plan settings > should NOT use plan directory from active extension when user has specified one 304ms
[?2004h ✓ src/ui/AppContainer.test.tsx (107 tests) 22117ms
✓ AppContainer State Management > State Initialization > handles debug mode state 672ms
✓ AppContainer State Management > Error Handling > handles config methods that might throw 337ms
✓ AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+D > should NOT quit if buffer is not empty 529ms
✓ AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should unfocus shell input on Shift+Tab 305ms
✓ AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should focus background shell on Tab when already visible (not toggle it off) 390ms
✓ AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Background Shell Toggling (CTRL+B) > should show and focus background shell on Ctrl+B if hidden 341ms
✓ AppContainer State Management > Shortcuts Help Visibility > dismisses shortcuts help when a registered hotkey is pressed 347ms
✓ AppContainer State Management > Copy Mode (F9) > 'Alternate Buffer Mode' > should toggle mouse back on when F9 is pressed again 516ms
✓ AppContainer State Management > Copy Mode (F9) > 'Alternate Buffer Mode' > should have higher priority than other priority listeners when enabled 362ms
✓ AppContainer State Management > CoreEvents Integration > subscribes to UserFeedback and drains backlog on mount 315ms
✓ AppContainer State Management > CoreEvents Integration > adds history item when UserFeedback event is received 382ms
✓ AppContainer State Management > CoreEvents Integration > handles consent request events 338ms
✓ AppContainer State Management > onCancelSubmit Behavior > restores the prompt when onCancelSubmit is called with shouldRestorePrompt=true (or undefined) 362ms
✓ AppContainer State Management > onCancelSubmit Behavior > input history is independent from conversation history (survives /clear) 324ms
✓ AppContainer State Management > Overflow Hint Handling > toggles expansion state and resets the hint timer when Ctrl+O is pressed in Standard Mode 432ms
✓ AppContainer State Management > Overflow Hint Handling > toggles Ctrl+O multiple times and verifies the hint disappears exactly after the last toggle 793ms
✓ AppContainer State Management > Permission Handling > shows permission dialog when checkPermissions returns paths 632ms
✓ AppContainer State Management > Plan Mode Availability > should NOT allow plan mode when streaming 324ms
[?25h ✓ src/config/extension-manager.test.ts (15 tests) 4498ms
✓ ExtensionManager > symlink handling > preserves symlinks in installMetadata.source when linking 768ms
✓ ExtensionManager > symlink handling > works with the new install command logic (preserves symlink but trusts real path) 436ms
✓ ExtensionManager > symlink handling > enforces allowedExtensions using the real path 379ms
✓ ExtensionManager > Extension Renaming > should support renaming an extension during update 596ms
✓ ExtensionManager > Extension Renaming > should carry over enablement status when renaming 540ms
✓ ExtensionManager > Extension Renaming > should prevent renaming if the new name conflicts with an existing extension 306ms
✓ ExtensionManager > extension integrity > should store integrity data during installation 404ms
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/shared/ScrollableList.test.tsx (7 tests) 4582ms
✓ ScrollableList Demo Behavior > should scroll to bottom when new items are added and stop when scrolled up 1870ms
✓ ScrollableList Demo Behavior > should display sticky header when scrolled past the item 381ms
✓ ScrollableList Demo Behavior > Keyboard Navigation > should handle scroll keys correctly 2017ms
[?25h ✓ src/config/extension-manager-hydration.test.ts (4 tests) 2397ms
✓ ExtensionManager hydration > should hydrate skill body with extension settings 835ms
✓ ExtensionManager hydration > should hydrate agent system prompt with extension settings 492ms
✓ ExtensionManager hydration > should hydrate hooks with extension settings 484ms
✓ ExtensionManager hydration > should pick up new settings after restartExtension 583ms
✓ src/ui/hooks/vim.test.tsx (144 tests) 8392ms
[?2004h[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58568) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58568) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/shared/text-buffer.test.ts (225 tests) 4610ms
✓ useTextBuffer > Input Sanitization > should sanitize large text (>5000 chars) and strip unsafe characters 489ms
✓ useTextBuffer > Input Sanitization > should sanitize large ANSI text (>5000 chars) and strip escape codes 538ms
[?2004h[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/hooks/useGeminiStream.test.tsx (79 tests) 5480ms
[?25h[?2004h(node:58573) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58573) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
✓ src/ui/components/FooterConfigDialog.test.tsx (8 tests) 6794ms
✓ <FooterConfigDialog /> > renders correctly with default settings 622ms
✓ <FooterConfigDialog /> > toggles an item when enter is pressed 630ms
✓ <FooterConfigDialog /> > reorders items with arrow keys 324ms
✓ <FooterConfigDialog /> > highlights the active item in the preview 1256ms
✓ <FooterConfigDialog /> > shows an empty preview when all items are deselected 1331ms
✓ <FooterConfigDialog /> > updates the preview when Show footer labels is toggled off 2068ms
✓ src/ui/components/SkillInboxDialog.test.tsx (11 tests) 3497ms
✓ SkillInboxDialog > disables the project destination when the workspace is untrusted 1016ms
✓ SkillInboxDialog > patch support > shows patches alongside skills with section headers 453ms
✓ SkillInboxDialog > patch support > shows diff preview when a patch is selected 460ms
[?25h[?25h[?1006l[?1002l[?2004h[?1006l[?1002l[?1006l[?1002l[?2004h ✓ src/config/extension-manager-agents.test.ts (2 tests) 1349ms
✓ ExtensionManager agents loading > should load agents from an extension 874ms
✓ ExtensionManager agents loading > should log errors but continue if an agent fails to load 473ms
[?1006l[?1002l ✓ src/test-utils/AppRig.test.tsx (2 tests) 5448ms
✓ AppRig > should handle deterministic tool turns with breakpoints 4044ms
✓ AppRig > should render the app and handle a simple message 1401ms
[?25h[?1006l[?1002l[?2004h ✓ src/config/extension-manager-skills.test.ts (3 tests) 3077ms
✓ ExtensionManager skills validation > should emit a warning during install if skills directory is not empty but no skills are loaded 882ms
✓ ExtensionManager skills validation > should emit a warning during load if skills directory is not empty but no skills are loaded 670ms
✓ ExtensionManager skills validation > should succeed if skills are correctly loaded 1522ms
[?1006l[?1002l ✓ src/integration-tests/modelSteering.test.tsx (1 test) 6992ms
✓ Model Steering Integration > should steer the model using a hint during a tool turn 6989ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/hooks/useExecutionLifecycle.test.tsx (36 tests) 4157ms
✓ useExecutionLifecycle > should initiate command execution and set pending state 387ms
✓ useExecutionLifecycle > UI Streaming and Throttling > should show binary progress messages correctly 431ms
✓ useExecutionLifecycle > Background Shell Management > should hide background shell when waiting for confirmation and restore after delay 529ms
✓ useExecutionLifecycle > Background Shell Management > should auto-hide background shell when foreground shell starts and restore when it ends 444ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58696) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58696) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/messages/DenseToolMessage.test.tsx (25 tests) 6140ms
✓ DenseToolMessage > explicitly renders the filename in the header for FileDiff results 969ms
✓ DenseToolMessage > renders correctly for file diff results with stats 313ms
✓ DenseToolMessage > renders correctly for Edit tool using confirmationDetails 1633ms
✓ DenseToolMessage > Toggleable Diff View (Alternate Buffer) > shows diff content when expanded via ToolActionsContext 321ms
[?25h[?2004h[?2004h src/ui/components/ThemeDialog.test.tsx (10 tests | 1 failed) 8023ms
✓ ThemeDialog Snapshots > should render correctly in theme selection mode (isDevelopment: true) 4186ms
✓ ThemeDialog Snapshots > should render correctly in theme selection mode (isDevelopment: false) 646ms
× ThemeDialog Snapshots > should render correctly in scope selector mode 506ms
→ Snapshot `ThemeDialog Snapshots > should render correctly in scope selector mode 1` mismatched
✓ ThemeDialog Snapshots > should call onCancel when ESC is pressed 449ms
✓ ThemeDialog Snapshots > should call onSelect when a theme is selected 427ms
✓ Initial Theme Selection > should default to a light theme when terminal background is light and no theme is set 255ms
✓ Initial Theme Selection > should default to a dark theme when terminal background is dark and no theme is set 517ms
✓ Initial Theme Selection > should use the theme from settings even if terminal background suggests a different theme type 303ms
✓ Hint Visibility > should show hint when theme background matches terminal background 357ms
✓ Hint Visibility > should not show hint when theme background does not match terminal background 366ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58844) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58844) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/messages/DiffRenderer.test.tsx (26 tests) 7662ms
✓ <OverflowProvider><DiffRenderer /></OverflowProvider> > with useAlternateBuffer = true > should call colorizeCode with correct language for new file with known extension 783ms
✓ <OverflowProvider><DiffRenderer /></OverflowProvider> > with useAlternateBuffer = true > should call colorizeCode with null language for new file with unknown extension 2577ms
✓ <OverflowProvider><DiffRenderer /></OverflowProvider> > with useAlternateBuffer = true > should correctly render a diff with multiple hunks and a gap indicator > with terminalWidth 80 and height 6 393ms
✓ <OverflowProvider><DiffRenderer /></OverflowProvider> > with useAlternateBuffer = false > should correctly render a diff with multiple hunks and a gap indicator > with terminalWidth 80 and height 6 325ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58892) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58892) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/messages/ToolConfirmationMessage.test.tsx (27 tests | 1 failed) 6898ms
✓ ToolConfirmationMessage > should not display urls if prompt and url are the same 794ms
✓ ToolConfirmationMessage > should display urls if prompt and url are different 442ms
✓ ToolConfirmationMessage > should display WarningMessage for deceptive URLs in info type 228ms
✓ ToolConfirmationMessage > should display WarningMessage for deceptive URLs in exec type commands 208ms
✓ ToolConfirmationMessage > should exclude shell delimiters from extracted URLs in exec type commands 182ms
✓ ToolConfirmationMessage > should aggregate multiple deceptive URLs into a single WarningMessage 237ms
✓ ToolConfirmationMessage > should display multiple commands for exec type when provided 124ms
✓ ToolConfirmationMessage > should render multiline shell scripts with correct newlines and syntax highlighting 265ms
✓ ToolConfirmationMessage > with folder trust > 'for edit confirmations' > should show "allow always" when folder is trusted 126ms
✓ ToolConfirmationMessage > with folder trust > 'for edit confirmations' > should NOT show "allow always" when folder is untrusted 183ms
✓ ToolConfirmationMessage > with folder trust > 'for exec confirmations' > should show "allow always" when folder is trusted 66ms
✓ ToolConfirmationMessage > with folder trust > 'for exec confirmations' > should NOT show "allow always" when folder is untrusted 236ms
✓ ToolConfirmationMessage > with folder trust > 'for info confirmations' > should show "allow always" when folder is trusted 79ms
✓ ToolConfirmationMessage > with folder trust > 'for info confirmations' > should NOT show "allow always" when folder is untrusted 111ms
✓ ToolConfirmationMessage > with folder trust > 'for mcp confirmations' > should show "allow always" when folder is trusted 78ms
✓ ToolConfirmationMessage > with folder trust > 'for mcp confirmations' > should NOT show "allow always" when folder is untrusted 55ms
✓ ToolConfirmationMessage > enablePermanentToolApproval setting > should NOT show "Allow for all future sessions" when setting is false (default) 32ms
✓ ToolConfirmationMessage > enablePermanentToolApproval setting > should show "Allow for all future sessions" when trusted 43ms
✓ ToolConfirmationMessage > Modify with external editor option > should show "Modify with external editor" when NOT in IDE mode 266ms
✓ ToolConfirmationMessage > Modify with external editor option > should show "Modify with external editor" when in IDE mode but diffing is NOT enabled 252ms
✓ ToolConfirmationMessage > Modify with external editor option > should NOT show "Modify with external editor" when in IDE mode AND diffing is enabled 82ms
✓ ToolConfirmationMessage > should strip BiDi characters from MCP tool and server names 215ms
✓ ToolConfirmationMessage > should show MCP tool details expand hint for MCP confirmations 108ms
✓ ToolConfirmationMessage > should omit empty MCP invocation arguments from details 293ms
× ToolConfirmationMessage > height allocation and layout > should expand to available height for large exec commands 859ms
→ Snapshot `ToolConfirmationMessage > height allocation and layout > should expand to available height for large exec commands 1` mismatched
✓ ToolConfirmationMessage > height allocation and layout > should expand to available height for large edit diffs 1088ms
✓ ToolConfirmationMessage > ESCAPE key behavior > should call confirm(Cancel) asynchronously via useEffect when ESC is pressed 220ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h src/ui/components/shared/performance.test.ts (3 tests | 1 failed) 7520ms
✓ text-buffer performance > should handle pasting large amounts of text efficiently 679ms
× text-buffer performance > should handle character-by-character insertion in a large buffer efficiently 6833ms
→ expected 6227 to be less than 5000
✓ text-buffer performance > should highlight many lines efficiently 6ms
[?2004h[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/Composer.test.tsx (58 tests) 8794ms
✓ Composer > Footer Display Settings > renders Footer by default when hideFooter is false 560ms
✓ Composer > Loading Indicator > renders LoadingIndicator with thought when streaming 373ms
✓ Composer > Loading Indicator > renders LoadingIndicator when embedded shell is focused but background shell is visible 589ms
✓ Composer > Context and Status Display > shows StatusDisplay and ApprovalModeIndicator in normal state 313ms
✓ Composer > Input and Indicators > does not render InputPrompt when input is inactive 424ms
✓ Composer > Input and Indicators > shows ApprovalModeIndicator when approval mode is autoEdit and shell mode is inactive 319ms
✓ Composer > Input and Indicators > shows ShellModeIndicator when shell mode is active 353ms
✓ Composer > Input and Indicators > shows minimal mode badge "'yolo'" when clean UI details are hidden 529ms
✓ Composer > Error Details Display > shows DetailedMessagesDisplay when showErrorDetails is true 338ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/messages/ToolGroupMessage.test.tsx (38 tests) 4717ms
✓ <ToolGroupMessage /> > Golden Snapshots > renders single successful tool call 918ms
[?2004h[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58945) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58945) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h(node:58948) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58948) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h ✓ src/ui/components/AgentConfigDialog.test.tsx (12 tests) 4929ms
✓ AgentConfigDialog > rendering > should render the dialog with title 1042ms
✓ AgentConfigDialog > rendering > should render all configuration fields 300ms
✓ AgentConfigDialog > rendering > should render help text 311ms
✓ AgentConfigDialog > keyboard navigation > should close dialog on Escape 415ms
✓ AgentConfigDialog > keyboard navigation > should navigate down with arrow key 307ms
✓ AgentConfigDialog > keyboard navigation > should switch focus with Tab 654ms
✓ AgentConfigDialog > boolean toggle > should toggle enabled field on Enter 389ms
✓ AgentConfigDialog > default values > should show values from agent definition as defaults 396ms
✓ AgentConfigDialog > existing overrides > should show existing override values with * indicator 347ms
✓ AgentConfigDialog > existing overrides > should respond to availableTerminalHeight and truncate list 314ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/HistoryItemDisplay.test.tsx (24 tests) 6087ms
✓ <HistoryItemDisplay /> > renders UserMessage for "user" type 690ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=true) > should render a truncated gemini item 673ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=true) > should render a full gemini item when using availableTerminalHeightGemini 389ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=true) > should render a full gemini_content item when using availableTerminalHeightGemini 471ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=false) > should render a full gemini item when using availableTerminalHeightGemini 511ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=false) > should render a truncated gemini_content item 643ms
✓ <HistoryItemDisplay /> > gemini items (alternateBuffer=false) > should render a full gemini_content item when using availableTerminalHeightGemini 438ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/utils/MarkdownDisplay.test.tsx (30 tests) 5212ms
✓ <MarkdownDisplay /> > with 'Windows' line endings > renders headers with correct levels 326ms
✓ <MarkdownDisplay /> > with 'Windows' line endings > renders a fenced code block without a language 1236ms
✓ <MarkdownDisplay /> > with 'Windows' line endings > correctly parses a mix of markdown elements 430ms
[?25h ✓ src/ui/hooks/useAtCompletion.test.ts (18 tests) 2070ms
✓ useAtCompletion > File Search Logic > should perform a recursive search for an empty pattern 539ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:58990) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:58990) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/messages/ShellToolMessage.test.tsx (16 tests) 4467ms
✓ <ShellToolMessage /> > interactive shell focus > clicks inside the shell area sets focus for SHELL_COMMAND_NAME 632ms
✓ <ShellToolMessage /> > Height Constraints > respects availableTerminalHeight when it is smaller than ACTIVE_SHELL_MAX_LINES 303ms
✓ <ShellToolMessage /> > Height Constraints > uses full availableTerminalHeight when focused in alternate buffer mode 610ms
✓ <ShellToolMessage /> > Height Constraints > fully expands in standard mode when availableTerminalHeight is undefined 436ms
✓ <ShellToolMessage /> > Height Constraints > fully expands in alternate buffer mode when constrainHeight is false and isExpandable is true 664ms
✓ src/ui/components/messages/ToolResultDisplay.test.tsx (14 tests) 3008ms
✓ ToolResultDisplay > uses ScrollableList for ANSI output in alternate buffer mode 541ms
✓ ToolResultDisplay > truncates very long string results 371ms
✓ ToolResultDisplay > stays scrolled to the bottom when lines are incrementally added 680ms
[?25h[?25h[?2004h[?2004h[?2004h(node:59001) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:59001) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h ✓ src/ui/hooks/slashCommandProcessor.test.tsx (33 tests) 2066ms
✓ useSlashCommandProcessor > Console Clear Safety > should not call console.clear if alternate buffer is active 315ms
[?25h[?2004h[?2004h[?2004h ✓ src/ui/components/RewindViewer.test.tsx (15 tests) 4212ms
✓ RewindViewer > Screen Reader Accessibility > renders the rewind viewer with conversation items 484ms
✓ RewindViewer > Navigation > handles 'up' navigation 343ms
✓ RewindViewer > Navigation > handles cyclic navigation 303ms
✓ RewindViewer > Interaction Selection > 'confirms on Enter' 496ms
✓ RewindViewer > Interaction Selection > 'cancels on Escape' 302ms
✓ RewindViewer > Content Filtering > 'removes reference markers' 320ms
✓ RewindViewer > Content Filtering > 'uses displayContent if present and do…' 324ms
✓ RewindViewer > updates content when conversation changes (background update) 310ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:59009) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:59009) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/messages/ToolMessage.test.tsx (25 tests) 3465ms
✓ <ToolMessage /> > renders basic tool information 710ms
✓ <ToolMessage /> > JSON rendering > pretty printing 10kb JSON completes in <50ms 543ms
[?25h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h(node:59021) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
(node:59021) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 memory-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h[?2004h ✓ src/ui/components/shared/SearchableList.test.tsx (8 tests) 3634ms
✓ SearchableList > should render all items initially 1150ms
✓ SearchableList > should reset selection to top when items change if resetSelectionOnItemsChange is true 707ms
✓ SearchableList > should filter items based on search query 509ms
✓ SearchableList > should show "No items found." when no items match 434ms
✓ SearchableList > should handle close with Esc 349ms
[?25h[?2004h