LaTeX-Workshop/test/runTest.ts
2022-03-02 08:34:49 +01:00

85 lines
2.8 KiB
TypeScript

import * as path from 'path'
import * as process from 'process'
import * as fs from 'fs'
import * as glob from 'glob'
import * as tmpFile from 'tmp'
import { runTests } from '@vscode/test-electron'
function writeSettingsJson(userDataDir: string) {
const configDir = path.join(userDataDir, 'User')
if (!fs.existsSync(configDir)) {
fs.mkdirSync(configDir)
}
const settingFilePath = path.join(configDir, 'settings.json')
const settingsJson =
`
{
"extensions.autoUpdate": false,
"extensions.autoCheckUpdates": false,
"update.mode": "none"
}
`
fs.writeFileSync(settingFilePath, settingsJson)
}
async function runTestsOnEachFixture(targetName: 'build' | 'rootfile' | 'viewer' | 'completion' | 'multiroot-ws') {
const extensionDevelopmentPath = path.resolve(__dirname, '../../')
const extensionTestsPath = path.resolve(__dirname, `./${targetName}.index`)
const tmpdir = tmpFile.dirSync({ unsafeCleanup: true })
const extTmpdir = tmpFile.dirSync({ unsafeCleanup: true })
const fixtures = glob.sync(`test/fixtures/${targetName}/*`, { cwd: extensionDevelopmentPath })
let testBuildWorkspaces: string[] = []
const fixturePatterns = process.argv.slice(2).filter(s => !/^-/.exec(s))
if (fixturePatterns.length === 0) {
testBuildWorkspaces = fixtures
} else {
testBuildWorkspaces = fixtures.filter( fixture => {
return fixturePatterns.some( pat => fixture.includes(pat) )
})
}
writeSettingsJson(tmpdir.name)
let firstTime = true
for (let testWorkspace of testBuildWorkspaces) {
const nodejsTimeout = setTimeout(() => process.exit(1), firstTime ? 3*60000 : 60000)
if (testWorkspace.indexOf('multiroot-ws') >= 0) {
testWorkspace += '/resource.code-workspace'
}
await runTests({
version: '1.64.2',
extensionDevelopmentPath,
extensionTestsPath,
launchArgs: [
testWorkspace,
'--user-data-dir=' + tmpdir.name,
'--extensions-dir=' + extTmpdir.name,
'--disable-extensions',
'--disable-gpu'
],
extensionTestsEnv: {
LATEXWORKSHOP_CI_ENABLE_DOCKER: process.argv.includes('--enable-docker') ? '1' : undefined,
LATEXWORKSHOP_CI: '1'
}
})
clearTimeout(nodejsTimeout)
firstTime = false
}
}
async function main() {
try {
await runTestsOnEachFixture('rootfile')
await runTestsOnEachFixture('build')
await runTestsOnEachFixture('viewer')
await runTestsOnEachFixture('completion')
await runTestsOnEachFixture('multiroot-ws')
} catch (err) {
console.error('Failed to run tests')
process.exit(1)
}
}
void main()