blob: 19197776997aebc4c3a303cdd8114b0185ceeae8 [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';
Benedikt Meurerb78f8fb2024-02-21 14:56:0112import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
13import * as Coverage from '../coverage/coverage.js';
14
15import * as Sources from './sources.js';
Danil Somsikov9920f9f2022-11-02 14:31:1716
Danil Somsikov9920f9f2022-11-02 14:31:1717describeWithMockConnection('CoveragePlugin', () => {
Danil Somsikov52577c82024-05-07 14:23:5718 let target: SDK.Target.Target;
19 let uiSourceCode: Workspace.UISourceCode.UISourceCode;
20 let model: Coverage.CoverageModel.CoverageModel;
21 let coverageInfo: Coverage.CoverageModel.URLCoverageInfo;
22 const URL = 'test.js' as Platform.DevToolsPath.UrlString;
Danil Somsikov9920f9f2022-11-02 14:31:1723
Danil Somsikov52577c82024-05-07 14:23:5724 beforeEach(() => {
25 const tabTarget = createTarget({type: SDK.Target.Type.Tab});
26 createTarget({parentTarget: tabTarget, subtype: 'prerender'});
27 target = createTarget({parentTarget: tabTarget});
28 const workspace = Workspace.Workspace.WorkspaceImpl.instance();
29 const targetManager = SDK.TargetManager.TargetManager.instance();
30 const resourceMapping = new Bindings.ResourceMapping.ResourceMapping(targetManager, workspace);
31 Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance({
32 forceNew: true,
33 resourceMapping,
34 targetManager,
35 });
36 Bindings.CSSWorkspaceBinding.CSSWorkspaceBinding.instance({
37 forceNew: true,
38 resourceMapping,
39 targetManager,
Danil Somsikov9920f9f2022-11-02 14:31:1740 });
41
Danil Somsikov52577c82024-05-07 14:23:5742 model = target.model(Coverage.CoverageModel.CoverageModel) as Coverage.CoverageModel.CoverageModel;
43 coverageInfo = new Coverage.CoverageModel.URLCoverageInfo(URL);
44 coverageInfo.addToSizes(9, 28);
45 sinon.stub(model, 'getCoverageForUrl').withArgs(URL).returns(coverageInfo);
46 ({uiSourceCode} = createContentProviderUISourceCode({url: URL, mimeType: 'text/javascript'}));
47 });
Danil Somsikov9920f9f2022-11-02 14:31:1748
Danil Somsikov52577c82024-05-07 14:23:5749 it('shows stats', async () => {
50 const coveragePlugin =
51 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
52 const [toolbarItem] = coveragePlugin.rightToolbarItems();
53 assert.strictEqual('Show Details', toolbarItem.element.title);
54 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
55 });
Danil Somsikov9920f9f2022-11-02 14:31:1756
Danil Somsikov52577c82024-05-07 14:23:5757 it('updates stats', async () => {
58 const coveragePlugin =
59 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
60 const [toolbarItem] = coveragePlugin.rightToolbarItems();
61 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
Danil Somsikov9920f9f2022-11-02 14:31:1762
Danil Somsikov52577c82024-05-07 14:23:5763 coverageInfo.addToSizes(10, 2);
64 assert.strictEqual('Coverage: 63.3%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
65 });
Danil Somsikov9920f9f2022-11-02 14:31:1766
Danil Somsikov52577c82024-05-07 14:23:5767 it('resets stats', async () => {
68 const coveragePlugin =
69 new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
70 const [toolbarItem] = coveragePlugin.rightToolbarItems();
71 assert.strictEqual('Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
72
73 model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset);
74 assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.title);
75 assert.strictEqual('Coverage: n/a', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
76 });
Danil Somsikov9920f9f2022-11-02 14:31:1777});