Use a dictionary instead. Lets the VM that loads it possibly do some clever things. Also added a test case.
34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
const {test} = require('tap');
|
|
const VirtualMachine = require('../../src/virtual-machine');
|
|
const RenderedTarget = require('../../src/sprites/rendered-target');
|
|
const Sprite = require('../../src/sprites/sprite');
|
|
|
|
test('Serializes custom extensions', t => {
|
|
const vm = new VirtualMachine();
|
|
|
|
// Trick the extension manager into thinking a couple extensions are loaded.
|
|
vm.extensionManager.workerURLs[0] = 'https://example.com/test1.js';
|
|
vm.extensionManager.workerURLs[1] = 'https://example.com/test2.js';
|
|
// First number in the service names corresponds to index in workerURLs
|
|
vm.extensionManager._loadedExtensions.set('test1', 'test.0.0');
|
|
vm.extensionManager._loadedExtensions.set('test2', 'test.1.0');
|
|
|
|
// Create a block that uses the first extension
|
|
const sprite = new Sprite(null, vm.runtime);
|
|
const target = new RenderedTarget(sprite, vm.runtime);
|
|
target.blocks.createBlock({
|
|
id: 'a',
|
|
opcode: 'test1_something'
|
|
});
|
|
vm.runtime.addTarget(target);
|
|
|
|
// test2 isn't used, so it shouldn't be included in the JSON
|
|
const serialized = JSON.parse(vm.toJSON());
|
|
t.same(serialized.extensions, ['test1']);
|
|
t.same(serialized.extensionURLs, {
|
|
test1: 'https://example.com/test1.js'
|
|
});
|
|
|
|
t.end();
|
|
});
|