Files
blockly/tests/mocha/test_helpers/toolbox_definitions.js
Maribeth Bottorff 88ff901a72 chore: use prettier instead of clang-format (#7014)
* chore: add and configure prettier

* chore: remove clang-format

* chore: remove clang-format config

* chore: lint additional ts files

* chore: fix lint errors in blocks

* chore: add prettier-ignore where needed

* chore: ignore js blocks when formatting

* chore: fix playground html syntax

* chore: fix yaml spacing from merge

* chore: convert text blocks to use arrow functions

* chore: format everything with prettier

* chore: fix lint unused imports in blocks
2023-05-10 16:01:39 -07:00

274 lines
6.6 KiB
JavaScript

/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.declareModuleId('Blockly.test.helpers.toolboxDefinitions');
/**
* Get JSON for a toolbox that contains categories.
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
* for a toolbox.
*/
export function getCategoryJSON() {
return {
'contents': [
{
'kind': 'CATEGORY',
'cssconfig': {
'container': 'something',
},
'contents': [
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">FirstCategory-FirstBlock</field></block>',
},
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">FirstCategory-SecondBlock</field></block>',
},
],
'name': 'First',
},
{
'kind': 'CATEGORY',
'contents': [
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">SecondCategory-FirstBlock</field></block>',
},
],
'name': 'Second',
},
],
};
}
/**
* Get JSON for a simple toolbox.
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
* for a simple toolbox.
*/
export function getSimpleJson() {
return {
'contents': [
{
'kind': 'BLOCK',
'blockxml': `<block type="logic_compare">
<field name="OP">NEQ</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<block type="math_number">
<field name="NUM">2</field>
</block>
</value>
</block>`,
},
{
'kind': 'SEP',
'gap': '20',
},
{
'kind': 'BUTTON',
'text': 'insert',
'callbackkey': 'insertConnectionRows',
},
{
'kind': 'LABEL',
'text': 'tooltips',
},
],
};
}
export function getProperSimpleJson() {
return {
'contents': [
{
'kind': 'BLOCK',
'type': 'logic_compare',
'fields': {
'OP': 'NEQ',
},
'inputs': {
'A': {
'shadow': {
'type': 'math_number',
'fields': {
'NUM': 1,
},
},
},
'B': {
'block': {
'type': 'math_number',
'fields': {
'NUM': 2,
},
},
},
},
},
{
'kind': 'SEP',
'gap': '20',
},
{
'kind': 'BUTTON',
'text': 'insert',
'callbackkey': 'insertConnectionRows',
},
{
'kind': 'LABEL',
'text': 'tooltips',
},
],
};
}
/**
* Get JSON for a toolbox that contains categories that contain categories.
* @return {Blockly.utils.toolbox.ToolboxJson} The array holding information
* for a toolbox.
*/
export function getDeeplyNestedJSON() {
return {
'contents': [
{
'kind': 'CATEGORY',
'cssconfig': {
'container': 'something',
},
'contents': [
{
'kind': 'CATEGORY',
'contents': [
{
'kind': 'CATEGORY',
'contents': [
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">NestedCategory-FirstBlock</field></block>',
},
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">NestedCategory-SecondBlock</field></block>',
},
],
'name': 'NestedCategoryInner',
},
],
'name': 'NestedCategoryMiddle',
},
],
'name': 'NestedCategoryOuter',
},
{
'kind': 'CATEGORY',
'contents': [
{
'kind': 'BLOCK',
'blockxml':
'<block type="basic_block"><field name="TEXT">SecondCategory-FirstBlock</field></block>',
},
],
'name': 'Second',
},
],
};
}
/**
* Get an array filled with xml elements.
* @return {Array<Node>} Array holding xml elements for a toolbox.
*/
export function getXmlArray() {
const block = Blockly.utils.xml.textToDom(
`<block type="logic_compare">
<field name="OP">NEQ</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<block type="math_number">
<field name="NUM">2</field>
</block>
</value>
</block>`
);
const separator = Blockly.utils.xml.textToDom('<sep gap="20"></sep>');
const button = Blockly.utils.xml.textToDom(
'<button text="insert" callbackkey="insertConnectionRows"></button>'
);
const label = Blockly.utils.xml.textToDom('<label text="tooltips"></label>');
return [block, separator, button, label];
}
export function getInjectedToolbox() {
/**
* Category: First
* sep
* basic_block
* basic_block
* Category: second
* basic_block
* Category: Variables
* custom: VARIABLE
* Category: NestedCategory
* Category: NestedItemOne
*/
const toolboxXml = document.getElementById('toolbox-test');
const workspace = Blockly.inject('blocklyDiv', {
toolbox: toolboxXml,
});
return workspace.getToolbox();
}
export function getBasicToolbox() {
const workspace = new Blockly.WorkspaceSvg(new Blockly.Options({}));
const toolbox = new Blockly.Toolbox(workspace);
toolbox.HtmlDiv = document.createElement('div');
toolbox.flyout_ = sinon.createStubInstance(Blockly.VerticalFlyout);
return toolbox;
}
export function getCollapsibleItem(toolbox) {
const contents = toolbox.contents_;
for (let i = 0; i < contents.length; i++) {
const item = contents[i];
if (item.isCollapsible()) {
return item;
}
}
}
export function getNonCollapsibleItem(toolbox) {
const contents = toolbox.contents_;
for (let i = 0; i < contents.length; i++) {
const item = contents[i];
if (!item.isCollapsible()) {
return item;
}
}
}
export function getChildItem(toolbox) {
return toolbox.getToolboxItemById('nestedCategory');
}
export function getSeparator(toolbox) {
return toolbox.getToolboxItemById('separator');
}