mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2025-06-05 01:54:52 -04:00
Populate executable targets when runtime.targets is populated so that scripts don't run before they are supposed to (e.g. before targets are done getting installed).
This commit is contained in:
parent
522b5e1a8e
commit
fbee37e915
9 changed files with 58 additions and 16 deletions
test
|
@ -192,7 +192,9 @@ test('edge activated hat should trigger for both sprites when sprite is cloned',
|
|||
val + Object.keys(target._edgeActivatedHatValues).length, 0);
|
||||
t.equal(numTargetEdgeHats, 1);
|
||||
|
||||
vm.runtime.targets.push(vm.runtime.targets[1].makeClone());
|
||||
const cloneTarget = vm.runtime.targets[1].makeClone();
|
||||
vm.runtime.targets.push(cloneTarget);
|
||||
vm.runtime.addExecutable(cloneTarget);
|
||||
|
||||
vm.runtime._step();
|
||||
// Check that the runtime's _edgeActivatedHatValues object has two separate keys
|
||||
|
|
|
@ -54,7 +54,9 @@ test('#760 - broadcastAndWait', t => {
|
|||
const tgt = new Target(rt, b);
|
||||
tgt.isStage = true;
|
||||
tgt.createVariable('testBroadcastID', 'message', Variable.BROADCAST_MESSAGE_TYPE);
|
||||
// Need to add to both runtime.targets as well as runtime.executableTargets here
|
||||
rt.targets.push(tgt);
|
||||
rt.executableTargets.push(tgt);
|
||||
|
||||
let th = rt._pushThread('broadcastAndWaitBlock', t);
|
||||
const util = new BlockUtility();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const test = require('tap').test;
|
||||
const path = require('path');
|
||||
const VirtualMachine = require('../../src/index');
|
||||
const Runtime = require('../../src/engine/runtime');
|
||||
const sb3 = require('../../src/serialization/sb3');
|
||||
const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer;
|
||||
const exampleProjectPath = path.resolve(__dirname, '../fixtures/clone-cleanup.sb2');
|
||||
|
@ -147,10 +148,10 @@ test('deserialize sb3 project with comments - no duplicate id serialization', t
|
|||
});
|
||||
});
|
||||
|
||||
test('serialize sb3 preserves sprite layer order', t => {
|
||||
test('serializing and deserializing sb3 preserves sprite layer order', t => {
|
||||
const vm = new VirtualMachine();
|
||||
vm.attachRenderer(new FakeRenderer());
|
||||
vm.loadProject(readFileToBuffer(path.resolve(__dirname, '../fixtures/ordering.sb2')))
|
||||
return vm.loadProject(readFileToBuffer(path.resolve(__dirname, '../fixtures/ordering.sb2')))
|
||||
.then(() => {
|
||||
// Target get layer order needs a renderer,
|
||||
// fake the numbers we would get back from the
|
||||
|
@ -182,8 +183,28 @@ test('serialize sb3 preserves sprite layer order', t => {
|
|||
t.equal(result.targets[2].layerOrder, 1);
|
||||
t.equal(result.targets[3].layerOrder, 3);
|
||||
|
||||
t.end();
|
||||
});
|
||||
return result;
|
||||
})
|
||||
.then(serializedObject =>
|
||||
sb3.deserialize(
|
||||
JSON.parse(JSON.stringify(serializedObject)), new Runtime(), null, false)
|
||||
.then(({targets}) => {
|
||||
// First check that the sprites are ordered correctly (as they would
|
||||
// appear in the target pane)
|
||||
t.equal(targets[0].sprite.name, 'Stage');
|
||||
t.equal(targets[1].sprite.name, 'First');
|
||||
t.equal(targets[2].sprite.name, 'Second');
|
||||
t.equal(targets[3].sprite.name, 'Third');
|
||||
|
||||
// Check that they are in the correct layer order (as they would render
|
||||
// back to front on the stage)
|
||||
t.equal(targets[0].layerOrder, 0);
|
||||
t.equal(targets[1].layerOrder, 2);
|
||||
t.equal(targets[2].layerOrder, 1);
|
||||
t.equal(targets[3].layerOrder, 3);
|
||||
|
||||
t.end();
|
||||
}));
|
||||
});
|
||||
|
||||
test('serializeBlocks', t => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue