aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
commit76cb9c2a39d477a64824a985ade40507e3bbade1 (patch)
tree41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js
parent819a39a21ac992b1393244a4c283bbb125208c69 (diff)
downloadneko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js')
-rw-r--r--vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js254
1 files changed, 254 insertions, 0 deletions
diff --git a/vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js b/vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js
new file mode 100644
index 0000000..78b4853
--- /dev/null
+++ b/vanilla/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js
@@ -0,0 +1,254 @@
+import { updateTask } from '@vitest/runner';
+import { createDefer } from '@vitest/utils/helpers';
+import { getSafeTimers } from '@vitest/utils/timers';
+import { a as getBenchOptions, g as getBenchFn } from './benchmark.B3N2zMcH.js';
+import { g as getWorkerState } from './utils.DvEY5TfP.js';
+import { setState, GLOBAL_EXPECT, getState } from '@vitest/expect';
+import { getTests, getNames, getTestName } from '@vitest/runner/utils';
+import { processError } from '@vitest/utils/error';
+import { normalize } from 'pathe';
+import { a as getSnapshotClient, i as inject, c as createExpect, v as vi } from './vi.2VT5v0um.js';
+import { r as rpc } from './rpc.BoxB0q7B.js';
+
+function createBenchmarkResult(name) {
+ return {
+ name,
+ rank: 0,
+ rme: 0,
+ samples: []
+ };
+}
+const benchmarkTasks = /* @__PURE__ */ new WeakMap();
+async function runBenchmarkSuite(suite, runner) {
+ const { Task, Bench } = await runner.importTinybench();
+ const start = performance.now();
+ const benchmarkGroup = [];
+ const benchmarkSuiteGroup = [];
+ for (const task of suite.tasks) {
+ if (task.mode !== "run" && task.mode !== "queued") continue;
+ if (task.meta?.benchmark) benchmarkGroup.push(task);
+ else if (task.type === "suite") benchmarkSuiteGroup.push(task);
+ }
+ // run sub suites sequentially
+ for (const subSuite of benchmarkSuiteGroup) await runBenchmarkSuite(subSuite, runner);
+ if (benchmarkGroup.length) {
+ const defer = createDefer();
+ suite.result = {
+ state: "run",
+ startTime: start,
+ benchmark: createBenchmarkResult(suite.name)
+ };
+ updateTask$1("suite-prepare", suite);
+ const addBenchTaskListener = (task, benchmark) => {
+ task.addEventListener("complete", (e) => {
+ const taskRes = e.task.result;
+ const result = benchmark.result.benchmark;
+ benchmark.result.state = "pass";
+ Object.assign(result, taskRes);
+ // compute extra stats and free raw samples as early as possible
+ const samples = result.samples;
+ result.sampleCount = samples.length;
+ result.median = samples.length % 2 ? samples[Math.floor(samples.length / 2)] : (samples[samples.length / 2] + samples[samples.length / 2 - 1]) / 2;
+ if (!runner.config.benchmark?.includeSamples) result.samples.length = 0;
+ updateTask$1("test-finished", benchmark);
+ }, { once: true });
+ task.addEventListener("error", (e) => {
+ const task = e.task;
+ defer.reject(benchmark ? task.result.error : e);
+ }, { once: true });
+ };
+ benchmarkGroup.forEach((benchmark) => {
+ const benchmarkInstance = new Bench(getBenchOptions(benchmark));
+ const benchmarkFn = getBenchFn(benchmark);
+ benchmark.result = {
+ state: "run",
+ startTime: start,
+ benchmark: createBenchmarkResult(benchmark.name)
+ };
+ const task = new Task(benchmarkInstance, benchmark.name, benchmarkFn);
+ benchmarkTasks.set(benchmark, task);
+ addBenchTaskListener(task, benchmark);
+ });
+ const { setTimeout } = getSafeTimers();
+ const tasks = [];
+ for (const benchmark of benchmarkGroup) {
+ const task = benchmarkTasks.get(benchmark);
+ updateTask$1("test-prepare", benchmark);
+ await task.warmup();
+ tasks.push([await new Promise((resolve) => setTimeout(async () => {
+ resolve(await task.run());
+ })), benchmark]);
+ }
+ suite.result.duration = performance.now() - start;
+ suite.result.state = "pass";
+ updateTask$1("suite-finished", suite);
+ defer.resolve(null);
+ await defer;
+ }
+ function updateTask$1(event, task) {
+ updateTask(event, task, runner);
+ }
+}
+class NodeBenchmarkRunner {
+ moduleRunner;
+ constructor(config) {
+ this.config = config;
+ }
+ async importTinybench() {
+ return await import('tinybench');
+ }
+ importFile(filepath, source) {
+ if (source === "setup") {
+ const moduleNode = getWorkerState().evaluatedModules.getModuleById(filepath);
+ if (moduleNode) getWorkerState().evaluatedModules.invalidateModule(moduleNode);
+ }
+ return this.moduleRunner.import(filepath);
+ }
+ async runSuite(suite) {
+ await runBenchmarkSuite(suite, this);
+ }
+ async runTask() {
+ throw new Error("`test()` and `it()` is only available in test mode.");
+ }
+}
+
+// worker context is shared between all tests
+const workerContext = Object.create(null);
+class VitestTestRunner {
+ snapshotClient = getSnapshotClient();
+ workerState = getWorkerState();
+ moduleRunner;
+ cancelRun = false;
+ assertionsErrors = /* @__PURE__ */ new WeakMap();
+ pool = this.workerState.ctx.pool;
+ _otel;
+ viteEnvironment;
+ constructor(config) {
+ this.config = config;
+ const environment = this.workerState.environment;
+ this.viteEnvironment = environment.viteEnvironment || environment.name;
+ }
+ importFile(filepath, source) {
+ if (source === "setup") {
+ const moduleNode = this.workerState.evaluatedModules.getModuleById(filepath);
+ if (moduleNode) this.workerState.evaluatedModules.invalidateModule(moduleNode);
+ }
+ return this._otel.$(`vitest.module.import_${source === "setup" ? "setup" : "spec"}`, { attributes: { "code.file.path": filepath } }, () => this.moduleRunner.import(filepath));
+ }
+ onCollectStart(file) {
+ this.workerState.current = file;
+ }
+ onCleanupWorkerContext(listener) {
+ this.workerState.onCleanup(listener);
+ }
+ onAfterRunFiles() {
+ this.snapshotClient.clear();
+ this.workerState.current = void 0;
+ }
+ getWorkerContext() {
+ return workerContext;
+ }
+ async onAfterRunSuite(suite) {
+ if (this.config.logHeapUsage && typeof process !== "undefined") suite.result.heap = process.memoryUsage().heapUsed;
+ if (suite.mode !== "skip" && "filepath" in suite) {
+ // mark snapshots in skipped tests as not obsolete
+ for (const test of getTests(suite)) if (test.mode === "skip") {
+ const name = getNames(test).slice(1).join(" > ");
+ this.snapshotClient.skipTest(suite.file.filepath, name);
+ }
+ const result = await this.snapshotClient.finish(suite.file.filepath);
+ if (this.workerState.config.snapshotOptions.updateSnapshot === "none" && result.unchecked) {
+ let message = `Obsolete snapshots found when no snapshot update is expected.\n`;
+ for (const key of result.uncheckedKeys) message += `ยท ${key}\n`;
+ suite.result.errors ??= [];
+ suite.result.errors.push(processError(new Error(message)));
+ suite.result.state = "fail";
+ }
+ await rpc().snapshotSaved(result);
+ }
+ this.workerState.current = suite.suite || suite.file;
+ }
+ onAfterRunTask(test) {
+ if (this.config.logHeapUsage && typeof process !== "undefined") test.result.heap = process.memoryUsage().heapUsed;
+ this.workerState.current = test.suite || test.file;
+ }
+ cancel(_reason) {
+ this.cancelRun = true;
+ }
+ injectValue(key) {
+ // inject has a very limiting type controlled by ProvidedContext
+ // some tests override it which causes the build to fail
+ return inject(key);
+ }
+ async onBeforeRunTask(test) {
+ if (this.cancelRun) test.mode = "skip";
+ if (test.mode !== "run" && test.mode !== "queued") return;
+ this.workerState.current = test;
+ }
+ async onBeforeRunSuite(suite) {
+ if (this.cancelRun) suite.mode = "skip";
+ // initialize snapshot state before running file suite
+ if (suite.mode !== "skip" && "filepath" in suite) await this.snapshotClient.setup(suite.file.filepath, this.workerState.config.snapshotOptions);
+ this.workerState.current = suite;
+ }
+ onBeforeTryTask(test) {
+ clearModuleMocks(this.config);
+ this.snapshotClient.clearTest(test.file.filepath, test.id);
+ setState({
+ assertionCalls: 0,
+ isExpectingAssertions: false,
+ isExpectingAssertionsError: null,
+ expectedAssertionsNumber: null,
+ expectedAssertionsNumberErrorGen: null,
+ currentTestName: getTestName(test),
+ snapshotState: this.snapshotClient.getSnapshotState(test.file.filepath)
+ }, globalThis[GLOBAL_EXPECT]);
+ }
+ onAfterTryTask(test) {
+ const { assertionCalls, expectedAssertionsNumber, expectedAssertionsNumberErrorGen, isExpectingAssertions, isExpectingAssertionsError } = test.context._local ? test.context.expect.getState() : getState(globalThis[GLOBAL_EXPECT]);
+ if (expectedAssertionsNumber !== null && assertionCalls !== expectedAssertionsNumber) throw expectedAssertionsNumberErrorGen();
+ if (isExpectingAssertions === true && assertionCalls === 0) throw isExpectingAssertionsError;
+ if (this.config.expect.requireAssertions && assertionCalls === 0) throw this.assertionsErrors.get(test);
+ }
+ extendTaskContext(context) {
+ // create error during the test initialization so we have a nice stack trace
+ if (this.config.expect.requireAssertions) this.assertionsErrors.set(context.task, /* @__PURE__ */ new Error("expected any number of assertion, but got none"));
+ let _expect;
+ Object.defineProperty(context, "expect", { get() {
+ if (!_expect) _expect = createExpect(context.task);
+ return _expect;
+ } });
+ Object.defineProperty(context, "_local", { get() {
+ return _expect != null;
+ } });
+ return context;
+ }
+ getImportDurations() {
+ const importDurations = {};
+ const entries = this.workerState.moduleExecutionInfo?.entries() || [];
+ for (const [filepath, { duration, selfTime, external, importer }] of entries) importDurations[normalize(filepath)] = {
+ selfTime,
+ totalTime: duration,
+ external,
+ importer
+ };
+ return importDurations;
+ }
+ trace = (name, attributes, cb) => {
+ const options = typeof attributes === "object" ? { attributes } : {};
+ return this._otel.$(`vitest.test.runner.${name}`, options, cb || attributes);
+ };
+ __setTraces(traces) {
+ this._otel = traces;
+ }
+}
+function clearModuleMocks(config) {
+ const { clearMocks, mockReset, restoreMocks, unstubEnvs, unstubGlobals } = config;
+ if (restoreMocks) vi.restoreAllMocks();
+ if (mockReset) vi.resetAllMocks();
+ if (clearMocks) vi.clearAllMocks();
+ if (unstubEnvs) vi.unstubAllEnvs();
+ if (unstubGlobals) vi.unstubAllGlobals();
+}
+
+export { NodeBenchmarkRunner as N, VitestTestRunner as V };