Skip to content

Commit 83e9be3

Browse files
committed
feat: module separation of temp conf creation for windows
1 parent 6a0e94c commit 83e9be3

6 files changed

Lines changed: 45 additions & 7 deletions

File tree

packages/vscode-wdio-worker/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
"exports": {
77
".": {
88
"import": "./dist/index.js"
9+
},
10+
"./windows": {
11+
"import": "./dist/config.js"
912
}
1013
},
1114
"scripts": {

packages/vscode-wdio-worker/src/test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as os from 'node:os'
33
import { dirname, isAbsolute, join, resolve } from 'node:path'
44

55
import { getLauncherInstance } from './cli.js'
6-
import { createTempConfigFile, isWindows } from './config.js'
6+
import { getTempConfigCreator, isWindows } from './utils.js'
77
import type { RunTestOptions, TestResultData } from '@vscode-wdio/types/api'
88
import type { ResultSet } from '@vscode-wdio/types/reporter'
99
import type { LoggerInterface } from '@vscode-wdio/types/utils'
@@ -43,7 +43,8 @@ export async function runTest(this: WorkerMetaContext, options: RunTestOptions):
4343
}
4444

4545
if (isWindows()) {
46-
configFile = await createTempConfigFile(options.configPath, outputDir.json!)
46+
const creator = await getTempConfigCreator(this)
47+
configFile = await creator(options.configPath, outputDir.json!)
4748
options.configPath = configFile
4849
wdioArgs.configPath = configFile
4950
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import path from 'node:path'
2+
3+
import type { WorkerMetaContext } from '@vscode-wdio/types'
4+
import type { createTempConfigFile } from './config.js'
5+
6+
export type TempConfigFileCreator = typeof createTempConfigFile
7+
8+
const VSCODE_WINDOWS_CONFIG_CREATOR_PATH = path.resolve(__dirname, 'parser/ast.cjs')
9+
10+
let tempConfigCreator: TempConfigFileCreator | undefined
11+
12+
export async function getTempConfigCreator(context: WorkerMetaContext): Promise<TempConfigFileCreator> {
13+
if (tempConfigCreator){
14+
context.log.debug('Use cached TempConfigFileCreator')
15+
return tempConfigCreator
16+
}
17+
context.log.debug('Import TempConfigFileCreator')
18+
tempConfigCreator =((await import(VSCODE_WINDOWS_CONFIG_CREATOR_PATH)).createTempConfigFile as TempConfigFileCreator)
19+
return tempConfigCreator
20+
21+
}
22+
23+
export function isWindows() {
24+
return process.platform === 'win32'
25+
}

packages/vscode-wdio-worker/tests/test.test.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { join } from 'node:path'
55
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
66

77
import { getLauncherInstance } from '../src/cli.js'
8-
import { createTempConfigFile, isWindows } from '../src/config.js'
98
import { runTest } from '../src/test.js'
9+
import { getTempConfigCreator, isWindows } from '../src/utils.js'
1010
import type { Dirent } from 'node:fs'
1111
import type { WorkerMetaContext } from '@vscode-wdio/types/worker'
1212

@@ -21,10 +21,11 @@ vi.mock('../src/cli.js', () => {
2121
)
2222
return { getLauncherInstance }
2323
})
24-
vi.mock('../src/config.js', () => {
24+
25+
vi.mock('../src/utils.js', () => {
2526
return {
26-
createTempConfigFile: vi.fn(async (config) => config),
2727
isWindows: vi.fn(() => false),
28+
getTempConfigCreator: vi.fn(),
2829
}
2930
})
3031

@@ -52,6 +53,7 @@ describe('runTest', () => {
5253
const mockResultDir = '/mock/tmp/dir/result-xyz123'
5354
const mockResultFile = 'wdio-0-0.json'
5455
const mockResultData = JSON.stringify({ some: 'test result' })
56+
const mockTempConfigCreator = vi.fn(async () => '/path/to/customized/wdio.conf.ts')
5557

5658
beforeEach(() => {
5759
// Reset mocks
@@ -63,10 +65,13 @@ describe('runTest', () => {
6365
vi.mocked(fs.mkdir).mockResolvedValue(undefined)
6466
vi.mocked(fs.mkdtemp).mockResolvedValue(mockResultDir)
6567
vi.mocked(fs.access).mockResolvedValue(undefined)
68+
// @ts-ignore
6669
vi.mocked(fs.readdir).mockResolvedValue([mockResultFile as unknown as Dirent])
6770
vi.mocked(fs.readFile).mockResolvedValue(Buffer.from(mockResultData))
6871
vi.mocked(fs.rm).mockResolvedValue(undefined)
6972

73+
vi.mocked(getTempConfigCreator).mockResolvedValue(mockTempConfigCreator)
74+
7075
// Mock console methods
7176
vi.spyOn(console, 'log').mockImplementation(() => {})
7277
vi.spyOn(console, 'error').mockImplementation(() => {})
@@ -104,7 +109,6 @@ describe('runTest', () => {
104109

105110
it('should run tests successfully and return results on the windows', async () => {
106111
vi.mocked(isWindows).mockReturnValue(true)
107-
vi.mocked(createTempConfigFile).mockResolvedValue('/path/to/customized/wdio.conf.ts')
108112
// Act
109113
const result = await runTest.call(mockContext, mockOptions)
110114

@@ -122,7 +126,7 @@ describe('runTest', () => {
122126
expect(fs.mkdtemp).toHaveBeenCalledWith(join(mockTmpDir, 'vscode-webdriverio', 'result-'))
123127

124128
// Verify createTempConfigFile were called
125-
expect(createTempConfigFile).toHaveBeenCalledWith(mockConfigFile, mockResultDir)
129+
expect(mockTempConfigCreator).toHaveBeenCalledWith(mockConfigFile, mockResultDir)
126130

127131
// Verify result files were read
128132
expect(fs.readdir).toHaveBeenCalledWith(mockResultDir)

packages/vscode-webdriverio/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
"./reporter": {
2020
"requireSource": "./src/reporter.ts",
2121
"require": "./dist/reporter.cjs"
22+
},
23+
"./parser/ast": {
24+
"requireSource": "./src/parser/ast.ts",
25+
"require": "./dist/parser/ast.cjs"
2226
}
2327
},
2428
"scripts": {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { createTempConfigFile } from '@vscode-wdio/worker/windows'

0 commit comments

Comments
 (0)