UNPKG

chrome-devtools-frontend

Version:
131 lines (111 loc) 4.74 kB
// 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 { describeWithEnvironment, registerNoopActions, } from '../../testing/EnvironmentHelpers.js'; import {TraceLoader} from '../../testing/TraceLoader.js'; import * as UI from '../../ui/legacy/legacy.js'; import * as Timeline from './timeline.js'; describeWithEnvironment('TimelineHistoryManager', function() { let historyManager: Timeline.TimelineHistoryManager.TimelineHistoryManager; beforeEach(() => { registerNoopActions(['timeline.show-history']); historyManager = new Timeline.TimelineHistoryManager.TimelineHistoryManager(); }); afterEach(() => { UI.ActionRegistry.ActionRegistry.reset(); }); it('shows the dropdown including a landing page link', async function() { assert.strictEqual(historyManager.button().element.innerText!, 'Live metrics'); const {parsedTrace, metadata} = await TraceLoader.traceEngine(this, 'web-dev-with-commit.json.gz'); historyManager.addRecording( { data: { parsedTraceIndex: 1, type: 'TRACE_INDEX', }, filmStripForPreview: null, parsedTrace, metadata, }, ); assert.strictEqual(historyManager.button().element.innerText!, 'web.dev #1'); const showPromise = historyManager.showHistoryDropDown(); const glassPane = document.querySelector('div[data-devtools-glass-pane]'); const dropdown = glassPane?.shadowRoot?.querySelector('.widget')?.shadowRoot?.querySelector<HTMLElement>('.drop-down'); assert.isOk(dropdown); const menuItemText = Array.from(dropdown.querySelectorAll<HTMLDivElement>('[role="menuitem"]'), elem => { return elem.innerText.replaceAll('\n', ''); }); assert.deepEqual(menuItemText, ['Live metrics', 'web.dev1× slowdown, No throttling']); // Cancel the dropdown, which also resolves the show() promise, meaning we // don't leak it into other tests. historyManager.cancelIfShowing(); await showPromise; }); it('uses Node specific landing page title', async function() { historyManager = new Timeline.TimelineHistoryManager.TimelineHistoryManager(undefined, true); assert.strictEqual(historyManager.button().element.innerText!, 'New recording'); const {parsedTrace, metadata} = await TraceLoader.traceEngine(this, 'web-dev-with-commit.json.gz'); historyManager.addRecording( { data: { parsedTraceIndex: 1, type: 'TRACE_INDEX', }, filmStripForPreview: null, parsedTrace, metadata, }, ); const showPromise = historyManager.showHistoryDropDown(); const glassPane = document.querySelector('div[data-devtools-glass-pane]'); const dropdown = glassPane?.shadowRoot?.querySelector('.widget')?.shadowRoot?.querySelector<HTMLElement>('.drop-down'); assert.isOk(dropdown); const menuItemText = Array.from(dropdown.querySelectorAll<HTMLDivElement>('[role="menuitem"]'), elem => { return elem.innerText.replaceAll('\n', ''); }); assert.deepEqual(menuItemText, ['New recording', 'web.dev1× slowdown, No throttling']); // Cancel the dropdown, which also resolves the show() promise, meaning we // don't leak it into other tests. historyManager.cancelIfShowing(); await showPromise; }); it('can select from multiple parsed data objects', async function() { // Add two parsed data objects to the history manager. const {parsedTrace: trace1Data, metadata: metadata1} = await TraceLoader.traceEngine(this, 'slow-interaction-button-click.json.gz'); historyManager.addRecording( { data: { parsedTraceIndex: 1, type: 'TRACE_INDEX', }, filmStripForPreview: null, parsedTrace: trace1Data, metadata: metadata1, }, ); const {parsedTrace: trace2Data, metadata: metadata2} = await TraceLoader.traceEngine(this, 'slow-interaction-keydown.json.gz'); historyManager.addRecording({ data: { parsedTraceIndex: 2, type: 'TRACE_INDEX', }, filmStripForPreview: null, parsedTrace: trace2Data, metadata: metadata2, }); // Make sure the correct model is returned when // using the history manager to navigate between trace files.. const previousRecording = historyManager.navigate(1); assert.strictEqual(previousRecording?.parsedTraceIndex, 1); const nextRecording = historyManager.navigate(-1); assert.strictEqual(nextRecording?.parsedTraceIndex, 2); }); });