mirror of
https://github.com/google/blockly.git
synced 2025-12-16 14:20:10 +01:00
130 lines
4.0 KiB
JavaScript
130 lines
4.0 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2023 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import {
|
|
sharedTestSetup,
|
|
sharedTestTeardown,
|
|
} from './test_helpers/setup_teardown.js';
|
|
|
|
suite('Render Management', function () {
|
|
setup(function () {
|
|
this.clock = sharedTestSetup.call(this).clock;
|
|
});
|
|
|
|
teardown(function () {
|
|
sharedTestTeardown.call(this);
|
|
});
|
|
|
|
suite('finish queued renders callback', function () {
|
|
function createMockBlock() {
|
|
return {
|
|
hasRendered: false,
|
|
renderEfficiently: function () {
|
|
this.hasRendered = true;
|
|
},
|
|
|
|
// All of the APIs the render management system needs.
|
|
getParent: () => null,
|
|
getChildren: () => [],
|
|
isDisposed: () => false,
|
|
getRelativeToSurfaceXY: () => ({x: 0, y: 0}),
|
|
updateComponentLocations: () => {},
|
|
bumpNeighbours: () => {},
|
|
initialized: true,
|
|
workspace: {
|
|
resizeContents: () => {},
|
|
},
|
|
};
|
|
}
|
|
|
|
test('the queueRender promise is properly resolved after rendering', function () {
|
|
const block = createMockBlock();
|
|
const promise = Blockly.renderManagement.queueRender(block).then(() => {
|
|
chai.assert.isTrue(block.hasRendered, 'Expected block to be rendered');
|
|
});
|
|
this.clock.runAll();
|
|
return promise;
|
|
});
|
|
|
|
test('the finish queued renders promise is properly resolved after rendering', function () {
|
|
const block = createMockBlock();
|
|
Blockly.renderManagement.queueRender(block);
|
|
const promise = Blockly.renderManagement.finishQueuedRenders(() => {
|
|
chai.assert.isTrue(block.hasRendered, 'Expected block to be rendered');
|
|
});
|
|
this.clock.runAll();
|
|
return promise;
|
|
});
|
|
});
|
|
|
|
suite('triggering queued renders', function () {
|
|
function createMockBlock(ws) {
|
|
return {
|
|
hasRendered: false,
|
|
renderEfficiently: function () {
|
|
this.hasRendered = true;
|
|
},
|
|
|
|
// All of the APIs the render management system needs.
|
|
getParent: () => null,
|
|
getChildren: () => [],
|
|
isDisposed: () => false,
|
|
getRelativeToSurfaceXY: () => ({x: 0, y: 0}),
|
|
updateComponentLocations: () => {},
|
|
bumpNeighbours: () => {},
|
|
initialized: true,
|
|
workspace: ws || createMockWorkspace(),
|
|
};
|
|
}
|
|
|
|
function createMockWorkspace() {
|
|
return {
|
|
resizeContents: () => {},
|
|
};
|
|
}
|
|
|
|
test('triggering queued renders rerenders blocks', function () {
|
|
const block = createMockBlock();
|
|
Blockly.renderManagement.queueRender(block);
|
|
|
|
Blockly.renderManagement.triggerQueuedRenders();
|
|
|
|
chai.assert.isTrue(block.hasRendered, 'Expected block to be rendered');
|
|
});
|
|
|
|
test('triggering queued renders rerenders blocks in all workspaces', function () {
|
|
const workspace1 = createMockWorkspace();
|
|
const workspace2 = createMockWorkspace();
|
|
const block1 = createMockBlock(workspace1);
|
|
const block2 = createMockBlock(workspace2);
|
|
Blockly.renderManagement.queueRender(block1);
|
|
Blockly.renderManagement.queueRender(block2);
|
|
|
|
Blockly.renderManagement.triggerQueuedRenders();
|
|
|
|
chai.assert.isTrue(block1.hasRendered, 'Expected block1 to be rendered');
|
|
chai.assert.isTrue(block2.hasRendered, 'Expected block2 to be rendered');
|
|
});
|
|
|
|
test('triggering queued renders in one workspace does not rerender blocks in another workspace', function () {
|
|
const workspace1 = createMockWorkspace();
|
|
const workspace2 = createMockWorkspace();
|
|
const block1 = createMockBlock(workspace1);
|
|
const block2 = createMockBlock(workspace2);
|
|
Blockly.renderManagement.queueRender(block1);
|
|
Blockly.renderManagement.queueRender(block2);
|
|
|
|
Blockly.renderManagement.triggerQueuedRenders(workspace1);
|
|
|
|
chai.assert.isTrue(block1.hasRendered, 'Expected block1 to be rendered');
|
|
chai.assert.isFalse(
|
|
block2.hasRendered,
|
|
'Expected block2 to not be rendered',
|
|
);
|
|
});
|
|
});
|
|
});
|