Skip to content

Commit

Permalink
Handle overriding components in ComponentManager (#4856)
Browse files Browse the repository at this point in the history
  • Loading branch information
moniika committed Jun 8, 2021
1 parent 6f7ead6 commit 8e7cb40
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
12 changes: 11 additions & 1 deletion core/component_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,19 @@ Blockly.ComponentManager.ComponentDatum;
* Adds a component.
* @param {!Blockly.ComponentManager.ComponentDatum} componentInfo The data for
* the component to register.
* @param {boolean=} opt_allowOverrides True to prevent an error when overriding
* an already registered item.
* @template T
*/
Blockly.ComponentManager.prototype.addComponent = function(componentInfo) {
Blockly.ComponentManager.prototype.addComponent = function(
componentInfo, opt_allowOverrides) {
// Don't throw an error if opt_allowOverrides is true.
if (!opt_allowOverrides && this.componentData_[componentInfo.id]) {
throw Error(
'Plugin "' + componentInfo.id + '" with capabilities "' +
this.componentData_[componentInfo.id].capabilities +
'" already added.');
}
this.componentData_[componentInfo.id] = componentInfo;
for (var i = 0, type; (type = componentInfo.capabilities[i]); i++) {
var typeKey = String(type).toLowerCase();
Expand Down
6 changes: 6 additions & 0 deletions tests/mocha/toolbox_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ suite('Toolbox', function() {
test('Init called -> Toolbox is subscribed to background and foreground colour', function() {
var themeManager = this.toolbox.workspace_.getThemeManager();
var themeManagerSpy = sinon.spy(themeManager, 'subscribe');
var componentManager = this.toolbox.workspace_.getComponentManager();
sinon.stub(componentManager, 'addComponent');
this.toolbox.init();
sinon.assert.calledWith(themeManagerSpy, this.toolbox.HtmlDiv,
'toolboxBackgroundColour', 'background-color');
Expand All @@ -42,10 +44,14 @@ suite('Toolbox', function() {
});
test('Init called -> Render is called', function() {
var renderSpy = sinon.spy(this.toolbox, 'render');
var componentManager = this.toolbox.workspace_.getComponentManager();
sinon.stub(componentManager, 'addComponent');
this.toolbox.init();
sinon.assert.calledOnce(renderSpy);
});
test('Init called -> Flyout is initialized', function() {
var componentManager = this.toolbox.workspace_.getComponentManager();
sinon.stub(componentManager, 'addComponent');
this.toolbox.init();
chai.assert.isDefined(this.toolbox.flyout_);
});
Expand Down

0 comments on commit 8e7cb40

Please sign in to comment.