'use strict'; const assert = require('assert'); const fs = require('fs'); const path = require('path'); const { _private } = require('../src/utils/os_mouse'); (async () => { let active = 0; let maxActive = 0; const timeline = []; const logs = []; const results = await Promise.all([0, 1, 2, 3].map(index => ( _private.withOsMouseLock(async () => { active++; maxActive = Math.max(maxActive, active); timeline.push(`start-${index}`); await new Promise(resolve => setTimeout(resolve, 5)); timeline.push(`end-${index}`); active--; return index; }, message => logs.push(message)) ))); assert.deepStrictEqual(results, [0, 1, 2, 3]); assert.strictEqual(maxActive, 1, '真实鼠标临界区不得并行执行'); assert.deepStrictEqual(timeline, [ 'start-0', 'end-0', 'start-1', 'end-1', 'start-2', 'end-2', 'start-3', 'end-3', ], '真实鼠标操作应按进入顺序串行执行'); assert(logs.some(message => message.includes('等待其它窗口')), '出现并发等待时应写入可观测日志'); const source = fs.readFileSync(path.join(__dirname, '..', 'src', 'utils', 'os_mouse.js'), 'utf8'); assert(source.includes('[WKeyboard]::keybd_event(0x1B'), '必须用系统级 Escape 关闭网页 DOM 无法控制的浏览器保存密码弹窗'); console.log('os_mouse_concurrency_lock.test.js: PASS'); })().catch(error => { console.error(error); process.exitCode = 1; });