blob: 94ea980b75934c72bed5cb0691ea5e5492ff4022 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {assert} from 'chai';
import {afterEach, beforeEach, it} from 'mocha';
import sinon from 'sinon';
import * as SDK from '../../core/sdk/sdk.js';
import {renderElementIntoDOM} from '../../testing/DOMHelpers.js';
import {createTarget, describeWithEnvironment} from '../../testing/EnvironmentHelpers.js';
import * as UI from '../../ui/legacy/legacy.js';
import * as Elements from './elements.js';
describeWithEnvironment('LayersWidget', () => {
let node: SDK.DOMModel.DOMNode;
let cssModel: SDK.CSSModel.CSSModel;
beforeEach(() => {
const target = createTarget();
const domModel = target.model(SDK.DOMModel.DOMModel);
assert.exists(domModel);
cssModel = domModel.cssModel();
sinon.stub(cssModel, 'getRootLayer').resolves({name: '', order: 0});
node = new SDK.DOMModel.DOMNode(domModel);
sinon.stub(node, 'enclosingElementOrSelf').returns(node);
});
afterEach(() => {
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, null);
});
it('tracks the selected DOM node while shown', () => {
const addEventListenerSpy = sinon.spy(cssModel, 'addEventListener');
const widget = new Elements.LayersWidget.LayersWidget(sinon.stub());
renderElementIntoDOM(widget);
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
sinon.assert.calledOnce(addEventListenerSpy.withArgs(SDK.CSSModel.Events.StyleSheetChanged));
widget.detach();
});
it('stops tracking the selected DOM node when hidden', () => {
const addEventListenerSpy = sinon.spy(cssModel, 'addEventListener');
const widget = new Elements.LayersWidget.LayersWidget(sinon.stub());
renderElementIntoDOM(widget);
widget.detach();
renderElementIntoDOM(widget);
widget.detach();
UI.Context.Context.instance().setFlavor(SDK.DOMModel.DOMNode, node);
sinon.assert.notCalled(addEventListenerSpy.withArgs(SDK.CSSModel.Events.StyleSheetChanged));
});
});