From 16d65a7ffab520faa4b344041fba05442dd9e7e9 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Fri, 25 Mar 2022 09:58:18 +0300 Subject: [PATCH] fix: don't use global timers (#1026) --- .eslintrc | 13 +++++++++++++ packages/vitest/src/node/core.ts | 2 +- packages/vitest/src/node/reporters/dot.ts | 1 + .../src/node/reporters/renderers/dotRenderer.ts | 2 +- .../src/node/reporters/renderers/listRenderer.ts | 2 +- packages/vitest/src/runtime/collect.ts | 1 + packages/vitest/src/runtime/context.ts | 2 +- packages/vitest/src/runtime/run.ts | 2 +- packages/vitest/src/runtime/setup.ts | 2 +- packages/vitest/src/utils/index.ts | 1 + packages/vitest/src/utils/timers.ts | 4 ++++ 11 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 packages/vitest/src/utils/timers.ts diff --git a/.eslintrc b/.eslintrc index ea2fd2a39103..6047e912ed6d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -19,6 +19,19 @@ } ] } + }, + { + "files": "packages/vitest/**/*.*", + "rules": { + "no-restricted-globals": [ + "error", + "setTimeout", + "clearTimeout", + "setInterval", + "clearInterval", + "performance" + ] + } } ] } diff --git a/packages/vitest/src/node/core.ts b/packages/vitest/src/node/core.ts index a4f79a8554d1..15bd501829a6 100644 --- a/packages/vitest/src/node/core.ts +++ b/packages/vitest/src/node/core.ts @@ -7,7 +7,7 @@ import c from 'picocolors' import { ViteNodeServer } from 'vite-node/server' import type { ArgumentsType, Reporter, ResolvedConfig, UserConfig } from '../types' import { SnapshotManager } from '../integrations/snapshot/manager' -import { deepMerge, hasFailed, noop, slash, toArray } from '../utils' +import { clearTimeout, deepMerge, hasFailed, noop, setTimeout, slash, toArray } from '../utils' import { cleanCoverage, reportCoverage } from '../integrations/coverage' import { ReportersMap } from './reporters' import { createPool } from './pool' diff --git a/packages/vitest/src/node/reporters/dot.ts b/packages/vitest/src/node/reporters/dot.ts index cb0fc9647b66..55bf2ef9f499 100644 --- a/packages/vitest/src/node/reporters/dot.ts +++ b/packages/vitest/src/node/reporters/dot.ts @@ -1,4 +1,5 @@ import type { UserConsoleLog } from '../../types' +import { setTimeout } from '../../utils' import { BaseReporter } from './base' import { createDotRenderer } from './renderers/dotRenderer' import type { createListRenderer } from './renderers/listRenderer' diff --git a/packages/vitest/src/node/reporters/renderers/dotRenderer.ts b/packages/vitest/src/node/reporters/renderers/dotRenderer.ts index 10cce462f741..d85accba551c 100644 --- a/packages/vitest/src/node/reporters/renderers/dotRenderer.ts +++ b/packages/vitest/src/node/reporters/renderers/dotRenderer.ts @@ -1,7 +1,7 @@ import { createLogUpdate } from 'log-update' import c from 'picocolors' import type { Task } from '../../../types' -import { getTests } from '../../../utils' +import { clearInterval, getTests, setInterval } from '../../../utils' export interface DotRendererOptions { outputStream: NodeJS.WritableStream diff --git a/packages/vitest/src/node/reporters/renderers/listRenderer.ts b/packages/vitest/src/node/reporters/renderers/listRenderer.ts index 275d29442460..d3f59090e7c5 100644 --- a/packages/vitest/src/node/reporters/renderers/listRenderer.ts +++ b/packages/vitest/src/node/reporters/renderers/listRenderer.ts @@ -3,7 +3,7 @@ import c from 'picocolors' import cliTruncate from 'cli-truncate' import stripAnsi from 'strip-ansi' import type { SuiteHooks, Task } from '../../../types' -import { getTests } from '../../../utils' +import { clearInterval, getTests, setInterval } from '../../../utils' import { F_RIGHT } from '../../../utils/figures' import { getCols, getHookStateSymbol, getStateSymbol } from './utils' diff --git a/packages/vitest/src/runtime/collect.ts b/packages/vitest/src/runtime/collect.ts index 1a2e3acc1c1d..a8fe3b015f3e 100644 --- a/packages/vitest/src/runtime/collect.ts +++ b/packages/vitest/src/runtime/collect.ts @@ -1,3 +1,4 @@ +import { performance } from 'perf_hooks' import { createHash } from 'crypto' import { relative } from 'pathe' import type { File, ResolvedConfig, Suite, TaskBase } from '../types' diff --git a/packages/vitest/src/runtime/context.ts b/packages/vitest/src/runtime/context.ts index f8548f20d9ad..5d202cdf1712 100644 --- a/packages/vitest/src/runtime/context.ts +++ b/packages/vitest/src/runtime/context.ts @@ -1,5 +1,5 @@ import type { Awaitable, DoneCallback, RuntimeContext, SuiteCollector, TestFunction } from '../types' -import { getWorkerState } from '../utils' +import { clearTimeout, getWorkerState, setTimeout } from '../utils' export const context: RuntimeContext = { tasks: [], diff --git a/packages/vitest/src/runtime/run.ts b/packages/vitest/src/runtime/run.ts index 3499b32fd762..37f9d1e0fc75 100644 --- a/packages/vitest/src/runtime/run.ts +++ b/packages/vitest/src/runtime/run.ts @@ -2,7 +2,7 @@ import { performance } from 'perf_hooks' import type { File, HookListener, ResolvedConfig, Suite, SuiteHooks, Task, TaskResult, TaskState, Test } from '../types' import { vi } from '../integrations/vi' import { getSnapshotClient } from '../integrations/snapshot/chai' -import { getFullName, getWorkerState, hasFailed, hasTests, partitionSuiteChildren } from '../utils' +import { clearTimeout, getFullName, getWorkerState, hasFailed, hasTests, partitionSuiteChildren, setTimeout } from '../utils' import { getState, setState } from '../integrations/chai/jest-expect' import { takeCoverage } from '../integrations/coverage' import { getFn, getHooks } from './map' diff --git a/packages/vitest/src/runtime/setup.ts b/packages/vitest/src/runtime/setup.ts index 477a597be824..956bca102631 100644 --- a/packages/vitest/src/runtime/setup.ts +++ b/packages/vitest/src/runtime/setup.ts @@ -2,7 +2,7 @@ import { Console } from 'console' import { Writable } from 'stream' import { environments } from '../integrations/env' import type { ResolvedConfig } from '../types' -import { getWorkerState, toArray } from '../utils' +import { clearTimeout, getWorkerState, setTimeout, toArray } from '../utils' import * as VitestIndex from '../index' import { resetRunOnceCounter } from '../integrations/run-once' import { RealDate } from '../integrations/mockdate' diff --git a/packages/vitest/src/utils/index.ts b/packages/vitest/src/utils/index.ts index 40a8fe1417af..fa834265ec9e 100644 --- a/packages/vitest/src/utils/index.ts +++ b/packages/vitest/src/utils/index.ts @@ -8,6 +8,7 @@ export * from './tasks' export * from './path' export * from './base' export * from './global' +export * from './timers' export const isWindows = process.platform === 'win32' diff --git a/packages/vitest/src/utils/timers.ts b/packages/vitest/src/utils/timers.ts new file mode 100644 index 000000000000..2a877bcb5b01 --- /dev/null +++ b/packages/vitest/src/utils/timers.ts @@ -0,0 +1,4 @@ +export const setTimeout = globalThis.setTimeout +export const setInterval = globalThis.setInterval +export const clearInterval = globalThis.clearInterval +export const clearTimeout = globalThis.clearTimeout