mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 11:38:51 +01:00
174 lines
3.0 KiB
TypeScript
174 lines
3.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* 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 { BoundModelReferenceCollection } from 'vs/workbench/api/browser/mainThreadDocuments';
|
|
import { timeout } from 'vs/base/common/async';
|
|
import { URI } from 'vs/base/common/uri';
|
|
import { extUri } from 'vs/base/common/resources';
|
|
|
|
suite('BoundModelReferenceCollection', function () {
|
|
|
|
let col: BoundModelReferenceCollection;
|
|
|
|
setup(function () {
|
|
col = new BoundModelReferenceCollection(extUri, 15, 75);
|
|
});
|
|
|
|
teardown(function () {
|
|
col.dispose();
|
|
});
|
|
|
|
test('max age', async function () {
|
|
|
|
let didDispose = false;
|
|
|
|
col.add(
|
|
URI.parse('test://farboo'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
didDispose = true;
|
|
}
|
|
});
|
|
|
|
await timeout(30);
|
|
assert.strictEqual(didDispose, true);
|
|
});
|
|
|
|
test('max size', function () {
|
|
|
|
const disposed: number[] = [];
|
|
|
|
col.add(
|
|
URI.parse('test://farboo'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(0);
|
|
}
|
|
}, 6);
|
|
|
|
col.add(
|
|
URI.parse('test://boofar'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(1);
|
|
}
|
|
}, 6);
|
|
|
|
col.add(
|
|
URI.parse('test://xxxxxxx'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(2);
|
|
}
|
|
}, 70);
|
|
|
|
assert.deepStrictEqual(disposed, [0, 1]);
|
|
});
|
|
|
|
test('max count', function () {
|
|
col.dispose();
|
|
col = new BoundModelReferenceCollection(extUri, 10000, 10000, 2);
|
|
|
|
const disposed: number[] = [];
|
|
|
|
col.add(
|
|
URI.parse('test://xxxxxxx'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(0);
|
|
}
|
|
}
|
|
);
|
|
col.add(
|
|
URI.parse('test://xxxxxxx'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(1);
|
|
}
|
|
}
|
|
);
|
|
col.add(
|
|
URI.parse('test://xxxxxxx'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(2);
|
|
}
|
|
}
|
|
);
|
|
|
|
assert.deepStrictEqual(disposed, [0]);
|
|
});
|
|
|
|
test('dispose uri', function () {
|
|
|
|
let disposed: number[] = [];
|
|
|
|
col.add(
|
|
URI.parse('test:///farboo'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(0);
|
|
}
|
|
});
|
|
|
|
col.add(
|
|
URI.parse('test:///boofar'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(1);
|
|
}
|
|
});
|
|
|
|
col.add(
|
|
URI.parse('test:///boo/far1'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(2);
|
|
}
|
|
});
|
|
|
|
col.add(
|
|
URI.parse('test:///boo/far2'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(3);
|
|
}
|
|
});
|
|
|
|
col.add(
|
|
URI.parse('test:///boo1/far'),
|
|
{
|
|
object: {},
|
|
dispose() {
|
|
disposed.push(4);
|
|
}
|
|
});
|
|
|
|
col.remove(URI.parse('test:///unknown'));
|
|
assert.strictEqual(disposed.length, 0);
|
|
|
|
col.remove(URI.parse('test:///farboo'));
|
|
assert.deepStrictEqual(disposed, [0]);
|
|
|
|
disposed = [];
|
|
|
|
col.remove(URI.parse('test:///boo'));
|
|
assert.deepStrictEqual(disposed, [2, 3]);
|
|
});
|
|
|
|
});
|