'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const vm = require('node:vm'); const root = path.resolve(__dirname, '../..'); const runtime = fs.readFileSync(path.join(root, 'assets/js/runtime/main.js'), 'utf8'); test('video poster clicks play the same DPlayer instance and reveal its controls', () => { const slide = {}; let played = 0; let revealed = false; let handler; const start = runtime.indexOf("_win.bd.on('click', '.swiper-slide.slide-dplayer"); const end = runtime.indexOf('//视频列表图封面', start); assert.ok(start > -1 && end > start); vm.runInNewContext(runtime.slice(start, end), { _win: { bd: { on(event, selector, callback) { assert.equal(event, 'click'); assert.equal(selector, '.swiper-slide.slide-dplayer:not(.slide-dplayer-played) > *'); handler = callback; } } }, jQuery(target) { assert.equal(target, slide); return { find(selector) { assert.equal(selector, '.new-dplayer'); return { data(key) { assert.equal(key, 'dplayer'); return { play() { played++; } }; } }; }, parent() { return { addClass(name) { assert.equal(name, 'slide-dplayer-played'); revealed = true; } }; }, }; }, }); handler.call(slide); assert.equal(played, 1); assert.equal(revealed, true); });