Files
blockly/tests/mocha/render_management_test.js
Beka Westberg 83e3dcac70 feat: add after queued renders promises to render management (#6981)
* feat: add promise to render queue system

* chore: update docs for variables

* chore: add export of render management

* chore: add tests for resolving render management promises

* fix: modify insertion marker manager to use render management promises

* chore: format

* chore: remove callback from afterQueuedRenders

* chore: don't store resolver

* chore: rename afterQueuedRenders -> finishQueuedRenders

* chore: fix tests
2023-04-18 17:02:33 -07:00

65 lines
1.8 KiB
JavaScript

/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.declareModuleId('Blockly.test.renderManagement');
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,
getConnections_: () => [],
getRelativeToSurfaceXY: () => ({x: 0, y: 0}),
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;
});
});
});