blob: d83fddd7afc1871b8064631d63c1b6b1e5357b70 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// 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 {createTarget, stubNoopSettings} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {createViewFunctionStub} from '../../testing/ViewFunctionHelpers.js';
import * as Elements from './elements.js';
describeWithMockConnection('DOMTreeWidget', () => {
let target: SDK.Target.Target;
beforeEach(() => {
stubNoopSettings();
target = createTarget();
});
describe('node highlighting', () => {
function createDomTree() {
const elementsTreeOutline = new Elements.ElementsTreeOutline.ElementsTreeOutline();
const view = createViewFunctionStub(Elements.ElementsTreeOutline.DOMTreeWidget, {
elementsTreeOutline,
alreadyExpandedParentTreeElement: null,
highlightedTreeElement: null,
isUpdatingHighlights: false,
});
const domTree = new Elements.ElementsTreeOutline.DOMTreeWidget(undefined, view);
domTree.performUpdate();
domTree.modelAdded(target.model(SDK.DOMModel.DOMModel) as SDK.DOMModel.DOMModel);
return {view};
}
const highlightsNodeOnRequestEvent = (inScope: boolean) => async () => {
const {view} = createDomTree();
SDK.TargetManager.TargetManager.instance().setScopeTarget(inScope ? target : null);
const model = target.model(SDK.OverlayModel.OverlayModel);
assert.exists(model);
const node = new SDK.DOMModel.DOMNode(target.model(SDK.DOMModel.DOMModel) as SDK.DOMModel.DOMModel);
assert.isNull(view.input.currentHighlightedNode);
const viewCallCount = view.callCount;
model.dispatchEventToListeners(SDK.OverlayModel.Events.HIGHLIGHT_NODE_REQUESTED, node);
if (inScope) {
await view.nextInput;
assert.strictEqual(view.input.currentHighlightedNode, node);
sinon.assert.callCount(view, viewCallCount + 1);
} else {
assert.isNull(view.input.currentHighlightedNode);
sinon.assert.callCount(view, viewCallCount);
}
};
it('highlights node on in scope request event', highlightsNodeOnRequestEvent(true));
it('does not highlight node on out of scope request event', highlightsNodeOnRequestEvent(false));
});
});