Skip to content

Commit 0996ed7

Browse files
authored
fix: procedure parameter serialization (#2125)
* fix: procedure parameter serialization * chore: format
1 parent 295ee2a commit 0996ed7

File tree

2 files changed

+11
-72
lines changed

2 files changed

+11
-72
lines changed

plugins/block-shareable-procedures/src/blocks.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,11 @@ const procedureDefMutator = {
495495
const newParams = state['params'] ?? [];
496496
const newIds = new Set(newParams.map((p) => p.id));
497497
const currParams = model.getParameters();
498-
for (let i = currParams.length - 1; i >= 0; i--) {
499-
if (!newIds.has(currParams[i].getId)) {
500-
model.deleteParameter(i);
498+
if (state['fullSerialization']) {
499+
for (let i = currParams.length - 1; i >= 0; i--) {
500+
if (!newIds.has(currParams[i].getId)) {
501+
model.deleteParameter(i);
502+
}
501503
}
502504
}
503505
for (let i = 0; i < newParams.length; i++) {

plugins/block-shareable-procedures/test/procedure_blocks.mocha.js

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ const {testHelpers} = require('@blockly/dev-tools');
2020
const {ObservableParameterModel} = require('../src/observable_parameter_model');
2121
const {ObservableProcedureModel} = require('../src/observable_procedure_model');
2222
const {blocks} = require('../src/blocks');
23-
const {unregisterProcedureBlocks} = require('../src/index');
23+
const {
24+
unregisterProcedureBlocks,
25+
registerProcedureSerializer,
26+
} = require('../src/index');
2427
const {ProcedureDelete} = require('../src/events_procedure_delete');
2528
const {ProcedureCreate} = require('../src/events_procedure_create');
2629

@@ -37,6 +40,8 @@ suite('Procedures', function () {
3740
unregisterProcedureBlocks();
3841
Blockly.common.defineBlocks(blocks);
3942

43+
registerProcedureSerializer();
44+
4045
this.workspace = Blockly.inject('blocklyDiv', {});
4146

4247
this.eventSpy = this.sandbox.spy();
@@ -1969,13 +1974,6 @@ suite('Procedures', function () {
19691974
type: 'procedures_defnoreturn',
19701975
extraState: {
19711976
procedureId: 'procId',
1972-
params: [
1973-
{
1974-
name: 'x',
1975-
id: 'varId',
1976-
paramId: 'paramId',
1977-
},
1978-
],
19791977
},
19801978
fields: {
19811979
NAME: 'do something',
@@ -2012,67 +2010,6 @@ suite('Procedures', function () {
20122010
['varId'],
20132011
);
20142012
});
2015-
2016-
test(
2017-
'multiple definitions pointing to the same model end up with ' +
2018-
'different models',
2019-
function () {
2020-
Blockly.serialization.workspaces.load(
2021-
{
2022-
blocks: {
2023-
languageVersion: 0,
2024-
blocks: [
2025-
{
2026-
type: 'procedures_defnoreturn',
2027-
extraState: {
2028-
procedureId: 'procId',
2029-
},
2030-
fields: {
2031-
NAME: 'do something',
2032-
},
2033-
},
2034-
{
2035-
type: 'procedures_defnoreturn',
2036-
y: 10,
2037-
extraState: {
2038-
procedureId: 'procId',
2039-
},
2040-
fields: {
2041-
NAME: 'do something',
2042-
},
2043-
},
2044-
],
2045-
},
2046-
procedures: [
2047-
{
2048-
id: 'procId',
2049-
name: 'do something',
2050-
returnTypes: null,
2051-
},
2052-
],
2053-
},
2054-
this.workspace,
2055-
);
2056-
const def1 = this.workspace.getTopBlocks(true)[0];
2057-
const def2 = this.workspace.getTopBlocks(true)[1];
2058-
chai.assert.equal(
2059-
def1.getProcedureModel().getName(),
2060-
'do something',
2061-
'Expected the first procedure definition to have the ' +
2062-
'name in XML',
2063-
);
2064-
chai.assert.equal(
2065-
def2.getProcedureModel().getName(),
2066-
'do something2',
2067-
'Expected the second procedure definition to be renamed',
2068-
);
2069-
chai.assert.notEqual(
2070-
def1.getProcedureModel(),
2071-
def2.getProcedureModel(),
2072-
'Expected the procedures to have different models',
2073-
);
2074-
},
2075-
);
20762013
});
20772014

20782015
suite('getDefinition', function () {

0 commit comments

Comments
 (0)