diff --git a/.vscode/launch.json b/.vscode/launch.json index 930f764b9b1..1c3f45063cf 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -81,12 +81,26 @@ { "type": "extensionHost", "request": "launch", - "name": "VS Code API Tests", + "name": "VS Code API Tests (single folder)", "runtimeExecutable": "${execPath}", "args": [ "${workspaceFolder}/extensions/vscode-api-tests/testWorkspace", "--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests", - "--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out" + "--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/singlefolder-tests" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ] + }, + { + "type": "extensionHost", + "request": "launch", + "name": "VS Code API Tests (workspace)", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/extensions/vscode-api-tests/testWorkspace.code-workspace", + "--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests", + "--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/workspace-tests" ], "outFiles": [ "${workspaceFolder}/out/**/*.js" diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js index f766cfaca0f..d6402600d27 100644 --- a/build/gulpfile.hygiene.js +++ b/build/gulpfile.hygiene.js @@ -77,7 +77,8 @@ const indentationFilter = [ '!extensions/**/syntaxes/**', '!extensions/**/themes/**', '!extensions/**/colorize-fixtures/**', - '!extensions/vscode-api-tests/testWorkspace/**' + '!extensions/vscode-api-tests/testWorkspace/**', + '!extensions/vscode-api-tests/testWorkspace2/**' ]; const copyrightFilter = [ @@ -95,6 +96,7 @@ const copyrightFilter = [ '!**/*.xpm', '!**/*.opts', '!**/*.disabled', + '!**/*.code-workspace', '!build/**/*.init', '!resources/linux/snap/snapcraft.yaml', '!resources/win32/bin/code.js', @@ -124,6 +126,7 @@ const tslintFilter = [ '!**/node_modules/**', '!extensions/typescript/test/colorize-fixtures/**', '!extensions/vscode-api-tests/testWorkspace/**', + '!extensions/vscode-api-tests/testWorkspace2/**', '!extensions/**/*.test.ts', '!extensions/html/server/lib/jquery.d.ts' ]; diff --git a/extensions/vscode-api-tests/src/commands.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/commands.test.ts similarity index 100% rename from extensions/vscode-api-tests/src/commands.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/commands.test.ts diff --git a/extensions/vscode-api-tests/src/configuration.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/configuration.test.ts similarity index 100% rename from extensions/vscode-api-tests/src/configuration.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/configuration.test.ts diff --git a/extensions/vscode-api-tests/src/editor.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/editor.test.ts similarity index 99% rename from extensions/vscode-api-tests/src/editor.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/editor.test.ts index a5d597b4bc0..0743a5e0cb3 100644 --- a/extensions/vscode-api-tests/src/editor.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/editor.test.ts @@ -7,7 +7,7 @@ import * as assert from 'assert'; import { workspace, window, Position, Range, commands, TextEditor, TextDocument, TextEditorCursorStyle, TextEditorLineNumbersStyle, SnippetString, Selection } from 'vscode'; -import { createRandomFile, deleteFile, closeAllEditors } from './utils'; +import { createRandomFile, deleteFile, closeAllEditors } from '../utils'; suite('editor tests', () => { diff --git a/extensions/vscode-api-tests/src/env.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/env.test.ts similarity index 100% rename from extensions/vscode-api-tests/src/env.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/env.test.ts diff --git a/extensions/vscode-api-tests/src/index.ts b/extensions/vscode-api-tests/src/singlefolder-tests/index.ts similarity index 100% rename from extensions/vscode-api-tests/src/index.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/index.ts diff --git a/extensions/vscode-api-tests/src/languages.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts similarity index 99% rename from extensions/vscode-api-tests/src/languages.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts index 01dea3ddc3f..e385d5287fd 100644 --- a/extensions/vscode-api-tests/src/languages.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/languages.test.ts @@ -21,7 +21,7 @@ suite('languages namespace tests', () => { constructor() { super(new Range(0, 2, 0, 7), 'sonntag'); } - }; + } let diag1 = new Diagnostic(new Range(0, 0, 0, 5), 'montag'); let diag2 = new D2(); diff --git a/extensions/vscode-api-tests/src/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts similarity index 99% rename from extensions/vscode-api-tests/src/window.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts index 2a2f92c90e7..97bace17e73 100644 --- a/extensions/vscode-api-tests/src/window.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts @@ -8,7 +8,7 @@ import * as assert from 'assert'; import { workspace, window, commands, ViewColumn, TextEditorViewColumnChangeEvent, Uri, Selection, Position, CancellationTokenSource, TextEditorSelectionChangeKind } from 'vscode'; import { join } from 'path'; -import { closeAllEditors, pathEquals, createRandomFile } from './utils'; +import { closeAllEditors, pathEquals, createRandomFile } from '../utils'; suite('window namespace tests', () => { diff --git a/extensions/vscode-api-tests/src/workspace.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts similarity index 96% rename from extensions/vscode-api-tests/src/workspace.test.ts rename to extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts index d698bba1eab..87ec01ef072 100644 --- a/extensions/vscode-api-tests/src/workspace.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts @@ -7,10 +7,9 @@ import * as assert from 'assert'; import * as vscode from 'vscode'; -import { createRandomFile, deleteFile, closeAllEditors, pathEquals } from './utils'; +import { createRandomFile, deleteFile, closeAllEditors, pathEquals } from '../utils'; import { join, basename } from 'path'; import * as fs from 'fs'; -import { Uri } from 'vscode'; suite('workspace-namespace', () => { @@ -39,11 +38,27 @@ suite('workspace-namespace', () => { test('rootPath', () => { if (vscode.workspace.rootPath) { - assert.ok(pathEquals(vscode.workspace.rootPath, join(__dirname, '../testWorkspace'))); + assert.ok(pathEquals(vscode.workspace.rootPath, join(__dirname, '../../testWorkspace'))); } assert.throws(() => vscode.workspace.rootPath = 'farboo'); }); + test('workspaceFolders', () => { + if (vscode.workspace.workspaceFolders) { + assert.equal(vscode.workspace.workspaceFolders.length, 1); + assert.ok(pathEquals(vscode.workspace.workspaceFolders[0].uri.fsPath, join(__dirname, '../../testWorkspace'))); + } + }); + + test('getWorkspaceFolder', () => { + const folder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(join(__dirname, '../../testWorkspace/far.js'))); + assert.ok(!!folder); + + if (folder) { + assert.ok(pathEquals(folder.uri.fsPath, join(__dirname, '../../testWorkspace'))); + } + }); + test('openTextDocument', () => { let len = vscode.workspace.textDocuments.length; return vscode.workspace.openTextDocument(join(vscode.workspace.rootPath || '', './simple.txt')).then(doc => { @@ -536,7 +551,7 @@ suite('workspace-namespace', () => { test('applyEdit should fail when editing renamed from resource', async () => { const resource = await createRandomFile(); - const newResource = Uri.parse(resource.fsPath + '.1'); + const newResource = vscode.Uri.parse(resource.fsPath + '.1'); const edit = new vscode.WorkspaceEdit(); edit.renameResource(resource, newResource); try { diff --git a/extensions/vscode-api-tests/src/workspace-tests/index.ts b/extensions/vscode-api-tests/src/workspace-tests/index.ts new file mode 100644 index 00000000000..f65a756a8de --- /dev/null +++ b/extensions/vscode-api-tests/src/workspace-tests/index.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// +// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING +// +// This file is providing the test runner to use when running extension tests. +// By default the test runner in use is Mocha based. +// +// You can provide your own test runner if you want to override it by exporting +// a function run(testRoot: string, clb: (error:Error) => void) that the extension +// host can call to run the tests. The test runner is expected to use console.log +// to report the results back to the caller. When the tests are finished, return +// a possible error to the callback or null if none. + +const testRunner = require('vscode/lib/testrunner'); + +// You can directly control Mocha options by uncommenting the following lines +// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info +testRunner.configure({ + ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) + useColors: process.platform !== 'win32', // colored output from test results (only windows cannot handle) + timeout: 60000 +}); + +export = testRunner; diff --git a/extensions/vscode-api-tests/src/workspace-tests/workspace.test.ts b/extensions/vscode-api-tests/src/workspace-tests/workspace.test.ts new file mode 100644 index 00000000000..5453c2adec3 --- /dev/null +++ b/extensions/vscode-api-tests/src/workspace-tests/workspace.test.ts @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import * as assert from 'assert'; +import * as vscode from 'vscode'; +import { closeAllEditors, pathEquals } from '../utils'; +import { join } from 'path'; + +suite('workspace-namespace', () => { + + teardown(closeAllEditors); + + test('rootPath', () => { + if (vscode.workspace.rootPath) { + assert.ok(pathEquals(vscode.workspace.rootPath, join(__dirname, '../../testWorkspace'))); + } + }); + + test('workspaceFolders', () => { + if (vscode.workspace.workspaceFolders) { + assert.equal(vscode.workspace.workspaceFolders.length, 2); + assert.ok(pathEquals(vscode.workspace.workspaceFolders[0].uri.fsPath, join(__dirname, '../../testWorkspace'))); + assert.ok(pathEquals(vscode.workspace.workspaceFolders[1].uri.fsPath, join(__dirname, '../../testWorkspace2'))); + assert.ok(pathEquals(vscode.workspace.workspaceFolders[1].name, 'Test Workspace 2')); + } + }); + + test('getWorkspaceFolder', () => { + const folder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(join(__dirname, '../../testWorkspace2/far.js'))); + assert.ok(!!folder); + + if (folder) { + assert.ok(pathEquals(folder.uri.fsPath, join(__dirname, '../../testWorkspace2'))); + } + }); +}); diff --git a/extensions/vscode-api-tests/testWorkspace2/simple.txt b/extensions/vscode-api-tests/testWorkspace2/simple.txt new file mode 100644 index 00000000000..b5462829966 --- /dev/null +++ b/extensions/vscode-api-tests/testWorkspace2/simple.txt @@ -0,0 +1 @@ +Just a simple file... \ No newline at end of file diff --git a/extensions/vscode-api-tests/testworkspace.code-workspace b/extensions/vscode-api-tests/testworkspace.code-workspace new file mode 100644 index 00000000000..7e93fe23c42 --- /dev/null +++ b/extensions/vscode-api-tests/testworkspace.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "testWorkspace" + }, + { + "path": "testWorkspace2", + "name": "Test Workspace 2" + } + ] +} \ No newline at end of file diff --git a/scripts/test-integration.bat b/scripts/test-integration.bat index b9a95fa62c9..9a779446e2c 100644 --- a/scripts/test-integration.bat +++ b/scripts/test-integration.bat @@ -9,7 +9,10 @@ if not "%APPVEYOR%" == "" ( set VSCODEUSERDATADIR=%TMP%\vscodeuserfolder-%RANDOM%-%TIME:~6,5% :: Tests in the extension host -call .\scripts\code.bat %~dp0\..\extensions\vscode-api-tests\testWorkspace --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% +call .\scripts\code.bat %~dp0\..\extensions\vscode-api-tests\testWorkspace --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out\singlefolder-tests --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% +if %errorlevel% neq 0 exit /b %errorlevel% + +call .\scripts\code.bat %~dp0\..\extensions\vscode-api-tests\testWorkspace.code-workspace --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out\workspace-tests --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% if %errorlevel% neq 0 exit /b %errorlevel% call .\scripts\code.bat %~dp0\..\extensions\vscode-colorize-tests\test --extensionDevelopmentPath=%~dp0\..\extensions\vscode-colorize-tests --extensionTestsPath=%~dp0\..\extensions\vscode-colorize-tests\out --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% diff --git a/scripts/test-integration.sh b/scripts/test-integration.sh index 6159dc88aa9..ba10a8cfd69 100755 --- a/scripts/test-integration.sh +++ b/scripts/test-integration.sh @@ -13,7 +13,8 @@ fi cd $ROOT # Tests in the extension host -./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started +./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/singlefolder-tests --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started +./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace.code-workspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/workspace-tests --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started ./scripts/code.sh $ROOT/extensions/vscode-colorize-tests/test --extensionDevelopmentPath=$ROOT/extensions/vscode-colorize-tests --extensionTestsPath=$ROOT/extensions/vscode-colorize-tests/out --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started ./scripts/code.sh $ROOT/extensions/emmet/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/emmet --extensionTestsPath=$ROOT/extensions/emmet/out/test --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started