@vitest/browser 4.0.0-beta.4 → 4.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/.vite/manifest.json +6 -6
- package/dist/client/__vitest__/assets/{index-YGltZS-e.js → index-Co-EY0lY.js} +5 -5
- package/dist/client/__vitest__/index.html +1 -1
- package/dist/client/__vitest_browser__/{orchestrator-BXzaDpYw.js → orchestrator-CmUsRING.js} +85 -78
- package/dist/client/__vitest_browser__/{tester-DabNvcOf.js → tester-1ooObZUu.js} +16 -9
- package/dist/client/__vitest_browser__/{utils-BNwnRrZR.js → utils-FY_Qin7d.js} +3 -3
- package/dist/client/orchestrator.html +2 -2
- package/dist/client/tester/tester.html +2 -2
- package/dist/index.js +4 -4
- package/dist/locators/webdriverio.js +1 -1
- package/dist/state.js +4 -2
- package/jest-dom.d.ts +1 -1
- package/package.json +8 -8
- package/utils.d.ts +1 -1
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
})();
|
|
24
24
|
</script>
|
|
25
25
|
<!-- !LOAD_METADATA! -->
|
|
26
|
-
<script type="module" src="./assets/index-
|
|
26
|
+
<script type="module" src="./assets/index-Co-EY0lY.js"></script>
|
|
27
27
|
<link rel="stylesheet" href="./assets/index-KbpJLW--.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
package/dist/client/__vitest_browser__/{orchestrator-BXzaDpYw.js → orchestrator-CmUsRING.js}
RENAMED
|
@@ -1,8 +1,52 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { g as getDefaultExportFromCjs, a as getBrowserState, b as getConfig, r as relative } from "./utils-
|
|
4
|
+
import { g as getDefaultExportFromCjs, a as getBrowserState, b as getConfig, r as relative } from "./utils-FY_Qin7d.js";
|
|
5
5
|
import { channel, globalChannel, client } from "@vitest/browser/client";
|
|
6
|
+
function toArray(array) {
|
|
7
|
+
if (array === null || array === void 0) {
|
|
8
|
+
array = [];
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(array)) {
|
|
11
|
+
return array;
|
|
12
|
+
}
|
|
13
|
+
return [array];
|
|
14
|
+
}
|
|
15
|
+
function isObject(item) {
|
|
16
|
+
return item != null && typeof item === "object" && !Array.isArray(item);
|
|
17
|
+
}
|
|
18
|
+
function objectAttr(source, path, defaultValue = void 0) {
|
|
19
|
+
const paths = path.replace(/\[(\d+)\]/g, ".$1").split(".");
|
|
20
|
+
let result = source;
|
|
21
|
+
for (const p2 of paths) {
|
|
22
|
+
result = new Object(result)[p2];
|
|
23
|
+
if (result === void 0) {
|
|
24
|
+
return defaultValue;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
function createDefer() {
|
|
30
|
+
let resolve2 = null;
|
|
31
|
+
let reject = null;
|
|
32
|
+
const p2 = new Promise((_resolve, _reject) => {
|
|
33
|
+
resolve2 = _resolve;
|
|
34
|
+
reject = _reject;
|
|
35
|
+
});
|
|
36
|
+
p2.resolve = resolve2;
|
|
37
|
+
p2.reject = reject;
|
|
38
|
+
return p2;
|
|
39
|
+
}
|
|
40
|
+
function isNegativeNaN(val) {
|
|
41
|
+
if (!Number.isNaN(val)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const f64 = new Float64Array(1);
|
|
45
|
+
f64[0] = val;
|
|
46
|
+
const u32 = new Uint32Array(f64.buffer);
|
|
47
|
+
const isNegative = u32[1] >>> 31 === 1;
|
|
48
|
+
return isNegative;
|
|
49
|
+
}
|
|
6
50
|
var f = {
|
|
7
51
|
reset: [0, 0],
|
|
8
52
|
bold: [1, 22, "\x1B[22m\x1B[1m"],
|
|
@@ -730,50 +774,6 @@ function objDisplay(obj, options = {}) {
|
|
|
730
774
|
}
|
|
731
775
|
return str;
|
|
732
776
|
}
|
|
733
|
-
function toArray(array) {
|
|
734
|
-
if (array === null || array === void 0) {
|
|
735
|
-
array = [];
|
|
736
|
-
}
|
|
737
|
-
if (Array.isArray(array)) {
|
|
738
|
-
return array;
|
|
739
|
-
}
|
|
740
|
-
return [array];
|
|
741
|
-
}
|
|
742
|
-
function isObject(item) {
|
|
743
|
-
return item != null && typeof item === "object" && !Array.isArray(item);
|
|
744
|
-
}
|
|
745
|
-
function objectAttr(source, path, defaultValue = void 0) {
|
|
746
|
-
const paths = path.replace(/\[(\d+)\]/g, ".$1").split(".");
|
|
747
|
-
let result = source;
|
|
748
|
-
for (const p2 of paths) {
|
|
749
|
-
result = new Object(result)[p2];
|
|
750
|
-
if (result === void 0) {
|
|
751
|
-
return defaultValue;
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
return result;
|
|
755
|
-
}
|
|
756
|
-
function createDefer() {
|
|
757
|
-
let resolve2 = null;
|
|
758
|
-
let reject = null;
|
|
759
|
-
const p2 = new Promise((_resolve, _reject) => {
|
|
760
|
-
resolve2 = _resolve;
|
|
761
|
-
reject = _reject;
|
|
762
|
-
});
|
|
763
|
-
p2.resolve = resolve2;
|
|
764
|
-
p2.reject = reject;
|
|
765
|
-
return p2;
|
|
766
|
-
}
|
|
767
|
-
function isNegativeNaN(val) {
|
|
768
|
-
if (!Number.isNaN(val)) {
|
|
769
|
-
return false;
|
|
770
|
-
}
|
|
771
|
-
const f64 = new Float64Array(1);
|
|
772
|
-
f64[0] = val;
|
|
773
|
-
const u32 = new Uint32Array(f64.buffer);
|
|
774
|
-
const isNegative = u32[1] >>> 31 === 1;
|
|
775
|
-
return isNegative;
|
|
776
|
-
}
|
|
777
777
|
var jsTokens_1$1;
|
|
778
778
|
var hasRequiredJsTokens$1;
|
|
779
779
|
function requireJsTokens$1() {
|
|
@@ -1712,24 +1712,6 @@ function stripLiteral(code, options) {
|
|
|
1712
1712
|
function stripLiteralDetailed(code, options) {
|
|
1713
1713
|
return stripLiteralJsTokens(code);
|
|
1714
1714
|
}
|
|
1715
|
-
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
1716
|
-
const intToChar = new Uint8Array(64);
|
|
1717
|
-
const charToInt = new Uint8Array(128);
|
|
1718
|
-
for (let i = 0; i < chars.length; i++) {
|
|
1719
|
-
const c = chars.charCodeAt(i);
|
|
1720
|
-
intToChar[i] = c;
|
|
1721
|
-
charToInt[c] = i;
|
|
1722
|
-
}
|
|
1723
|
-
var UrlType;
|
|
1724
|
-
(function(UrlType2) {
|
|
1725
|
-
UrlType2[UrlType2["Empty"] = 1] = "Empty";
|
|
1726
|
-
UrlType2[UrlType2["Hash"] = 2] = "Hash";
|
|
1727
|
-
UrlType2[UrlType2["Query"] = 3] = "Query";
|
|
1728
|
-
UrlType2[UrlType2["RelativePath"] = 4] = "RelativePath";
|
|
1729
|
-
UrlType2[UrlType2["AbsolutePath"] = 5] = "AbsolutePath";
|
|
1730
|
-
UrlType2[UrlType2["SchemeRelative"] = 6] = "SchemeRelative";
|
|
1731
|
-
UrlType2[UrlType2["Absolute"] = 7] = "Absolute";
|
|
1732
|
-
})(UrlType || (UrlType = {}));
|
|
1733
1715
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
1734
1716
|
function normalizeWindowsPath(input = "") {
|
|
1735
1717
|
if (!input) {
|
|
@@ -1825,6 +1807,24 @@ function normalizeString(path, allowAboveRoot) {
|
|
|
1825
1807
|
const isAbsolute = function(p2) {
|
|
1826
1808
|
return _IS_ABSOLUTE_RE.test(p2);
|
|
1827
1809
|
};
|
|
1810
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
1811
|
+
const intToChar = new Uint8Array(64);
|
|
1812
|
+
const charToInt = new Uint8Array(128);
|
|
1813
|
+
for (let i = 0; i < chars.length; i++) {
|
|
1814
|
+
const c = chars.charCodeAt(i);
|
|
1815
|
+
intToChar[i] = c;
|
|
1816
|
+
charToInt[c] = i;
|
|
1817
|
+
}
|
|
1818
|
+
var UrlType;
|
|
1819
|
+
(function(UrlType2) {
|
|
1820
|
+
UrlType2[UrlType2["Empty"] = 1] = "Empty";
|
|
1821
|
+
UrlType2[UrlType2["Hash"] = 2] = "Hash";
|
|
1822
|
+
UrlType2[UrlType2["Query"] = 3] = "Query";
|
|
1823
|
+
UrlType2[UrlType2["RelativePath"] = 4] = "RelativePath";
|
|
1824
|
+
UrlType2[UrlType2["AbsolutePath"] = 5] = "AbsolutePath";
|
|
1825
|
+
UrlType2[UrlType2["SchemeRelative"] = 6] = "SchemeRelative";
|
|
1826
|
+
UrlType2[UrlType2["Absolute"] = 7] = "Absolute";
|
|
1827
|
+
})(UrlType || (UrlType = {}));
|
|
1828
1828
|
const CHROME_IE_STACK_REGEXP = /^\s*at .*(?:\S:\d+|\(native\))/m;
|
|
1829
1829
|
const SAFARI_NATIVE_CODE_REGEXP = /^(?:eval@)?(?:\[native code\])?$/;
|
|
1830
1830
|
function extractLocation(urlLike) {
|
|
@@ -2286,8 +2286,7 @@ function createSuiteHooks() {
|
|
|
2286
2286
|
}
|
|
2287
2287
|
function parseArguments(optionsOrFn, optionsOrTest) {
|
|
2288
2288
|
let options = {};
|
|
2289
|
-
let fn
|
|
2290
|
-
};
|
|
2289
|
+
let fn;
|
|
2291
2290
|
if (typeof optionsOrTest === "object") {
|
|
2292
2291
|
if (typeof optionsOrFn === "object") {
|
|
2293
2292
|
throw new TypeError("Cannot use two objects as arguments. Please provide options and a function callback in that order.");
|
|
@@ -2337,6 +2336,9 @@ function createSuiteCollector(name, factory = () => {
|
|
|
2337
2336
|
annotations: []
|
|
2338
2337
|
};
|
|
2339
2338
|
const handler = options.handler;
|
|
2339
|
+
if (task2.mode === "run" && !handler) {
|
|
2340
|
+
task2.mode = "todo";
|
|
2341
|
+
}
|
|
2340
2342
|
if (options.concurrent || !options.sequential && runner.config.sequence.concurrent) {
|
|
2341
2343
|
task2.concurrent = true;
|
|
2342
2344
|
}
|
|
@@ -2468,9 +2470,12 @@ function withAwaitAsyncAssertions(fn, task) {
|
|
|
2468
2470
|
function createSuite() {
|
|
2469
2471
|
function suiteFn(name, factoryOrOptions, optionsOrFactory) {
|
|
2470
2472
|
var _currentSuite$options;
|
|
2471
|
-
|
|
2473
|
+
let mode = this.only ? "only" : this.skip ? "skip" : this.todo ? "todo" : "run";
|
|
2472
2474
|
const currentSuite = collectorContext.currentSuite || defaultSuite;
|
|
2473
2475
|
let { options, handler: factory } = parseArguments(factoryOrOptions, optionsOrFactory);
|
|
2476
|
+
if (mode === "run" && !factory) {
|
|
2477
|
+
mode = "todo";
|
|
2478
|
+
}
|
|
2474
2479
|
const isConcurrentSpecified = options.concurrent || this.concurrent || options.sequential === false;
|
|
2475
2480
|
const isSequentialSpecified = options.sequential || this.sequential || options.concurrent === false;
|
|
2476
2481
|
options = {
|
|
@@ -2499,15 +2504,15 @@ function createSuite() {
|
|
|
2499
2504
|
const items = Array.isArray(i) ? i : [i];
|
|
2500
2505
|
if (fnFirst) {
|
|
2501
2506
|
if (arrayOnlyCases) {
|
|
2502
|
-
suite2(formatTitle(_name, items, idx), () => handler(...items), options);
|
|
2507
|
+
suite2(formatTitle(_name, items, idx), handler ? () => handler(...items) : void 0, options);
|
|
2503
2508
|
} else {
|
|
2504
|
-
suite2(formatTitle(_name, items, idx), () => handler(i), options);
|
|
2509
|
+
suite2(formatTitle(_name, items, idx), handler ? () => handler(i) : void 0, options);
|
|
2505
2510
|
}
|
|
2506
2511
|
} else {
|
|
2507
2512
|
if (arrayOnlyCases) {
|
|
2508
|
-
suite2(formatTitle(_name, items, idx), options, () => handler(...items));
|
|
2513
|
+
suite2(formatTitle(_name, items, idx), options, handler ? () => handler(...items) : void 0);
|
|
2509
2514
|
} else {
|
|
2510
|
-
suite2(formatTitle(_name, items, idx), options, () => handler(i));
|
|
2515
|
+
suite2(formatTitle(_name, items, idx), options, handler ? () => handler(i) : void 0);
|
|
2511
2516
|
}
|
|
2512
2517
|
}
|
|
2513
2518
|
});
|
|
@@ -2522,7 +2527,7 @@ function createSuite() {
|
|
|
2522
2527
|
const name_ = formatName(name);
|
|
2523
2528
|
const { options, handler } = parseArguments(optionsOrFn, fnOrOptions);
|
|
2524
2529
|
cases.forEach((item, idx) => {
|
|
2525
|
-
suite(formatTitle(name_, toArray(item), idx), options, () => handler(item));
|
|
2530
|
+
suite(formatTitle(name_, toArray(item), idx), options, handler ? () => handler(item) : void 0);
|
|
2526
2531
|
});
|
|
2527
2532
|
};
|
|
2528
2533
|
};
|
|
@@ -2554,15 +2559,15 @@ function createTaskCollector(fn, context) {
|
|
|
2554
2559
|
const items = Array.isArray(i) ? i : [i];
|
|
2555
2560
|
if (fnFirst) {
|
|
2556
2561
|
if (arrayOnlyCases) {
|
|
2557
|
-
test(formatTitle(_name, items, idx), () => handler(...items), options);
|
|
2562
|
+
test(formatTitle(_name, items, idx), handler ? () => handler(...items) : void 0, options);
|
|
2558
2563
|
} else {
|
|
2559
|
-
test(formatTitle(_name, items, idx), () => handler(i), options);
|
|
2564
|
+
test(formatTitle(_name, items, idx), handler ? () => handler(i) : void 0, options);
|
|
2560
2565
|
}
|
|
2561
2566
|
} else {
|
|
2562
2567
|
if (arrayOnlyCases) {
|
|
2563
|
-
test(formatTitle(_name, items, idx), options, () => handler(...items));
|
|
2568
|
+
test(formatTitle(_name, items, idx), options, handler ? () => handler(...items) : void 0);
|
|
2564
2569
|
} else {
|
|
2565
|
-
test(formatTitle(_name, items, idx), options, () => handler(i));
|
|
2570
|
+
test(formatTitle(_name, items, idx), options, handler ? () => handler(i) : void 0);
|
|
2566
2571
|
}
|
|
2567
2572
|
}
|
|
2568
2573
|
});
|
|
@@ -2578,9 +2583,11 @@ function createTaskCollector(fn, context) {
|
|
|
2578
2583
|
const _name = formatName(name);
|
|
2579
2584
|
const { options, handler } = parseArguments(optionsOrFn, fnOrOptions);
|
|
2580
2585
|
cases.forEach((item, idx) => {
|
|
2581
|
-
const handlerWrapper = (ctx) => handler(item, ctx);
|
|
2582
|
-
handlerWrapper
|
|
2583
|
-
|
|
2586
|
+
const handlerWrapper = handler ? (ctx) => handler(item, ctx) : void 0;
|
|
2587
|
+
if (handlerWrapper) {
|
|
2588
|
+
handlerWrapper.__VITEST_FIXTURE_INDEX__ = 1;
|
|
2589
|
+
handlerWrapper.toString = () => handler.toString();
|
|
2590
|
+
}
|
|
2584
2591
|
test(formatTitle(_name, toArray(item), idx), options, handlerWrapper);
|
|
2585
2592
|
});
|
|
2586
2593
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { g as getDefaultExportFromCjs$1, c as resolve,
|
|
4
|
+
import { g as getDefaultExportFromCjs$1, c as resolve, m as moduleRunner, d as getWorkerState, b as getConfig, a as getBrowserState } from "./utils-FY_Qin7d.js";
|
|
5
5
|
import { onCancel, globalChannel, channel, client } from "@vitest/browser/client";
|
|
6
6
|
import { userEvent, page, server } from "@vitest/browser/context";
|
|
7
7
|
import { getSafeTimers, TraceMap as TraceMap$1, originalPositionFor as originalPositionFor$1, loadDiffConfig, loadSnapshotSerializers, takeCoverageInsideWorker, stringify, format, setupCommonEnv, startCoverageInsideWorker, stopCoverageInsideWorker, startTests, collectTests, SpyModule } from "vitest/internal/browser";
|
|
@@ -1001,6 +1001,8 @@ const stackIgnorePatterns = [
|
|
|
1001
1001
|
"/node_modules/chai/",
|
|
1002
1002
|
"/node_modules/tinypool/",
|
|
1003
1003
|
"/node_modules/tinyspy/",
|
|
1004
|
+
"/vite/dist/node/module-runner",
|
|
1005
|
+
"/rolldown-vite/dist/node/module-runner",
|
|
1004
1006
|
// browser related deps
|
|
1005
1007
|
"/deps/chunk-",
|
|
1006
1008
|
"/deps/@vitest",
|
|
@@ -1280,7 +1282,7 @@ function createBrowserRunner(runnerClass, mocker, state, coverageModule) {
|
|
|
1280
1282
|
await rpc$2().onAfterSuiteRun({
|
|
1281
1283
|
coverage,
|
|
1282
1284
|
testFiles: files.map((file) => file.name),
|
|
1283
|
-
|
|
1285
|
+
environment: "__browser__",
|
|
1284
1286
|
projectName: this.config.name
|
|
1285
1287
|
});
|
|
1286
1288
|
}
|
|
@@ -1366,7 +1368,7 @@ async function initiateRunner(state, mocker, config) {
|
|
|
1366
1368
|
}
|
|
1367
1369
|
const runnerClass = config.mode === "test" ? VitestTestRunner : NodeBenchmarkRunner;
|
|
1368
1370
|
const BrowserRunner = createBrowserRunner(runnerClass, mocker, state, {
|
|
1369
|
-
takeCoverage: () => takeCoverageInsideWorker(config.coverage,
|
|
1371
|
+
takeCoverage: () => takeCoverageInsideWorker(config.coverage, moduleRunner)
|
|
1370
1372
|
});
|
|
1371
1373
|
if (!config.snapshotOptions.snapshotEnvironment) {
|
|
1372
1374
|
config.snapshotOptions.snapshotEnvironment = new VitestBrowserSnapshotEnvironment();
|
|
@@ -1380,8 +1382,8 @@ async function initiateRunner(state, mocker, config) {
|
|
|
1380
1382
|
(_a = runner.cancel) == null ? void 0 : _a.call(runner, reason);
|
|
1381
1383
|
});
|
|
1382
1384
|
const [diffOptions] = await Promise.all([
|
|
1383
|
-
loadDiffConfig(config,
|
|
1384
|
-
loadSnapshotSerializers(config,
|
|
1385
|
+
loadDiffConfig(config, moduleRunner),
|
|
1386
|
+
loadSnapshotSerializers(config, moduleRunner)
|
|
1385
1387
|
]);
|
|
1386
1388
|
runner.config.diffOptions = diffOptions;
|
|
1387
1389
|
getWorkerState().onFilterStackTrace = (stack) => {
|
|
@@ -1626,6 +1628,9 @@ class MockerRegistry {
|
|
|
1626
1628
|
delete(id) {
|
|
1627
1629
|
this.registryByUrl.delete(id);
|
|
1628
1630
|
}
|
|
1631
|
+
deleteById(id) {
|
|
1632
|
+
this.registryById.delete(id);
|
|
1633
|
+
}
|
|
1629
1634
|
get(id) {
|
|
1630
1635
|
return this.registryByUrl.get(id);
|
|
1631
1636
|
}
|
|
@@ -3082,6 +3087,7 @@ class CommandsManager {
|
|
|
3082
3087
|
});
|
|
3083
3088
|
}
|
|
3084
3089
|
}
|
|
3090
|
+
const __vite_import_meta_env__ = { "BASE_URL": "/", "DEV": false, "MODE": "production", "PROD": true, "SSR": false, "VITE_TEST_WATCHER_DEBUG": "false" };
|
|
3085
3091
|
const debugVar = getConfig().env.VITEST_BROWSER_DEBUG;
|
|
3086
3092
|
const debug = debugVar && debugVar !== "false" ? (...args) => {
|
|
3087
3093
|
var _a, _b;
|
|
@@ -3093,7 +3099,7 @@ channel.addEventListener("message", async (e) => {
|
|
|
3093
3099
|
debug == null ? void 0 : debug("event from orchestrator", JSON.stringify(e.data));
|
|
3094
3100
|
if (!isEvent(data)) {
|
|
3095
3101
|
const error = new Error(`Unknown message: ${JSON.stringify(e.data)}`);
|
|
3096
|
-
unhandledError(error, "
|
|
3102
|
+
unhandledError(error, "Unknown Iframe Message");
|
|
3097
3103
|
return;
|
|
3098
3104
|
}
|
|
3099
3105
|
if (!("iframeId" in data) || data.iframeId !== getBrowserState().iframeId) {
|
|
@@ -3128,7 +3134,7 @@ channel.addEventListener("message", async (e) => {
|
|
|
3128
3134
|
}
|
|
3129
3135
|
default: {
|
|
3130
3136
|
const error = new Error(`Unknown event: ${data.event}`);
|
|
3131
|
-
unhandledError(error, "
|
|
3137
|
+
unhandledError(error, "Unknown Event");
|
|
3132
3138
|
}
|
|
3133
3139
|
}
|
|
3134
3140
|
channel.postMessage({
|
|
@@ -3148,6 +3154,7 @@ async function prepareTestEnvironment(options) {
|
|
|
3148
3154
|
const config = getConfig();
|
|
3149
3155
|
const rpc2 = createSafeRpc(client);
|
|
3150
3156
|
const state = getWorkerState();
|
|
3157
|
+
state.metaEnv = __vite_import_meta_env__;
|
|
3151
3158
|
state.onCancel = onCancel;
|
|
3152
3159
|
state.rpc = rpc2;
|
|
3153
3160
|
const interceptor = createModuleMockerInterceptor();
|
|
@@ -3220,7 +3227,7 @@ async function prepare(options) {
|
|
|
3220
3227
|
debug == null ? void 0 : debug("prepare time", state.durations.prepare, "ms");
|
|
3221
3228
|
await Promise.all([
|
|
3222
3229
|
setupCommonEnv(config),
|
|
3223
|
-
startCoverageInsideWorker(config.coverage,
|
|
3230
|
+
startCoverageInsideWorker(config.coverage, moduleRunner, { isolate: config.browser.isolate }),
|
|
3224
3231
|
(async () => {
|
|
3225
3232
|
const VitestIndex = await __vitePreload(() => import("vitest"), true ? [] : void 0);
|
|
3226
3233
|
Object.defineProperty(window, "__vitest_index__", {
|
|
@@ -3250,7 +3257,7 @@ async function cleanup() {
|
|
|
3250
3257
|
await rpc2.wdioSwitchContext("parent").catch((error) => unhandledError(error, "Cleanup Error"));
|
|
3251
3258
|
}
|
|
3252
3259
|
state.environmentTeardownRun = true;
|
|
3253
|
-
await stopCoverageInsideWorker(config.coverage,
|
|
3260
|
+
await stopCoverageInsideWorker(config.coverage, moduleRunner, { isolate: config.browser.isolate }).catch((error) => {
|
|
3254
3261
|
return unhandledError(error, "Coverage Error");
|
|
3255
3262
|
});
|
|
3256
3263
|
}
|
|
@@ -164,9 +164,9 @@ async function importFs(id) {
|
|
|
164
164
|
name
|
|
165
165
|
));
|
|
166
166
|
}
|
|
167
|
-
const
|
|
167
|
+
const moduleRunner = {
|
|
168
168
|
isBrowser: true,
|
|
169
|
-
|
|
169
|
+
import: (id) => {
|
|
170
170
|
if (id[0] === "/" || id[1] === ":") {
|
|
171
171
|
return importFs(id);
|
|
172
172
|
}
|
|
@@ -193,7 +193,7 @@ export {
|
|
|
193
193
|
getConfig as b,
|
|
194
194
|
resolve as c,
|
|
195
195
|
getWorkerState as d,
|
|
196
|
-
executor as e,
|
|
197
196
|
getDefaultExportFromCjs as g,
|
|
197
|
+
moduleRunner as m,
|
|
198
198
|
relative as r
|
|
199
199
|
};
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
{__VITEST_INJECTOR__}
|
|
27
27
|
{__VITEST_ERROR_CATCHER__}
|
|
28
28
|
{__VITEST_SCRIPTS__}
|
|
29
|
-
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-
|
|
29
|
+
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-CmUsRING.js"></script>
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-FY_Qin7d.js">
|
|
31
31
|
</head>
|
|
32
32
|
<body>
|
|
33
33
|
<div id="vitest-tester"></div>
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" href="{__VITEST_FAVICON__}" type="image/svg+xml">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Vitest Browser Tester</title>
|
|
8
|
-
<script type="module" crossorigin src="/__vitest_browser__/tester-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-
|
|
8
|
+
<script type="module" crossorigin src="/__vitest_browser__/tester-1ooObZUu.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-FY_Qin7d.js">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
</body>
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import pm from 'pixelmatch';
|
|
|
22
22
|
import { WebSocketServer } from 'ws';
|
|
23
23
|
import { performance } from 'node:perf_hooks';
|
|
24
24
|
|
|
25
|
-
var version = "4.0.0-beta.
|
|
25
|
+
var version = "4.0.0-beta.5";
|
|
26
26
|
|
|
27
27
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
28
28
|
function normalizeWindowsPath(input = "") {
|
|
@@ -367,7 +367,7 @@ async function resolveOrchestrator(globalServer, url, res) {
|
|
|
367
367
|
if (!browserProject) {
|
|
368
368
|
return;
|
|
369
369
|
}
|
|
370
|
-
// ignore
|
|
370
|
+
// ignore unknown pages
|
|
371
371
|
if (sessionId && sessionId !== "none" && !globalServer.vitest._browserSessions.sessionIds.has(sessionId)) {
|
|
372
372
|
return;
|
|
373
373
|
}
|
|
@@ -3530,7 +3530,7 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3530
3530
|
}
|
|
3531
3531
|
}
|
|
3532
3532
|
function setupClient(project, rpcId, ws) {
|
|
3533
|
-
const mockResolver = new ServerMockResolver(globalServer.vite, { moduleDirectories: project.config
|
|
3533
|
+
const mockResolver = new ServerMockResolver(globalServer.vite, { moduleDirectories: project.config?.deps?.moduleDirectories });
|
|
3534
3534
|
const mocker = project.browser?.provider.mocker;
|
|
3535
3535
|
const rpc = createBirpc({
|
|
3536
3536
|
async onUnhandledError(error, type) {
|
|
@@ -3982,7 +3982,7 @@ class BrowserPool {
|
|
|
3982
3982
|
debug?.("[%s] test %s finished running", sessionId, file);
|
|
3983
3983
|
this.runNextTest(method, sessionId);
|
|
3984
3984
|
}).catch((error) => {
|
|
3985
|
-
// if user
|
|
3985
|
+
// if user cancels the test run manually, ignore the error and exit gracefully
|
|
3986
3986
|
if (this.project.vitest.isCancelling && error instanceof Error && error.message.startsWith("Browser connection was closed while running tests")) {
|
|
3987
3987
|
this.cancel();
|
|
3988
3988
|
this._promise?.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-Kx5DUGWa.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-D_g_FMM5.js";import"vitest/internal/browser";page.extend({getByLabelText(e,g){return new WebdriverIOLocator(getByLabelSelector(e,g))},getByRole(e,g){return new WebdriverIOLocator(getByRoleSelector(e,g))},getByTestId(e){return new WebdriverIOLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,g){return new WebdriverIOLocator(getByAltTextSelector(e,g))},getByPlaceholder(e,g){return new WebdriverIOLocator(getByPlaceholderSelector(e,g))},getByText(e,g){return new WebdriverIOLocator(getByTextSelector(e,g))},getByTitle(e,g){return new WebdriverIOLocator(getByTitleSelector(e,g))},_createLocator(e){return new WebdriverIOLocator(e)},elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e))}});class WebdriverIOLocator extends Locator{constructor(e,g){super(),this._pwSelector=e,this._container=g}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);
|
|
1
|
+
import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-Kx5DUGWa.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-D_g_FMM5.js";import"vitest/internal/browser";page.extend({getByLabelText(e,g){return new WebdriverIOLocator(getByLabelSelector(e,g))},getByRole(e,g){return new WebdriverIOLocator(getByRoleSelector(e,g))},getByTestId(e){return new WebdriverIOLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,g){return new WebdriverIOLocator(getByAltTextSelector(e,g))},getByPlaceholder(e,g){return new WebdriverIOLocator(getByPlaceholderSelector(e,g))},getByText(e,g){return new WebdriverIOLocator(getByTextSelector(e,g))},getByTitle(e,g){return new WebdriverIOLocator(getByTitleSelector(e,g))},_createLocator(e){return new WebdriverIOLocator(e)},elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e))}});class WebdriverIOLocator extends Locator{constructor(e,g){super(),this._pwSelector=e,this._container=g}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);let g=!1,_=e.map(e=>e.startsWith(`>>>`)?(g=!0,e.slice(3)):e);return(g?`>>>`:``)+_.join(`, `)}click(e){return super.click(processClickOptions(e))}dblClick(e){return super.dblClick(processClickOptions(e))}tripleClick(e){return super.tripleClick(processClickOptions(e))}selectOptions(e,g){let _=getWebdriverioSelectOptions(this.element(),e);return this.triggerCommand(`__vitest_selectOptions`,this.selector,_,g)}hover(e){return super.hover(processHoverOptions(e))}dropTo(e,g){return super.dropTo(e,processDragAndDropOptions(g))}locator(e){return new WebdriverIOLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e),e)}}function getWebdriverioSelectOptions(e,g){let _=[...e.querySelectorAll(`option`)],v=Array.isArray(g)?g:[g];if(!v.length)return[];if(v.length>1)throw Error(`Provider "webdriverio" doesn't support selecting multiple values at once`);let y=v[0];if(typeof y!=`string`){let e=`element`in y?y.element():y,g=_.indexOf(e);if(g===-1)throw Error(`The element ${selectorEngine.previewNode(e)} was not found in the "select" options.`);return[{index:g}]}let b=_.findIndex(e=>e.value===y);if(b!==-1)return[{index:b}];let x=_.findIndex(e=>e.textContent?.trim()===y||e.ariaLabel===y);if(x===-1)throw Error(`The option "${y}" was not found in the "select" options.`);return[{index:x}]}function processClickOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e;if(g.x!=null||g.y!=null){let e={};g.x!=null&&(g.x=scaleCoordinate(g.x,e)),g.y!=null&&(g.y=scaleCoordinate(g.y,e))}return e}function processHoverOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e,_={};return g.xOffset!=null&&(g.xOffset=scaleCoordinate(g.xOffset,_)),g.yOffset!=null&&(g.yOffset=scaleCoordinate(g.yOffset,_)),e}function processDragAndDropOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g={},_=e;return _.sourceX!=null&&(_.sourceX=scaleCoordinate(_.sourceX,g)),_.sourceY!=null&&(_.sourceY=scaleCoordinate(_.sourceY,g)),_.targetX!=null&&(_.targetX=scaleCoordinate(_.targetX,g)),_.targetY!=null&&(_.targetY=scaleCoordinate(_.targetY,g)),e}function scaleCoordinate(e,g){return Math.round(e*getCachedScale(g))}function getCachedScale(e){return e.scale??=getIframeScale()}
|
package/dist/state.js
CHANGED
|
@@ -28,14 +28,16 @@
|
|
|
28
28
|
config,
|
|
29
29
|
environment: {
|
|
30
30
|
name: "browser",
|
|
31
|
-
|
|
31
|
+
viteEnvironment: "client",
|
|
32
32
|
setup() {
|
|
33
33
|
throw new Error("Not called in the browser");
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
onCleanup: (fn) => getBrowserState().cleanups.push(fn),
|
|
37
|
-
|
|
37
|
+
evaluatedModules: getBrowserState().evaluatedModules,
|
|
38
|
+
resolvingModules: getBrowserState().resolvingModules,
|
|
38
39
|
moduleExecutionInfo: new Map(),
|
|
40
|
+
metaEnv: null,
|
|
39
41
|
rpc: null,
|
|
40
42
|
durations: {
|
|
41
43
|
environment: 0,
|
package/jest-dom.d.ts
CHANGED
|
@@ -627,7 +627,7 @@ export interface TestingLibraryMatchers<E, R> {
|
|
|
627
627
|
* other element that contains text, such as a paragraph, span, div etc.
|
|
628
628
|
*
|
|
629
629
|
* NOTE: the expected selection is a string, it does not allow to check for
|
|
630
|
-
* selection range
|
|
630
|
+
* selection range indices.
|
|
631
631
|
*
|
|
632
632
|
* @example
|
|
633
633
|
* <div>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitest/browser",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.5",
|
|
5
5
|
"description": "Browser running for Vitest",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://opencollective.com/vitest",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"playwright": "*",
|
|
68
68
|
"webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0",
|
|
69
|
-
"vitest": "4.0.0-beta.
|
|
69
|
+
"vitest": "4.0.0-beta.5"
|
|
70
70
|
},
|
|
71
71
|
"peerDependenciesMeta": {
|
|
72
72
|
"playwright": {
|
|
@@ -88,8 +88,8 @@
|
|
|
88
88
|
"sirv": "^3.0.1",
|
|
89
89
|
"tinyrainbow": "^2.0.0",
|
|
90
90
|
"ws": "^8.18.3",
|
|
91
|
-
"@vitest/mocker": "4.0.0-beta.
|
|
92
|
-
"@vitest/utils": "4.0.0-beta.
|
|
91
|
+
"@vitest/mocker": "4.0.0-beta.5",
|
|
92
|
+
"@vitest/utils": "4.0.0-beta.5"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@types/pngjs": "^6.0.5",
|
|
@@ -106,10 +106,10 @@
|
|
|
106
106
|
"playwright-core": "^1.54.1",
|
|
107
107
|
"safaridriver": "^1.0.0",
|
|
108
108
|
"webdriverio": "^9.18.1",
|
|
109
|
-
"@vitest/runner": "4.0.0-beta.
|
|
110
|
-
"@vitest/ui": "4.0.0-beta.
|
|
111
|
-
"@vitest/ws-client": "4.0.0-beta.
|
|
112
|
-
"vitest": "4.0.0-beta.
|
|
109
|
+
"@vitest/runner": "4.0.0-beta.5",
|
|
110
|
+
"@vitest/ui": "4.0.0-beta.5",
|
|
111
|
+
"@vitest/ws-client": "4.0.0-beta.5",
|
|
112
|
+
"vitest": "4.0.0-beta.5"
|
|
113
113
|
},
|
|
114
114
|
"scripts": {
|
|
115
115
|
"typecheck": "tsc -p ./src/client/tsconfig.json --noEmit",
|
package/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// should be in sync with tester/public-utils.ts
|
|
2
|
-
// we cannot bundle it because vitest depend on the @vitest/browser and
|
|
2
|
+
// we cannot bundle it because vitest depend on the @vitest/browser and vice versa
|
|
3
3
|
// fortunately, the file is quite small
|
|
4
4
|
|
|
5
5
|
import { LocatorSelectors, Locator } from '@vitest/browser/context'
|