mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 03:17:46 -08:00
46 lines
2.6 KiB
JavaScript
46 lines
2.6 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
// eslint-disable-next-line test/no-import-node-test -- Declaration generation must reject drift and invalid public sources.
|
|
import { test } from 'node:test'
|
|
import { generateCoreDeclarations } from '../scripts/build-types.mjs'
|
|
|
|
test('declaration checks reject stale output without overwriting it and recover through explicit generation', async () => {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'artplayer-declarations-'))
|
|
const folder = path.join(root, 'packages/artplayer')
|
|
fs.mkdirSync(path.join(folder, 'public'), { recursive: true })
|
|
fs.mkdirSync(path.join(folder, 'types'), { recursive: true })
|
|
const source = path.join(folder, 'public/contract.ts')
|
|
const output = path.join(folder, 'types/contract.d.ts')
|
|
try {
|
|
fs.writeFileSync(source, 'export interface Contract { name: string }\n')
|
|
await assert.rejects(generateCoreDeclarations({ root }), /stale/)
|
|
assert.equal(fs.existsSync(output), false)
|
|
await generateCoreDeclarations({ root, write: true })
|
|
const generated = fs.readFileSync(output, 'utf8')
|
|
assert.match(generated, /Generated from public\/contract.ts/)
|
|
assert.deepEqual((await generateCoreDeclarations({ root })).changed, [])
|
|
fs.writeFileSync(source, 'export interface Contract { name: string, enabled: boolean }\n')
|
|
await assert.rejects(generateCoreDeclarations({ root }), /stale/)
|
|
assert.equal(fs.readFileSync(output, 'utf8'), generated)
|
|
await generateCoreDeclarations({ root, write: true })
|
|
assert.match(fs.readFileSync(output, 'utf8'), /enabled: boolean/)
|
|
assert.equal(fs.existsSync(path.join(folder, 'types/contract.js')), false)
|
|
fs.writeFileSync(source, 'export interface Contract { name: MissingPublicType }\n')
|
|
const valid = fs.readFileSync(output, 'utf8')
|
|
await assert.rejects(generateCoreDeclarations({ root, write: true }), /MissingPublicType/)
|
|
assert.equal(fs.readFileSync(output, 'utf8'), valid)
|
|
fs.mkdirSync(path.join(folder, 'src'))
|
|
fs.writeFileSync(path.join(folder, 'src/private.ts'), 'export interface Private { internal: boolean }\n')
|
|
fs.writeFileSync(source, 'export type { Private } from "../src/private.js"\n')
|
|
await assert.rejects(generateCoreDeclarations({ root, write: true }), /rootDir|non-public/)
|
|
assert.equal(fs.readFileSync(output, 'utf8'), valid)
|
|
}
|
|
finally {
|
|
assert.equal(path.dirname(path.resolve(root)), path.resolve(os.tmpdir()))
|
|
assert(path.basename(root).startsWith('artplayer-declarations-'))
|
|
fs.rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|