blob: 0d970706f1ab9e1f61fc4d0f7eb9cac34849ec26 [file] [log] [blame]
Danil Somsikov9920f9f2022-11-02 14:31:171// Copyright 2022 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Benedikt Meurerb78f8fb2024-02-21 14:56:015import type * as Platform from '../../core/platform/platform.js';
6import * as SDK from '../../core/sdk/sdk.js';
7import * as Bindings from '../../models/bindings/bindings.js';
8import * as Workspace from '../../models/workspace/workspace.js';
Benedikt Meurerd1f04bf2024-02-26 14:49:549import {createTarget} from '../../testing/EnvironmentHelpers.js';
10import {describeWithMockConnection} from '../../testing/MockConnection.js';
11import {createContentProviderUISourceCode} from '../../testing/UISourceCodeHelpers.js';
Kateryna Prokopenko17cba892024-07-26 13:33:5612import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js';
Benedikt Meurerb78f8fb2024-02-21 14:56:0113import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
14import * as Coverage from '../coverage/coverage.js';
15
16import * as Sources from './sources.js';
Danil Somsikov9920f9f2022-11-02 14:31:1717
Kateryna Prokopenko17cba892024-07-26 13:33:5618const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance();
19
Danil Somsikov9920f9f2022-11-02 14:31:1720describeWithMockConnection('CoveragePlugin', () => {
Danil Somsikov52577c82024-05-07 14:23:5721 let target: SDK.Target.Target;
22 let uiSourceCode: Workspace.UISourceCode.UISourceCode;
23 let model: Coverage.CoverageModel.CoverageModel;
24 let coverageInfo: Coverage.CoverageModel.URLCoverageInfo;
25 const URL = 'test.js' as Platform.DevToolsPath.UrlString;
Danil Somsikov9920f9f2022-11-02 14:31:1726
Danil Somsikov52577c82024-05-07 14:23:5727 beforeEach(() => {
28 const tabTarget = createTarget({type: SDK.Target.Type.Tab});
29 createTarget({parentTarget: tabTarget, subtype: 'prerender'});
30 target = createTarget({parentTarget: tabTarget});
31 const workspace = Workspace.Workspace.WorkspaceImpl.instance();
32 const targetManager = SDK.TargetManager.TargetManager.instance();
33 const resourceMapping = new Bindings.ResourceMapping.ResourceMapping(targetManager, workspace);
34 Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({
35 forceNew: true,
36 resourceMapping,
37 targetManager,
38 });
39 Bindings.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({
40 forceNew: true,
41 resourceMapping,
42 targetManager,
Danil Somsikov9920f9f2022-11-02 14:31:1743 });
44
Danil Somsikov52577c82024-05-07 14:23:5745 model = target.model(Coverage.CoverageModel.CoverageModel) as Coverage.CoverageModel.CoverageModel;
46 coverageInfo = new Coverage.CoverageModel.URLCoverageInfo(URL);
47 coverageInfo.addToSizes(9, 28);
48 sinon.stub(model, 'getCoverageForUrl').withArgs(URL).returns(coverageInfo);
49 ({uiSourceCode} = createContentProviderUISourceCode({url: URL, mimeType: 'text/javascript'}));
50 });
Danil Somsikov9920f9f2022-11-02 14:31:1751
Danil Somsikov52577c82024-05-07 14:23:5752 it('shows stats', async () => {
53 const coveragePlugin =
54 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
Kateryna Prokopenko17cba892024-07-26 13:33:5655 await coordinator.done({waitForWork: true});
Danil Somsikov52577c82024-05-07 14:23:5756 const [toolbarItem] = coveragePlugin.rightToolbarItems();
Kateryna Prokopenko17cba892024-07-26 13:33:5657
58 assert.strictEqual('Show Details', toolbarItem.element.shadowRoot?.querySelector('button')?.title);
59 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
Danil Somsikov52577c82024-05-07 14:23:5760 });
Danil Somsikov9920f9f2022-11-02 14:31:1761
Danil Somsikov52577c82024-05-07 14:23:5762 it('updates stats', async () => {
63 const coveragePlugin =
64 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
Kateryna Prokopenko17cba892024-07-26 13:33:5665 await coordinator.done({waitForWork: true});
Danil Somsikov52577c82024-05-07 14:23:5766 const [toolbarItem] = coveragePlugin.rightToolbarItems();
Kateryna Prokopenko17cba892024-07-26 13:33:5667 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
Danil Somsikov9920f9f2022-11-02 14:31:1768
Danil Somsikov52577c82024-05-07 14:23:5769 coverageInfo.addToSizes(10, 2);
Kateryna Prokopenko17cba892024-07-26 13:33:5670 assert.strictEqual('Coverage: 63.3%', toolbarItem.element.textContent);
Danil Somsikov52577c82024-05-07 14:23:5771 });
Danil Somsikov9920f9f2022-11-02 14:31:1772
Danil Somsikov52577c82024-05-07 14:23:5773 it('resets stats', async () => {
74 const coveragePlugin =
75 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
Kateryna Prokopenko17cba892024-07-26 13:33:5676 await coordinator.done({waitForWork: true});
Danil Somsikov52577c82024-05-07 14:23:5777 const [toolbarItem] = coveragePlugin.rightToolbarItems();
Kateryna Prokopenko17cba892024-07-26 13:33:5678 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent);
Danil Somsikov52577c82024-05-07 14:23:5779
80 model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset);
Kateryna Prokopenko17cba892024-07-26 13:33:5681 assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.ariaLabel);
82 assert.strictEqual('Coverage: n/a', toolbarItem.element.textContent);
Danil Somsikov52577c82024-05-07 14:23:5783 });
Danil Somsikov9920f9f2022-11-02 14:31:1784});