Skip to content

Commit

Permalink
Make async tests more reliable (#1024)
Browse files Browse the repository at this point in the history
  • Loading branch information
dbaeumer committed Jul 11, 2022
1 parent 58749fe commit 60d4ecb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 7 deletions.
21 changes: 15 additions & 6 deletions client-node-tests/src/converter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,20 +78,29 @@ function assertDiagnosticCode(value: string | number | DiagnosticCode | undefine
}

suite('Async Array', () => {

suiteSetup(() => {
async.setTestMode();
});

suiteTeardown(() => {
async.clearTestMode();
});

test('map', async() => {
const ranges: proto.Range[] = new Array(10000);
for (let i = 0; i < ranges.length; i++) {
ranges[i] = proto.Range.create(i, i, i, i);
}
let yielded = 0;
const converted = await async.map(ranges, p2c.asRange, undefined, { yieldCallback: () => { yielded++; }});
const converted = await async.map(ranges, p2c.asRange, undefined, { yieldAfter: 2, yieldCallback: () => { yielded++; }});
ok(yielded > 0);
strictEqual(converted.length, ranges.length);
for (let i = 0; i < converted.length; i++) {
ok(converted[i] instanceof vscode.Range);
strictEqual(converted[i]?.start.line, i);
}
});
}).timeout(5000);

test('map async', async() => {
const ranges: proto.Range[] = new Array(5000);
Expand All @@ -105,14 +114,14 @@ suite('Async Array', () => {
resolve(p2c.asRange(item));
});
});
}, undefined, { yieldCallback: () => { yielded++; }});
}, undefined, { yieldAfter: 2, yieldCallback: () => { yielded++; }});
ok(yielded > 0);
strictEqual(converted.length, ranges.length);
for (let i = 0; i < converted.length; i++) {
ok(converted[i] instanceof vscode.Range);
strictEqual(converted[i]?.start.line, i);
}
});
}).timeout(5000);

test('forEach', async() => {
const ranges: proto.Range[] = new Array(7500);
Expand All @@ -124,10 +133,10 @@ suite('Async Array', () => {
await async.forEach(ranges, (item) => {
const codeRange = p2c.asRange(item);
sum += codeRange.start.line;
}, undefined, { yieldCallback: () => { yielded++; }});
}, undefined, { yieldAfter: 2, yieldCallback: () => { yielded++; }});
ok(yielded > 0);
strictEqual(sum, 28128750);
});
}).timeout(5000);
});

suite('Protocol Converter', () => {
Expand Down
15 changes: 14 additions & 1 deletion client/src/common/utils/async.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,18 @@ export class Semaphore<T = void> {
}
}

let $test: boolean = false;
export function setTestMode() {
$test = true;
}
export function clearTestMode() {
$test = false;
}

const defaultYieldTimeout: number = 15 /*ms*/;

declare const console: any;

class Timer {

private readonly yieldAfter: number;
Expand All @@ -167,14 +177,17 @@ class Timer {
private counterInterval: number;

constructor(yieldAfter: number = defaultYieldTimeout) {
this.yieldAfter = Math.max(yieldAfter, defaultYieldTimeout);
this.yieldAfter = $test === true ? Math.max(yieldAfter, 2) : Math.max(yieldAfter, defaultYieldTimeout);
this.startTime = Date.now();
this.counter = 0;
this.total = 0;
// start with a counter interval of 1.
this.counterInterval = 1;
}
public start() {
this.counter = 0;
this.total = 0;
this.counterInterval = 1;
this.startTime = Date.now();
}
public shouldYield(): boolean {
Expand Down

0 comments on commit 60d4ecb

Please sign in to comment.