From aa5064d4fd47e3e0b6cd177f0a69cbf23c06d90e Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 8 Jan 2021 17:06:54 +0100 Subject: [PATCH] Lift some tests to browser (#114041) * :lipstick: node tests * lift some tests to browser * fix tests * fix tests --- .../parts/storage/test/node/storage.test.ts | 115 ++++-------------- .../base/test/{node => common}/buffer.test.ts | 3 +- .../test/{node => common}/console.test.ts | 2 +- .../base/test/{node => common}/glob.test.ts | 0 .../base/test/{node => common}/path.test.ts | 8 +- src/vs/base/test/node/keytar.test.ts | 42 +++---- src/vs/base/test/node/port.test.ts | 5 +- src/vs/base/test/node/zip/zip.test.ts | 11 +- .../debugANSIHandling.test.ts | 0 .../terminalEnvironment.test.ts | 0 .../extensionService.test.ts | 0 .../browserKeyboardMapper.test.ts | 2 +- .../keybindingIO.test.ts | 0 13 files changed, 57 insertions(+), 131 deletions(-) rename src/vs/base/test/{node => common}/buffer.test.ts (98%) rename src/vs/base/test/{node => common}/console.test.ts (99%) rename src/vs/base/test/{node => common}/glob.test.ts (100%) rename src/vs/base/test/{node => common}/path.test.ts (99%) rename src/vs/workbench/contrib/debug/test/{electron-browser => browser}/debugANSIHandling.test.ts (100%) rename src/vs/workbench/contrib/terminal/test/{node => common}/terminalEnvironment.test.ts (100%) rename src/vs/workbench/services/extensions/test/{electron-browser => browser}/extensionService.test.ts (100%) rename src/vs/workbench/services/keybinding/test/{electron-browser => browser}/browserKeyboardMapper.test.ts (99%) rename src/vs/workbench/services/keybinding/test/{electron-browser => browser}/keybindingIO.test.ts (100%) diff --git a/src/vs/base/parts/storage/test/node/storage.test.ts b/src/vs/base/parts/storage/test/node/storage.test.ts index 8be2408b199..d557b117e35 100644 --- a/src/vs/base/parts/storage/test/node/storage.test.ts +++ b/src/vs/base/parts/storage/test/node/storage.test.ts @@ -23,10 +23,19 @@ flakySuite('Storage Library', function () { return join(tmpdir(), 'vsctests', id, 'storage2', id); } - test('basics', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); + let storageDir: string; + + setup(function () { + storageDir = uniqueStorageDir(); + + return mkdirp(storageDir); + }); + teardown(function () { + return rimraf(storageDir); + }); + + test('basics', async () => { const storage = new Storage(new SQLiteStorageDatabase(join(storageDir, 'storage.db'))); await storage.init(); @@ -100,12 +109,9 @@ flakySuite('Storage Library', function () { equal(deletePromiseResolved, true); await storage.close(); - await rimraf(storageDir); }); test('external changes', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); class TestSQLiteStorageDatabase extends SQLiteStorageDatabase { private readonly _onDidChangeItemsExternal = new Emitter(); @@ -155,13 +161,9 @@ flakySuite('Storage Library', function () { equal(changes.size, 0); await storage.close(); - await rimraf(storageDir); }); test('close flushes data', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); - let storage = new Storage(new SQLiteStorageDatabase(join(storageDir, 'storage.db'))); await storage.init(); @@ -213,13 +215,9 @@ flakySuite('Storage Library', function () { ok(!storage.get('bar')); await storage.close(); - await rimraf(storageDir); }); test('conflicting updates', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); - let storage = new Storage(new SQLiteStorageDatabase(join(storageDir, 'storage.db'))); await storage.init(); @@ -259,13 +257,9 @@ flakySuite('Storage Library', function () { ok(setAndDeletePromiseResolved); await storage.close(); - await rimraf(storageDir); }); test('corrupt DB recovers', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); - const storageFile = join(storageDir, 'storage.db'); let storage = new Storage(new SQLiteStorageDatabase(storageFile)); @@ -289,7 +283,6 @@ flakySuite('Storage Library', function () { equal(storage.get('foo'), 'bar'); await storage.close(); - await rimraf(storageDir); }); }); @@ -308,6 +301,18 @@ flakySuite('SQLite Storage Library', function () { return set; } + let storageDir: string; + + setup(function () { + storageDir = uniqueStorageDir(); + + return mkdirp(storageDir); + }); + + teardown(function () { + return rimraf(storageDir); + }); + async function testDBBasics(path: string, logError?: (error: Error | string) => void) { let options!: ISQLiteStorageDatabaseOptions; if (logError) { @@ -381,31 +386,15 @@ flakySuite('SQLite Storage Library', function () { } test('basics', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - await testDBBasics(join(storageDir, 'storage.db')); - - await rimraf(storageDir); }); test('basics (open multiple times)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - await testDBBasics(join(storageDir, 'storage.db')); await testDBBasics(join(storageDir, 'storage.db')); - - await rimraf(storageDir); }); test('basics (corrupt DB falls back to empty DB)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - const corruptDBPath = join(storageDir, 'broken.db'); await writeFile(corruptDBPath, 'This is a broken DB'); @@ -415,15 +404,9 @@ flakySuite('SQLite Storage Library', function () { }); ok(expectedError); - - await rimraf(storageDir); }); test('basics (corrupt DB restores from previous backup)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - const storagePath = join(storageDir, 'storage.db'); let storage = new SQLiteStorageDatabase(storagePath); @@ -453,15 +436,9 @@ flakySuite('SQLite Storage Library', function () { }); equal(recoveryCalled, false); - - await rimraf(storageDir); }); test('basics (corrupt DB falls back to empty DB if backup is corrupt)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - const storagePath = join(storageDir, 'storage.db'); let storage = new SQLiteStorageDatabase(storagePath); @@ -482,21 +459,9 @@ flakySuite('SQLite Storage Library', function () { equal(storedItems.size, 0); await testDBBasics(storagePath); - - await rimraf(storageDir); }); - test('basics (DB that becomes corrupt during runtime stores all state from cache on close)', async () => { - if (isWindows) { - await Promise.resolve(); // Windows will fail to write to open DB due to locking - - return; - } - - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - + (isWindows ? test.skip /* Windows will fail to write to open DB due to locking */ : test)('basics (DB that becomes corrupt during runtime stores all state from cache on close)', async () => { const storagePath = join(storageDir, 'storage.db'); let storage = new SQLiteStorageDatabase(storagePath); @@ -550,15 +515,9 @@ flakySuite('SQLite Storage Library', function () { }); equal(recoveryCalled, false); - - await rimraf(storageDir); }); test('real world example', async function () { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - let storage = new SQLiteStorageDatabase(join(storageDir, 'storage.db')); const items1 = new Map(); @@ -639,15 +598,9 @@ flakySuite('SQLite Storage Library', function () { equal(storedItems.size, items1.size + items2.size + items3.size); await storage.close(); - - await rimraf(storageDir); }); test('very large item value', async function () { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - let storage = new SQLiteStorageDatabase(join(storageDir, 'storage.db')); const items = new Map(); @@ -692,13 +645,9 @@ flakySuite('SQLite Storage Library', function () { ok(!storedItems.get('super.large.string')); await storage.close(); - - await rimraf(storageDir); }); test('multiple concurrent writes execute in sequence', async () => { - const storageDir = uniqueStorageDir(); - await mkdirp(storageDir); class TestStorage extends Storage { getStorage(): IStorageDatabase { @@ -749,15 +698,9 @@ flakySuite('SQLite Storage Library', function () { equal(items.get('some/foo3/path'), 'some/bar/path'); await storage.close(); - - await rimraf(storageDir); }); test('lots of INSERT & DELETE (below inline max)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - const storage = new SQLiteStorageDatabase(join(storageDir, 'storage.db')); const items = new Map(); @@ -781,15 +724,9 @@ flakySuite('SQLite Storage Library', function () { equal(storedItems.size, 0); await storage.close(); - - await rimraf(storageDir); }); test('lots of INSERT & DELETE (above inline max)', async () => { - const storageDir = uniqueStorageDir(); - - await mkdirp(storageDir); - const storage = new SQLiteStorageDatabase(join(storageDir, 'storage.db')); const items = new Map(); @@ -813,7 +750,5 @@ flakySuite('SQLite Storage Library', function () { equal(storedItems.size, 0); await storage.close(); - - await rimraf(storageDir); }); }); diff --git a/src/vs/base/test/node/buffer.test.ts b/src/vs/base/test/common/buffer.test.ts similarity index 98% rename from src/vs/base/test/node/buffer.test.ts rename to src/vs/base/test/common/buffer.test.ts index 4c7d0ba3a2f..a5a2bccb436 100644 --- a/src/vs/base/test/node/buffer.test.ts +++ b/src/vs/base/test/common/buffer.test.ts @@ -7,6 +7,7 @@ import * as assert from 'assert'; import { VSBuffer, bufferToReadable, readableToBuffer, bufferToStream, streamToBuffer, newWriteableBufferStream, bufferedStreamToBuffer } from 'vs/base/common/buffer'; import { timeout } from 'vs/base/common/async'; import { peekStream } from 'vs/base/common/stream'; +import { isWeb } from 'vs/base/common/platform'; suite('Buffer', () => { @@ -373,7 +374,7 @@ suite('Buffer', () => { assert.equal(errors.length, 0); }); - test('Performance issue with VSBuffer#slice #76076', function () { + (isWeb ? test.skip : test)('Performance issue with VSBuffer#slice #76076', function () { // TODO@alexdima this test seems to fail in web // Buffer#slice creates a view { const buff = Buffer.from([10, 20, 30, 40]); diff --git a/src/vs/base/test/node/console.test.ts b/src/vs/base/test/common/console.test.ts similarity index 99% rename from src/vs/base/test/node/console.test.ts rename to src/vs/base/test/common/console.test.ts index e7a243a2d42..178c303732e 100644 --- a/src/vs/base/test/node/console.test.ts +++ b/src/vs/base/test/common/console.test.ts @@ -45,4 +45,4 @@ suite('Console', () => { assert.equal(frame.line, 18); assert.equal(frame.column, 17); }); -}); \ No newline at end of file +}); diff --git a/src/vs/base/test/node/glob.test.ts b/src/vs/base/test/common/glob.test.ts similarity index 100% rename from src/vs/base/test/node/glob.test.ts rename to src/vs/base/test/common/glob.test.ts diff --git a/src/vs/base/test/node/path.test.ts b/src/vs/base/test/common/path.test.ts similarity index 99% rename from src/vs/base/test/node/path.test.ts rename to src/vs/base/test/common/path.test.ts index 3150f8d6094..d74ce9f7c3f 100644 --- a/src/vs/base/test/node/path.test.ts +++ b/src/vs/base/test/common/path.test.ts @@ -29,10 +29,11 @@ import * as assert from 'assert'; import * as path from 'vs/base/common/path'; -import { isWindows } from 'vs/base/common/platform'; +import { isWeb, isWindows } from 'vs/base/common/platform'; import * as process from 'vs/base/common/process'; suite('Paths (Node Implementation)', () => { + const __filename = 'path.test.js'; test('join', () => { const failures = [] as string[]; const backslashRE = /\\/g; @@ -175,9 +176,6 @@ suite('Paths (Node Implementation)', () => { }); test('dirname', () => { - assert.strictEqual(path.dirname(path.normalize(__filename)).substr(-9), - isWindows ? 'test\\node' : 'test/node'); - assert.strictEqual(path.posix.dirname('/a/b/'), '/a'); assert.strictEqual(path.posix.dirname('/a/b'), '/a'); assert.strictEqual(path.posix.dirname('/a'), '/'); @@ -362,7 +360,7 @@ suite('Paths (Node Implementation)', () => { assert.equal(path.extname('far.boo/boo'), ''); }); - test('resolve', () => { + (isWeb && isWindows ? test.skip : test)('resolve', () => { // TODO@sbatten fails on windows & browser only const failures = [] as string[]; const slashRE = /\//g; const backslashRE = /\\/g; diff --git a/src/vs/base/test/node/keytar.test.ts b/src/vs/base/test/node/keytar.test.ts index c27a3286bb1..1a5a7b41529 100644 --- a/src/vs/base/test/node/keytar.test.ts +++ b/src/vs/base/test/node/keytar.test.ts @@ -2,36 +2,30 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ + import * as assert from 'assert'; -import * as platform from 'vs/base/common/platform'; +import { isLinux } from 'vs/base/common/platform'; suite('Keytar', () => { - test('loads and is functional', function (done) { - if (platform.isLinux) { - // Skip test due to set up issue with Travis. - done(); - return; - } - (async () => { - const keytar = await import('keytar'); - const name = `VSCode Test ${Math.floor(Math.random() * 1e9)}`; + (isLinux ? test.skip : test)('loads and is functional', async () => { // TODO@RMacfarlane test seems to fail on Linux (Error: Unknown or unsupported transport 'disabled' for address 'disabled:') + const keytar = await import('keytar'); + const name = `VSCode Test ${Math.floor(Math.random() * 1e9)}`; + try { + await keytar.setPassword(name, 'foo', 'bar'); + assert.equal(await keytar.findPassword(name), 'bar'); + assert.equal((await keytar.findCredentials(name)).length, 1); + assert.equal(await keytar.getPassword(name, 'foo'), 'bar'); + await keytar.deletePassword(name, 'foo'); + assert.equal(await keytar.getPassword(name, 'foo'), undefined); + } catch (err) { + // try to clean up try { - await keytar.setPassword(name, 'foo', 'bar'); - assert.equal(await keytar.findPassword(name), 'bar'); - assert.equal((await keytar.findCredentials(name)).length, 1); - assert.equal(await keytar.getPassword(name, 'foo'), 'bar'); await keytar.deletePassword(name, 'foo'); - assert.equal(await keytar.getPassword(name, 'foo'), undefined); - } catch (err) { - // try to clean up - try { - await keytar.deletePassword(name, 'foo'); - } finally { - // eslint-disable-next-line no-unsafe-finally - throw err; - } + } finally { + // eslint-disable-next-line no-unsafe-finally + throw err; } - })().then(done, done); + } }); }); diff --git a/src/vs/base/test/node/port.test.ts b/src/vs/base/test/node/port.test.ts index 3ec46e37102..120044651b5 100644 --- a/src/vs/base/test/node/port.test.ts +++ b/src/vs/base/test/node/port.test.ts @@ -9,10 +9,7 @@ import * as ports from 'vs/base/node/ports'; import { flakySuite } from 'vs/base/test/node/testUtils'; flakySuite('Ports', () => { - test('Finds a free port (no timeout)', function (done) { - if (process.env['VSCODE_PID']) { - return done(); // this test fails when run from within VS Code - } + (process.env['VSCODE_PID'] ? test.skip /* this test fails when run from within VS Code */ : test)('Finds a free port (no timeout)', function (done) { // get an initial freeport >= 7000 ports.findFreePort(7000, 100, 300000).then(initialPort => { diff --git a/src/vs/base/test/node/zip/zip.test.ts b/src/vs/base/test/node/zip/zip.test.ts index f79bddaa98c..9be5ae76acd 100644 --- a/src/vs/base/test/node/zip/zip.test.ts +++ b/src/vs/base/test/node/zip/zip.test.ts @@ -16,13 +16,14 @@ const fixtures = getPathFromAmdModule(require, './fixtures'); suite('Zip', () => { - test('extract should handle directories', () => { + test('extract should handle directories', async () => { const fixture = path.join(fixtures, 'extract.zip'); const target = path.join(os.tmpdir(), generateUuid()); - return createCancelablePromise(token => extract(fixture, target, {}, token) - .then(() => exists(path.join(target, 'extension'))) - .then(exists => assert(exists)) - .then(() => rimraf(target))); + await createCancelablePromise(token => extract(fixture, target, {}, token)); + const doesExist = await exists(path.join(target, 'extension')); + assert(doesExist); + + return rimraf(target); }); }); diff --git a/src/vs/workbench/contrib/debug/test/electron-browser/debugANSIHandling.test.ts b/src/vs/workbench/contrib/debug/test/browser/debugANSIHandling.test.ts similarity index 100% rename from src/vs/workbench/contrib/debug/test/electron-browser/debugANSIHandling.test.ts rename to src/vs/workbench/contrib/debug/test/browser/debugANSIHandling.test.ts diff --git a/src/vs/workbench/contrib/terminal/test/node/terminalEnvironment.test.ts b/src/vs/workbench/contrib/terminal/test/common/terminalEnvironment.test.ts similarity index 100% rename from src/vs/workbench/contrib/terminal/test/node/terminalEnvironment.test.ts rename to src/vs/workbench/contrib/terminal/test/common/terminalEnvironment.test.ts diff --git a/src/vs/workbench/services/extensions/test/electron-browser/extensionService.test.ts b/src/vs/workbench/services/extensions/test/browser/extensionService.test.ts similarity index 100% rename from src/vs/workbench/services/extensions/test/electron-browser/extensionService.test.ts rename to src/vs/workbench/services/extensions/test/browser/extensionService.test.ts diff --git a/src/vs/workbench/services/keybinding/test/electron-browser/browserKeyboardMapper.test.ts b/src/vs/workbench/services/keybinding/test/browser/browserKeyboardMapper.test.ts similarity index 99% rename from src/vs/workbench/services/keybinding/test/electron-browser/browserKeyboardMapper.test.ts rename to src/vs/workbench/services/keybinding/test/browser/browserKeyboardMapper.test.ts index 320ddbada35..ec5c902be90 100644 --- a/src/vs/workbench/services/keybinding/test/electron-browser/browserKeyboardMapper.test.ts +++ b/src/vs/workbench/services/keybinding/test/browser/browserKeyboardMapper.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import 'vs/workbench/services/keybinding/browser/keyboardLayouts/en.darwin'; // 15% +import 'vs/workbench/services/keybinding/browser/keyboardLayouts/en.darwin'; import 'vs/workbench/services/keybinding/browser/keyboardLayouts/de.darwin'; import { KeyboardLayoutContribution } from 'vs/workbench/services/keybinding/browser/keyboardLayouts/_.contribution'; import { BrowserKeyboardMapperFactoryBase } from 'vs/workbench/services/keybinding/browser/keyboardLayoutService'; diff --git a/src/vs/workbench/services/keybinding/test/electron-browser/keybindingIO.test.ts b/src/vs/workbench/services/keybinding/test/browser/keybindingIO.test.ts similarity index 100% rename from src/vs/workbench/services/keybinding/test/electron-browser/keybindingIO.test.ts rename to src/vs/workbench/services/keybinding/test/browser/keybindingIO.test.ts -- GitLab