mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-01 05:51:32 +01:00
when running integration tests, use memfs instead of fs
This commit is contained in:
@@ -4,25 +4,35 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import { join } from 'path';
|
||||
import { MemFS } from './memfs';
|
||||
import * as assert from 'assert';
|
||||
|
||||
export function rndName() {
|
||||
return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10);
|
||||
}
|
||||
|
||||
export function createRandomFile(contents = '', dir: string = os.tmpdir(), ext = ''): Thenable<vscode.Uri> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tmpFile = join(dir, rndName() + ext);
|
||||
fs.writeFile(tmpFile, contents, (error) => {
|
||||
if (error) {
|
||||
return reject(error);
|
||||
}
|
||||
export const testFs = new MemFS();
|
||||
vscode.workspace.registerFileSystemProvider(testFs.scheme, testFs);
|
||||
|
||||
resolve(vscode.Uri.file(tmpFile));
|
||||
});
|
||||
});
|
||||
export async function createRandomFile(contents = '', dir: vscode.Uri | undefined = undefined, ext = ''): Promise<vscode.Uri> {
|
||||
let fakeFile: vscode.Uri;
|
||||
if (dir) {
|
||||
assert.equal(dir.scheme, testFs.scheme);
|
||||
fakeFile = dir.with({ path: dir.path + '/' + rndName() + ext });
|
||||
} else {
|
||||
fakeFile = vscode.Uri.parse(`${testFs.scheme}:/${rndName() + ext}`);
|
||||
}
|
||||
await testFs.writeFile(fakeFile, Buffer.from(contents), { create: true, overwrite: true });
|
||||
return fakeFile;
|
||||
}
|
||||
|
||||
export async function deleteFile(file: vscode.Uri): Promise<boolean> {
|
||||
try {
|
||||
await testFs.delete(file);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function pathEquals(path1: string, path2: string): boolean {
|
||||
@@ -34,30 +44,13 @@ export function pathEquals(path1: string, path2: string): boolean {
|
||||
return path1 === path2;
|
||||
}
|
||||
|
||||
export function deleteFile(file: vscode.Uri): Thenable<boolean> {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.unlink(file.fsPath, (err) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function closeAllEditors(): Thenable<any> {
|
||||
return vscode.commands.executeCommand('workbench.action.closeAllEditors');
|
||||
|
||||
}
|
||||
|
||||
export function disposeAll(disposables: vscode.Disposable[]) {
|
||||
while (disposables.length) {
|
||||
let item = disposables.pop();
|
||||
if (item) {
|
||||
item.dispose();
|
||||
}
|
||||
}
|
||||
vscode.Disposable.from(...disposables).dispose();
|
||||
}
|
||||
|
||||
export function conditionalTest(name: string, testCallback: (done: MochaDone) => void | Thenable<any>) {
|
||||
@@ -73,4 +66,4 @@ export function conditionalTest(name: string, testCallback: (done: MochaDone) =>
|
||||
|
||||
function isTestTypeActive(): boolean {
|
||||
return !!vscode.extensions.getExtension('vscode-resolver-test');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user