[test] Move more of `front_end/panels/` tests next to the source.
DISABLE_THIRD_PARTY_CHECK=Moving unit tests.
Bug: b:325903709, b:323795674, b:326214132
Change-Id: I70aced8ca3f7024f3a3a6b191e3451fb8c7674c9
Doc: http://go/chrome-devtools:move-unit-tests-design
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5309878
Reviewed-by: Simon Zünd <[email protected]>
Commit-Queue: Benedikt Meurer <[email protected]>
Auto-Submit: Benedikt Meurer <[email protected]>
diff --git a/front_end/panels/sources/CoveragePlugin.test.ts b/front_end/panels/sources/CoveragePlugin.test.ts
new file mode 100644
index 0000000..1ae9b4e
--- /dev/null
+++ b/front_end/panels/sources/CoveragePlugin.test.ts
@@ -0,0 +1,87 @@
+// 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 {createTarget} from '../../../test/unittests/front_end/helpers/EnvironmentHelpers.js';
+import {describeWithMockConnection} from '../../../test/unittests/front_end/helpers/MockConnection.js';
+import {createContentProviderUISourceCode} from '../../../test/unittests/front_end/helpers/UISourceCodeHelpers.js';
+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 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';
+
+describeWithMockConnection('CoveragePlugin', () => {
+ const tests = (targetFactory: () => SDK.Target.Target) => {
+ 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(() => {
+ target = targetFactory();
+ 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>{});
+ const [toolbarItem] = coveragePlugin.rightToolbarItems();
+ assert.strictEqual('Show Details', toolbarItem.element.title);
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+
+ it('updates stats', async () => {
+ const coveragePlugin =
+ new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
+ const [toolbarItem] = coveragePlugin.rightToolbarItems();
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+
+ coverageInfo.addToSizes(10, 2);
+ assert.strictEqual(
+ 'Coverage: 63.3%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+
+ it('resets stats', async () => {
+ const coveragePlugin =
+ new Sources.CoveragePlugin.CoveragePlugin(uiSourceCode, <SourceFrame.SourceFrame.Transformer>{});
+ const [toolbarItem] = coveragePlugin.rightToolbarItems();
+ assert.strictEqual(
+ 'Coverage: 32.1%', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+
+ model.dispatchEventToListeners(Coverage.CoverageModel.Events.CoverageReset);
+ assert.strictEqual('Click to show Coverage Panel', toolbarItem.element.title);
+ assert.strictEqual('Coverage: n/a', toolbarItem.element.querySelector('.toolbar-text:not(.hidden)')?.textContent);
+ });
+ };
+ describe('without tab taget', () => tests(() => createTarget()));
+ describe('with tab taget', () => tests(() => {
+ const tabTarget = createTarget({type: SDK.Target.Type.Tab});
+ createTarget({parentTarget: tabTarget, subtype: 'prerender'});
+ return createTarget({parentTarget: tabTarget});
+ }));
+});