mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-18 19:01:20 -08:00
test(ci): [CI-TYPES-01] validate installed Audio and HLS types
This commit is contained in:
1 parent
210484c443
commit
00c131bff1
16 files changed
+1246
-12
No files matched your search
@@ -0,0 +1,64 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
// eslint-disable-next-line test/no-import-node-test -- Exercises the repository's isolated compiler runner.
|
||||
import { test } from 'node:test'
|
||||
import { checkTypeFixture, typeMatrix } from '../scripts/consumers/types.ts'
|
||||
import { consumerDirectory, removeConsumer } from '../scripts/package-consumer.mjs'
|
||||
|
||||
const source = `import { update } from 'fixture'
|
||||
update('video.mp4')
|
||||
// @ts-expect-error URL must stay a string.
|
||||
update(123)
|
||||
`
|
||||
|
||||
function setup(declaration = 'export declare function update(url: string): void') {
|
||||
const dir = consumerDirectory()
|
||||
const pkg = path.join(dir, 'node_modules/fixture')
|
||||
fs.mkdirSync(pkg, { recursive: true })
|
||||
fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify({ name: 'fixture', types: 'index.d.ts' }))
|
||||
fs.writeFileSync(path.join(pkg, 'index.d.ts'), declaration)
|
||||
return { dir, pkg }
|
||||
}
|
||||
|
||||
test('Isolated consumer validates real declarations and each negative call in all five compiler modes', () => {
|
||||
const { dir } = setup()
|
||||
try {
|
||||
for (const { compiler, mode } of typeMatrix) {
|
||||
const result = checkTypeFixture(dir, source, compiler, mode)
|
||||
assert.deepEqual(result.declarations, ['node_modules/fixture/index.d.ts'])
|
||||
assert.deepEqual(result.negativeDiagnostics, [{ code: 2345, line: 4 }])
|
||||
assert.equal(result.negativeStatements, 1)
|
||||
}
|
||||
}
|
||||
finally { removeConsumer(dir) }
|
||||
})
|
||||
|
||||
test('Missing declarations and accidental any widening fail installed consumer validation', () => {
|
||||
const { dir, pkg } = setup()
|
||||
const { compiler, mode } = typeMatrix[0]
|
||||
try {
|
||||
fs.rmSync(path.join(pkg, 'index.d.ts'))
|
||||
assert.throws(() => checkTypeFixture(dir, source, compiler, mode), /Valid installed consumer failed/)
|
||||
fs.writeFileSync(path.join(pkg, 'index.d.ts'), 'export declare function update(url: any): void')
|
||||
assert.throws(() => checkTypeFixture(dir, source, compiler, mode), /Valid installed consumer failed/)
|
||||
}
|
||||
finally { removeConsumer(dir) }
|
||||
})
|
||||
|
||||
test('A declaration reached through an external package link cannot silently satisfy the consumer', () => {
|
||||
const { dir } = setup()
|
||||
const external = consumerDirectory()
|
||||
const { compiler, mode } = typeMatrix[0]
|
||||
try {
|
||||
fs.writeFileSync(path.join(external, 'index.d.ts'), 'export declare const value: string')
|
||||
fs.symlinkSync(external, path.join(dir, 'node_modules/external'), process.platform === 'win32' ? 'junction' : 'dir')
|
||||
assert.throws(() => checkTypeFixture(dir, `import { value } from 'external'\n${source}\nvoid value`, compiler, mode), /escaped installation/)
|
||||
}
|
||||
finally {
|
||||
fs.unlinkSync(path.join(dir, 'node_modules/external'))
|
||||
removeConsumer(dir)
|
||||
removeConsumer(external)
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user