diff --git a/blocks/lists.ts b/blocks/lists.ts index 6754b6847..864803b93 100644 --- a/blocks/lists.ts +++ b/blocks/lists.ts @@ -1046,22 +1046,19 @@ blocks['lists_split'] = { /** * Returns the state of this block as a JSON serializable object. - * This block does not need to serialize any specific state as it is already - * encoded in the dropdown values, but must have an implementation to avoid - * the backward compatible XML mutations being serialized. * * @returns The state of this block. */ - saveExtraState: function (this: SplitBlock): null { - return null; + saveExtraState: function (this: SplitBlock): {mode: string} { + return {'mode': this.getFieldValue('MODE')}; }, /** * Applies the given state to this block. - * No extra state is needed or expected as it is already encoded in the - * dropdown values. */ - loadExtraState: function (this: SplitBlock) {}, + loadExtraState: function (this: SplitBlock, state: {mode: string}) { + this.updateType_(state['mode']); + }, }; // Register provided blocks. diff --git a/tests/mocha/blocks/lists_test.js b/tests/mocha/blocks/lists_test.js index 0c7a92bf6..490109d22 100644 --- a/tests/mocha/blocks/lists_test.js +++ b/tests/mocha/blocks/lists_test.js @@ -181,16 +181,58 @@ suite('Lists', function () { * Test cases for serialization tests. * @type {Array} */ - const testCases = makeTestCasesForBlockNotNeedingExtraState_( + const testCases = [ { - 'type': 'lists_split', - 'id': '1', - 'fields': { - 'MODE': 'SPLIT', + title: 'JSON for splitting', + json: { + type: 'lists_split', + id: '1', + extraState: {mode: 'SPLIT'}, + fields: {MODE: 'SPLIT'}, + inputs: { + DELIM: { + shadow: { + type: 'text', + id: '2', + fields: { + TEXT: ',', + }, + }, + }, + }, + }, + assertBlockStructure: (block) => { + assert.equal(block.type, 'lists_split'); + assert.deepEqual(block.outputConnection.getCheck(), ['Array']); + assert.isTrue(block.getField('MODE').getValue() === 'SPLIT'); }, }, - '', - ); + { + title: 'JSON for joining', + json: { + type: 'lists_split', + id: '1', + extraState: {mode: 'JOIN'}, + fields: {MODE: 'JOIN'}, + inputs: { + DELIM: { + shadow: { + type: 'text', + id: '2', + fields: { + TEXT: ',', + }, + }, + }, + }, + }, + assertBlockStructure: (block) => { + assert.equal(block.type, 'lists_split'); + assert.deepEqual(block.outputConnection.getCheck(), ['String']); + assert.isTrue(block.getField('MODE').getValue() === 'JOIN'); + }, + }, + ]; runSerializationTestSuite(testCases); }); });