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>
This commit is contained in:
60
scratch-vm/test/integration/tw_add_builtin_extension.js
Normal file
60
scratch-vm/test/integration/tw_add_builtin_extension.js
Normal file
@@ -0,0 +1,60 @@
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user