[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});
+                             }));
+});