Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 1 | // 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 Meurer | b78f8fb | 2024-02-21 14:56:01 | [diff] [blame] | 5 | import type * as Platform from '../../core/platform/platform.js'; |
| 6 | import * as SDK from '../../core/sdk/sdk.js'; |
| 7 | import * as Bindings from '../../models/bindings/bindings.js'; |
| 8 | import * as Workspace from '../../models/workspace/workspace.js'; |
Benedikt Meurer | d1f04bf | 2024-02-26 14:49:54 | [diff] [blame] | 9 | import {createTarget} from '../../testing/EnvironmentHelpers.js'; |
| 10 | import {describeWithMockConnection} from '../../testing/MockConnection.js'; |
| 11 | import {createContentProviderUISourceCode} from '../../testing/UISourceCodeHelpers.js'; |
Benedikt Meurer | b78f8fb | 2024-02-21 14:56:01 | [diff] [blame] | 12 | import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js'; |
| 13 | import * as Coverage from '../coverage/coverage.js'; |
| 14 | |
| 15 | import * as Sources from './sources.js'; |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 16 | |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 17 | describeWithMockConnection('CoveragePlugin', () => { |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 18 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 23 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 24 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 40 | }); |
| 41 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 42 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 48 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 49 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 56 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 57 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 62 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 63 | coverageInfo.addToSizes(10, 2); |
| 64 | assert.strictEqual('Coverage: 63.3%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent); |
| 65 | }); |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 66 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame^] | 67 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 77 | }); |