90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
const {
|
|
broadcastEditorMessage,
|
|
getEditorPreference,
|
|
setEditorPreference,
|
|
tryEditorRequests,
|
|
tryEditorRequestsStatus,
|
|
} = require('../lib/tools/cocos-project');
|
|
|
|
test('tryEditorRequests returns the first successful editor message candidate', async () => {
|
|
const calls = [];
|
|
global.Editor = {
|
|
Message: {
|
|
request: async (channel, method, payload) => {
|
|
calls.push({ channel, method, payload });
|
|
if (method === 'bad') {
|
|
throw new Error('nope');
|
|
}
|
|
return { ok: true };
|
|
},
|
|
},
|
|
};
|
|
|
|
try {
|
|
const result = await tryEditorRequests([
|
|
{ channel: 'scene', method: 'bad' },
|
|
{ channel: 'scene', method: 'save-scene', args: [{ force: true }] },
|
|
]);
|
|
|
|
assert.equal(result.ok, true);
|
|
assert.equal(result.method, 'save-scene');
|
|
assert.equal(calls.length, 2);
|
|
} finally {
|
|
delete global.Editor;
|
|
}
|
|
});
|
|
|
|
test('tryEditorRequestsStatus returns an unavailable payload instead of throwing', async () => {
|
|
global.Editor = {
|
|
Message: {
|
|
request: async () => {
|
|
throw new Error('missing');
|
|
},
|
|
},
|
|
};
|
|
|
|
try {
|
|
const result = await tryEditorRequestsStatus([{ channel: 'builder', method: 'query-build-status' }]);
|
|
assert.equal(result.ok, false);
|
|
assert.equal(result.available, false);
|
|
assert.equal(result.attempts.length, 1);
|
|
} finally {
|
|
delete global.Editor;
|
|
}
|
|
});
|
|
|
|
test('preference helpers and broadcast use available Editor APIs', () => {
|
|
const sent = [];
|
|
const store = new Map();
|
|
global.Editor = {
|
|
Message: {
|
|
send(channel, message, payload) {
|
|
sent.push({ channel, message, payload });
|
|
},
|
|
},
|
|
Profile: {
|
|
getProject(key) {
|
|
return store.get(key);
|
|
},
|
|
setProject(key, value) {
|
|
store.set(key, value);
|
|
},
|
|
},
|
|
};
|
|
|
|
try {
|
|
setEditorPreference('project', 'preview.port', 7456);
|
|
assert.equal(getEditorPreference('project', 'preview.port'), 7456);
|
|
|
|
const result = broadcastEditorMessage({ channel: 'scene', message: 'custom-event', payload: { ok: true } });
|
|
assert.equal(result.sent, true);
|
|
assert.deepEqual(sent[0], { channel: 'scene', message: 'custom-event', payload: { ok: true } });
|
|
} finally {
|
|
delete global.Editor;
|
|
}
|
|
});
|