/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /** * Tests if the waterfall is properly built after finishing a recording. */ const { SIMPLE_URL } = require("devtools/client/performance/test/helpers/urls"); const { initPerformanceInNewTab, teardownToolboxAndRemoveTab, } = require("devtools/client/performance/test/helpers/panel-utils"); const { startRecording, stopRecording, waitForOverviewRenderedWithMarkers, } = require("devtools/client/performance/test/helpers/actions"); const { once, } = require("devtools/client/performance/test/helpers/event-utils"); add_task(async function() { const { panel } = await initPerformanceInNewTab({ url: SIMPLE_URL, win: window, }); const { $, $$, EVENTS, WaterfallView } = panel.panelWin; await startRecording(panel); ok(true, "Recording has started."); // Ensure overview is rendering and some markers were received. await waitForOverviewRenderedWithMarkers(panel); await stopRecording(panel); ok(true, "Recording has ended."); // Test the header container. ok($(".waterfall-header"), "A header container should have been created."); // Test the header sidebar (left). ok( $(".waterfall-header > .waterfall-sidebar"), "A header sidebar node should have been created." ); // Test the header ticks (right). ok( $(".waterfall-header-ticks"), "A header ticks node should have been created." ); ok( $$(".waterfall-header-ticks > .waterfall-header-tick").length > 0, "Some header tick labels should have been created inside the tick node." ); // Test the markers sidebar (left). ok( $$(".waterfall-tree-item > .waterfall-sidebar").length, "Some marker sidebar nodes should have been created." ); ok( $$(".waterfall-tree-item > .waterfall-sidebar > .waterfall-marker-bullet") .length, "Some marker color bullets should have been created inside the sidebar." ); ok( $$(".waterfall-tree-item > .waterfall-sidebar > .waterfall-marker-name") .length, "Some marker name labels should have been created inside the sidebar." ); // Test the markers waterfall (right). ok( $$(".waterfall-tree-item > .waterfall-marker").length, "Some marker waterfall nodes should have been created." ); ok( $$(".waterfall-tree-item > .waterfall-marker .waterfall-marker-bar").length, "Some marker color bars should have been created inside the waterfall." ); // Test the sidebar. const detailsView = WaterfallView.details; // Make sure the bounds are up to date. WaterfallView._recalculateBounds(); const parentWidthBefore = $("#waterfall-view").getBoundingClientRect().width; const sidebarWidthBefore = $(".waterfall-sidebar").getBoundingClientRect() .width; const detailsWidthBefore = $("#waterfall-details").getBoundingClientRect() .width; ok( detailsView.hidden, "The details view in the waterfall view is hidden by default." ); is(detailsWidthBefore, 0, "The details view width should be 0 when hidden."); is( WaterfallView.waterfallWidth, parentWidthBefore - sidebarWidthBefore - WaterfallView.WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS, "The waterfall width is correct (1)." ); const waterfallRerendered = once(WaterfallView, EVENTS.UI_WATERFALL_RENDERED); $$(".waterfall-tree-item")[0].click(); await waterfallRerendered; const parentWidthAfter = $("#waterfall-view").getBoundingClientRect().width; const sidebarWidthAfter = $(".waterfall-sidebar").getBoundingClientRect() .width; const detailsWidthAfter = $("#waterfall-details").getBoundingClientRect() .width; ok( !detailsView.hidden, "The details view in the waterfall view is now visible." ); is( parentWidthBefore, parentWidthAfter, "The parent view's width should not have changed." ); is( sidebarWidthBefore, sidebarWidthAfter, "The sidebar view's width should not have changed." ); isnot( detailsWidthAfter, 0, "The details view width should not be 0 when visible." ); is( WaterfallView.waterfallWidth, parentWidthAfter - sidebarWidthAfter - detailsWidthAfter - WaterfallView.WATERFALL_MARKER_SIDEBAR_SAFE_BOUNDS, "The waterfall width is correct (2)." ); await teardownToolboxAndRemoveTab(panel); });