blob: 0d970706f1ab9e1f61fc4d0f7eb9cac34849ec26 [file] [log] [blame]
// Copyright 2022 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 Platform from '../../core/platform/platform.js';
import * as SDK from '../../core/sdk/sdk.js';
import * as Bindings from '../../models/bindings/bindings.js';
import * as Workspace from '../../models/workspace/workspace.js';
import {createTarget} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {createContentProviderUISourceCode} from '../../testing/UISourceCodeHelpers.js';
import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js';
import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
import * as Coverage from '../coverage/coverage.js';
import * as Sources from './sources.js';
const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
describeWithMockConnection('CoveragePlugin', () => {
let target: SDK.Target.Target;
let uiSourceCode: Workspace.UISourceCode.UISourceCode;
let model: Coverage.CoverageModel.CoverageModel;
let coverageInfo: Coverage.CoverageModel.URLCoverageInfo;
const URL = 'test.js' as Platform.DevToolsPath.UrlString;
beforeEach(() => {
const tabTarget = createTarget({type: SDK.Target.Type.Tab});
createTarget({parentTarget: tabTarget, subtype: 'prerender'});
target = createTarget({parentTarget: tabTarget});
const workspace = Workspace.Workspace.WorkspaceImpl.instance();
const targetManager = SDK.TargetManager.TargetManager.instance();
const resourceMapping = new Bindings.ResourceMapping.ResourceMapping(targetManager, workspace);
Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({
forceNew: true,
resourceMapping,
targetManager,
});
Bindings.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({
forceNew: true,
resourceMapping,
targetManager,
});
model = target.model(Coverage.CoverageModel.CoverageModel) as Coverage.CoverageModel.CoverageModel;
coverageInfo = new Coverage.CoverageModel.URLCoverageInfo(URL);
coverageInfo.addToSizes(9, 28);
sinon.stub(model, 'getCoverageForUrl').withArgs(URL).returns(coverageInfo);
({uiSourceCode} = createContentProviderUISourceCode({url: URL, mimeType: 'text/javascript'}));
});
it('shows stats', async () => {
const coveragePlugin =
new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
await coordinator.done({waitForWork: true});
const [toolbarItem] = coveragePlugin.rightToolbarItems();
assert.strictEqual('Show Details', toolbarItem.element.shadowRoot?.querySelector('button')?.title);
assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
});
it('updates stats', async () => {
const coveragePlugin =
new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
await coordinator.done({waitForWork: true});
const [toolbarItem] = coveragePlugin.rightToolbarItems();
assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
coverageInfo.addToSizes(10, 2);
assert.strictEqual('Coverage: 63.3%', toolbarItem.element.textContent);
});
it('resets stats', async () => {
const coveragePlugin =
new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
await coordinator.done({waitForWork: true});
const [toolbarItem] = coveragePlugin.rightToolbarItems();
assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset);
assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.ariaLabel);
assert.strictEqual('Coverage: n/a', toolbarItem.element.textContent);
});
});