| |
| |
| |
| |
| |
|
|
| import { execSync } from 'child_process'; |
| import { mkdirSync, writeFileSync, readFileSync } from 'fs'; |
| import { join, dirname } from 'path'; |
| import { fileURLToPath } from 'url'; |
| import { env } from 'process'; |
|
|
| const __dirname = dirname(fileURLToPath(import.meta.url)); |
|
|
| function sanitizeTestName(name) { |
| return name |
| .toLowerCase() |
| .replace(/[^a-z0-9]/g, '-') |
| .replace(/-+/g, '-'); |
| } |
|
|
| export class TestRig { |
| constructor() { |
| this.bundlePath = join(__dirname, '..', 'bundle/gemini.js'); |
| this.testDir = null; |
| } |
|
|
| setup(testName) { |
| this.testName = testName; |
| const sanitizedName = sanitizeTestName(testName); |
| this.testDir = join(env.INTEGRATION_TEST_FILE_DIR, sanitizedName); |
| mkdirSync(this.testDir, { recursive: true }); |
| } |
|
|
| createFile(fileName, content) { |
| const filePath = join(this.testDir, fileName); |
| writeFileSync(filePath, content); |
| return filePath; |
| } |
|
|
| mkdir(dir) { |
| mkdirSync(join(this.testDir, dir)); |
| } |
|
|
| sync() { |
| |
| execSync('sync', { cwd: this.testDir }); |
| } |
|
|
| run(prompt, ...args) { |
| const output = execSync( |
| `node ${this.bundlePath} --yolo --prompt "${prompt}" ${args.join(' ')}`, |
| { |
| cwd: this.testDir, |
| encoding: 'utf-8', |
| }, |
| ); |
|
|
| if (env.KEEP_OUTPUT === 'true') { |
| const testId = `${env.TEST_FILE_NAME.replace( |
| '.test.js', |
| '', |
| )}:${this.testName.replace(/ /g, '-')}`; |
| console.log(`--- TEST: ${testId} ---`); |
| console.log(output); |
| console.log(`--- END TEST: ${testId} ---`); |
| } |
|
|
| return output; |
| } |
|
|
| readFile(fileName) { |
| const content = readFileSync(join(this.testDir, fileName), 'utf-8'); |
| if (env.KEEP_OUTPUT === 'true') { |
| const testId = `${env.TEST_FILE_NAME.replace( |
| '.test.js', |
| '', |
| )}:${this.testName.replace(/ /g, '-')}`; |
| console.log(`--- FILE: ${testId}/${fileName} ---`); |
| console.log(content); |
| console.log(`--- END FILE: ${testId}/${fileName} ---`); |
| } |
| return content; |
| } |
| } |
|
|