From 2c76d3bf71563a1b361f7e4e5ff222ddf14425c5 Mon Sep 17 00:00:00 2001 From: Valerie R Young <valerie@bocoup.com> Date: Mon, 5 Nov 2018 13:23:31 -0500 Subject: [PATCH] Add unit test for unknown opcode inputs --- .../unknown-opcode-as-reporter-block.sb2 | Bin 0 -> 4368 bytes .../unknown-opcode-as-reporter-block.js | 54 ++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/fixtures/unknown-opcode-as-reporter-block.sb2 create mode 100644 test/integration/unknown-opcode-as-reporter-block.js diff --git a/test/fixtures/unknown-opcode-as-reporter-block.sb2 b/test/fixtures/unknown-opcode-as-reporter-block.sb2 new file mode 100644 index 0000000000000000000000000000000000000000..1999dcb9a2e22cb5b0ebb5ef115186cb41c73c6d GIT binary patch literal 4368 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 IP#$0a0FgMr&Hw-a literal 0 HcmV?d00001 diff --git a/test/integration/unknown-opcode-as-reporter-block.js b/test/integration/unknown-opcode-as-reporter-block.js new file mode 100644 index 000000000..c9dc4a19d --- /dev/null +++ b/test/integration/unknown-opcode-as-reporter-block.js @@ -0,0 +1,54 @@ +const path = require('path'); +const test = require('tap').test; +const makeTestStorage = require('../fixtures/make-test-storage'); +const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer; +const VirtualMachine = require('../../src/index'); + +const uri = path.resolve(__dirname, '../fixtures/unknown-opcode-as-reporter-block.sb2'); +const project = readFileToBuffer(uri); + +test('unknown opcode', t => { + const vm = new VirtualMachine(); + vm.attachStorage(makeTestStorage()); + + vm.start(); + vm.clear(); + vm.setCompatibilityMode(false); + vm.setTurboMode(false); + vm.loadProject(project).then(() => { + vm.greenFlag(); + + // The project has 4 blocks in a single stack: + // when green flag + // if "unknown block" + // set volume to "unknown block" + // play sound "unknown block" + // the "unknown block" has unknown opcode and was created by + // dragging a discontinued extension. + // It should be parsed in without error and a shadow block + // should be created where appropriate. + const blocks = vm.runtime.targets[0].blocks; + const topBlockId = blocks.getScripts()[0]; + const secondBlockId = blocks.getNextBlock(topBlockId); + const thirdBlockId = blocks.getNextBlock(secondBlockId); + const fourthBlockId = blocks.getNextBlock(thirdBlockId); + + t.equal(blocks.getBlock(topBlockId).opcode, 'event_whenflagclicked'); + t.equal(blocks.getBlock(secondBlockId).opcode, 'control_wait_until'); + t.equal(blocks.getBlock(thirdBlockId).opcode, 'sound_setvolumeto'); + t.equal(blocks.getBlock(fourthBlockId).opcode, 'sound_play'); + + const secondBlockInputId = blocks.getBlock(secondBlockId).inputs.CONDITION.block; + const thirdBlockInputId = blocks.getBlock(thirdBlockId).inputs.VOLUME.block; + const fourthBlockInputId = blocks.getBlock(fourthBlockId).inputs.SOUND_MENU.block; + + t.equal(secondBlockInputId, null); + t.true(blocks.getBlock(thirdBlockInputId).shadow) + t.equal(blocks.getBlock(thirdBlockInputId).opcode, 'math_number'); + t.true(blocks.getBlock(fourthBlockInputId).shadow); + t.equal(blocks.getBlock(fourthBlockInputId).opcode, 'sound_sounds_menu'); + + t.end(); + process.nextTick(process.exit); + }); +});