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'; |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 12 | import * as Coordinator from '../../ui/components/render_coordinator/render_coordinator.js'; |
Benedikt Meurer | b78f8fb | 2024-02-21 14:56:01 | [diff] [blame] | 13 | import type * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js'; |
| 14 | import * as Coverage from '../coverage/coverage.js'; |
| 15 | |
| 16 | import * as Sources from './sources.js'; |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 17 | |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 18 | const coordinator = Coordinator.RenderCoordinator.RenderCoordinator.instance(); |
| 19 | |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 20 | describeWithMockConnection('CoveragePlugin', () => { |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 21 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 26 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 27 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 43 | }); |
| 44 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 45 | 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 Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 51 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 52 | it('shows stats', async () => { |
| 53 | const coveragePlugin = |
| 54 | new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{}); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 55 | await coordinator.done({waitForWork: true}); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 56 | const [toolbarItem] = coveragePlugin.rightToolbarItems(); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 57 | |
| 58 | assert.strictEqual('Show Details', toolbarItem.element.shadowRoot?.querySelector('button')?.title); |
| 59 | assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 60 | }); |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 61 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 62 | it('updates stats', async () => { |
| 63 | const coveragePlugin = |
| 64 | new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{}); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 65 | await coordinator.done({waitForWork: true}); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 66 | const [toolbarItem] = coveragePlugin.rightToolbarItems(); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 67 | assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent); |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 68 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 69 | coverageInfo.addToSizes(10, 2); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 70 | assert.strictEqual('Coverage: 63.3%', toolbarItem.element.textContent); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 71 | }); |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 72 | |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 73 | it('resets stats', async () => { |
| 74 | const coveragePlugin = |
| 75 | new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{}); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 76 | await coordinator.done({waitForWork: true}); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 77 | const [toolbarItem] = coveragePlugin.rightToolbarItems(); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 78 | assert.strictEqual('Coverage: 32.1%', toolbarItem.element.textContent); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 79 | |
| 80 | model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset); |
Kateryna Prokopenko | 17cba89 | 2024-07-26 13:33:56 | [diff] [blame^] | 81 | assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.ariaLabel); |
| 82 | assert.strictEqual('Coverage: n/a', toolbarItem.element.textContent); |
Danil Somsikov | 52577c8 | 2024-05-07 14:23:57 | [diff] [blame] | 83 | }); |
Danil Somsikov | 9920f9f | 2022-11-02 14:31:17 | [diff] [blame] | 84 | }); |