> @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) ][90m
Received:
[1m 1st emit call:
[22m[33m@@ -1,11 +1,11 @@[90m
[2m [[22m
[2m "update-received",[22m
[2m {[22m
[2m "isUpdating": false,[22m
[2m "message": "An update is available![22m
[32m- Please update manually.",[90m
[31m+ Please run npm install -g @google/gemini-cli@latest to update",[90m
[2m "update": {[22m
[2m "current": "1.0.0",[22m
[2m "latest": "2.0.0",[22m
[2m "name": "@google/gemini-cli",[22m
[2m "type": "major",[22m
[39m[90m
Number of calls: [1m1[22m
[39m
× handleAutoUpdate > should suppress update notifications when running via npx 253ms
→ expected "emit" to not be called at all, but actually been called 1 times[90m
Received:
[1m 1st emit call:
[22m 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",
},
},
]
[39m[90m
Number of calls: [1m1[22m
[39m
× handleAutoUpdate > should suppress update notifications when running via pnpx 142ms
→ expected "emit" to not be called at all, but actually been called 1 times[90m
Received:
[1m 1st emit call:
[22m 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",
},
},
]
[39m[90m
Number of calls: [1m1[22m
[39m
× handleAutoUpdate > should suppress update notifications when running via bunx 167ms
→ expected "emit" to not be called at all, but actually been called 1 times[90m
Received:
[1m 1st emit call:
[22m 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",
},
},
]
[39m[90m
Number of calls: [1m1[22m
[39m
× handleAutoUpdate > should suppress update notifications when running via binary 158ms
→ expected "emit" to not be called at all, but actually been called 1 times[90m
Received:
[1m 1st emit call:
[22m 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",
},
},
]
[39m[90m
Number of calls: [1m1[22m
[39m
× 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) ][90m
Received:
[1m 1st emit call:
[22m[33m@@ -1,11 +1,11 @@[90m
[2m [[22m
[2m "update-received",[22m
[2m {[22m
[32m- "isUpdating": false,[90m
[31m+ "isUpdating": true,[90m
[2m "message": "An update is available![22m
[32m- Cannot determine update command.",[90m
[31m+ Installed with npm. Attempting to automatically update now...",[90m
[2m "update": {[22m
[2m "current": "1.0.0",[22m
[2m "latest": "2.0.0",[22m
[2m "name": "@google/gemini-cli",[22m
[2m "type": "major",[22m
[39m[90m
Number of calls: [1m1[22m
[39m
× handleAutoUpdate > should combine update messages correctly 171ms
→ expected "emit" to be called with arguments: [ 'update-received', …(1) ][90m
Received:
[1m 1st emit call:
[22m[33m@@ -1,11 +1,11 @@[90m
[2m [[22m
[2m "update-received",[22m
[2m {[22m
[32m- "isUpdating": false,[90m
[31m+ "isUpdating": true,[90m
[2m "message": "An update is available![22m
[32m- This is an additional message.",[90m
[31m+ Installed with npm. Attempting to automatically update now...",[90m
[2m "update": {[22m
[2m "current": "1.0.0",[22m
[2m "latest": "2.0.0",[22m
[2m "name": "@google/gemini-cli",[22m
[2m "type": "major",[22m
[39m[90m
Number of calls: [1m1[22m
[39m
✓ 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) ][90m
Received:
[1m 1st emit call:
[22m[2m [[22m
[32m- "update-failed",[90m
[31m+ "update-received",[90m
[2m {[22m
[32m- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",[90m
[31m+ "isUpdating": true,[90m
[31m+ "message": "An update is available![90m
[31m+ Installed with npm. Attempting to automatically update now...",[90m
[31m+ "update": {[90m
[31m+ "current": "1.0.0",[90m
[31m+ "latest": "2.0.0",[90m
[31m+ "name": "@google/gemini-cli",[90m
[31m+ "type": "major",[90m
[31m+ },[90m
[2m },[22m
[2m ][22m
[1m 2nd emit call:
[22m[2m [[22m
[32m- "update-failed",[90m
[31m+ "update-success",[90m
[2m {[22m
[32m- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",[90m
[31m+ "message": "Update successful! The new version will be used on your next run.",[90m
[2m },[22m
[2m ][22m
[1m 3rd emit call:
[22m[2m [[22m
[2m "update-failed",[22m
[2m {[22m
[32m- "message": "Automatic update failed. Please try updating manually. (command: npm i -g @google/gemini-cli@2.0.0)",[90m
[31m+ "message": "Automatic update failed. Please try updating manually. (command: npm install -g @google/gemini-cli@2.0.0)",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
✓ 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) ][90m
Received:
[1m 1st spy call:
[22m[33m@@ -1,7 +1,7 @@[90m
[2m [[22m
[32m- "npm i -g @google/gemini-cli@nightly",[90m
[31m+ "npm install -g @google/gemini-cli@nightly",[90m
[2m {[22m
[2m "detached": true,[22m
[2m "shell": true,[22m
[2m "stdio": "ignore",[22m
[2m },[22m
[39m[90m
Number of calls: [1m1[22m
[39m
✓ 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' ][90m
Number of calls: [1m0[22m
[39m
× TerminalContext > should handle partial chunks 2064ms
→ expected "spy" to be called with arguments: [ 'rgb:0000/0000/0000' ][90m
Number of calls: [1m0[22m
[39m
[?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{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should recognize 'numpad enter key (keycode 57414)' in kitty protocol 45ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should handle backslash return 70ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should handle numpad enter with 'Shift' modifier 95ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should handle numpad enter with 'Ctrl' modifier 132ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should handle numpad enter with 'Alt' modifier 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should recognize
(LF) as ctrl+j 61ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Enter key handling > should recognize \x1b\n as Alt+Enter (return with meta) 48ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× 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"} ][90m
Number of calls: [1m0[22m
[39m
× 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"} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Tab key' in kitty protocol 124ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Shift+Tab' in kitty protocol 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Backspace' in kitty protocol 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Alt+Backspace' in kitty protocol 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Ctrl+Backspace' in kitty protocol 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Shift+Space' in kitty protocol 140ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Tab, Backspace, and Space handling > should recognize 'Ctrl+Space' in kitty protocol 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Windows Terminal Backspace handling > should treat \b as ctrl when OS is Windows_NT 25ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > paste mode > should handle split OSC 52 response 191ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > paste mode > should handle OSC 52 response terminated by ESC \ 246ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
✓ 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"' ][90m
Number of calls: [1m0[22m
[39m
× 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) ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[53;5u'" as '5' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[51;2u'" as '3' 23ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;2;13~'" as 'enter' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;5;13~'" as 'enter' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;5;9~'" as 'tab' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;6;9~'" as 'tab' 9ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[44032u'" as '가' 56ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[27;1;44032~'" as '가' 32ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;129A'" as 'up' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "up"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;2H'" as 'home' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;5F'" as 'end' 30ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;1P'" as 'f1' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f1"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;3Q'" as 'f2' 26ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[3~'" as 'delete' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "delete"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[5~'" as 'pageup' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "pageup"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[6~'" as 'pagedown' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1~'" as 'home' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "home"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[4~'" as 'end' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "end"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[2~'" as 'insert' 18ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "insert"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[11~'" as 'f1' 62ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f1"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[17~'" as 'f6' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f6"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[23~'" as 'f11' 9ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f11"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[24~'" as 'f12' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f12"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[25~'" as 'f13' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f13"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[34~'" as 'f20' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f20"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[302u'" as 'f13' 161ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f13"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[324u'" as 'f35' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "f35"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[57358u'" as 'capslock' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[57362u'" as 'pausebreak' 10ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[Z'" as 'tab' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[1;2Z'" as 'tab' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001bOZ'" as 'tab' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[A'" as 'up' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[B'" as 'down' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[C'" as 'right' 32ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[D'" as 'left' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[H'" as 'home' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[F'" as 'end' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Parameterized functional keys > should recognize sequence "'\u001b[5H'" as 'home' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOj'" as '*' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOk'" as '+' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOm'" as '-' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOo'" as '/' 17ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOp'" as '0' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOq'" as '1' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOr'" as '2' 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOs'" as '3' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOt'" as '4' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOu'" as '5' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOv'" as '6' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOw'" as '7' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOx'" as '8' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOy'" as '9' 52ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001bOn'" as '.' 18ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57404u'" as 'numpad5' 28ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57404;5u'" as 'numpad5' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Numpad support > should recognize numpad sequence "'\u001b[57411u'" as 'numpad_multiply' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× 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"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'iTerm2' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'iTerm2' 11ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'iTerm2' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'iTerm2' 28ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'iTerm2' 24ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'Ghostty' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'Ghostty' 12ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'Ghostty' 38ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'Ghostty' 60ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'Ghostty' 31ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'MacTerminal' 35ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'MacTerminal' 33ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'MacTerminal' 22ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'MacTerminal' 19ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'MacTerminal' 23ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'b' in 'VSCodeTerminal' 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'f' in 'VSCodeTerminal' 27ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'m' in 'VSCodeTerminal' 112ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'z' in 'VSCodeTerminal' 49ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Cross-terminal Alt key handling (simulating macOS) > should handle Alt+'Z' in 'VSCodeTerminal' 20ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Backslash key handling > should treat backslash as a regular keystroke 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > should timeout and flush incomplete kitty sequences after 50ms 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > should immediately flush non-kitty CSI sequences 88ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > should parse valid kitty sequences immediately when complete 48ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× 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"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > should handle sequences arriving character by character with 49 ms delay 89ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "escape"} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > should reset timeout when new input arrives 15ms
→ expected "spy" to be called with arguments: [ ObjectContaining {"name": "a"} ][90m
Number of calls: [1m0[22m
[39m
✓ 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{…} ][90m
Number of calls: [1m0[22m
[39m
× 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{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Greek support > should handle undefined correctly in 'Greek LANG' 16ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Greek support > should handle undefined correctly in 'Greek LC_ALL' 13ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Greek support > should handle undefined correctly in 'LC_ALL overriding non-Greek LANG' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
× KeypressContext > Greek support > should handle '¸' correctly in 'Cedilla (¸) in Greek locale (should b…' 14ms
→ expected "spy" to be called with arguments: [ ObjectContaining{…} ][90m
Number of calls: [1m0[22m
[39m
[?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) ][90m
Number of calls: [1m0[22m
[39m
✓ 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) ][90m
Number of calls: [1m0[22m
[39m
× BaseSettingsDialog > edit mode > should support quick number entry for number fields 2085ms
→ expected "spy" to be called with arguments: [ 'number-setting', '5', …(1) ][90m
Number of calls: [1m0[22m
[39m
× 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) ][90m
Number of calls: [1m0[22m
[39m
✓ 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
✓ > 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
✓ > with 10px height and 100 items > renders only visible items ('top') 392ms
× > with 10px height and 100 items > renders only visible items ('scrolled to bottom') 132ms
→ expected '╭────────────────────────────────────…' to contain 'Item 92'
× > 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.
✓ > with 10px height and 100 items > scrolls down to show new items when requested via ref 139ms
✓ > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: +0) 94ms
✓ > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: 500) 67ms
✓ > with 10px height and 100 items > mounts only visible items with 1000 items and 10px height (scroll: 999) 106ms
✓ > renders more items when a visible item shrinks via context update 164ms
✓ > updates scroll position correctly when scrollBy is called multiple times in the same tick 131ms
✓ > 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
✓ > renders the component 224ms
✓ > path display > should display a shortened path on a narrow terminal 53ms
✓ > path display > should use wide layout at 80 columns 46ms
✓ > path display > should not truncate high-priority items on narrow terminals (regression) 29ms
✓ > displays the branch name when provided 68ms
✓ > does not display the branch name when not provided 85ms
✓ > displays the model name and context percentage 79ms
✓ > displays the usage indicator when usage is low 54ms
✓ > hides the usage indicator when usage is not near limit 65ms
✓ > displays "Limit reached" message when remaining is 0 72ms
✓ > displays the model name and abbreviated context used label on narrow terminals 65ms
✓ > sandbox and trust info > should display untrusted when isTrustedFolder is false 32ms
✓ > sandbox and trust info > should display "current process" for custom sandbox when SANDBOX env is set 30ms
✓ > sandbox and trust info > should display "current process" for macOS Seatbelt when SANDBOX is sandbox-exec 22ms
✓ > sandbox and trust info > should display "no sandbox" when SANDBOX is not set and folder is trusted 25ms
✓ > sandbox and trust info > should display "all tools" when tool sandboxing is enabled and agent is local 91ms
✓ > sandbox and trust info > should prioritize untrusted message over sandbox info 58ms
✓ > footer configuration filtering (golden snapshots) > renders complete footer with all sections visible (baseline) 40ms
✓ > footer configuration filtering (golden snapshots) > renders footer with all optional sections hidden (minimal footer) 88ms
✓ > footer configuration filtering (golden snapshots) > renders footer with only model info hidden (partial filtering) 26ms
✓ > footer configuration filtering (golden snapshots) > renders footer with CWD and model info hidden to test alignment (only sandbox visible) 32ms
✓ > footer configuration filtering (golden snapshots) > hides the context percentage when hideContextPercentage is true 34ms
✓ > footer configuration filtering (golden snapshots) > shows the context percentage when hideContextPercentage is false 37ms
✓ > footer configuration filtering (golden snapshots) > renders complete footer in narrow terminal (baseline narrow) 24ms
✓ > Footer Token Formatting > formats thousands with k 79ms
✓ > Footer Token Formatting > formats millions with m 115ms
✓ > Footer Token Formatting > formats billions with b 65ms
✓ > Footer Token Formatting > formats small numbers without suffix 42ms
✓ > error summary visibility > hides error summary in low verbosity mode out of dev mode 27ms
✓ > error summary visibility > shows error summary in low verbosity mode in dev mode 41ms
✓ > error summary visibility > shows error summary in full verbosity mode 35ms
× > Footer Custom Items > renders auth item with email 38ms
→ expected ' /auth\n google\n' to contain 'test@example.com'
✓ > Footer Custom Items > does NOT render auth item when showUserIdentity is false 157ms
✓ > Footer Custom Items > renders items in the specified order 39ms
✓ > Footer Custom Items > renders multiple items with proper alignment 25ms
✓ > Footer Custom Items > handles empty items array 140ms
✓ > Footer Custom Items > does not render items that are conditionally hidden 25ms
✓ > fallback mode display > should display Flash model when in fallback mode, not the configured Pro model 25ms
✓ > 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) } ][90m
Number of calls: [1m0[22m
[39m
× BaseSelectionList > useSelectionList Integration > should use the activeIndex returned by the hook 105ms
→ expected "spy" to be called with arguments: [ { value: 'A', …(2) }, …(1) ][90m
Received:
[1m 1st spy call:
[22m[33m@@ -2,9 +2,11 @@[90m
[2m {[22m
[2m "key": "A",[22m
[2m "label": "Item A",[22m
[2m "value": "A",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": false,[90m
[31m+ {[90m
[31m+ "isSelected": true,[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "disabled": true,[90m
[31m+ "key": "B",[90m
[31m+ "label": "Item B",[90m
[31m+ "value": "B",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "key": "C",[90m
[31m+ "label": "Item C",[90m
[31m+ "value": "C",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× BaseSelectionList > Styling and Colors > should apply success color to the selected item 88ms
→ expected "spy" to be called with arguments: [ { value: 'A', …(2) }, …(1) ][90m
Received:
[1m 1st spy call:
[22m[33m@@ -2,11 +2,11 @@[90m
[2m {[22m
[2m "key": "A",[22m
[2m "label": "Item A",[22m
[2m "value": "A",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": true,[22m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "disabled": true,[90m
[31m+ "key": "B",[90m
[31m+ "label": "Item B",[90m
[31m+ "value": "B",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "key": "C",[90m
[31m+ "label": "Item C",[90m
[31m+ "value": "C",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× BaseSelectionList > Styling and Colors > should apply primary color to unselected, enabled items 60ms
→ expected "spy" to be called with arguments: [ { value: 'C', …(2) }, …(1) ][90m
Received:
[1m 1st spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "C",[90m
[32m- "label": "Item C",[90m
[32m- "value": "C",[90m
[31m+ "key": "A",[90m
[31m+ "label": "Item A",[90m
[31m+ "value": "A",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": false,[90m
[32m- "numberColor": "COLOR_PRIMARY",[90m
[32m- "titleColor": "COLOR_PRIMARY",[90m
[31m+ {[90m
[31m+ "isSelected": true,[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "C",[90m
[32m- "label": "Item C",[90m
[32m- "value": "C",[90m
[31m+ "disabled": true,[90m
[31m+ "key": "B",[90m
[31m+ "label": "Item B",[90m
[31m+ "value": "B",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[32m- "numberColor": "COLOR_PRIMARY",[90m
[32m- "titleColor": "COLOR_PRIMARY",[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[33m@@ -2,11 +2,11 @@[90m
[2m {[22m
[2m "key": "C",[22m
[2m "label": "Item C",[22m
[2m "value": "C",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[32m- "numberColor": "COLOR_PRIMARY",[90m
[32m- "titleColor": "COLOR_PRIMARY",[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× 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) ][90m
Received:
[1m 1st spy call:
[22m[2m [[22m
[2m {[22m
[32m- "disabled": true,[90m
[32m- "key": "B",[90m
[32m- "label": "Item B",[90m
[32m- "value": "B",[90m
[31m+ "key": "A",[90m
[31m+ "label": "Item A",[90m
[31m+ "value": "A",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": false,[90m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_SECONDARY",[90m
[31m+ {[90m
[31m+ "isSelected": true,[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[33m@@ -3,11 +3,11 @@[90m
[2m "disabled": true,[22m
[2m "key": "B",[22m
[2m "label": "Item B",[22m
[2m "value": "B",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_SECONDARY",[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "disabled": true,[90m
[32m- "key": "B",[90m
[32m- "label": "Item B",[90m
[32m- "value": "B",[90m
[31m+ "key": "C",[90m
[31m+ "label": "Item C",[90m
[31m+ "value": "C",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_SECONDARY",[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× 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) ][90m
Received:
[1m 1st spy call:
[22m[2m [[22m
[2m {[22m
[32m- "disabled": true,[90m
[32m- "key": "B",[90m
[32m- "label": "Item B",[90m
[32m- "value": "B",[90m
[31m+ "key": "A",[90m
[31m+ "label": "Item A",[90m
[31m+ "value": "A",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": true,[22m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[33m@@ -3,11 +3,11 @@[90m
[2m "disabled": true,[22m
[2m "key": "B",[22m
[2m "label": "Item B",[22m
[2m "value": "B",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "disabled": true,[90m
[32m- "key": "B",[90m
[32m- "label": "Item B",[90m
[32m- "value": "B",[90m
[31m+ "key": "C",[90m
[31m+ "label": "Item C",[90m
[31m+ "value": "C",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_FOCUS",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
✓ 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) ][90m
Received:
[1m 1st spy call:
[22m[33m@@ -2,11 +2,11 @@[90m
[2m {[22m
[2m "key": "A",[22m
[2m "label": "Item A",[22m
[2m "value": "A",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": true,[22m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "disabled": true,[90m
[31m+ "key": "B",[90m
[31m+ "label": "Item B",[90m
[31m+ "value": "B",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#AFAFAF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[2m {[22m
[32m- "key": "A",[90m
[32m- "label": "Item A",[90m
[32m- "value": "A",[90m
[31m+ "key": "C",[90m
[31m+ "label": "Item C",[90m
[31m+ "value": "C",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[32m- "numberColor": "COLOR_SECONDARY",[90m
[32m- "titleColor": "COLOR_FOCUS",[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#AFAFAF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
✓ 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) ][90m
Received:
[1m 1st spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[31m+ "key": "Item 1",[90m
[31m+ "label": "Item 1",[90m
[2m "value": "Item 1",[22m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": false,[90m
[31m+ {[90m
[31m+ "isSelected": true,[90m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[32m- "value": "Item 1",[90m
[31m+ {[90m
[31m+ "key": "Item 2",[90m
[31m+ "label": "Item 2",[90m
[31m+ "value": "Item 2",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[32m- "value": "Item 1",[90m
[31m+ {[90m
[31m+ "key": "Item 3",[90m
[31m+ "label": "Item 3",[90m
[31m+ "value": "Item 3",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": false,[22m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× 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) ][90m
Received:
[1m 1st spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[32m- "value": "Item 6",[90m
[31m+ {[90m
[31m+ "key": "Item 1",[90m
[31m+ "label": "Item 1",[90m
[31m+ "value": "Item 1",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[31m+ {[90m
[2m "isSelected": true,[22m
[31m+ "numberColor": "green",[90m
[31m+ "titleColor": "green",[90m
[2m },[22m
[2m ][22m
[1m 2nd spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[32m- "value": "Item 6",[90m
[31m+ {[90m
[31m+ "key": "Item 2",[90m
[31m+ "label": "Item 2",[90m
[31m+ "value": "Item 2",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[1m 3rd spy call:
[22m[2m [[22m
[32m- ObjectContaining {[90m
[32m- "value": "Item 6",[90m
[31m+ {[90m
[31m+ "key": "Item 3",[90m
[31m+ "label": "Item 3",[90m
[31m+ "value": "Item 3",[90m
[2m },[22m
[32m- ObjectContaining {[90m
[32m- "isSelected": true,[90m
[31m+ {[90m
[31m+ "isSelected": false,[90m
[31m+ "numberColor": "#FFFFFF",[90m
[31m+ "titleColor": "#FFFFFF",[90m
[2m },[22m
[2m ][22m
[39m[90m
Number of calls: [1m3[22m
[39m
× 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