From 32c9daf88556803b80fb322cea9ab2d61b373a88 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Tue, 19 Sep 2023 05:17:51 -0700 Subject: [PATCH] fix: bad JSON state leaving events disabled (#7501) * fix: broken JSON state stopping event firing * chore: add unit test for events not breaking --- core/serialization/blocks.ts | 8 ++++++-- tests/mocha/jso_deserialization_test.js | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/serialization/blocks.ts b/core/serialization/blocks.ts index 053d523a2..e53f30944 100644 --- a/core/serialization/blocks.ts +++ b/core/serialization/blocks.ts @@ -399,9 +399,13 @@ export function appendInternal( } eventUtils.disable(); - const block = appendPrivate(state, workspace, {parentConnection, isShadow}); + let block; + try { + block = appendPrivate(state, workspace, {parentConnection, isShadow}); + } finally { + eventUtils.enable(); + } - eventUtils.enable(); if (eventUtils.isEnabled()) { eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(block)); } diff --git a/tests/mocha/jso_deserialization_test.js b/tests/mocha/jso_deserialization_test.js index fa6590cb7..d58e208fb 100644 --- a/tests/mocha/jso_deserialization_test.js +++ b/tests/mocha/jso_deserialization_test.js @@ -23,6 +23,25 @@ suite('JSO Deserialization', function () { }); suite('Events', function () { + test('bad JSON does not leave events disabled', function () { + const state = { + 'blocks': { + 'blocks': [ + { + 'type': 'undefined_block', + }, + ], + }, + }; + chai.assert.throws(() => { + Blockly.serialization.workspaces.load(state, this.workspace); + }); + chai.assert.isTrue( + Blockly.Events.isEnabled(), + 'Expected events to be enabled', + ); + }); + suite('Finished loading', function () { test('Just var', function () { const state = {