feat(rtos): 首次发布手机真机调试桥与S2探针
这个提交包含在:
当前提交
2f0f4b9702
59 个文件已更改
+4303
没有与搜索条件相匹配的文件
@@ -0,0 +1,85 @@
|
||||
const { test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const vm = require('node:vm');
|
||||
const path = require('node:path');
|
||||
|
||||
function load(brightness) {
|
||||
const source = fs.readFileSync(path.join(__dirname, '../src/main/index.ux'), 'utf8')
|
||||
.match(/<script>([\s\S]*?)<\/script>/)[1].replace('export default', 'module.exports =');
|
||||
const active = new Map();
|
||||
const callbacks = [];
|
||||
let next = 0;
|
||||
const context = { module: { exports: {} }, Promise, console,
|
||||
require: () => ({ default: brightness }),
|
||||
setInterval(fn) { callbacks.push(fn); active.set(++next, fn); return next; },
|
||||
clearInterval(id) { active.delete(id); } };
|
||||
vm.runInNewContext(source, context);
|
||||
const page = context.module.exports;
|
||||
Object.assign(page, page.data);
|
||||
return { page, active, callbacks };
|
||||
}
|
||||
|
||||
test('repeated shows own one renewal; hide and destroy prevent queued wakeups', () => {
|
||||
const calls = [];
|
||||
const { page, active, callbacks } = load({
|
||||
setKeepScreenOn: value => calls.push(['keep', value]),
|
||||
wakeScreenOn: value => calls.push(['wake', value.screenOn]) });
|
||||
page.onShow(); page.onShow();
|
||||
assert.equal(active.size, 1);
|
||||
assert.deepEqual(calls, [['keep', true], ['wake', true]]);
|
||||
callbacks[0]();
|
||||
page.onHide();
|
||||
assert.equal(active.size, 0);
|
||||
const afterHide = calls.length;
|
||||
callbacks[0]();
|
||||
assert.equal(calls.length, afterHide);
|
||||
page.onShow();
|
||||
assert.equal(active.size, 1);
|
||||
page.onDestroy();
|
||||
assert.equal(active.size, 0);
|
||||
const afterDestroy = calls.length;
|
||||
for (const callback of callbacks) callback();
|
||||
assert.equal(calls.length, afterDestroy);
|
||||
assert.deepEqual(calls.at(-1), ['keep', false]);
|
||||
});
|
||||
|
||||
test('destroy releases a visible page even without hide', () => {
|
||||
const calls = [];
|
||||
const { page, active } = load({ setKeepScreenOn: value => calls.push(value), wakeScreenOn() {} });
|
||||
page.onShow(); page.onDestroy();
|
||||
assert.deepEqual(calls, [true, false]);
|
||||
assert.equal(active.size, 0);
|
||||
});
|
||||
|
||||
test('late rejection cannot overwrite the new visible generation', async () => {
|
||||
let rejectOld;
|
||||
let first = true;
|
||||
const { page } = load({ setKeepScreenOn() {}, wakeScreenOn() {
|
||||
if (first) { first = false; return new Promise((_, reject) => { rejectOld = reject; }); }
|
||||
} });
|
||||
page.onShow(); page.onHide(); page.onShow();
|
||||
const status = page.screenStatus;
|
||||
rejectOld(new Error('old request'));
|
||||
await Promise.resolve(); await Promise.resolve();
|
||||
assert.equal(page.screenStatus, status);
|
||||
page.onDestroy();
|
||||
});
|
||||
|
||||
test('a missing wake API is reported and does not start renewal', () => {
|
||||
const { page, active } = load({ setKeepScreenOn() {} });
|
||||
page.onShow();
|
||||
assert.equal(active.size, 0);
|
||||
assert.equal(page.screenStatus, '固件缺少亮屏接口');
|
||||
page.onDestroy();
|
||||
});
|
||||
|
||||
test('a rejected wake stops renewal and remains visible as a failure', async () => {
|
||||
const { page, active } = load({ setKeepScreenOn() {},
|
||||
wakeScreenOn: () => Promise.reject(new Error('unsupported')) });
|
||||
page.onShow();
|
||||
await Promise.resolve(); await Promise.resolve();
|
||||
assert.equal(active.size, 0);
|
||||
assert.equal(page.screenStatus, '固件未接受亮屏');
|
||||
page.onDestroy();
|
||||
});
|
||||
在新工单中引用
屏蔽一个用户