microsoft / vscode-docs

Public documentation for Visual Studio Code
http://code.visualstudio.com/docs
Other
5.62k stars 4.56k forks source link

Example for Testing extensions does not work on Windows. #7328

Open sdedic opened 3 months ago

sdedic commented 3 months ago

Does this issue occur when all extensions are disabled?: Yes

Steps to Reproduce:

  1. Execute code similar to the one exhibited at https://code.visualstudio.com/api/working-with-extensions/testing-extension#custom-setup-with-vscodetestelectron:

    async function main() {
    try {
    const extensionDevelopmentPath = path.resolve(__dirname, '../../../');
    const extensionTestsPath = path.resolve(__dirname, './suite/index');
    const vscodeExecutablePath = await downloadAndUnzipVSCode('1.40.1');
    const [cliPath, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath);
    
    // Use cp.spawn / cp.exec for custom setup
    cp.spawnSync(
      cliPath,
      [...args, '--install-extension', '<EXTENSION-ID-OR-PATH-TO-VSIX>'],
      {
        encoding: 'utf-8',
        stdio: 'inherit'
    // --- BUG: MISSING shell: true option here 
      }
    );
    
    // Run the extension test
    await runTests({
      // Use the specified `code` executable
      vscodeExecutablePath,
      extensionDevelopmentPath,
      extensionTestsPath
    });
    } catch (err) {
    console.error('Failed to run tests');
    process.exit(1);
    }
    }

The problem is that on Windows, the cli evaluates to %vscodeTestDir%\bin\Code that is not a Windows executable, but a bash shell script, so direct invocation using spanwSync fails. There must be shell: true option for the spawnSync that launches the command using windows command shell, that properly recognizes presence of Code.cmd and uses that.

Please correct the example in the extension development guide.

VSCodeTriageBot commented 3 months ago

Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.89.1. Please try upgrading to the latest version and checking whether this issue remains.

Happy Coding!

headerjson commented 3 months ago

I started experiencing the same issue during vscode testing. For a long time, I had no issues, but my agent pool image updated and cp.spawnSync silently stopped installing the extension required.

Reproduces the error (agent pool vm): OS Build: 22631.3593 Version of VSCode installed by runtest.js: 1.89.1 Powershell version: 5.1.22621.2506 Node version: v20.13.1

Does not reproduce the error (dev machine): OS Build: 22631.3593 Version of VSCode installed by runtest.js: 1.89.1 Powershell version: 5.1.22621.2506 Node version: v20.11.0

Using thecp.spawnSync shell: true option works as a workaround for me.

connor4312 commented 3 months ago

Modern versions of test-electron include a helper you can use, e.g.

await runVSCodeCommand(['--install-extension', 'ms-python.python']);