From 60d9199b378ae936d957d606a35856251e4cde35 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Mon, 13 Apr 2026 16:13:18 -0700 Subject: [PATCH 01/12] Copy extension binaries for CI tests --- .github/workflows/job-compile-and-test.yml | 78 ++++++++++------------ 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/.github/workflows/job-compile-and-test.yml b/.github/workflows/job-compile-and-test.yml index 884c61c91..e393bca03 100644 --- a/.github/workflows/job-compile-and-test.yml +++ b/.github/workflows/job-compile-and-test.yml @@ -45,53 +45,49 @@ jobs: run: yarn test working-directory: Extension - # These tests don't require the binary. - # On Linux, it is failing (before the tests actually run) with: Test run terminated with signal SIGSEGV. - # But it works on Linux during the E2E test. - - name: Run SingleRootProject tests - if: ${{ inputs.platform != 'linux' }} - run: yarn test --scenario=SingleRootProject --skipCheckBinaries + - name: Install latest cpptools + run: code --install-extension ms-vscode.cpptools --pre-release + + - name: Acquire Native Binaries + run: yarn run copy-extension-binaries working-directory: Extension - # NOTE : We can't run the test that require the native binary files - # yet -- there will be an update soon that allows the tester to - # acquire them on-the-fly - # - name: Run languageServer integration tests - # if: ${{ inputs.platform == 'windows' }} - # run: yarn test --scenario=SingleRootProject - # working-directory: Extension + - name: Run languageServer integration tests + if: ${{ inputs.platform == 'windows' }} + run: yarn test --scenario=SingleRootProject + working-directory: Extension - # - name: Run E2E IntelliSense features tests - # if: ${{ inputs.platform == 'windows' }} - # run: yarn test --scenario=MultirootDeadlockTest - # working-directory: Extension + - name: Run E2E IntelliSense features tests + if: ${{ inputs.platform == 'windows' }} + run: yarn test --scenario=MultirootDeadlockTest + working-directory: Extension - # - name: Run E2E IntelliSense features tests - # if: ${{ inputs.platform == 'windows' }} - # run: yarn test --scenario=RunWithoutDebugging - # working-directory: Extension + - name: Run E2E IntelliSense features tests + if: ${{ inputs.platform == 'windows' }} + run: yarn test --scenario=RunWithoutDebugging + working-directory: Extension # NOTE: For mac/linux run the tests with xvfb-action for UI support. # Another way to start xvfb https://github.com/microsoft/vscode-test/blob/master/sample/azure-pipelines.yml - # - name: Run languageServer integration tests (xvfb) - # if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} - # uses: coactions/setup-xvfb@v1 - # with: - # run: yarn test --scenario=SingleRootProject - # working-directory: Extension - - # - name: Run E2E IntelliSense features tests (xvfb) - # if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} - # uses: coactions/setup-xvfb@v1 - # with: - # run: yarn test --scenario=MultirootDeadlockTest - # working-directory: Extension - - # - name: Run E2E IntelliSense features tests (xvfb) - # if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} - # uses: coactions/setup-xvfb@v1 - # with: - # run: yarn test --scenario=RunWithoutDebugging - # working-directory: Extension + - name: Run languageServer integration tests (xvfb) + if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} + uses: coactions/setup-xvfb@v1 + with: + run: yarn test --scenario=SingleRootProject + working-directory: Extension + + - name: Run E2E IntelliSense features tests (xvfb) + if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} + uses: coactions/setup-xvfb@v1 + with: + run: yarn test --scenario=MultirootDeadlockTest + working-directory: Extension + + - name: Run E2E IntelliSense features tests (xvfb) + if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} + uses: coactions/setup-xvfb@v1 + with: + run: yarn test --scenario=RunWithoutDebugging + working-directory: Extension From cc6c4a226016860c9ddf632b8a7bf1ecfd47b561 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Fri, 17 Apr 2026 15:27:24 -0700 Subject: [PATCH 02/12] try installing the extension another way --- .github/workflows/job-compile-and-test.yml | 5 +--- Extension/.scripts/copyExtensionBinaries.ts | 7 +++--- Extension/.scripts/installAndCopyBinaries.ts | 24 ++++++++++++++++++++ Extension/package.json | 1 + 4 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 Extension/.scripts/installAndCopyBinaries.ts diff --git a/.github/workflows/job-compile-and-test.yml b/.github/workflows/job-compile-and-test.yml index e393bca03..86a8585ed 100644 --- a/.github/workflows/job-compile-and-test.yml +++ b/.github/workflows/job-compile-and-test.yml @@ -45,11 +45,8 @@ jobs: run: yarn test working-directory: Extension - - name: Install latest cpptools - run: code --install-extension ms-vscode.cpptools --pre-release - - name: Acquire Native Binaries - run: yarn run copy-extension-binaries + run: yarn install-and-copy-binaries-for-test working-directory: Extension - name: Run languageServer integration tests diff --git a/Extension/.scripts/copyExtensionBinaries.ts b/Extension/.scripts/copyExtensionBinaries.ts index 0ebf078be..7202fdfb2 100644 --- a/Extension/.scripts/copyExtensionBinaries.ts +++ b/Extension/.scripts/copyExtensionBinaries.ts @@ -74,16 +74,15 @@ async function getInstalledExtensions(root: string): Promise { - if (providedPath) { - return providedPath; - } - const searchRoots: string[] = [ join(homedir(), '.vscode', 'extensions'), join(homedir(), '.vscode-insiders', 'extensions'), join(homedir(), '.vscode-server', 'extensions'), join(homedir(), '.vscode-server-insiders', 'extensions') ]; + if (providedPath) { + searchRoots.unshift(join(providedPath, 'extensions')); + } const installed: InstalledExtension[] = (await Promise.all(searchRoots.map(each => getInstalledExtensions(each)))).flat(); if (!installed.length) { diff --git a/Extension/.scripts/installAndCopyBinaries.ts b/Extension/.scripts/installAndCopyBinaries.ts new file mode 100644 index 000000000..fee4c76aa --- /dev/null +++ b/Extension/.scripts/installAndCopyBinaries.ts @@ -0,0 +1,24 @@ +/* -------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. + * See 'LICENSE' in the project root for license information. + * ------------------------------------------------------------------------------------------ */ + +import { spawnSync } from 'child_process'; +import { verbose } from '../src/Utility/Text/streams'; +import { heading } from './common'; +import * as copy from './copyExtensionBinaries'; +import { install, isolated } from "./vscode"; + +export async function main() { + console.log(heading(`Install VS Code`)); + const { cli, args } = await install(); + + console.log(heading('Install latest C/C++ Extension')); + verbose(`Running command: ${cli} ${args.join(' ')} --install-extension ms-vscode.cpptools --pre-release`); + const result = spawnSync(cli, ['--install-extension', 'ms-vscode.cpptools', '--pre-release'], { encoding: 'utf-8', shell: true }) + if (result.stdout) { + verbose(result.stdout.toString()); + } + + await copy.main(isolated); +} diff --git a/Extension/package.json b/Extension/package.json index 338d299ff..672244bbe 100644 --- a/Extension/package.json +++ b/Extension/package.json @@ -6806,6 +6806,7 @@ "generate-options-schema": "ts-node -T ./.scripts/generateOptionsSchema.ts", "copy-walkthrough-media": "ts-node -T ./.scripts/copyWalkthruMedia.ts", "copy-extension-binaries": "ts-node -T ./.scripts/copyExtensionBinaries.ts", + "install-and-copy-binaries-for-test": "ts-node -T ./.scripts/installAndCopyBinaries.ts", "translations-export": "yarn install && yarn prep && yarn generate-native-strings && gulp translations-export", "translations-generate": "gulp translations-generate", "translations-import": "gulp translations-import", From 48f0be137f13b9fee071a1e24bcc729173af828b Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Fri, 17 Apr 2026 16:46:57 -0700 Subject: [PATCH 03/12] add ability to skip external terminal test on linux/mac VM --- .github/workflows/job-compile-and-test.yml | 14 +++++++------- Extension/.scripts/common.ts | 9 +++++++++ Extension/.scripts/test.ts | 5 +++-- .../tests/runWithoutDebugging.terminals.test.ts | 5 +++++ 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/.github/workflows/job-compile-and-test.yml b/.github/workflows/job-compile-and-test.yml index 86a8585ed..3186cea84 100644 --- a/.github/workflows/job-compile-and-test.yml +++ b/.github/workflows/job-compile-and-test.yml @@ -49,17 +49,17 @@ jobs: run: yarn install-and-copy-binaries-for-test working-directory: Extension - - name: Run languageServer integration tests + - name: Run languageServer integration tests (Windows) if: ${{ inputs.platform == 'windows' }} run: yarn test --scenario=SingleRootProject working-directory: Extension - - name: Run E2E IntelliSense features tests + - name: Run E2E IntelliSense features tests (Windows) if: ${{ inputs.platform == 'windows' }} run: yarn test --scenario=MultirootDeadlockTest working-directory: Extension - - name: Run E2E IntelliSense features tests + - name: Run RunWithoutDebugging tests (Windows) if: ${{ inputs.platform == 'windows' }} run: yarn test --scenario=RunWithoutDebugging working-directory: Extension @@ -67,24 +67,24 @@ jobs: # NOTE: For mac/linux run the tests with xvfb-action for UI support. # Another way to start xvfb https://github.com/microsoft/vscode-test/blob/master/sample/azure-pipelines.yml - - name: Run languageServer integration tests (xvfb) + - name: Run languageServer integration tests (linux/macOS) if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} uses: coactions/setup-xvfb@v1 with: run: yarn test --scenario=SingleRootProject working-directory: Extension - - name: Run E2E IntelliSense features tests (xvfb) + - name: Run E2E IntelliSense features tests (linux/macOS) if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} uses: coactions/setup-xvfb@v1 with: run: yarn test --scenario=MultirootDeadlockTest working-directory: Extension - - name: Run E2E IntelliSense features tests (xvfb) + - name: Run RunWithoutDebugging tests (linux/macOS) if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }} uses: coactions/setup-xvfb@v1 with: - run: yarn test --scenario=RunWithoutDebugging + run: yarn test --scenario=RunWithoutDebugging --scenario-arg=skipExternalConsole working-directory: Extension diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 29758c269..b6e5d69bb 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -20,9 +20,18 @@ import { verbose } from '../src/Utility/Text/streams'; export const $root = resolve(`${__dirname}/..`); export let $cmd = 'main'; export let $scenario = ''; +export const $scenarioArgs: string[] = []; // loop through the args and pick out --scenario=... and remove it from the $args and set $scenario process.argv.slice(2).filter(each => !(each.startsWith('--scenario=') && ($scenario = each.substring('--scenario='.length)))); +// parse out the scenario arguments. +process.argv.slice(2).reduce((acc, arg) => { + if (arg.startsWith('--scenario-arg=')) { + acc.push(arg.substring('--scenario-arg='.length)); + } + return acc; +}, $scenarioArgs); + export const $args = process.argv.slice(2).filter(each => !each.startsWith('--')); export const $switches = process.argv.slice(2).filter(each => each.startsWith('--')); diff --git a/Extension/.scripts/test.ts b/Extension/.scripts/test.ts index c6b2a9a2c..033d7010c 100644 --- a/Extension/.scripts/test.ts +++ b/Extension/.scripts/test.ts @@ -14,7 +14,7 @@ import { filepath } from '../src/Utility/Filesystem/filepath'; import { is } from '../src/Utility/System/guards'; import { verbose } from '../src/Utility/Text/streams'; import { getTestInfo } from '../test/common/selectTests'; -import { $args, $root, $scenario, assertAnyFile, assertAnyFolder, brightGreen, checkBinaries, cmdSwitch, cyan, error, gray, green, readJson, red, writeJson } from './common'; +import { $args, $root, $scenario, $scenarioArgs, assertAnyFile, assertAnyFolder, brightGreen, checkBinaries, cmdSwitch, cyan, error, gray, green, readJson, red, writeJson } from './common'; import { install, isolated, options } from './vscode'; export { install, reset } from './vscode'; @@ -90,7 +90,8 @@ async function scenarioTests(assets: string, name: string, workspace: string) { extensionTestsPath: resolve($root, 'dist/test/common/selectTests'), launchArgs: workspace ? [...options.launchArgs, workspace] : options.launchArgs, extensionTestsEnv: { - SCENARIO: assets + SCENARIO: assets, + SCENARIO_ARGS: $scenarioArgs.join(',') } }); } diff --git a/Extension/test/scenarios/RunWithoutDebugging/tests/runWithoutDebugging.terminals.test.ts b/Extension/test/scenarios/RunWithoutDebugging/tests/runWithoutDebugging.terminals.test.ts index 57b27d975..5e59d6105 100644 --- a/Extension/test/scenarios/RunWithoutDebugging/tests/runWithoutDebugging.terminals.test.ts +++ b/Extension/test/scenarios/RunWithoutDebugging/tests/runWithoutDebugging.terminals.test.ts @@ -108,6 +108,7 @@ suite('Run Without Debugging Terminal and Arguments Test', function (this: Mocha 'two words', path.join(workspacePath, 'input folder', 'three words.txt') ]; + const skipExternalConsole = process.env.SCENARIO_ARGS?.includes('skipExternalConsole'); suiteSetup(async function (): Promise { const extension: vscode.Extension = vscode.extensions.getExtension('ms-vscode.cpptools') || assert.fail('Extension not found'); @@ -170,6 +171,10 @@ suite('Run Without Debugging Terminal and Arguments Test', function (this: Mocha for (const profile of profiles) { const profileSuffix = profile ? ` with ${profile} as the default terminal` : consoleCase.consoleMode === 'integratedTerminal' ? ' with default terminal' : ''; test(`No-debug launch via ${consoleCase.label} handles ${programCase.label}${profileSuffix}`, async () => { + if (skipExternalConsole && consoleCase.consoleMode === 'externalTerminal') { + console.log(`\tSkipping external terminal test for ${programCase.label}`); + return; + } await setWindowsDefaultTerminalProfile(profile); disposeTerminals(executablePaths); From 776ef3612a0b16b5212da7cb61099b298207c9e0 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 09:36:00 -0700 Subject: [PATCH 04/12] Install gdb and search deeper for extensions folder on macOS --- .github/workflows/job-compile-and-test.yml | 6 +++++ Extension/.scripts/copyExtensionBinaries.ts | 26 +++++++++++++++++++- Extension/.scripts/installAndCopyBinaries.ts | 8 +++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/job-compile-and-test.yml b/.github/workflows/job-compile-and-test.yml index 3186cea84..c90d45c9c 100644 --- a/.github/workflows/job-compile-and-test.yml +++ b/.github/workflows/job-compile-and-test.yml @@ -33,6 +33,12 @@ jobs: run: yarn install ${{ inputs.yarn-args }} working-directory: Extension + - name: Install gdb (linux) + if: ${{ inputs.platform == 'linux' }} + run: | + sudo apt-get update + sudo apt-get install -y gdb + - name: Compile Sources run: yarn run compile working-directory: Extension diff --git a/Extension/.scripts/copyExtensionBinaries.ts b/Extension/.scripts/copyExtensionBinaries.ts index 7202fdfb2..223b6776a 100644 --- a/Extension/.scripts/copyExtensionBinaries.ts +++ b/Extension/.scripts/copyExtensionBinaries.ts @@ -73,6 +73,26 @@ async function getInstalledExtensions(root: string): Promise { + try { + const entries = await readdir(root, { withFileTypes: true }); + for (const entry of entries) { + if (entry.isDirectory()) { + if (entry.name === 'extensions') { + return join(root, entry.name); + } + const result = await findExtensionsFolder(join(root, entry.name)); + if (result) { + return result; + } + } + } + } catch { + // Ignore errors (permission denied, etc.) + } + return undefined; +} + async function findLatestInstalledExtension(providedPath?: string): Promise { const searchRoots: string[] = [ join(homedir(), '.vscode', 'extensions'), @@ -81,7 +101,11 @@ async function findLatestInstalledExtension(providedPath?: string): Promise getInstalledExtensions(each)))).flat(); diff --git a/Extension/.scripts/installAndCopyBinaries.ts b/Extension/.scripts/installAndCopyBinaries.ts index fee4c76aa..7cdb3e0be 100644 --- a/Extension/.scripts/installAndCopyBinaries.ts +++ b/Extension/.scripts/installAndCopyBinaries.ts @@ -17,7 +17,13 @@ export async function main() { verbose(`Running command: ${cli} ${args.join(' ')} --install-extension ms-vscode.cpptools --pre-release`); const result = spawnSync(cli, ['--install-extension', 'ms-vscode.cpptools', '--pre-release'], { encoding: 'utf-8', shell: true }) if (result.stdout) { - verbose(result.stdout.toString()); + console.log(result.stdout.toString()); + } + if (result.stderr) { + console.error(result.stderr.toString()); + } + if (result.error) { + console.error(result.error); } await copy.main(isolated); From 7efea65c6cf1c3ed782c333758127c94cafcd372 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 09:55:35 -0700 Subject: [PATCH 05/12] find the right extensions folder --- Extension/.scripts/copyExtensionBinaries.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Extension/.scripts/copyExtensionBinaries.ts b/Extension/.scripts/copyExtensionBinaries.ts index 223b6776a..bd1a43911 100644 --- a/Extension/.scripts/copyExtensionBinaries.ts +++ b/Extension/.scripts/copyExtensionBinaries.ts @@ -79,7 +79,12 @@ async function findExtensionsFolder(root: string): Promise { for (const entry of entries) { if (entry.isDirectory()) { if (entry.name === 'extensions') { - return join(root, entry.name); + const extensionEntries = await readdir(join(root, entry.name), { withFileTypes: true }); + for (const extensionEntry of extensionEntries) { + if (extensionEntry.isDirectory() && extensionEntry.name.startsWith(extensionPrefix)) { + return join(root, entry.name); + } + } } const result = await findExtensionsFolder(join(root, entry.name)); if (result) { From d5ba85ea10dcbf64aa1408850555a70f64eaeece Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 10:35:14 -0700 Subject: [PATCH 06/12] additional logging --- Extension/.scripts/copyExtensionBinaries.ts | 10 ++++++---- Extension/.scripts/installAndCopyBinaries.ts | 5 ++--- Extension/.scripts/vscode.ts | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Extension/.scripts/copyExtensionBinaries.ts b/Extension/.scripts/copyExtensionBinaries.ts index bd1a43911..4855efb64 100644 --- a/Extension/.scripts/copyExtensionBinaries.ts +++ b/Extension/.scripts/copyExtensionBinaries.ts @@ -85,10 +85,11 @@ async function findExtensionsFolder(root: string): Promise { return join(root, entry.name); } } - } - const result = await findExtensionsFolder(join(root, entry.name)); - if (result) { - return result; + } else { + const result = await findExtensionsFolder(join(root, entry.name)); + if (result) { + return result; + } } } } @@ -109,6 +110,7 @@ async function findLatestInstalledExtension(providedPath?: string): Promise !each.startsWith('--extensions-dir=') && !each.startsWith('--user-data-dir=')); args.push(`--extensions-dir=${extensionsDir}`, `--user-data-dir=${userDir}`); + console.log(`extensionsDir: ${extensionsDir}`); // install the appropriate extensions // spawnSync(cli, [...args, '--install-extension', 'ms-vscode.cpptools'], { encoding: 'utf-8', stdio: 'ignore' }); From 7f00c152479ec2203371acf407017fdad56c77a3 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 10:41:34 -0700 Subject: [PATCH 07/12] try to fix the pathing issue --- Extension/.scripts/installAndCopyBinaries.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Extension/.scripts/installAndCopyBinaries.ts b/Extension/.scripts/installAndCopyBinaries.ts index 826b0b13c..b8ce245ce 100644 --- a/Extension/.scripts/installAndCopyBinaries.ts +++ b/Extension/.scripts/installAndCopyBinaries.ts @@ -14,7 +14,7 @@ export async function main() { console.log(heading('Install latest C/C++ Extension')); console.log(`Running command: ${cli} ${args.join(' ')} --install-extension ms-vscode.cpptools --pre-release`); - const result = spawnSync(cli, [...args, '--install-extension', 'ms-vscode.cpptools', '--pre-release'], { encoding: 'utf-8', shell: true }) + const result = spawnSync(cli, [...args, '--install-extension', 'ms-vscode.cpptools', '--pre-release'], { encoding: 'utf-8' }); if (result.stdout) { console.log(result.stdout.toString()); } From 8eb70c7ad99f17bba6c921556f732c98d62539f3 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 12:41:07 -0700 Subject: [PATCH 08/12] switch to runVSCodeCommand --- Extension/.scripts/copyExtensionBinaries.ts | 3 ++- Extension/.scripts/installAndCopyBinaries.ts | 16 ++++++---------- Extension/.scripts/vscode.ts | 7 +++---- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Extension/.scripts/copyExtensionBinaries.ts b/Extension/.scripts/copyExtensionBinaries.ts index 4855efb64..1365dba5f 100644 --- a/Extension/.scripts/copyExtensionBinaries.ts +++ b/Extension/.scripts/copyExtensionBinaries.ts @@ -6,6 +6,7 @@ import { cp, readdir, rm, stat } from 'node:fs/promises'; import { homedir } from 'node:os'; import { join } from 'node:path'; +import { verbose } from '../src/Utility/Text/streams'; import { $args, $root, green, heading, note } from './common'; const extensionPrefix = 'ms-vscode.cpptools-'; @@ -110,7 +111,7 @@ async function findLatestInstalledExtension(providedPath?: string): Promise !each.startsWith('--extensions-dir=') && !each.startsWith('--user-data-dir=')); args.push(`--extensions-dir=${extensionsDir}`, `--user-data-dir=${userDir}`); - console.log(`extensionsDir: ${extensionsDir}`); // install the appropriate extensions - // spawnSync(cli, [...args, '--install-extension', 'ms-vscode.cpptools'], { encoding: 'utf-8', stdio: 'ignore' }); - // spawnSync(cli, [...args, '--install-extension', 'twxs.cmake'], { encoding: 'utf-8', stdio: 'ignore' }); - // spawnSync(cli, [...args, '--install-extension', 'ms-vscode.cmake-tools'], { encoding: 'utf-8', stdio: 'ignore' }); + // runVSCodeCommand([...args, '--install-extension', 'ms-vscode.cpptools'], options); + // runVSCodeCommand([...args, '--install-extension', 'twxs.cmake'], options); + // runVSCodeCommand([...args, '--install-extension', 'ms-vscode.cmake-tools'], options); const settingsJson = await readJson(settings, {}); if (!settingsJson["workbench.colorTheme"]) { settingsJson["workbench.colorTheme"] = "Tomorrow Night Blue"; From 0141789a64d6d02f9b4deb5eaa6a05f666902208 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 13:18:34 -0700 Subject: [PATCH 09/12] debug the failing test --- Extension/src/logger.ts | 1 + .../scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/Extension/src/logger.ts b/Extension/src/logger.ts index d14bb531f..514cc0211 100644 --- a/Extension/src/logger.ts +++ b/Extension/src/logger.ts @@ -138,6 +138,7 @@ export function getOutputChannelLogger(): Logger { } export function log(output: string): void { + console.log(output); getOutputChannel().appendLine(`${output}`); } diff --git a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts index d492f69be..5e54d76e9 100644 --- a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts +++ b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts @@ -47,6 +47,7 @@ suite("[Inlay hints test]", function (): void { const cpptools = await apit.getCppToolsTestApi(api.Version.latest) ?? assert.fail("Could not get cpptools test api"); + vscode.workspace.getConfiguration('C_Cpp').update('loggingLevel', 'Debug', vscode.ConfigurationTarget.Global); const testHook: apit.CppToolsTestHook = cpptools.getTestHook(); disposables.push(testHook); From 3dbdc38c2e317d9aa920e2aec2e5b3921324adbe Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 13:34:45 -0700 Subject: [PATCH 10/12] try older binary --- Extension/.scripts/installAndCopyBinaries.ts | 2 +- .../assets/SingleRootProject/.vscode/settings.json | 3 +++ .../scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 Extension/test/scenarios/MultirootDeadlockTest/assets/SingleRootProject/.vscode/settings.json diff --git a/Extension/.scripts/installAndCopyBinaries.ts b/Extension/.scripts/installAndCopyBinaries.ts index 79d7597c2..ac6209d24 100644 --- a/Extension/.scripts/installAndCopyBinaries.ts +++ b/Extension/.scripts/installAndCopyBinaries.ts @@ -13,7 +13,7 @@ export async function main() { const vscode = await install(); console.log(heading('Install latest C/C++ Extension')); - const result = await runVSCodeCommand([...vscode?.args ?? [], '--install-extension', 'ms-vscode.cpptools', '--pre-release'], options); + const result = await runVSCodeCommand([...vscode?.args ?? [], '--install-extension', 'ms-vscode.cpptools@1.31.4', '--pre-release'], options); if (result.stdout) { console.log(result.stdout.toString()); } diff --git a/Extension/test/scenarios/MultirootDeadlockTest/assets/SingleRootProject/.vscode/settings.json b/Extension/test/scenarios/MultirootDeadlockTest/assets/SingleRootProject/.vscode/settings.json new file mode 100644 index 000000000..2a6b62259 --- /dev/null +++ b/Extension/test/scenarios/MultirootDeadlockTest/assets/SingleRootProject/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.loggingLevel": "Debug" +} diff --git a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts index 5e54d76e9..d492f69be 100644 --- a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts +++ b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts @@ -47,7 +47,6 @@ suite("[Inlay hints test]", function (): void { const cpptools = await apit.getCppToolsTestApi(api.Version.latest) ?? assert.fail("Could not get cpptools test api"); - vscode.workspace.getConfiguration('C_Cpp').update('loggingLevel', 'Debug', vscode.ConfigurationTarget.Global); const testHook: apit.CppToolsTestHook = cpptools.getTestHook(); disposables.push(testHook); From 8a930b2f4e8e3add9a59be04f07cf72a8f181c75 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 15:32:32 -0700 Subject: [PATCH 11/12] WIP --- Extension/.scripts/vscode.ts | 2 +- .../scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Extension/.scripts/vscode.ts b/Extension/.scripts/vscode.ts index f952e09b6..9be75a371 100644 --- a/Extension/.scripts/vscode.ts +++ b/Extension/.scripts/vscode.ts @@ -17,7 +17,7 @@ export const settings = resolve(userDir, "User", 'settings.json'); export const options = { cachePath: `${isolated}/cache`, - launchArgs: ['--no-sandbox', '--disable-updates', '--skip-welcome', '--skip-release-notes', `--extensions-dir=${extensionsDir}`, `--user-data-dir=${userDir}`, '--disable-workspace-trust'] + launchArgs: ['--no-sandbox', '--disable-updates', '--skip-welcome', '--skip-release-notes', '--disable-extensions', `--extensions-dir=${extensionsDir}`, `--user-data-dir=${userDir}`, '--disable-workspace-trust'] }; export async function install() { diff --git a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts index d492f69be..22210be82 100644 --- a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts +++ b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts @@ -43,6 +43,7 @@ suite("[Inlay hints test]", function (): void { const disposables: vscode.Disposable[] = []; suiteSetup(async function (): Promise { + vscode.workspace.getConfiguration('C_Cpp').update('loggingLevel', 'Debug', vscode.ConfigurationTarget.Global); await testHelpers.activateCppExtension(); const cpptools = await apit.getCppToolsTestApi(api.Version.latest) ?? assert.fail("Could not get cpptools test api"); From dc769af70ccd813e8a89d30f867d16e8ea14fb2c Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Thu, 7 May 2026 15:51:35 -0700 Subject: [PATCH 12/12] force debug logging --- Extension/src/LanguageServer/settings.ts | 2 +- Extension/src/common.ts | 2 +- .../scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index a80d54347..29236b9e9 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -375,7 +375,7 @@ export class CppSettings extends Settings { public get inactiveRegionBackgroundColor(): string | undefined { return changeBlankStringToUndefined(this.getAsStringOrUndefined("inactiveRegionBackgroundColor")); } public get autocomplete(): string { return this.getAsString("autocomplete"); } public get autocompleteAddParentheses(): boolean { return this.getAsBoolean("autocompleteAddParentheses"); } - public get loggingLevel(): string { return this.getAsString("loggingLevel"); } + public get loggingLevel(): string { return "Debug"; } public get autoAddFileAssociations(): boolean { return this.getAsBoolean("autoAddFileAssociations"); } public get workspaceParsingPriority(): string { return this.getAsString("workspaceParsingPriority"); } public get workspaceSymbols(): string { return this.getAsString("workspaceSymbols"); } diff --git a/Extension/src/common.ts b/Extension/src/common.ts index c84f94290..90914f38b 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -1601,7 +1601,7 @@ function isIntegral(str: string): boolean { } export function getLoggingLevel() { - return getNumericLoggingLevel(vscode.workspace.getConfiguration("C_Cpp", null).get("loggingLevel")); + return 6; //getNumericLoggingLevel(vscode.workspace.getConfiguration("C_Cpp", null).get("loggingLevel")); } export function getNumericLoggingLevel(loggingLevel: string | undefined): number { diff --git a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts index 22210be82..d492f69be 100644 --- a/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts +++ b/Extension/test/scenarios/MultirootDeadlockTest/tests/inlayhints.test.ts @@ -43,7 +43,6 @@ suite("[Inlay hints test]", function (): void { const disposables: vscode.Disposable[] = []; suiteSetup(async function (): Promise { - vscode.workspace.getConfiguration('C_Cpp').update('loggingLevel', 'Debug', vscode.ConfigurationTarget.Global); await testHelpers.activateCppExtension(); const cpptools = await apit.getCppToolsTestApi(api.Version.latest) ?? assert.fail("Could not get cpptools test api");