Bugfix for scratch-gui issue #994, where executing a broadcast block from the flyout was creating a conflicting variable, causing a fatal error.

This commit is contained in:
Karishma Chadha 2017-12-04 18:01:29 -05:00
parent 0722708004
commit 34b0aff637
4 changed files with 48 additions and 48 deletions

View file

@ -6,6 +6,7 @@ const Event = require('../../src/blocks/scratch3_event');
const Runtime = require('../../src/engine/runtime');
const Target = require('../../src/engine/target');
const Thread = require('../../src/engine/thread');
const Variable = require('../../src/engine/variable');
test('#760 - broadcastAndWait', t => {
const broadcastAndWaitBlock = {
@ -52,6 +53,7 @@ test('#760 - broadcastAndWait', t => {
b.createBlock(receiveMessageBlock);
const tgt = new Target(rt, b);
tgt.isStage = true;
tgt.createVariable('testBroadcastID', 'message', Variable.BROADCAST_MESSAGE_TYPE);
rt.targets.push(tgt);
let th = rt._pushThread('broadcastAndWaitBlock', t);
@ -67,12 +69,12 @@ test('#760 - broadcastAndWait', t => {
// yields when some thread is active
t.strictEqual(th.status, Thread.STATUS_YIELD);
th.status = Thread.STATUS_RUNNING;
e.broadcastAndWait({BROADCAST_OPTION: 'message'}, util);
e.broadcastAndWait({BROADCAST_OPTION: {id: 'testBroadcastID', name: 'message'}}, util);
t.strictEqual(th.status, Thread.STATUS_YIELD);
// does not yield once all threads are done
th.status = Thread.STATUS_RUNNING;
rt.threads[1].status = Thread.STATUS_DONE;
e.broadcastAndWait({BROADCAST_OPTION: 'message'}, util);
e.broadcastAndWait({BROADCAST_OPTION: {id: 'testBroadcastID', name: 'message'}}, util);
t.strictEqual(th.status, Thread.STATUS_RUNNING);
// restarts done threads that are in runtime threads

View file

@ -174,20 +174,7 @@ test('lookupOrCreateList returns list if one with given id exists', t => {
t.end();
});
test('lookupOrCreateBroadcastMsg creates a var if one does not exist', t => {
const target = new Target();
const variables = target.variables;
t.equal(Object.keys(variables).length, 0);
const broadcastVar = target.lookupOrCreateBroadcastMsg('foo', 'bar');
t.equal(Object.keys(variables).length, 1);
t.equal(broadcastVar.id, 'foo');
t.equal(broadcastVar.name, 'bar');
t.end();
});
test('lookupOrCreateBroadcastMsg returns the var with given id if exists', t => {
test('lookupBroadcastMsg returns the var with given id if exists', t => {
const target = new Target();
const variables = target.variables;
@ -195,7 +182,7 @@ test('lookupOrCreateBroadcastMsg returns the var with given id if exists', t =>
target.createVariable('foo', 'bar', Variable.BROADCAST_MESSAGE_TYPE);
t.equal(Object.keys(variables).length, 1);
const broadcastMsg = target.lookupOrCreateBroadcastMsg('foo', 'bar');
const broadcastMsg = target.lookupBroadcastMsg('foo', 'bar');
t.equal(Object.keys(variables).length, 1);
t.equal(broadcastMsg.id, 'foo');
t.equal(broadcastMsg.name, 'bar');