From 0ad57f4fd37baf7e476d9fecc9cc34af11ef09e8 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Fri, 3 Nov 2023 18:19:30 +0000 Subject: [PATCH] fix: shadows in insertion markers being displayed as shadows (#7609) * fix: shadows in insertion markers being displayed as shadows * chore: add unit tests * chore: remove only --- core/insertion_marker_manager.ts | 4 ++ tests/mocha/insertion_marker_manager_test.js | 73 ++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/core/insertion_marker_manager.ts b/core/insertion_marker_manager.ts index e9d04f728..69d3d2cb9 100644 --- a/core/insertion_marker_manager.ts +++ b/core/insertion_marker_manager.ts @@ -271,6 +271,10 @@ export class InsertionMarkerManager { } } + for (const block of result.getDescendants(false)) { + block.setInsertionMarker(true); + } + result.setCollapsed(sourceBlock.isCollapsed()); result.setInputsInline(sourceBlock.getInputsInline()); diff --git a/tests/mocha/insertion_marker_manager_test.js b/tests/mocha/insertion_marker_manager_test.js index 26996fa95..75cad8ebc 100644 --- a/tests/mocha/insertion_marker_manager_test.js +++ b/tests/mocha/insertion_marker_manager_test.js @@ -177,6 +177,79 @@ suite('Insertion marker manager', function () { const markers = manager.getInsertionMarkers(); chai.assert.equal(markers.length, 2); }); + + suite('children being set as insertion markers', function () { + setup(function () { + Blockly.Blocks['shadows_in_init'] = { + init: function () { + this.appendValueInput('test').connection.setShadowState({ + 'type': 'math_number', + }); + this.setPreviousStatement(true); + }, + }; + + Blockly.Blocks['shadows_in_load'] = { + init: function () { + this.appendValueInput('test'); + this.setPreviousStatement(true); + }, + + loadExtraState: function () { + this.getInput('test').connection.setShadowState({ + 'type': 'math_number', + }); + }, + + saveExtraState: function () { + return true; + }, + }; + }); + + teardown(function () { + delete Blockly.Blocks['shadows_in_init']; + delete Blockly.Blocks['shadows_in_load']; + }); + + test('Shadows added in init are set as insertion markers', function () { + const state = { + 'blocks': { + 'blocks': [ + { + 'id': 'first', + 'type': 'shadows_in_init', + }, + ], + }, + }; + const manager = createBlocksAndManager(this.workspace, state); + const markers = manager.getInsertionMarkers(); + chai.assert.isTrue( + markers[0].getChildren()[0].isInsertionMarker(), + 'Expected the shadow block to be an insertion maker', + ); + }); + + test('Shadows added in `loadExtraState` are set as insertion markers', function () { + const state = { + 'blocks': { + 'blocks': [ + { + 'id': 'first', + 'type': 'shadows_in_load', + }, + ], + }, + }; + const manager = createBlocksAndManager(this.workspace, state); + const markers = manager.getInsertionMarkers(); + chai.assert.isTrue( + markers[0].getChildren()[0].isInsertionMarker(), + 'Expected the shadow block to be an insertion maker', + ); + }); + }); }); suite('Would delete block', function () {