mirror of
https://github.com/google/blockly.git
synced 2026-01-08 01:20:12 +01:00
* chore(deps): Add pretter-plugin-organize-imports * chore: Remove insignificant blank lines in import sections Since prettier-plugin-organize-imports sorts imports within sections separated by blank lines, but preserves the section divisions, remove any blank lines that are not dividing imports into meaningful sections. Do not remove blank lines separating side-effect-only imports from main imports. * chore: Remove unneded eslint-disable directives * chore: Organise imports
137 lines
3.9 KiB
JavaScript
137 lines
3.9 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2023 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import {assert} from '../../node_modules/chai/chai.js';
|
|
import {
|
|
assertEventFired,
|
|
createChangeListenerSpy,
|
|
} from './test_helpers/events.js';
|
|
import {
|
|
sharedTestSetup,
|
|
sharedTestTeardown,
|
|
} from './test_helpers/setup_teardown.js';
|
|
|
|
suite('Clipboard', function () {
|
|
setup(function () {
|
|
this.clock = sharedTestSetup.call(this, {fireEventsNow: false}).clock;
|
|
this.workspace = Blockly.inject('blocklyDiv');
|
|
});
|
|
|
|
teardown(function () {
|
|
sharedTestTeardown.call(this);
|
|
});
|
|
|
|
test('a paster registered with a given type is called when pasting that type', function () {
|
|
const paster = {
|
|
paste: sinon.stub().returns(null),
|
|
};
|
|
Blockly.clipboard.registry.register('test-paster', paster);
|
|
|
|
Blockly.clipboard.paste({paster: 'test-paster'}, this.workspace);
|
|
assert.isTrue(paster.paste.calledOnce);
|
|
|
|
Blockly.clipboard.registry.unregister('test-paster');
|
|
});
|
|
|
|
suite('pasting blocks', function () {
|
|
test('pasting blocks fires a create event', function () {
|
|
const eventSpy = createChangeListenerSpy(this.workspace);
|
|
const block = Blockly.serialization.blocks.append(
|
|
{
|
|
'type': 'controls_if',
|
|
'id': 'blockId',
|
|
},
|
|
this.workspace,
|
|
);
|
|
const data = block.toCopyData();
|
|
this.clock.runAll();
|
|
eventSpy.resetHistory();
|
|
|
|
Blockly.clipboard.paste(data, this.workspace);
|
|
this.clock.runAll();
|
|
|
|
assertEventFired(
|
|
eventSpy,
|
|
Blockly.Events.BlockCreate,
|
|
{'recordUndo': true, 'type': Blockly.Events.BLOCK_CREATE},
|
|
this.workspace.id,
|
|
);
|
|
});
|
|
|
|
suite('pasted blocks are placed in unambiguous locations', function () {
|
|
test('pasted blocks are bumped to not overlap', function () {
|
|
const block = Blockly.serialization.blocks.append(
|
|
{
|
|
'type': 'controls_if',
|
|
'x': 38,
|
|
'y': 13,
|
|
},
|
|
this.workspace,
|
|
);
|
|
const data = block.toCopyData();
|
|
|
|
const newBlock = Blockly.clipboard.paste(data, this.workspace);
|
|
assert.deepEqual(
|
|
newBlock.getRelativeToSurfaceXY(),
|
|
new Blockly.utils.Coordinate(66, 69),
|
|
);
|
|
});
|
|
|
|
test('pasted blocks are bumped to be outside the connection snap radius', function () {
|
|
Blockly.serialization.workspaces.load(
|
|
{
|
|
'blocks': {
|
|
'languageVersion': 0,
|
|
'blocks': [
|
|
{
|
|
'type': 'controls_if',
|
|
'id': 'sourceBlockId',
|
|
'x': 38,
|
|
'y': 13,
|
|
},
|
|
{
|
|
'type': 'logic_compare',
|
|
'x': 113,
|
|
'y': 63,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
this.workspace,
|
|
);
|
|
this.clock.runAll(); // Update the connection DB.
|
|
const data = this.workspace.getBlockById('sourceBlockId').toCopyData();
|
|
|
|
const newBlock = Blockly.clipboard.paste(data, this.workspace);
|
|
assert.deepEqual(
|
|
newBlock.getRelativeToSurfaceXY(),
|
|
new Blockly.utils.Coordinate(94, 125),
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('pasting comments', function () {
|
|
// TODO: Reenable test when we readd copy-paste.
|
|
test.skip('pasted comments are bumped to not overlap', function () {
|
|
Blockly.Xml.domToWorkspace(
|
|
Blockly.utils.xml.textToDom(
|
|
'<xml><comment id="test" x=10 y=10/></xml>',
|
|
),
|
|
this.workspace,
|
|
);
|
|
const comment = this.workspace.getTopComments(false)[0];
|
|
const data = comment.toCopyData();
|
|
|
|
const newComment = Blockly.clipboard.paste(data, this.workspace);
|
|
assert.deepEqual(
|
|
newComment.getRelativeToSurfaceXY(),
|
|
new Blockly.utils.Coordinate(60, 60),
|
|
);
|
|
});
|
|
});
|
|
});
|