mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-25 17:23:10 -05:00
Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973 (#6381)
* Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973 * disable strict null check
This commit is contained in:
405
src/vs/base/test/node/buffer.test.ts
Normal file
405
src/vs/base/test/node/buffer.test.ts
Normal file
@@ -0,0 +1,405 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { VSBuffer, bufferToReadable, readableToBuffer, bufferToStream, streamToBuffer, writeableBufferStream } from 'vs/base/common/buffer';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
|
||||
suite('Buffer', () => {
|
||||
|
||||
test('issue #71993 - VSBuffer#toString returns numbers', () => {
|
||||
const data = new Uint8Array([1, 2, 3, 'h'.charCodeAt(0), 'i'.charCodeAt(0), 4, 5]).buffer;
|
||||
const buffer = VSBuffer.wrap(new Uint8Array(data, 3, 2));
|
||||
assert.deepEqual(buffer.toString(), 'hi');
|
||||
});
|
||||
|
||||
test('bufferToReadable / readableToBuffer', () => {
|
||||
const content = 'Hello World';
|
||||
const readable = bufferToReadable(VSBuffer.fromString(content));
|
||||
|
||||
assert.equal(readableToBuffer(readable).toString(), content);
|
||||
});
|
||||
|
||||
test('bufferToStream / streamToBuffer', async () => {
|
||||
const content = 'Hello World';
|
||||
const stream = bufferToStream(VSBuffer.fromString(content));
|
||||
|
||||
assert.equal((await streamToBuffer(stream)).toString(), content);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - basics (no error)', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
assert.equal(chunks.length, 2);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(chunks[1].toString(), 'World');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - basics (error)', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(new Error());
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 1);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - buffers data when no listener', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'HelloWorld');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - buffers errors when no listener', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.error(new Error());
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
stream.end();
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 1);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - buffers end when no listener', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'HelloWorld');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - nothing happens after end()', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
let dataCalledAfterEnd = false;
|
||||
stream.on('data', data => {
|
||||
dataCalledAfterEnd = true;
|
||||
});
|
||||
|
||||
let errorCalledAfterEnd = false;
|
||||
stream.on('error', error => {
|
||||
errorCalledAfterEnd = true;
|
||||
});
|
||||
|
||||
let endCalledAfterEnd = false;
|
||||
stream.on('end', () => {
|
||||
endCalledAfterEnd = true;
|
||||
});
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.error(new Error());
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
assert.equal(dataCalledAfterEnd, false);
|
||||
assert.equal(errorCalledAfterEnd, false);
|
||||
assert.equal(endCalledAfterEnd, false);
|
||||
|
||||
assert.equal(chunks.length, 2);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(chunks[1].toString(), 'World');
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - pause/resume (simple)', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
stream.pause();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
assert.equal(chunks.length, 0);
|
||||
assert.equal(errors.length, 0);
|
||||
assert.equal(ended, false);
|
||||
|
||||
stream.resume();
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'HelloWorld');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - pause/resume (pause after first write)', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
|
||||
stream.pause();
|
||||
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(errors.length, 0);
|
||||
assert.equal(ended, false);
|
||||
|
||||
stream.resume();
|
||||
|
||||
assert.equal(chunks.length, 2);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(chunks[1].toString(), 'World');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - pause/resume (error)', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
stream.pause();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(new Error());
|
||||
|
||||
assert.equal(chunks.length, 0);
|
||||
assert.equal(ended, false);
|
||||
assert.equal(errors.length, 0);
|
||||
|
||||
stream.resume();
|
||||
|
||||
assert.equal(chunks.length, 1);
|
||||
assert.equal(chunks[0].toString(), 'Hello');
|
||||
assert.equal(ended, true);
|
||||
assert.equal(errors.length, 1);
|
||||
});
|
||||
|
||||
test('bufferWriteableStream - destroy', async () => {
|
||||
const stream = writeableBufferStream();
|
||||
|
||||
let chunks: VSBuffer[] = [];
|
||||
stream.on('data', data => {
|
||||
chunks.push(data);
|
||||
});
|
||||
|
||||
let ended = false;
|
||||
stream.on('end', () => {
|
||||
ended = true;
|
||||
});
|
||||
|
||||
let errors: Error[] = [];
|
||||
stream.on('error', error => {
|
||||
errors.push(error);
|
||||
});
|
||||
|
||||
stream.destroy();
|
||||
|
||||
await timeout(0);
|
||||
stream.write(VSBuffer.fromString('Hello'));
|
||||
await timeout(0);
|
||||
stream.end(VSBuffer.fromString('World'));
|
||||
|
||||
assert.equal(chunks.length, 0);
|
||||
assert.equal(ended, false);
|
||||
assert.equal(errors.length, 0);
|
||||
});
|
||||
|
||||
test('Performance issue with VSBuffer#slice #76076', function () {
|
||||
// Buffer#slice creates a view
|
||||
{
|
||||
const buff = Buffer.from([10, 20, 30, 40]);
|
||||
const b2 = buff.slice(1, 3);
|
||||
assert.equal(buff[1], 20);
|
||||
assert.equal(b2[0], 20);
|
||||
|
||||
buff[1] = 17; // modify buff AND b2
|
||||
assert.equal(buff[1], 17);
|
||||
assert.equal(b2[0], 17);
|
||||
}
|
||||
|
||||
// TypedArray#slice creates a copy
|
||||
{
|
||||
const unit = new Uint8Array([10, 20, 30, 40]);
|
||||
const u2 = unit.slice(1, 3);
|
||||
assert.equal(unit[1], 20);
|
||||
assert.equal(u2[0], 20);
|
||||
|
||||
unit[1] = 17; // modify unit, NOT b2
|
||||
assert.equal(unit[1], 17);
|
||||
assert.equal(u2[0], 20);
|
||||
}
|
||||
|
||||
// TypedArray#subarray creates a view
|
||||
{
|
||||
const unit = new Uint8Array([10, 20, 30, 40]);
|
||||
const u2 = unit.subarray(1, 3);
|
||||
assert.equal(unit[1], 20);
|
||||
assert.equal(u2[0], 20);
|
||||
|
||||
unit[1] = 17; // modify unit AND b2
|
||||
assert.equal(unit[1], 17);
|
||||
assert.equal(u2[0], 17);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -3,8 +3,8 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import * as assert from 'assert';
|
||||
import * as getmac from 'getmac';
|
||||
import { getMachineId } from 'vs/base/node/id';
|
||||
import { getMac } from 'vs/base/node/macAddress';
|
||||
|
||||
suite('ID', () => {
|
||||
|
||||
@@ -16,9 +16,7 @@ suite('ID', () => {
|
||||
});
|
||||
|
||||
test('getMac', () => {
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
getmac.getMac((err, macAddress) => err ? reject(err) : resolve(macAddress));
|
||||
}).then(macAddress => {
|
||||
return getMac().then(macAddress => {
|
||||
assert.ok(/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(macAddress), `Expected a MAC address, got: ${macAddress}`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -16,6 +16,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||
import { isWindows, isLinux } from 'vs/base/common/platform';
|
||||
import { canNormalize } from 'vs/base/common/normalization';
|
||||
import { VSBuffer } from 'vs/base/common/buffer';
|
||||
import { join } from 'path';
|
||||
|
||||
const chunkSize = 64 * 1024;
|
||||
const readError = 'Error while reading';
|
||||
@@ -386,6 +387,31 @@ suite('PFS', () => {
|
||||
}
|
||||
});
|
||||
|
||||
test('readdirWithFileTypes', async () => {
|
||||
if (canNormalize && typeof process.versions['electron'] !== 'undefined' /* needs electron */) {
|
||||
const id = uuid.generateUuid();
|
||||
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
|
||||
const testDir = join(parentDir, 'pfs', id);
|
||||
|
||||
const newDir = path.join(testDir, 'öäü');
|
||||
await pfs.mkdirp(newDir, 493);
|
||||
|
||||
await pfs.writeFile(join(testDir, 'somefile.txt'), 'contents');
|
||||
|
||||
assert.ok(fs.existsSync(newDir));
|
||||
|
||||
const children = await pfs.readdirWithFileTypes(testDir);
|
||||
|
||||
assert.equal(children.some(n => n.name === 'öäü'), true); // Mac always converts to NFD, so
|
||||
assert.equal(children.some(n => n.isDirectory()), true);
|
||||
|
||||
assert.equal(children.some(n => n.name === 'somefile.txt'), true);
|
||||
assert.equal(children.some(n => n.isFile()), true);
|
||||
|
||||
await pfs.rimraf(parentDir);
|
||||
}
|
||||
});
|
||||
|
||||
test('writeFile (string)', async () => {
|
||||
const smallData = 'Hello World';
|
||||
const bigData = (new Array(100 * 1024)).join('Large String\n');
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,40 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------
|
||||
The base color for this template is #5c87b2. If you'd like
|
||||
to use a different color start by replacing all instances of
|
||||
#5c87b2 with your new color.
|
||||
----------------------------------------------------------*/
|
||||
body
|
||||
{
|
||||
background-color: #5c87b2;
|
||||
font-size: .75em;
|
||||
font-family: Segoe UI, Verdana, Helvetica, Sans-Serif;
|
||||
margin: 8px;
|
||||
padding: 0;
|
||||
color: #696969;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6
|
||||
{
|
||||
color: #000;
|
||||
font-size: 40px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
textarea
|
||||
{
|
||||
font-family: Consolas
|
||||
}
|
||||
|
||||
#results
|
||||
{
|
||||
margin-top: 2em;
|
||||
margin-left: 2em;
|
||||
color: black;
|
||||
font-size: medium;
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as assert from 'assert';
|
||||
|
||||
import * as stream from 'vs/base/node/stream';
|
||||
import { getPathFromAmdModule } from 'vs/base/common/amd';
|
||||
|
||||
suite('Stream', () => {
|
||||
test('readToMatchingString - ANSI', async () => {
|
||||
const file = getPathFromAmdModule(require, './fixtures/file.css');
|
||||
|
||||
const result = await stream.readToMatchingString(file, '\n', 10, 100);
|
||||
|
||||
// \r may be present on Windows
|
||||
assert.equal(result!.replace('\r', ''), '/*---------------------------------------------------------------------------------------------');
|
||||
});
|
||||
|
||||
test('readToMatchingString - empty', async () => {
|
||||
const file = getPathFromAmdModule(require, './fixtures/empty.txt');
|
||||
|
||||
const result = await stream.readToMatchingString(file, '\n', 10, 100);
|
||||
assert.equal(result, null);
|
||||
});
|
||||
});
|
||||
@@ -16,8 +16,8 @@ export interface ITestFileResult {
|
||||
export function testFile(folder: string, file: string): Promise<ITestFileResult> {
|
||||
const id = generateUuid();
|
||||
const parentDir = join(tmpdir(), 'vsctests', id);
|
||||
const newDir = join(parentDir, 'config', id);
|
||||
const testFile = join(newDir, 'config.json');
|
||||
const newDir = join(parentDir, folder, id);
|
||||
const testFile = join(newDir, file);
|
||||
|
||||
return mkdirp(newDir, 493).then(() => {
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user