mirror of
https://github.com/google/blockly.git
synced 2026-01-07 00:50:27 +01:00
fix: triggering flyout show from field render causing infinite loop (#7784)
* fix: triggering flyout show from field render causing infinite loop * chore: add tests for triggering queued renders
This commit is contained in:
@@ -57,4 +57,69 @@ suite('Render Management', function () {
|
||||
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: () => {},
|
||||
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',
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user