UNPKG

chrome-devtools-frontend

Version:
85 lines (72 loc) 3.62 kB
// Copyright 2024 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 type * as Common from '../../../../core/common/common.js'; import * as Trace from '../../../../models/trace/trace.js'; import {renderElementIntoDOM} from '../../../../testing/DOMHelpers.js'; import {describeWithEnvironment} from '../../../../testing/EnvironmentHelpers.js'; import * as RenderCoordinator from '../../../../ui/components/render_coordinator/render_coordinator.js'; import * as Lit from '../../../../ui/lit/lit.js'; import type {TimelineOverlay} from '../../overlays/OverlaysImpl.js'; import * as Insights from './insights.js'; const {html} = Lit; describeWithEnvironment('BaseInsightComponent', () => { const {BaseInsightComponent} = Insights.BaseInsightComponent; class TestInsightComponent extends BaseInsightComponent<Trace.Insights.Types.InsightModel<{}, {}>> { override internalName = 'test-insight'; override createOverlays(): TimelineOverlay[] { return []; } override renderContent(): Lit.LitTemplate { return html`<div>test content</div>`; } } customElements.define('test-insight-component', TestInsightComponent); describe('sidebar insight component rendering', () => { it('renders insight title even when not active', async () => { const component = new TestInsightComponent(); component.selected = false; component.model = { strings: {}, title: 'LCP by Phase' as Common.UIString.LocalizedString, description: 'some description' as Common.UIString.LocalizedString, category: Trace.Insights.Types.InsightCategory.ALL, state: 'fail', }; renderElementIntoDOM(component); await RenderCoordinator.done(); assert.isNotNull(component.shadowRoot); const titleElement = component.shadowRoot.querySelector<HTMLElement>('.insight-title'); assert.isNotNull(titleElement); const descElement = component.shadowRoot.querySelector<HTMLElement>('.insight-description'); assert.isNull(descElement); const contentElement = component.shadowRoot.querySelector<HTMLElement>('.insight-content'); assert.isNull(contentElement); assert.deepEqual(titleElement.textContent, 'LCP by Phase'); }); it('renders title, description and content when toggled', async () => { const component = new TestInsightComponent(); component.selected = true; component.model = { strings: {}, title: 'LCP by Phase' as Common.UIString.LocalizedString, description: 'some description' as Common.UIString.LocalizedString, category: Trace.Insights.Types.InsightCategory.ALL, state: 'fail', }; renderElementIntoDOM(component); await RenderCoordinator.done(); assert.isNotNull(component.shadowRoot); const titleElement = component.shadowRoot.querySelector<HTMLElement>('.insight-title'); assert.isNotNull(titleElement); assert.deepEqual(titleElement.textContent, 'LCP by Phase'); const descElement = component.shadowRoot.querySelector<HTMLElement>('.insight-description'); assert.isNotNull(descElement); // It's in the markdown component. assert.strictEqual(descElement.children[0].shadowRoot?.textContent?.trim(), 'some description'); const contentElement = component.shadowRoot.querySelector<HTMLElement>('.insight-content'); assert.isNotNull(contentElement); assert.strictEqual(contentElement.textContent, 'test content'); }); }); });