Files
scratch-vm/test/integration/tw_serialize_extensions.js
T
GarboMuffin 1e35432db0 Update format for saving custom extensions
Use a dictionary instead. Lets the VM that loads it possibly do some clever things.
Also added a test case.
2022-10-22 21:38:06 -05:00

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();
});