mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 20:26:16 -08:00
41 lines
1.9 KiB
TypeScript
41 lines
1.9 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import vm from 'node:vm'
|
|
|
|
export interface TokenLine { line: string, tokens: { startIndex: number, type: string }[] }
|
|
export interface TokenFixture { source: string, language: string, languages: string[], cases: TokenLine[][] }
|
|
|
|
// Evaluate fixed upstream test definitions with a recording runner, including their
|
|
// generated cases and SCSS preprocessing. This VM is not a security sandbox.
|
|
export function extractBasicFixtures(ts: typeof import('typescript'), tests: string[], read: (file: string) => string): TokenFixture[] {
|
|
const fixtures: TokenFixture[] = []
|
|
const emit = (source: string) => ts.transpileModule(source, {
|
|
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES5 },
|
|
}).outputText
|
|
let clojure: object | undefined
|
|
for (const file of tests) {
|
|
assert(/^monaco-languages\/src\/[^/]+\/[^/]+\.test\.ts$/.test(file), 'Unexpected test member')
|
|
const language = file.split('/')[2]!
|
|
vm.runInNewContext(emit(read(file)), {
|
|
exports: {},
|
|
require(name: string) {
|
|
if (name === '../test/testRunner') {
|
|
return {
|
|
testTokenization(languages: string | string[], cases: TokenLine[][]) {
|
|
fixtures.push(JSON.parse(JSON.stringify({ source: file, language, languages: typeof languages === 'string' ? [languages] : languages, cases })))
|
|
},
|
|
}
|
|
}
|
|
if (language === 'clojure' && name === './clojure') {
|
|
if (!clojure) {
|
|
clojure = {}
|
|
vm.runInNewContext(emit(read('monaco-languages/src/clojure/clojure.ts')), { exports: clojure }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } })
|
|
}
|
|
return clojure
|
|
}
|
|
throw new Error(`Unexpected test import: ${name}`)
|
|
},
|
|
}, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } })
|
|
}
|
|
return fixtures
|
|
}
|