From be65b615a289518465b51601ce1015989db6e22c Mon Sep 17 00:00:00 2001 From: Paul Kaplan <pkaplan@media.mit.edu> Date: Wed, 5 Dec 2018 11:35:22 -0500 Subject: [PATCH] Add a test and fix for not serializing top-level variable reporters --- src/serialization/sb3.js | 2 +- test/fixtures/top-level-variable-reporter.sb2 | Bin 0 -> 4031 bytes test/unit/serialization_sb3.js | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/top-level-variable-reporter.sb2 diff --git a/src/serialization/sb3.js b/src/serialization/sb3.js index df367cf1b..21c5c5f85 100644 --- a/src/serialization/sb3.js +++ b/src/serialization/sb3.js @@ -325,7 +325,7 @@ const serializeBlocks = function (blocks) { // a shadow block, and there are no blocks that reference it, otherwise // they would have been compressed in the last pass) if (Array.isArray(serializedBlock) && - [VAR_PRIMITIVE, LIST_PRIMITIVE].indexOf(serializedBlock) < 0) { + [VAR_PRIMITIVE, LIST_PRIMITIVE].indexOf(serializedBlock[0]) < 0) { log.warn(`Found an unexpected top level primitive with block ID: ${ blockID}; deleting it from serialized blocks.`); delete obj[blockID]; diff --git a/test/fixtures/top-level-variable-reporter.sb2 b/test/fixtures/top-level-variable-reporter.sb2 new file mode 100644 index 0000000000000000000000000000000000000000..5c50402173e68021a92223b2fd5a3ef8d3a922db GIT binary patch literal 4031 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 OzygGqf%G*#5Dx&Uh8-jT literal 0 HcmV?d00001 diff --git a/test/unit/serialization_sb3.js b/test/unit/serialization_sb3.js index caf31e2a8..01da2d75f 100644 --- a/test/unit/serialization_sb3.js +++ b/test/unit/serialization_sb3.js @@ -7,6 +7,7 @@ const exampleProjectPath = path.resolve(__dirname, '../fixtures/clone-cleanup.sb const commentsSB2ProjectPath = path.resolve(__dirname, '../fixtures/comments.sb2'); const commentsSB3ProjectPath = path.resolve(__dirname, '../fixtures/comments.sb3'); const commentsSB3NoDupeIds = path.resolve(__dirname, '../fixtures/comments_no_duplicate_id_serialization.sb3'); +const variableReporterSB2ProjectPath = path.resolve(__dirname, '../fixtures/top-level-variable-reporter.sb2'); const FakeRenderer = require('../fixtures/fake-renderer'); test('serialize', t => { @@ -236,3 +237,16 @@ test('getExtensionIdForOpcode', t => { t.end(); }); + +test('(#1608) serializeBlocks maintains top level variable reporters', t => { + const vm = new VirtualMachine(); + vm.loadProject(readFileToBuffer(variableReporterSB2ProjectPath)) + .then(() => { + const blocks = vm.runtime.targets[0].blocks._blocks; + const result = sb3.serialize(vm.runtime).targets[0].blocks; + // Project should have 1 block, a top-level variable reporter + t.equal(Object.keys(blocks).length, 1); + t.equal(Object.keys(result).length, 1); + t.end(); + }); +});