Files
react-native-devtools-frontend/front_end/models/source_map_scopes/ScopeTreeCache.test.ts
T
Simon Zünd 35f8d67915 Replace 'requestContent' with 'requestContentData' in most unit tests
Now that every ContentProvider is actually a SafeContentProvider, we
can start migrating to the safer API.

R=pfaffe@chromium.org

Bug: 342529015
Change-Id: I7b3ce53846bb85d447f0a707409235814bed9661
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5578160
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
2024-05-31 06:58:39 +00:00

65 lines
2.8 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 Platform from '../../core/platform/platform.js';
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} =
Platform.PromiseUtilities.promiseWithResolvers<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);
});
});
});