Files
react-native-devtools-frontend/front_end/models/source_map_scopes/ScopeTreeCache.test.ts
T
Nikolay Vitkov 1f7b38eb44 [Cleanup] Remove PromiseWithResolvers Polyfill
Proposal is stage 4
https://github.com/tc39/proposal-promise-with-resolvers?tab=readme-ov-file

Shipped as part of Chrome 119

Bug: none
Change-Id: Ia61c2710ad8dc3c1c57ea00ed5f187a77cc3eaad
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5823908
Auto-Submit: Nikolay Vitkov <nvitkov@chromium.org>
Commit-Queue: Philip Pfaffe <pfaffe@chromium.org>
Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org>
Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
2024-08-28 15:55:11 +00:00

64 lines
2.7 KiB
TypeScript

// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as SDK from '../../core/sdk/sdk.js';
import * as Formatter from '../formatter/formatter.js';
import * as SourceMapScopes from '../source_map_scopes/source_map_scopes.js';
import * as TextUtils from '../text_utils/text_utils.js';
describe('ScopeTreeCache', () => {
describe('scopeTreeForScript', () => {
const {scopeTreeForScript} = SourceMapScopes.ScopeTreeCache;
let javaScriptScopeTreeStub: sinon.SinonStub;
let script: SDK.Script.Script;
beforeEach(() => {
javaScriptScopeTreeStub = sinon.stub(Formatter.FormatterWorkerPool.formatterWorkerPool(), 'javaScriptScopeTree');
script = sinon.createStubInstance(
SDK.Script.Script,
{requestContentData: Promise.resolve(new TextUtils.ContentData.ContentData('', false, 'text/javascript'))});
});
it('requests the scope tree once for a script', async () => {
const scopeTree = {start: 0, end: 20, variables: [], children: []};
javaScriptScopeTreeStub.returns(Promise.resolve(scopeTree));
const actualScopeTree1 = await scopeTreeForScript(script);
const actualScopeTree2 = await scopeTreeForScript(script);
assert.isTrue(javaScriptScopeTreeStub.calledOnce);
assert.strictEqual(actualScopeTree1, scopeTree);
assert.strictEqual(actualScopeTree2, scopeTree);
});
it('requests the scope tree once for a script that fails to parse', async () => {
javaScriptScopeTreeStub.returns(null);
const actualScopeTree1 = await scopeTreeForScript(script);
const actualScopeTree2 = await scopeTreeForScript(script);
assert.isTrue(javaScriptScopeTreeStub.calledOnce);
assert.isNull(actualScopeTree1);
assert.isNull(actualScopeTree2);
});
it('requests the scope tree once for a script, even if the first request is not done yet', async () => {
const scopeTree = {start: 0, end: 20, variables: [], children: []};
const {promise: scopeTreePromise, resolve: scopeTreeResolve} =
Promise.withResolvers<Formatter.FormatterWorkerPool.ScopeTreeNode|null>();
javaScriptScopeTreeStub.returns(scopeTreePromise);
const scopeTreePromise1 = scopeTreeForScript(script);
const scopeTreePromise2 = scopeTreeForScript(script);
scopeTreeResolve(scopeTree);
const [actualScopeTree1, actualScopeTree2] = await Promise.all([scopeTreePromise1, scopeTreePromise2]);
assert.isTrue(javaScriptScopeTreeStub.calledOnce);
assert.strictEqual(actualScopeTree1, scopeTree);
assert.strictEqual(actualScopeTree2, scopeTree);
});
});
});