mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
test(ci): [CI-01] verify installed Iframe tools across window boundaries
This commit is contained in:
1 parent
4a9ef16b16
commit
ce67eaa73e
19 files changed
+584
-28
No files matched your search
@@ -20,6 +20,15 @@ and source/build freshness. `scope.ts` lists the currently supported installed
|
||||
test files. This is a growing installed subset, not full ecosystem acceptance.
|
||||
Source checks remain complete when the installed list grows.
|
||||
|
||||
Iframe adds five installed files through `iframeBrowserCandidate()`. Its actual
|
||||
published predecessor is `artplayer-plugin-iframe`; required current tool paths
|
||||
are checked against the frozen workspace manifest rather than invented npm tool
|
||||
contents. Candidate parent/child evidence includes installed provenance, while
|
||||
historical rows retain their own names and bytes. Installed scope rejects the
|
||||
Iframe baseline/lifecycle-only/boundaries-only diagnostic flags. The separate
|
||||
history server still uses `iframeCandidate()` and may receive a core-only map;
|
||||
its source/explicit tool selection has not become installed-tool acceptance.
|
||||
|
||||
Ads media/lifecycle and UI files use `test/helpers/browser-candidate.js` to select
|
||||
the verified installed plugin whenever an artifact map is present. An additional
|
||||
ARTPLAYER_ADS_ARTIFACT override is rejected instead of mixing candidates. Missing,
|
||||
|
||||
@@ -2,7 +2,7 @@ import type { PlaywrightTestConfig } from '@playwright/test'
|
||||
import assert from 'node:assert/strict'
|
||||
|
||||
export type BrowserScope = 'source' | 'installed'
|
||||
export const installedPackages = ['artplayer', 'artplayer-plugin-chapter', 'artplayer-plugin-ambilight', 'artplayer-proxy-canvas', 'artplayer-plugin-document-pip', 'artplayer-plugin-ads', 'artplayer-plugin-audio-track', 'artplayer-plugin-vtt-thumbnail', 'artplayer-plugin-multiple-subtitles', 'artplayer-plugin-hls-control', 'artplayer-plugin-dash-control', 'artplayer-plugin-auto-thumbnail', 'artplayer-plugin-asr', 'artplayer-plugin-chromecast', 'artplayer-proxy-mediabunny', 'artplayer-plugin-jassub', 'artplayer-plugin-danmuku', 'artplayer-plugin-danmuku-mask']
|
||||
export const installedPackages = ['artplayer', 'artplayer-plugin-chapter', 'artplayer-plugin-ambilight', 'artplayer-proxy-canvas', 'artplayer-plugin-document-pip', 'artplayer-plugin-ads', 'artplayer-plugin-audio-track', 'artplayer-plugin-vtt-thumbnail', 'artplayer-plugin-multiple-subtitles', 'artplayer-plugin-hls-control', 'artplayer-plugin-dash-control', 'artplayer-plugin-auto-thumbnail', 'artplayer-plugin-asr', 'artplayer-plugin-chromecast', 'artplayer-proxy-mediabunny', 'artplayer-plugin-jassub', 'artplayer-plugin-danmuku', 'artplayer-plugin-danmuku-mask', 'artplayer-tool-iframe']
|
||||
export const installedTests = [
|
||||
'playback.spec.js',
|
||||
'lifecycle.spec.js',
|
||||
@@ -71,6 +71,11 @@ export const installedTests = [
|
||||
'danmuku-scheduler.spec.js',
|
||||
'danmuku-stability.spec.js',
|
||||
'danmuku-timing-diagnostic.spec.js',
|
||||
'iframe.spec.js',
|
||||
'iframe-boundaries.spec.js',
|
||||
'iframe-navigation.spec.js',
|
||||
'iframe-player.spec.js',
|
||||
'iframe-editor.spec.js',
|
||||
]
|
||||
|
||||
export function browserInvocation(scope: string, args: string[], environment: NodeJS.ProcessEnv) {
|
||||
@@ -84,6 +89,7 @@ export function browserInvocation(scope: string, args: string[], environment: No
|
||||
assert(env.ARTPLAYER_BROWSER_ARTIFACTS, 'Installed browser checks require ARTPLAYER_BROWSER_ARTIFACTS')
|
||||
assert(env.ARTPLAYER_MB_BROWSER_CANDIDATE !== '1', 'Installed browser checks must retain MediaBunny historical controls')
|
||||
assert(env.ARTPLAYER_MASK_PROFILE !== '1', 'Installed browser checks cannot enable Mask CPU profiling')
|
||||
assert(!['ARTPLAYER_IFRAME_BASELINE', 'ARTPLAYER_IFRAME_LIFECYCLE_ONLY', 'ARTPLAYER_IFRAME_BOUNDARIES_ONLY'].some(name => env[name] === '1'), 'Installed browser checks must retain Iframe candidate and historical controls')
|
||||
assert(!env.ARTPLAYER_DASH_DIAGNOSTIC_SDK || env.ARTPLAYER_DASH_DIAGNOSTIC_SDK === 'none', 'Installed browser checks require the unchanged DASH SDK')
|
||||
assert(!['ARTPLAYER_DASH_DIAGNOSE_STALL', 'ARTPLAYER_DASH_DIAGNOSE_GETTER', 'ARTPLAYER_DASH_DIAGNOSE_METRICS'].some(name => env[name] === '1'), 'Installed browser checks cannot use DASH recovery diagnostics')
|
||||
}
|
||||
|
||||
@@ -43,6 +43,22 @@ export function checkFiles(manifest, files, historical = []) {
|
||||
assert(!files.includes('package/tsconfig.json'), 'Implementation tsconfig leaked into package')
|
||||
}
|
||||
|
||||
export function historicalDistributionFiles(name, { baseline, sources }) {
|
||||
if (name !== 'artplayer-tool-iframe') {
|
||||
assert.equal(baseline.release.name, name, 'Review renamed package distribution separately')
|
||||
return Object.keys(baseline.release.files)
|
||||
}
|
||||
assert.equal(baseline.release.name, 'artplayer-plugin-iframe', 'Iframe keeps its distinct published predecessor')
|
||||
const prefix = `packages/${name}/`
|
||||
const manifest = JSON.parse(sources.get(`${prefix}package.json`))
|
||||
assert.equal(manifest.name, name, 'Iframe distribution must use the frozen tool manifest')
|
||||
const files = Object.keys(baseline.source).filter(file => file.startsWith(`${prefix}dist/`) || file.startsWith(`${prefix}types/`))
|
||||
assert(files.length > 0 && files.every(file => sources.has(file)), 'Missing verified iframe workspace distribution')
|
||||
const members = files.map(file => `package/${file.slice(prefix.length)}`)
|
||||
checkFiles(manifest, members)
|
||||
return members
|
||||
}
|
||||
|
||||
export function packedFiles(archive) {
|
||||
const args = { encoding: 'utf8', windowsHide: true }
|
||||
const names = execFileSync('tar', ['-tzf', archive], args).trim().split(/\r?\n/)
|
||||
@@ -99,6 +115,7 @@ export async function checkPackages({ release = false, include = [] } = {}) {
|
||||
'artplayer-plugin-jassub': async () => (await import('../refactor/scripts/jassub-contract.mjs')).verifyJassubContract(),
|
||||
'artplayer-plugin-danmuku': async () => (await import('../refactor/scripts/danmuku-contract.mjs')).verifyDanmukuContract(),
|
||||
'artplayer-plugin-danmuku-mask': async () => (await import('../refactor/scripts/danmuku-mask-contract.mjs')).verifyDanmukuMaskContract(),
|
||||
'artplayer-tool-iframe': async () => (await import('../refactor/scripts/iframe-contract.mjs')).verifyIframeContract(),
|
||||
'artplayer-plugin-audio-track': async () => (await import('../refactor/scripts/audio-contract.mjs')).verifyAudioContract(),
|
||||
'artplayer-plugin-vtt-thumbnail': async () => (await import('../refactor/scripts/vtt-thumbnail-contract.mjs')).verifyVttThumbnailContract(),
|
||||
'artplayer-plugin-multiple-subtitles': async () => (await import('../refactor/scripts/multiple-subtitles-contract.mjs')).verifyMultipleSubtitlesContract(),
|
||||
@@ -108,7 +125,7 @@ export async function checkPackages({ release = false, include = [] } = {}) {
|
||||
for (const name of include) {
|
||||
assert(Object.hasOwn(supported, name), `Additional package needs a reviewed contract: ${name}`)
|
||||
const contract = await supported[name]()
|
||||
historicalFiles.set(name, Object.keys(contract.baseline.release.files))
|
||||
historicalFiles.set(name, historicalDistributionFiles(name, contract))
|
||||
}
|
||||
const names = [...defaultNames, ...include]
|
||||
const parent = path.join(workspace, 'refactor/.cache/packages')
|
||||
|
||||
Reference in new issue
Block a user