import { vi } from 'vitest' import { sleep as sleepOrig, isFunctionAsync as isFnAsync, getArgumentType as getArgumentTypeOrig, isValidParameter as isValidParameterOrig, commandCallStructure as commandCallStructureOrig } from '../../packages/wdio-utils/src/utils.js' import webdriverMonadOrig from '../../packages/wdio-utils/src/monad.js' import { isW3C as isW3cOrig, isBidi as isBidiOrig, sessionEnvironmentDetector as sessionEnvDetector, capabilitiesEnvironmentDetector as capabilitiesEnvDetector } from '../../packages/wdio-utils/src/envDetector.js' import { UNICODE_CHARACTERS as UNICODE_CHARACTERS_ORIG, HOOK_DEFINITION as HOOK_DEFINITION_ORIG } from '../../packages/wdio-utils/src/constants.js' class DotReporter { options: any emit: any constructor (options: any) { this.options = options this.emit = vi.fn() } } class RunnerMock { shutdown = vi.fn().mockResolvedValue(true) initialize = vi.fn() } class FoobarServiceMock { beforeSuite () {} afterCommand () {} } const frameworkMocks = { testNoFailures: { init () { return this }, hasTests () { return true }, run() { return 0 } }, testWithFailures: { init () { return this }, hasTests () { return true }, run() { return 123 } }, testThrows: { init () { return this }, hasTests () { return true }, run() { throw new Error('framework testThrows failed') } }, testNoTests: { init () { return this }, hasTests () { return false } } } const pluginMocks = { reporter: { dot: DotReporter }, service: { foobar: FoobarServiceMock }, runner: { local: RunnerMock }, framework: frameworkMocks } export const initializePlugin = vi.fn().mockImplementation( async (name: keyof typeof frameworkMocks, type: keyof typeof pluginMocks) => ( { default: (pluginMocks[type] as any)[name] } ) ) export const initializeWorkerService = vi.fn().mockReturnValue([]) export const initializeLauncherService = vi.fn().mockReturnValue({ launcherServices: [], ignoredWorkerServices: [] }) export const isValidParameter = isValidParameterOrig export const commandCallStructure = commandCallStructureOrig export const isFunctionAsync = isFnAsync export const safeRequire = vi.fn().mockReturnValue(() => {}) export const webdriverMonad = webdriverMonadOrig export const getArgumentType = getArgumentTypeOrig /** * shim */ export const executeSync = vi.fn() export const executeAsync = vi.fn() export const wrapCommand = (_: any, origFn: any) => origFn export const wrapGlobalTestMethod = vi.fn().mockReturnValue(vi.fn()) export const executeHooksWithArgs = vi.fn() export const runFnInFiberContext = vi.fn().mockImplementation((fn) => { return function (this: unknown, ...args: any[]) { return Promise.resolve(fn.apply(this, args)) } }) export const setWdioSyncSupport = (value: boolean) => { hasWdioSyncSupport = value } export let hasWdioSyncSupport = false export const testFnWrapper = vi.fn() export const isW3C = isW3cOrig export const isBidi = isBidiOrig export const sessionEnvironmentDetector = vi.fn().mockImplementation( // @ts-ignore (...args) => sessionEnvDetector(...args)) export const capabilitiesEnvironmentDetector = capabilitiesEnvDetector export const transformCommandLogResult = vi.fn().mockImplementation((data) => data) export const sleep = vi.fn().mockImplementation(sleepOrig) export const UNICODE_CHARACTERS = UNICODE_CHARACTERS_ORIG export const HOOK_DEFINITION = HOOK_DEFINITION_ORIG export const startWebDriver = vi.fn((params) => { params.hostname = '0.0.0.0' params.port = 4444 params.path = '/' }) export const setupBrowser = vi.fn() export const setupDriver = vi.fn() export const enableFileLogging = vi.fn()