Files
001code-html--cocos/scratch-vm/test/integration/tw_add_builtin_extension.js
刘宇飞 6e0a1fbcbb Initial commit of 001code-html Scratch frontend project.
Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 15:37:45 +08:00

61 lines
2.0 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const {test} = require('tap');
const VM = require('../../src/virtual-machine');
const Scratch = require('../../src/extension-support/tw-extension-api-common');
class TestBuiltinExtension {
getInfo () {
return {
id: 'testbuiltin',
name: 'Test Builtin',
blocks: [
{
opcode: 'test',
blockType: Scratch.BlockType.REPORTER,
text: 'test'
}
]
};
}
test () {
return 'It works! 123';
}
}
test('addBuiltingExtension', t => {
const vm = new VM();
t.equal(vm.extensionManager.isBuiltinExtension('testbuiltin'), false, 'extension is not known');
t.equal(vm.extensionManager.isExtensionLoaded('testbuiltin'), false, 'extension is not loaded');
vm.extensionManager.addBuiltinExtension('testbuiltin', TestBuiltinExtension);
t.equal(vm.extensionManager.isBuiltinExtension('testbuiltin'), true, 'extension is now known');
t.equal(vm.extensionManager.isExtensionLoaded('testbuiltin'), false, 'extension is still not loaded');
const fixture = fs.readFileSync(path.join(__dirname, '..', 'fixtures', 'tw-add-builtin-extension.sb3'));
vm.loadProject(fixture).then(() => {
t.equal(vm.extensionManager.isExtensionLoaded('testbuiltin'), true, 'extension was loaded automatically');
vm.runtime.on('SAY', (target, type, text) => {
t.equal(text, 'It works! 123', 'said value from extension');
t.end();
});
vm.greenFlag();
vm.runtime._step();
});
});
test('each runtime has own set of extensions', t => {
const vm1 = new VM();
const vm2 = new VM();
vm1.extensionManager.addBuiltinExtension('testbuiltin', TestBuiltinExtension);
t.ok(vm1.extensionManager.isBuiltinExtension('testbuiltin'));
t.notOk(vm2.extensionManager.isBuiltinExtension('testbuiltin'));
t.end();
});