mirror of
https://github.com/google/blockly.git
synced 2026-03-18 19:20:11 +01:00
Add getTooltip (#4254)
* Add getTooltip * Add tests * Fix typings? * Fix typings? * PR Comments
This commit is contained in:
@@ -83,6 +83,7 @@
|
||||
<script src="registry_test.js"></script>
|
||||
<script src="theme_test.js"></script>
|
||||
<script src="toolbox_test.js"></script>
|
||||
<script src="tooltip_test.js"></script>
|
||||
<script src="trashcan_test.js"></script>
|
||||
<script src="utils_test.js"></script>
|
||||
<script src="variable_map_test.js"></script>
|
||||
|
||||
230
tests/mocha/tooltip_test.js
Normal file
230
tests/mocha/tooltip_test.js
Normal file
@@ -0,0 +1,230 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2020 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
suite('Tooltip', function() {
|
||||
|
||||
setup(function() {
|
||||
sharedTestSetup.call(this);
|
||||
this.workspace = new Blockly.Workspace();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
sharedTestTeardown.call(this);
|
||||
});
|
||||
|
||||
suite('set/getTooltip', function() {
|
||||
setup(function() {
|
||||
Blockly.defineBlocksWithJsonArray([
|
||||
{
|
||||
"type": "test_block",
|
||||
"message0": "%1",
|
||||
"args0": [
|
||||
{
|
||||
"type": "field_input",
|
||||
"name": "FIELD"
|
||||
}
|
||||
]
|
||||
}
|
||||
]);
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
delete Blockly.Blocks["test_block"];
|
||||
});
|
||||
|
||||
var tooltipText = 'testTooltip';
|
||||
|
||||
function assertTooltip(obj) {
|
||||
chai.assert.equal(obj.getTooltip(), tooltipText);
|
||||
}
|
||||
|
||||
function setStringTooltip(obj) {
|
||||
obj.setTooltip(tooltipText);
|
||||
}
|
||||
|
||||
function setFunctionTooltip(obj) {
|
||||
obj.setTooltip(() => tooltipText);
|
||||
}
|
||||
|
||||
function setNestedFunctionTooltip(obj) {
|
||||
function nestFunction(fn, count) {
|
||||
if (!count) {
|
||||
return fn;
|
||||
}
|
||||
return () => nestFunction(fn, --count);
|
||||
}
|
||||
obj.setTooltip(nestFunction(() => tooltipText, 5));
|
||||
}
|
||||
|
||||
function setFunctionReturningObjectTooltip(obj) {
|
||||
obj.setTooltip(() => {
|
||||
return {
|
||||
tooltip: tooltipText
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function setObjectTooltip(obj) {
|
||||
obj.setTooltip({tooltip: tooltipText});
|
||||
}
|
||||
|
||||
suite('Headless Blocks', function() {
|
||||
setup(function() {
|
||||
this.block = this.workspace.newBlock('test_block');
|
||||
});
|
||||
|
||||
test('String', function() {
|
||||
setStringTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Function', function() {
|
||||
setFunctionTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Nested Function', function() {
|
||||
setNestedFunctionTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Function returning object', function() {
|
||||
setFunctionReturningObjectTooltip(this.block);
|
||||
chai.assert.throws(this.block.getTooltip.bind(this.block),
|
||||
'Tooltip function must return a string.');
|
||||
});
|
||||
|
||||
test('Object', function() {
|
||||
setObjectTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Rendered Blocks', function() {
|
||||
setup(function() {
|
||||
this.renderedWorkspace = Blockly.inject('blocklyDiv');
|
||||
this.block = this.renderedWorkspace.newBlock('test_block');
|
||||
this.block.initSvg();
|
||||
this.block.render();
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
workspaceTeardown.call(this, this.renderedWorkspace);
|
||||
});
|
||||
|
||||
test('String', function() {
|
||||
setStringTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Function', function() {
|
||||
setFunctionTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Nested Function', function() {
|
||||
setNestedFunctionTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
|
||||
test('Function returning object', function() {
|
||||
setFunctionReturningObjectTooltip(this.block);
|
||||
chai.assert.throws(this.block.getTooltip.bind(this.block),
|
||||
'Tooltip function must return a string.');
|
||||
});
|
||||
|
||||
test('Object', function() {
|
||||
setObjectTooltip(this.block);
|
||||
assertTooltip(this.block);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Headless Fields', function() {
|
||||
setup(function() {
|
||||
this.block = this.workspace.newBlock('test_block');
|
||||
this.field = this.block.getField('FIELD');
|
||||
});
|
||||
|
||||
test('String', function() {
|
||||
setStringTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Function', function() {
|
||||
setFunctionTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Nested Function', function() {
|
||||
setNestedFunctionTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Function returning object', function() {
|
||||
setFunctionReturningObjectTooltip(this.field);
|
||||
chai.assert.throws(this.field.getTooltip.bind(this.field),
|
||||
'Tooltip function must return a string.');
|
||||
});
|
||||
|
||||
test('Object', function() {
|
||||
setObjectTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Null', function() {
|
||||
setStringTooltip(this.block);
|
||||
this.field.setTooltip(null);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Rendered Fields', function() {
|
||||
setup(function() {
|
||||
this.renderedWorkspace = Blockly.inject('blocklyDiv');
|
||||
this.block = this.renderedWorkspace.newBlock('test_block');
|
||||
this.block.initSvg();
|
||||
this.block.render();
|
||||
this.field = this.block.getField('FIELD');
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
workspaceTeardown.call(this, this.renderedWorkspace);
|
||||
});
|
||||
|
||||
test('String', function() {
|
||||
setStringTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Function', function() {
|
||||
setFunctionTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Nested Function', function() {
|
||||
setNestedFunctionTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Function returning object', function() {
|
||||
setFunctionReturningObjectTooltip(this.field);
|
||||
chai.assert.throws(this.field.getTooltip.bind(this.field),
|
||||
'Tooltip function must return a string.');
|
||||
});
|
||||
|
||||
test('Object', function() {
|
||||
setObjectTooltip(this.field);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
|
||||
test('Null', function() {
|
||||
setStringTooltip(this.block);
|
||||
this.field.setTooltip(null);
|
||||
assertTooltip(this.field);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user