chore: Use JSON objects for context menu callbackFactory (#7382)

* chore: use json object for context callbackFactory

* Add test file for context menu callback function.
This commit is contained in:
John Nesky
2023-09-08 16:16:59 -07:00
committed by GitHub
parent 0d2879be7d
commit 1b2e91246e
7 changed files with 119 additions and 52 deletions

View File

@@ -0,0 +1,70 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {
sharedTestSetup,
sharedTestTeardown,
} from './test_helpers/setup_teardown.js';
import {callbackFactory} from '../../build/src/core/contextmenu.js';
import * as xmlUtils from '../../build/src/core/utils/xml.js';
import * as Variables from '../../build/src/core/variables.js';
suite('Context Menu', function () {
setup(function () {
sharedTestSetup.call(this);
// Creates a WorkspaceSVG
const toolbox = document.getElementById('toolbox-categories');
this.workspace = Blockly.inject('blocklyDiv', {toolbox: toolbox});
});
teardown(function () {
sharedTestTeardown.call(this);
});
suite('Callback Factory', function () {
setup(function () {
this.forLoopBlock = this.workspace.newBlock('controls_for');
});
test('callback with xml state creates block', function () {
const xmlField = Variables.generateVariableFieldDom(
this.forLoopBlock.getField('VAR').getVariable(),
);
const xmlBlock = xmlUtils.createElement('block');
xmlBlock.setAttribute('type', 'variables_get');
xmlBlock.appendChild(xmlField);
const callback = callbackFactory(this.forLoopBlock, xmlBlock);
const getVarBlock = callback();
chai.assert.equal(getVarBlock.type, 'variables_get');
chai.assert.equal(getVarBlock.workspace, this.forLoopBlock.workspace);
chai.assert.equal(
getVarBlock.getField('VAR').getVariable().getId(),
this.forLoopBlock.getField('VAR').getVariable().getId(),
);
});
test('callback with json state creates block', function () {
const jsonState = {
type: 'variables_get',
fields: {VAR: this.forLoopBlock.getField('VAR').saveState(true)},
};
const callback = callbackFactory(this.forLoopBlock, jsonState);
const getVarBlock = callback();
chai.assert.equal(getVarBlock.type, 'variables_get');
chai.assert.equal(getVarBlock.workspace, this.forLoopBlock.workspace);
chai.assert.equal(
getVarBlock.getField('VAR').getVariable().getId(),
this.forLoopBlock.getField('VAR').getVariable().getId(),
);
});
});
});

View File

@@ -50,6 +50,7 @@
import './connection_db_test.js';
import './connection_test.js';
import './contextmenu_items_test.js';
import './contextmenu_test.js';
import './cursor_test.js';
import './dropdowndiv_test.js';
import './event_test.js';