mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 11:56:15 -08:00
73 lines
3.1 KiB
JavaScript
73 lines
3.1 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
// eslint-disable-next-line test/no-import-node-test -- Use the repository Node test runner.
|
|
import { test } from 'node:test'
|
|
import vm from 'node:vm'
|
|
import { checkCoreVendors } from '../refactor/scripts/core-vendor.mjs'
|
|
|
|
test('copied core libraries match fixed references plus reviewed local adaptations', async () => {
|
|
const evidence = await checkCoreVendors()
|
|
assert.equal(evidence.sources.length, 4)
|
|
})
|
|
|
|
const methods = [
|
|
['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange'],
|
|
['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange'],
|
|
['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange'],
|
|
['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange'],
|
|
['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange'],
|
|
]
|
|
const source = fs.readFileSync(new URL('../packages/artplayer/src/libs/screenfull.js', import.meta.url), 'utf8').replace('export default screenfull', 'globalThis.result = screenfull')
|
|
|
|
for (const [request, exit, element, enabled, change] of methods) {
|
|
test(`screenfull preserves ${request} mapping, options, promise completion and listeners`, async () => {
|
|
const listeners = new Map()
|
|
const options = { navigationUI: 'hide' }
|
|
const document = {
|
|
[element]: null,
|
|
[enabled]: true,
|
|
[exit]() {
|
|
this[element] = null
|
|
listeners.get(change)?.()
|
|
return Promise.resolve()
|
|
},
|
|
addEventListener(name, callback) { listeners.set(name, callback) },
|
|
removeEventListener(name, callback) {
|
|
if (listeners.get(name) === callback)
|
|
listeners.delete(name)
|
|
},
|
|
}
|
|
document.documentElement = {
|
|
[request](actual) {
|
|
assert.equal(actual, options)
|
|
document[element] = this
|
|
listeners.get(change)?.()
|
|
return Promise.resolve()
|
|
},
|
|
}
|
|
const context = { document, Promise }
|
|
vm.runInNewContext(source, context)
|
|
const screenfull = context.result
|
|
assert.equal(screenfull.isEnabled, true)
|
|
assert.equal(screenfull.element, null)
|
|
assert.equal(await screenfull.request(undefined, options), undefined)
|
|
assert.equal(screenfull.element, document.documentElement)
|
|
assert.equal(screenfull.isFullscreen, true)
|
|
assert.equal(listeners.size, 0)
|
|
assert.equal(await screenfull.toggle(), undefined)
|
|
assert.equal(screenfull.isFullscreen, false)
|
|
assert.equal(listeners.size, 0)
|
|
})
|
|
}
|
|
|
|
test('screenfull import remains inert without document and retains local disabled surface', () => {
|
|
const context = {}
|
|
vm.runInNewContext(source, context)
|
|
assert.equal(typeof context.result.request, 'function')
|
|
assert.equal(context.result.raw, false)
|
|
const browser = { document: {} }
|
|
vm.runInNewContext(source, browser)
|
|
assert.equal(browser.result.isEnabled, false)
|
|
assert.equal(browser.result.element, undefined)
|
|
})
|