From ecbfcd78bdcd80108bcdc5a6887e041b9d72c169 Mon Sep 17 00:00:00 2001 From: picklesrus Date: Wed, 6 Feb 2019 16:48:39 -0500 Subject: [PATCH] Fix sb2 loading of broadcast messages with special characters. --- src/serialization/sb2.js | 2 +- test/fixtures/broadcast_special_chars.sb2 | Bin 0 -> 54753 bytes .../broadcast_special_chars_sb2.js | 86 ++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/broadcast_special_chars.sb2 create mode 100644 test/integration/broadcast_special_chars_sb2.js diff --git a/src/serialization/sb2.js b/src/serialization/sb2.js index e606f5a6..f8d1b9e6 100644 --- a/src/serialization/sb2.js +++ b/src/serialization/sb2.js @@ -227,7 +227,7 @@ const globalBroadcastMsgStateGenerator = (function () { if (name === '') { name = emptyStringName; } - broadcastMsgNameMap[name] = `broadcastMsgId-${name}`; + broadcastMsgNameMap[name] = `broadcastMsgId-${StringUtil.replaceUnsafeChars(name)}`; allBroadcastFields.push(field); return broadcastMsgNameMap[name]; }, diff --git a/test/fixtures/broadcast_special_chars.sb2 b/test/fixtures/broadcast_special_chars.sb2 new file mode 100644 index 0000000000000000000000000000000000000000..afaf4ba25b0197665599cca3699026fa3fc37aa5 GIT binary patch literal 54753 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 vp)ch>NlsMz(ic#)|L)6wYvaGWAG-N3-E7{7 { + const vm = new VirtualMachine(); + vm.attachStorage(makeTestStorage()); + + // Evaluate playground data and exit + vm.on('playgroundData', e => { + const threads = JSON.parse(e.threads); + // All monitors should create threads that finish during the step and + // are revoved from runtime.threads. + t.equal(threads.length, 0); + + t.equal(vm.runtime.targets.length, 2); + + const stage = vm.runtime.targets[0]; + const cat = vm.runtime.targets[1]; + + const allBroadcastFields = VariableUtil.getAllVarRefsForTargets(vm.runtime.targets, true); + + const abMessageId = Object.keys(stage.variables).filter(k => stage.variables[k].name === 'a&b')[0]; + const abMessage = stage.variables[abMessageId]; + // Check for unsafe characters, replaceUnsafeChars should just result in the original string + // (e.g. there was nothing to replace) + // Check that the variable ID does not have any unsafe characters + t.equal(StringUtil.replaceUnsafeChars(abMessageId), abMessageId); + + // Check that the message still has the correct info + t.equal(StringUtil.replaceUnsafeChars(abMessage.id), abMessage.id); + t.equal(abMessage.id, abMessageId); + t.equal(abMessage.type, Variable.BROADCAST_MESSAGE_TYPE); + t.equal(abMessage.value, 'a&b'); + + + const ltPerfectMessageId = Object.keys(stage.variables).filter(k => stage.variables[k].name === '< perfect')[0]; + const ltPerfectMessage = stage.variables[ltPerfectMessageId]; + // Check for unsafe characters, replaceUnsafeChars should just result in the original string + // (e.g. there was nothing to replace) + // Check that the variable ID does not have any unsafe characters + t.equal(StringUtil.replaceUnsafeChars(ltPerfectMessageId), ltPerfectMessageId); + + // // Check that the message still has the correct info + t.equal(StringUtil.replaceUnsafeChars(ltPerfectMessage.id), ltPerfectMessage.id); + t.equal(ltPerfectMessage.id, ltPerfectMessageId); + t.equal(ltPerfectMessage.type, Variable.BROADCAST_MESSAGE_TYPE); + t.equal(ltPerfectMessage.value, '< perfect'); + + // // Find all the references for this variable, and verify they have the correct ID + // // There should be one + t.equal(allBroadcastFields[ltPerfectMessageId].length, 1); + t.equal(allBroadcastFields[abMessageId].length, 1); + const catBlocks = Object.keys(cat.blocks._blocks).map(blockId => cat.blocks._blocks[blockId]); + const catMessageBlocks = catBlocks.filter(block => block.fields.hasOwnProperty('BROADCAST_OPTION')); + t.equal(catMessageBlocks.length, 2); + t.equal(catMessageBlocks[0].fields.BROADCAST_OPTION.id, ltPerfectMessageId); + t.equal(catMessageBlocks[1].fields.BROADCAST_OPTION.id, abMessageId); + + t.end(); + process.nextTick(process.exit); + }); + + // Start VM, load project, and run + t.doesNotThrow(() => { + vm.start(); + vm.clear(); + vm.setCompatibilityMode(false); + vm.setTurboMode(false); + vm.loadProject(project).then(() => { + vm.greenFlag(); + setTimeout(() => { + vm.getPlaygroundData(); + vm.stopAll(); + }, 100); + }); + }); +});