import path from 'node:path'import { describe, test, expect, vi, beforeEach } from 'vitest'import type * as utils from '../../src/node/utils.js'import { setupChromedriver, setupEdgedriver, setupGeckodriver, setupPuppeteerBrowser } from '../../src/node/utils.js'import { setupDriver, setupBrowser } from '../../src/node/manager.js'vi.mock('../../src/node/utils.js', async (orig) => {const origMod = await orig<typeof utils>()return {...origMod,getCacheDir: vi.fn().mockReturnValue('/foo/bar'),setupChromedriver: vi.fn(),setupEdgedriver: vi.fn(),setupGeckodriver: vi.fn(),setupPuppeteerBrowser: vi.fn()}})vi.mock('@wdio/logger', () => import(path.join(process.cwd(), '__mocks__', '@wdio/logger')))describe('setupDriver', () => {beforeEach(() => {vi.mocked(setupChromedriver).mockClear()vi.mocked(setupEdgedriver).mockClear()vi.mocked(setupGeckodriver).mockClear()})test('with testrunner capabilities', async () => {await setupDriver({}, [{browserName: 'chrome',browserVersion: '1'}, {browserName: 'chrome',browserVersion: '2'}, {browserName: 'chrome',browserVersion: '2','wdio:chromedriverOptions': {binary: 'foo'}}, {browserName: 'chrome',browserVersion: '3','wdio:chromedriverOptions': {binary: 'foo'}}, {browserName: 'edge',browserVersion: '3'}, {browserName: 'edge',browserVersion: '3'}, {browserName: 'edge',browserVersion: '4'}, {browserName: 'edge'}, {browserName: 'edge','wdio:edgedriverOptions': {binary: 'foo'}}, {browserName: 'edge'}, {browserName: 'firefox',browserVersion: '5'}, {browserName: 'firefox',browserVersion: '5','wdio:geckodriverOptions': {binary: 'foo'}}, {browserName: 'firefox',browserVersion: '5'}, {browserName: 'firefox',browserVersion: '6'}])expect(setupChromedriver).toBeCalledTimes(2)expect(setupChromedriver).toBeCalledWith('/foo/bar', '1')expect(setupChromedriver).toBeCalledWith('/foo/bar', '2')expect(setupEdgedriver).toBeCalledTimes(3)expect(setupEdgedriver).toBeCalledWith('/foo/bar', undefined)expect(setupEdgedriver).toBeCalledWith('/foo/bar', '3')expect(setupEdgedriver).toBeCalledWith('/foo/bar', '4')expect(setupGeckodriver).toBeCalledTimes(2)expect(setupGeckodriver).toBeCalledWith('/foo/bar', '5')expect(setupGeckodriver).toBeCalledWith('/foo/bar', '6')})test('with multiremote capabilities', async () => {await setupDriver({}, {browserA: {capabilities: {browserName: 'chrome',browserVersion: '1'}},browserB: {capabilities: {browserName: 'chrome',browserVersion: '2'}},browserBWithDriverBinary: {capabilities: {browserName: 'chrome',browserVersion: '3','wdio:chromedriverOptions': {binary: 'foo'}}},browserBRepeat: {capabilities: {browserName: 'chrome',browserVersion: '2'}},browserC: {capabilities: {browserName: 'edge',browserVersion: '3'}},browserD: {capabilities: {browserName: 'edge',browserVersion: '4'}},browserDRepeat: {capabilities: {browserName: 'edge',browserVersion: '4'}},browserDWithDriverBinary: {capabilities: {browserName: 'edge',browserVersion: '5','wdio:edgedriverOptions': {binary: 'foo'}}},browserE: {capabilities: {browserName: 'firefox',browserVersion: '5'}},browserERepeat: {capabilities: {browserName: 'firefox',browserVersion: '5'}},browserEWithDriverBinary: {capabilities: {browserName: 'firefox',browserVersion: '6','wdio:geckodriverOptions': {binary: 'foo'}}},browserF: {capabilities: {browserName: 'firefox',browserVersion: '7'}}})expect(setupChromedriver).toBeCalledTimes(2)expect(setupChromedriver).toBeCalledWith('/foo/bar', '1')expect(setupChromedriver).toBeCalledWith('/foo/bar', '2')expect(setupEdgedriver).toBeCalledTimes(2)expect(setupEdgedriver).toBeCalledWith('/foo/bar', '3')expect(setupEdgedriver).toBeCalledWith('/foo/bar', '4')expect(setupGeckodriver).toBeCalledTimes(2)expect(setupGeckodriver).toBeCalledWith('/foo/bar', '5')expect(setupGeckodriver).toBeCalledWith('/foo/bar', '7')})test('with multiremote capabilities series', async () => {await setupDriver({}, [{browserA: {capabilities: {browserName: 'chrome',browserVersion: '1'}},browserB: {capabilities: {browserName: 'chrome',browserVersion: '2'}},browserBWithDriverBinary: {capabilities: {browserName: 'chrome',browserVersion: '3','wdio:chromedriverOptions': {binary: 'foo'}}},}, {browserC: {capabilities: {browserName: 'edge',browserVersion: '3'}},browserD: {capabilities: {browserName: 'edge',browserVersion: '4'}},browserDRepeat: {capabilities: {browserName: 'edge',browserVersion: '4'}},browserDWithDriverBinary: {capabilities: {browserName: 'edge',browserVersion: '5','wdio:edgedriverOptions': {binary: 'foo'}}},}, {browserA: {capabilities: {browserName: 'chrome',browserVersion: '1'}},browserE: {capabilities: {browserName: 'firefox',browserVersion: '5'}},browserF: {capabilities: {browserName: 'firefox',browserVersion: '6'}},browserFWithDriverBinary: {capabilities: {browserName: 'firefox',browserVersion: '7','wdio:geckodriverOptions': {binary: 'foo'}}}}])expect(setupChromedriver).toBeCalledTimes(2)expect(setupChromedriver).toBeCalledWith('/foo/bar', '1')expect(setupChromedriver).toBeCalledWith('/foo/bar', '2')expect(setupEdgedriver).toBeCalledTimes(2)expect(setupEdgedriver).toBeCalledWith('/foo/bar', '3')expect(setupEdgedriver).toBeCalledWith('/foo/bar', '4')expect(setupGeckodriver).toBeCalledTimes(2)expect(setupGeckodriver).toBeCalledWith('/foo/bar', '5')expect(setupGeckodriver).toBeCalledWith('/foo/bar', '6')})})describe('setupBrowser', () => {beforeEach(() => {vi.mocked(setupPuppeteerBrowser).mockClear()})test('with testrunner capabilities', async () => {await setupBrowser({}, [{browserName: 'chrome',browserVersion: '1'}, {browserName: 'chrome',browserVersion: '2'}, {browserName: 'edge',browserVersion: '3'}, {browserName: 'edge',browserVersion: '4'}, {browserName: 'firefox',browserVersion: '5'}, {browserName: 'firefox',browserVersion: '6'}])expect(setupPuppeteerBrowser).toBeCalledTimes(4)expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '1'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '2'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '5'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '6'})})test('with multiremote capabilities', async () => {await setupBrowser({}, {browserA: {capabilities: {browserName: 'chrome',browserVersion: '1'}},browserB: {capabilities: {browserName: 'chrome',browserVersion: '2'}},browserC: {capabilities: {browserName: 'edge',browserVersion: '3'}},browserD: {capabilities: {browserName: 'edge',browserVersion: '4'}},browserE: {capabilities: {browserName: 'firefox',browserVersion: '5'}},browserF: {capabilities: {browserName: 'firefox',browserVersion: '6'}}})expect(setupPuppeteerBrowser).toBeCalledTimes(4)expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '1'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '2'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '5'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '6'})})test('with multiremote capabilities series', async () => {await setupBrowser({}, [{browserA: {capabilities: {browserName: 'chrome',browserVersion: '1'}},browserB: {capabilities: {browserName: 'chrome',browserVersion: '2'}},}, {browserC: {capabilities: {browserName: 'edge',browserVersion: '3'}},browserD: {capabilities: {browserName: 'edge',browserVersion: '4'}},}, {browserE: {capabilities: {browserName: 'firefox',browserVersion: '5'}},browserF: {capabilities: {browserName: 'firefox',browserVersion: '6'}}}])expect(setupPuppeteerBrowser).toBeCalledTimes(4)expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '1'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'chrome',browserVersion: '2'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '5'})expect(setupPuppeteerBrowser).toBeCalledWith('/foo/bar', {browserName: 'firefox',browserVersion: '6'})})})