版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

269 wiersze
9.4 KiB

  1. import { startTests } from '@vitest/runner';
  2. import { resolve } from 'pathe';
  3. import { r as resetModules } from './chunk-utils-env.6b856dbf.js';
  4. import { R as RealDate, g as globalExpect, a as vi } from './chunk-utils-import.e488ace3.js';
  5. import { d as distDir } from './chunk-paths.e36446b4.js';
  6. import { a as startCoverageInsideWorker, t as takeCoverageInsideWorker, s as stopCoverageInsideWorker } from './chunk-integrations-coverage.d93ee824.js';
  7. import { createRequire } from 'node:module';
  8. import { isatty } from 'node:tty';
  9. import { installSourcemapsSupport } from 'vite-node/source-map';
  10. import { setupColors, createColors, getSafeTimers } from '@vitest/utils';
  11. import { e as environments } from './chunk-env-node.affdd278.js';
  12. import { i as index } from './chunk-integrations-utils.23c19408.js';
  13. import { s as setupSnapshotEnvironment } from './chunk-snapshot-env.a347d647.js';
  14. import { promises, existsSync } from 'node:fs';
  15. import { r as rpc } from './chunk-runtime-rpc.d6aa57f8.js';
  16. import { s as setupCommonEnv } from './chunk-runtime-setup.5d504677.js';
  17. import { g as getWorkerState } from './chunk-utils-global.fd174983.js';
  18. import 'std-env';
  19. import '@vitest/runner/utils';
  20. import 'chai';
  21. import './vendor-_commonjsHelpers.addc3445.js';
  22. import '@vitest/expect';
  23. import './chunk-utils-base.b5ddfcc9.js';
  24. import './chunk-utils-tasks.8781fd71.js';
  25. import 'util';
  26. import '@vitest/spy';
  27. import 'node:url';
  28. import 'node:console';
  29. import 'local-pkg';
  30. import './chunk-integrations-run-once.ea614f17.js';
  31. class NodeSnapshotEnvironment {
  32. resolvePath(filepath) {
  33. return rpc().resolveSnapshotPath(filepath);
  34. }
  35. async prepareDirectory(filepath) {
  36. await promises.mkdir(filepath, { recursive: true });
  37. }
  38. async saveSnapshotFile(filepath, snapshot) {
  39. await promises.writeFile(filepath, snapshot, "utf-8");
  40. }
  41. async readSnapshotFile(filepath) {
  42. if (!existsSync(filepath))
  43. return null;
  44. return promises.readFile(filepath, "utf-8");
  45. }
  46. async removeSnapshotFile(filepath) {
  47. if (existsSync(filepath))
  48. await promises.unlink(filepath);
  49. }
  50. }
  51. let globalSetup = false;
  52. async function setupGlobalEnv(config) {
  53. await setupCommonEnv(config);
  54. Object.defineProperty(globalThis, "__vitest_index__", {
  55. value: index,
  56. enumerable: false
  57. });
  58. if (globalSetup)
  59. return;
  60. globalSetup = true;
  61. setupSnapshotEnvironment(new NodeSnapshotEnvironment());
  62. setupColors(createColors(isatty(1)));
  63. const _require = createRequire(import.meta.url);
  64. _require.extensions[".css"] = () => ({});
  65. _require.extensions[".scss"] = () => ({});
  66. _require.extensions[".sass"] = () => ({});
  67. const state = getWorkerState();
  68. installSourcemapsSupport({
  69. getSourceMap: (source) => state.moduleCache.getSourceMap(source)
  70. });
  71. await setupConsoleLogSpy();
  72. }
  73. async function setupConsoleLogSpy() {
  74. const stdoutBuffer = /* @__PURE__ */ new Map();
  75. const stderrBuffer = /* @__PURE__ */ new Map();
  76. const timers = /* @__PURE__ */ new Map();
  77. const unknownTestId = "__vitest__unknown_test__";
  78. const { Writable } = await import('node:stream');
  79. const { Console } = await import('node:console');
  80. const { setTimeout, clearTimeout } = getSafeTimers();
  81. function schedule(taskId) {
  82. const timer = timers.get(taskId);
  83. const { stdoutTime, stderrTime } = timer;
  84. clearTimeout(timer.timer);
  85. timer.timer = setTimeout(() => {
  86. if (stderrTime < stdoutTime) {
  87. sendStderr(taskId);
  88. sendStdout(taskId);
  89. } else {
  90. sendStdout(taskId);
  91. sendStderr(taskId);
  92. }
  93. });
  94. }
  95. function sendStdout(taskId) {
  96. const buffer = stdoutBuffer.get(taskId);
  97. if (!buffer)
  98. return;
  99. const content = buffer.map((i) => String(i)).join("");
  100. const timer = timers.get(taskId);
  101. rpc().onUserConsoleLog({
  102. type: "stdout",
  103. content: content || "<empty line>",
  104. taskId,
  105. time: timer.stdoutTime || RealDate.now(),
  106. size: buffer.length
  107. });
  108. stdoutBuffer.set(taskId, []);
  109. timer.stdoutTime = 0;
  110. }
  111. function sendStderr(taskId) {
  112. const buffer = stderrBuffer.get(taskId);
  113. if (!buffer)
  114. return;
  115. const content = buffer.map((i) => String(i)).join("");
  116. const timer = timers.get(taskId);
  117. rpc().onUserConsoleLog({
  118. type: "stderr",
  119. content: content || "<empty line>",
  120. taskId,
  121. time: timer.stderrTime || RealDate.now(),
  122. size: buffer.length
  123. });
  124. stderrBuffer.set(taskId, []);
  125. timer.stderrTime = 0;
  126. }
  127. const stdout = new Writable({
  128. write(data, encoding, callback) {
  129. var _a, _b;
  130. const id = ((_b = (_a = getWorkerState()) == null ? void 0 : _a.current) == null ? void 0 : _b.id) ?? unknownTestId;
  131. let timer = timers.get(id);
  132. if (timer) {
  133. timer.stdoutTime = timer.stdoutTime || RealDate.now();
  134. } else {
  135. timer = { stdoutTime: RealDate.now(), stderrTime: RealDate.now(), timer: 0 };
  136. timers.set(id, timer);
  137. }
  138. let buffer = stdoutBuffer.get(id);
  139. if (!buffer) {
  140. buffer = [];
  141. stdoutBuffer.set(id, buffer);
  142. }
  143. buffer.push(data);
  144. schedule(id);
  145. callback();
  146. }
  147. });
  148. const stderr = new Writable({
  149. write(data, encoding, callback) {
  150. var _a, _b;
  151. const id = ((_b = (_a = getWorkerState()) == null ? void 0 : _a.current) == null ? void 0 : _b.id) ?? unknownTestId;
  152. let timer = timers.get(id);
  153. if (timer) {
  154. timer.stderrTime = timer.stderrTime || RealDate.now();
  155. } else {
  156. timer = { stderrTime: RealDate.now(), stdoutTime: RealDate.now(), timer: 0 };
  157. timers.set(id, timer);
  158. }
  159. let buffer = stderrBuffer.get(id);
  160. if (!buffer) {
  161. buffer = [];
  162. stderrBuffer.set(id, buffer);
  163. }
  164. buffer.push(data);
  165. schedule(id);
  166. callback();
  167. }
  168. });
  169. globalThis.console = new Console({
  170. stdout,
  171. stderr,
  172. colorMode: true,
  173. groupIndentation: 2
  174. });
  175. }
  176. async function loadEnvironment(name, executor) {
  177. const pkg = await executor.executeId(`vitest-environment-${name}`);
  178. if (!pkg || !pkg.default || typeof pkg.default !== "object" || typeof pkg.default.setup !== "function") {
  179. throw new Error(
  180. `Environment "${name}" is not a valid environment. Package "vitest-environment-${name}" should have default export with "setup" method.`
  181. );
  182. }
  183. return pkg.default;
  184. }
  185. async function withEnv(name, options, executor, fn) {
  186. const config = environments[name] || await loadEnvironment(name, executor);
  187. globalThis.__vitest_environment__ = config.name || name;
  188. globalExpect.setState({
  189. environment: config.name || name || "node"
  190. });
  191. const env = await config.setup(globalThis, options);
  192. try {
  193. await fn();
  194. } finally {
  195. const { setTimeout } = getSafeTimers();
  196. await new Promise((resolve) => setTimeout(resolve));
  197. await env.teardown(globalThis);
  198. }
  199. }
  200. const runnersFile = resolve(distDir, "runners.js");
  201. async function getTestRunnerConstructor(config, executor) {
  202. if (!config.runner) {
  203. const { VitestTestRunner, NodeBenchmarkRunner } = await executor.executeFile(runnersFile);
  204. return config.mode === "test" ? VitestTestRunner : NodeBenchmarkRunner;
  205. }
  206. const mod = await executor.executeId(config.runner);
  207. if (!mod.default && typeof mod.default !== "function")
  208. throw new Error(`Runner must export a default function, but got ${typeof mod.default} imported from ${config.runner}`);
  209. return mod.default;
  210. }
  211. async function getTestRunner(config, executor) {
  212. const TestRunner = await getTestRunnerConstructor(config, executor);
  213. const testRunner = new TestRunner(config);
  214. Object.defineProperty(testRunner, "__vitest_executor", {
  215. value: executor,
  216. enumerable: false,
  217. configurable: false
  218. });
  219. if (!testRunner.config)
  220. testRunner.config = config;
  221. if (!testRunner.importFile)
  222. throw new Error('Runner must implement "importFile" method.');
  223. const originalOnTaskUpdate = testRunner.onTaskUpdate;
  224. testRunner.onTaskUpdate = async (task) => {
  225. const p = rpc().onTaskUpdate(task);
  226. await (originalOnTaskUpdate == null ? void 0 : originalOnTaskUpdate.call(testRunner, task));
  227. return p;
  228. };
  229. const originalOnCollected = testRunner.onCollected;
  230. testRunner.onCollected = async (files) => {
  231. rpc().onCollected(files);
  232. await (originalOnCollected == null ? void 0 : originalOnCollected.call(testRunner, files));
  233. };
  234. const originalOnAfterRun = testRunner.onAfterRun;
  235. testRunner.onAfterRun = async (files) => {
  236. const coverage = await takeCoverageInsideWorker(config.coverage, executor);
  237. rpc().onAfterSuiteRun({ coverage });
  238. await (originalOnAfterRun == null ? void 0 : originalOnAfterRun.call(testRunner, files));
  239. };
  240. return testRunner;
  241. }
  242. async function run(files, config, environment, executor) {
  243. await setupGlobalEnv(config);
  244. await startCoverageInsideWorker(config.coverage, executor);
  245. const workerState = getWorkerState();
  246. const runner = await getTestRunner(config, executor);
  247. globalThis.__vitest_environment__ = environment;
  248. await withEnv(environment.name, environment.options || config.environmentOptions || {}, executor, async () => {
  249. for (const file of files) {
  250. if (config.isolate) {
  251. workerState.mockMap.clear();
  252. resetModules(workerState.moduleCache, true);
  253. }
  254. workerState.filepath = file;
  255. await startTests([file], runner);
  256. workerState.filepath = void 0;
  257. vi.resetConfig();
  258. vi.restoreAllMocks();
  259. }
  260. await stopCoverageInsideWorker(config.coverage, executor);
  261. });
  262. workerState.environmentTeardownRun = true;
  263. }
  264. export { run };