Change:
With support for for Electron tests, we should enable terminal tests: I eagerly had enabled them but since we don't know whether Electron smoke tests with are stable, I moved back to only running them in web. We should not enable these tests until we are sure, smoke tests are stable, so maybe this should only happen in May.
Failing macOS run for reference: !
Still not passing, deferring to a debt week

Discussion:
constructor(private code: Code, private editors: Editors, private editor: Editor, private quickaccess: QuickAccess) { } <ins> /** * Write a single setting key value pair. * * Warning: You may need to set `editor.wordWrap` to `"on"` if this is called with a really long * setting. */ </ins> async addUserSetting(setting: string, value: string): Promise<void> { await this.openUserSettingsFile();

await this.editors.saveOpenedFile(); } <ins> /** * Write several settings faster than multiple calls to {@link addUserSetting}. * * Warning: You will likely also need to set `editor.wordWrap` to `"on"` if `addUserSetting` is * called after this in the test. */ async addUserSettings(settings: [key: string, value: string][]): Promise<void> { await this.openUserSettingsFile(); await this.code.dispatchKeybinding('right'); await this.editor.waitForTypeInEditor('settings.json', settings.map(v => `"${v[0]}": ${v[1]},`).join('')); await this.editors.saveOpenedFile(); } </ins> async clearUserSettings(): Promise<void> { await this.openUserSettingsFile(); await this.quickaccess.runCommand('editor.action.selectAll');

await this.code.dispatchKeybinding('enter'); await this.quickinput.waitForQuickInputClosed(); } <del> if (commandId === TerminalCommandId.Show || commandId === TerminalCommandId.CreateNewEditor || commandId === TerminalCommandId.CreateNew || commandId === TerminalCommandId.NewWithProfile) { return await this._waitForTerminal(expectedLocation === 'editor' || commandId === TerminalCommandId.CreateNewEditor ? 'editor' : 'panel'); </del> <ins> switch (commandId) { case TerminalCommandId.Show: case TerminalCommandId.CreateNewEditor: case TerminalCommandId.CreateNew: case TerminalCommandId.NewWithProfile: await this._waitForTerminal(expectedLocation === 'editor' || commandId === TerminalCommandId.CreateNewEditor ? 'editor' : 'panel'); break; case TerminalCommandId.KillAll: await this.code.waitForElements(Selector.Xterm, true, e => e.length === 0); break; </ins> } }

import { Application } from '../../../../automation'; <del> export async function setTerminalTestSettings(app: Application) { // Always show tabs to make getting terminal groups easier await app.workbench.settingsEditor.addUserSetting('terminal.integrated.tabs.hideCondition', '"never"'); // Use the DOM renderer for smoke tests so they can be inspected in the playwright trace // viewer await app.workbench.settingsEditor.addUserSetting('terminal.integrated.gpuAcceleration', '"off"'); </del> <ins> export async function setTerminalTestSettings(app: Application, additionalSettings: [key: string, value: string][] = []) { await app.workbench.settingsEditor.addUserSettings([ // Work wrap is required when calling settingsEditor.addUserSetting multiple times or the // click to focus will fail ['editor.wordWrap', '"on"'], // Always show tabs to make getting terminal groups easier ['terminal.integrated.tabs.hideCondition', '"never"'], // Use the DOM renderer for smoke tests so they can be inspected in the playwright trace // viewer ['terminal.integrated.gpuAcceleration', '"off"'], ...additionalSettings ]); </ins> // Close the settings editor await app.workbench.quickaccess.runCommand('workbench.action.closeAllEditors');

*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import { Application, Terminal, SettingsEditor, TerminalCommandIdWithValue } from '../../../../automation'; </del> <ins> import { Application, Terminal, SettingsEditor, TerminalCommandIdWithValue, TerminalCommandId } from '../../../../automation'; </ins> import { setTerminalTestSettings } from './terminal-helpers'; export function setup() {

app = this.app as Application; terminal = app.workbench.terminal; settingsEditor = app.workbench.settingsEditor; <del> await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.enabled', 'true'); await setTerminalTestSettings(app); </del> <ins> await setTerminalTestSettings(app, [['terminal.integrated.shellIntegration.enabled', 'true']]); }); afterEach(async function () { await app.workbench.terminal.runCommand(TerminalCommandId.KillAll); </ins> }); after(async function () {

await terminal.runCommandWithValue(TerminalCommandIdWithValue.NewWithProfile, process.platform === 'win32' ? 'PowerShell' : 'bash'); } <del> // TODO: These are currently flaky https://github.com/microsoft/vscode/issues/150478 describe.skip('Shell integration', function () { </del> <ins> // TODO: Some agents may not have pwsh installed? (process.platform === 'win32' ? describe.skip : describe)(`Shell integration`, function () { </ins> describe('Decorations', function () { describe('Should show default icons', function () { it('Placeholder', async () => { await createShellIntegrationProfile(); await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 0 }); }); it('Success', async () => { await createShellIntegrationProfile(); <del> await terminal.runCommandInTerminal(`ls`); </del> <ins> await terminal.runCommandInTerminal(`echo "success"`); </ins> await terminal.assertCommandDecorations({ placeholder: 1, success: 1, error: 0 }); }); it('Error', async () => { await createShellIntegrationProfile(); <del> await terminal.runCommandInTerminal(`fsdkfsjdlfksjdkf`); </del> <ins> await terminal.runCommandInTerminal(`false`); </ins> await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 1 }); }); });

it('Should update and show custom icons', async () => { await createShellIntegrationProfile(); await terminal.assertCommandDecorations({ placeholder: 1, success: 0, error: 0 }); <del> await terminal.runCommandInTerminal(`ls`); await terminal.runCommandInTerminal(`fsdkfsjdlfksjdkf`); </del> <ins> await terminal.runCommandInTerminal(`echo "foo"`); await terminal.runCommandInTerminal(`bar`); </ins> await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIcon', '"zap"'); await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIconSuccess', '"zap"'); await settingsEditor.addUserSetting('terminal.integrated.shellIntegration.decorationIconError', '"zap"'); await terminal.assertCommandDecorations(undefined, { updatedIcon: "zap", count: 3 }); <ins> await app.workbench.terminal.runCommand(TerminalCommandId.KillAll); </ins> }); }); });

setupSearchTests(logger); setupNotebookTests(logger); setupLanguagesTests(logger); <del> if (opts.web) { setupTerminalTests(logger); } // Tests require playwright driver (https://github.com/microsoft/vscode/issues/146811) </del> <ins> setupTerminalTests(logger); </ins> setupStatusbarTests(logger); if (quality !== Quality.Dev && quality !== Quality.OSS) { setupExtensionTests(logger); } setupMultirootTests(logger);