Merge pull request from paulkaplan/fix-undefined-proc-execution

Fix undefined procedure execution
This commit is contained in:
Paul Kaplan 2017-10-25 13:18:23 -04:00 committed by GitHub
commit aaa107dbe5
2 changed files with 37 additions and 0 deletions

View file

@ -27,11 +27,20 @@ class Scratch3ProcedureBlocks {
if (!util.stackFrame.executed) {
const procedureCode = args.mutation.proccode;
const paramNames = util.getProcedureParamNames(procedureCode);
// If null, procedure could not be found, which can happen if custom
// block is dragged between sprites without the definition.
// Match Scratch 2.0 behavior and noop.
if (paramNames === null) {
return;
}
for (let i = 0; i < paramNames.length; i++) {
if (args.hasOwnProperty(`input${i}`)) {
util.pushParam(paramNames[i], args[`input${i}`]);
}
}
util.stackFrame.executed = true;
util.startProcedure(procedureCode);
}

View file

@ -0,0 +1,28 @@
const test = require('tap').test;
const Procedures = require('../../src/blocks/scratch3_procedures');
const blocks = new Procedures(null);
test('getPrimitives', t => {
t.type(blocks.getPrimitives(), 'object');
t.end();
});
// Originally inspired by https://github.com/LLK/scratch-gui/issues/809
test('calling a custom block with no definition does not throw', t => {
const args = {
mutation: {
proccode: 'undefined proc'
}
};
const util = {
getProcedureParamNames: () => null,
stackFrame: {
executed: false
}
};
t.doesNotThrow(() => {
blocks.callNoReturn(args, util);
});
t.end();
});