vscode/.eslint-plugin-local/tests/code-no-reader-after-await-test.ts

87 lines
2.3 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// Test file to verify the code-no-reader-after-await ESLint rule works correctly
import { observableValue, derived, autorun } from '../../src/vs/base/common/observable.js';
export function testValidUsage() {
const obs = observableValue('test', 0);
const validDerived = derived(reader => {
const value = obs.read(reader);
return value * 2;
});
autorun(reader => {
const value = validDerived.read(reader);
console.log('Value:', value);
});
}
export function testInvalidUsage() {
const obs = observableValue('test', 0);
const invalidDerived = derived(async reader => {
await Promise.resolve();
// eslint-disable-next-line local/code-no-reader-after-await
const value = obs.read(reader);
return value * 2;
});
autorun(async reader => {
await Promise.resolve();
// eslint-disable-next-line local/code-no-reader-after-await
const value = invalidDerived.read(reader);
console.log('Value:', value);
});
autorun(async reader => {
await Promise.resolve();
// eslint-disable-next-line local/code-no-reader-after-await
const value = reader.readObservable(obs);
console.log('Value:', value);
});
}
export function testComplexCases() {
const obs = observableValue('test', 0);
derived(async reader => {
const initial = obs.read(reader);
if (initial > 0) {
await Promise.resolve();
}
// eslint-disable-next-line local/code-no-reader-after-await
const final = obs.read(reader);
return final;
});
autorun(async reader => {
try {
await Promise.resolve();
} catch (e) {
} finally {
// eslint-disable-next-line local/code-no-reader-after-await
const value = obs.read(reader);
console.log(value);
}
});
}
export function testValidComplexCases() {
const obs = observableValue('test', 0);
derived(async reader => {
const value1 = obs.read(reader);
const value2 = reader.readObservable(obs);
const result = value1 + value2;
await Promise.resolve(result);
return result;
});
}