mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-26 08:51:20 -08:00
build(site): [SITE-07] reproduce basic languages and verify upstream token cases
This commit is contained in:
1 parent
bc9cb61aaf
commit
426fee8faa
21 files changed
+4207
-6
No files matched your search
@@ -0,0 +1,40 @@
|
||||
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
|
||||
}
|
||||
Reference in new issue
Block a user