From 448c433abeacb26a0d110ac1caad05ac9541fbff Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Fri, 3 Sep 2021 20:35:23 +0000 Subject: [PATCH] fix: serializing edited shadows (#5424) * fix: serializing shadows * tests: add tests for serializing editted shadows --- core/serialization/blocks.js | 2 +- tests/mocha/jso_serialization_test.js | 56 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/core/serialization/blocks.js b/core/serialization/blocks.js index 903a996e8..c795edfa9 100644 --- a/core/serialization/blocks.js +++ b/core/serialization/blocks.js @@ -257,7 +257,7 @@ const saveNextBlocks = function(block, state) { * shadow block, or any connected real block. */ const saveConnection = function(connection) { - const shadow = connection.getShadowState(); + const shadow = connection.getShadowState(true); const child = connection.targetBlock(); if (!shadow && !child) { return null; diff --git a/tests/mocha/jso_serialization_test.js b/tests/mocha/jso_serialization_test.js index 9e05482c1..e7cfeef85 100644 --- a/tests/mocha/jso_serialization_test.js +++ b/tests/mocha/jso_serialization_test.js @@ -431,6 +431,62 @@ suite('JSO Serialization', function() { }; }); + suite('Editing shadow value', function() { + test('Not overwritten', function() { + const block = this.workspace.newBlock('text_print'); + block.getInput('TEXT').connection.setShadowState({ + 'type': 'text', + 'id': 'id' + }); + block.getInputTargetBlock('TEXT').setFieldValue('new value', 'TEXT'); + const jso = Blockly.serialization.blocks.save(block); + this.assertInput( + jso, + 'TEXT', + { + 'shadow': { + 'type': 'text', + 'id': 'id', + 'fields': { + 'TEXT': 'new value' + } + } + }); + }); + + test('Overwritten', function() { + const block = this.workspace.newBlock('text_print'); + block.getInput('TEXT').connection.setShadowState({ + 'type': 'text', + 'id': 'id' + }); + block.getInputTargetBlock('TEXT').setFieldValue('new value', 'TEXT'); + const childBlock = this.workspace.newBlock('text'); + block.getInput('TEXT').connection.connect( + childBlock.outputConnection); + const jso = Blockly.serialization.blocks.save(block); + this.assertInput( + jso, + 'TEXT', + { + 'shadow': { + 'type': 'text', + 'id': 'id', + 'fields': { + 'TEXT': 'new value' + } + }, + 'block': { + 'type': 'text', + 'id': 'id3', + 'fields': { + 'TEXT': '' + } + }, + }); + }); + }); + suite('Value', function() { suite('With serialization', function() { test('Child', function() {