Migrate from karma to web-test-runner

We want to get rid of the final remnants of karma from gerrit core.
The recommended way to run tests is with web-test-runner.

Change-Id: I2a30d9193f91e41b56a17dde9f402da077dd71c2
diff --git a/owners/web/BUILD b/owners/web/BUILD
index 56ab697..6d9430a 100644
--- a/owners/web/BUILD
+++ b/owners/web/BUILD
@@ -1,5 +1,5 @@
 load("@npm//@bazel/typescript:index.bzl", "ts_config", "ts_project")
-load("//tools/bzl:js.bzl", "gerrit_js_bundle", "karma_test")
+load("//tools/bzl:js.bzl", "gerrit_js_bundle", "web_test_runner")
 load("//tools/js:eslint.bzl", "plugin_eslint")
 
 package_group(
@@ -59,10 +59,15 @@
     entry_point = "_bazel_ts_out/plugin.js",
 )
 
-karma_test(
-    name = "karma_test",
-    srcs = ["karma_test.sh"],
-    data = [":owners-ts-tests"],
+web_test_runner(
+    name = "web_test_runner",
+    srcs = ["web_test_runner.sh"],
+    data = [
+        ":tsconfig",
+        ":owners-ts-tests",
+        "@plugins_npm//:node_modules",
+        "@ui_dev_npm//:node_modules",
+    ],
 )
 
 plugin_eslint()
diff --git a/owners/web/gr-files.ts b/owners/web/gr-files.ts
index d0fe189..dbacad8 100644
--- a/owners/web/gr-files.ts
+++ b/owners/web/gr-files.ts
@@ -16,7 +16,7 @@
  */
 
 import {css, html, LitElement, nothing, PropertyValues, CSSResult} from 'lit';
-import {customElement, property} from 'lit/decorators';
+import {customElement, property} from 'lit/decorators.js';
 import {
   AccountInfo,
   ApprovalInfo,
diff --git a/owners/web/gr-owned-files.ts b/owners/web/gr-owned-files.ts
index 29f8b7a..1e64398 100644
--- a/owners/web/gr-owned-files.ts
+++ b/owners/web/gr-owned-files.ts
@@ -26,7 +26,7 @@
 } from 'lit';
 import {ifDefined} from 'lit/directives/if-defined.js';
 import {OwnersMixin} from './owners-mixin';
-import {customElement, property} from 'lit/decorators';
+import {customElement, property} from 'lit/decorators.js';
 import {
   AccountInfo,
   ChangeInfo,
diff --git a/owners/web/karma_test.sh b/owners/web/karma_test.sh
deleted file mode 100755
index 7cecdae..0000000
--- a/owners/web/karma_test.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-./$1 start $2 --single-run \
-  --root 'plugins/owners/web/_bazel_ts_out_tests/' \
-  --test-files '*_test.js' \
-  --browsers ${3:-ChromeHeadless}
diff --git a/owners/web/owners-mixin.ts b/owners/web/owners-mixin.ts
index cd9217a..14f0c47 100644
--- a/owners/web/owners-mixin.ts
+++ b/owners/web/owners-mixin.ts
@@ -17,7 +17,7 @@
 
 import {Subscription} from 'rxjs';
 import {LitElement, PropertyValues} from 'lit';
-import {property, state} from 'lit/decorators';
+import {property, state} from 'lit/decorators.js';
 import {ChangeInfo} from '@gerritcodereview/typescript-api/rest-api';
 import {FilesOwners, OwnersService} from './owners-service';
 import {RestPluginApi} from '@gerritcodereview/typescript-api/rest';
diff --git a/owners/web/owners-service_test.ts b/owners/web/owners-service_test.ts
index fbb9dc7..a58f935 100644
--- a/owners/web/owners-service_test.ts
+++ b/owners/web/owners-service_test.ts
@@ -33,6 +33,7 @@
 import {assert} from '@open-wc/testing';
 import {UserRole} from './owners-model';
 import {deepEqual} from './utils';
+import sinon from 'sinon';
 
 suite('owners service tests', () => {
   const fakeRestApi = {} as unknown as RestPluginApi;
diff --git a/owners/web/plugin.ts b/owners/web/plugin.ts
index 596c8ab..8ea2dc4 100644
--- a/owners/web/plugin.ts
+++ b/owners/web/plugin.ts
@@ -28,7 +28,7 @@
   OwnedFilesTabHeader,
 } from './gr-owned-files';
 
-window.Gerrit.install(plugin => {
+window.Gerrit?.install(plugin => {
   const restApi = plugin.restApi();
 
   plugin
diff --git a/owners/web/tsconfig.json b/owners/web/tsconfig.json
index 0a15ca9..1ad0ea9 100644
--- a/owners/web/tsconfig.json
+++ b/owners/web/tsconfig.json
@@ -1,5 +1,5 @@
 {
-  "extends": "../../tsconfig-plugins-base.json",
+  "extends": "../../../tsconfig-plugins-base.json",
   "compilerOptions": {
     "outDir": "../../../.ts-out/plugins/owners", /* overridden by bazel */
     "lib": [
@@ -7,7 +7,7 @@
       "dom.iterable",
       "es2021",
       "webworker"
-    ],
+    ]
   },
   "include": [
     "**/*.ts"
diff --git a/owners/web/web_test_runner.sh b/owners/web/web_test_runner.sh
new file mode 100755
index 0000000..b9093b6
--- /dev/null
+++ b/owners/web/web_test_runner.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+set -euo pipefail
+./$1 --config $2 \
+  --dir 'plugins/owners/owners/web/_bazel_ts_out_tests' \
+  --test-files 'plugins/owners/owners/web/_bazel_ts_out_tests/*_test.js' \
+  --ts-config="plugins/owners/owners/web/tsconfig.json"