Files
ArtPlayer/test/vast-exports.test.js

62 lines
2.6 KiB
JavaScript

import assert from 'node:assert/strict'
import { Buffer } from 'node:buffer'
import fs from 'node:fs'
import process from 'node:process'
// eslint-disable-next-line test/no-import-node-test -- Exercise real bundled SDK exports without external ad loading.
import test from 'node:test'
import vm from 'node:vm'
import { compilePackage } from './helpers/load.js'
const code = process.env.ARTPLAYER_VAST_ARTIFACT
? fs.readFileSync(process.env.ARTPLAYER_VAST_ARTIFACT, 'utf8')
: await compilePackage('artplayer-plugin-vast', 'umd')
for (const format of ['commonjs', 'global', 'amd']) {
test(`VAST ${format} preserves direct and historical default calls on one factory`, async () => {
const window = {}
const box = { window, CustomEvent }
let factory
if (format === 'commonjs') {
box.module = { exports: {} }
box.exports = box.module.exports
}
else if (format === 'amd') {
box.define = (dependencies, create) => {
if (typeof dependencies === 'function') {
factory = dependencies()
}
else {
assert.deepEqual([...dependencies], [])
factory = create()
}
}
box.define.amd = {}
}
vm.runInNewContext(code, box, { timeout: 5000 })
factory ||= format === 'commonjs' ? box.module.exports : box.artplayerPluginVast || window.artplayerPluginVast
assert.equal(typeof factory, 'function')
assert.equal(factory.default, factory)
assert.equal(factory.default.default, factory)
assert.deepEqual(Object.getOwnPropertyDescriptor(factory, 'default'), { value: factory, writable: true, enumerable: true, configurable: true })
for (const entry of [factory, factory.default]) {
const pending = entry(() => assert.fail('A destroyed core cannot receive a callback'))({ isDestroy: true })
assert.equal(typeof pending.then, 'function')
const result = await pending
assert.equal(result.name, 'artplayerPluginVast')
assert.equal(result.destroy(), undefined)
}
})
}
test('VAST ESM default import retains the same callable alias', async () => {
const esm = process.env.ARTPLAYER_VAST_ESM_ARTIFACT
? fs.readFileSync(process.env.ARTPLAYER_VAST_ESM_ARTIFACT, 'utf8')
: await compilePackage('artplayer-plugin-vast', 'es')
const { default: factory } = await import(`data:text/javascript;base64,${Buffer.from(esm).toString('base64')}`)
assert.equal(typeof factory, 'function')
assert.equal(factory.default, factory)
const pending = factory.default()({ isDestroy: true })
assert.equal(typeof pending.then, 'function')
assert.equal((await pending).name, 'artplayerPluginVast')
})