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:
Beka Westberg
2024-01-12 13:43:55 -08:00
committed by GitHub
parent 7243b48d47
commit 5ade042e95
3 changed files with 81 additions and 7 deletions

View File

@@ -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',
);
});
});
});