mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-30 03:51:25 -08:00
test(multiple-subtitles): [PKG-MULTI-SUB-01] freeze contracts and verify parser provenance
This commit is contained in:
1 parent
0c5bb2bd7a
commit
5a0d94cb89
33 files changed
+2375
-22
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
// eslint-disable-next-line test/no-import-node-test -- Vendor parity uses the repository Node runner.
|
||||
import test from 'node:test'
|
||||
import vm from 'node:vm'
|
||||
import { transformSync } from 'esbuild'
|
||||
import { checkMultipleSubtitlesVendor } from '../refactor/scripts/multiple-subtitles-vendor.mjs'
|
||||
|
||||
test('Multiple-subtitles vendor retains pinned executable content and complete standalone distribution notices', () => {
|
||||
const result = checkMultipleSubtitlesVendor()
|
||||
const notices = fs.readFileSync('packages/artplayer-plugin-multiple-subtitles/THIRD_PARTY_NOTICES', 'utf8').trim()
|
||||
const block = notices.split(/\r?\n/).map(line => line.trimEnd() ? ` * ${line.trimEnd()}` : ' *').join('\n')
|
||||
for (const suffix of ['js', 'legacy.js', 'mjs']) {
|
||||
const built = fs.readFileSync(`packages/artplayer-plugin-multiple-subtitles/dist/artplayer-plugin-multiple-subtitles.${suffix}`, 'utf8').replaceAll('\r\n', '\n')
|
||||
assert(built.includes(block), `Missing complete notice in ${suffix}`)
|
||||
assert(built.startsWith('/*!'))
|
||||
}
|
||||
assert.equal(result.provenance.revision, '380cfcce34ba8b472d3a31474874eb72a0e5f460')
|
||||
})
|
||||
|
||||
test('Multiple-subtitles vendor parser and serializer match the pinned upstream on metadata and malformed inputs', () => {
|
||||
const upstream = { exports: {}, Date: { now: () => 123 } }
|
||||
vm.runInNewContext(fs.readFileSync('refactor/baselines/multiple-subtitles-vendor/parser.txt', 'utf8'), upstream)
|
||||
const local = { exports: {}, Date: upstream.Date }
|
||||
local.module = { exports: local.exports }
|
||||
vm.runInNewContext(transformSync(fs.readFileSync('packages/artplayer-plugin-multiple-subtitles/src/parser.js', 'utf8'), { format: 'cjs' }).code, local)
|
||||
for (const input of [
|
||||
'',
|
||||
'WEBVTT\n\n0\n00:00.000 --> 00:01.000\nhello & <world>\n',
|
||||
'\uFEFFWEBVTT\r\n\r\nNOTE ignored\r\n\r\n00:01.000 --> 00:04.000 align:start\r\n<c.red>日本語</c>\r\n',
|
||||
'WEBVTT\n\nSTYLE\n::cue {color: red}\n\n00:01.000 --> 00:03.000\nB\n\n00:00.000 --> 00:04.000\nA\n',
|
||||
'WEBVTT\n\nbad --> timing\ntext\n',
|
||||
]) {
|
||||
const parse = exports => new exports.WebVTTParser().parse(input, 'metadata')
|
||||
const expected = parse(upstream.exports)
|
||||
const actual = parse(local.module.exports)
|
||||
assert.deepEqual(JSON.parse(JSON.stringify(actual)), JSON.parse(JSON.stringify(expected)))
|
||||
const serialize = (exports, tree) => new exports.WebVTTSerializer().serialize(tree.cues, tree.styles)
|
||||
assert.equal(serialize(local.module.exports, actual), serialize(upstream.exports, expected))
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user