Skip to content
Snippets Groups Projects
Commit 7c892c8d authored by Piotr Gawron's avatar Piotr Gawron
Browse files

when plugin is unregistered check about removing listeners is added and all...

when plugin is unregistered check about removing listeners is added and all listeners are removed by force if necessary
parent 443ea4c3
No related branches found
No related tags found
1 merge request!125Resolve "plugin API"
Pipeline #
...@@ -267,6 +267,16 @@ function createProjectMap(options) { ...@@ -267,6 +267,16 @@ function createProjectMap(options) {
listenersData.splice(indexToBeRemoved, 1); listenersData.splice(indexToBeRemoved, 1);
}, },
removeAllListeners: function () {
var removedListeners = [];
for (var i = 0; i < listenersData.length; i++) {
var listenerData = listenersData[i];
var listenerWrapper = listenersData[i].wrapper;
listenerData.object.removeListener(listenerData.type, listenerWrapper);
removedListeners.push(listenerData.listener);
}
return removedListeners;
},
getHighlightedBioEntities: function (dbOverlayName) { getHighlightedBioEntities: function (dbOverlayName) {
if (dbOverlayName === undefined) { if (dbOverlayName === undefined) {
dbOverlayName = pluginId; dbOverlayName = pluginId;
......
...@@ -94,6 +94,10 @@ Plugin.prototype.unload = function () { ...@@ -94,6 +94,10 @@ Plugin.prototype.unload = function () {
return Promise.resolve().then(function () { return Promise.resolve().then(function () {
return self.getLoadedPluginData().unregister(); return self.getLoadedPluginData().unregister();
}).then(function () { }).then(function () {
var removedListeners = self.getMinervaPluginProxy().project.map.removeAllListeners();
if (removedListeners.length > 0) {
logger.warn("'"+self.getLoadedPluginData().getName() + "' plugin didn't remove all registered listeners");
}
return self.destroy(); return self.destroy();
}); });
}; };
......
...@@ -125,6 +125,43 @@ describe('MinervaPluginProxy', function () { ...@@ -125,6 +125,43 @@ describe('MinervaPluginProxy', function () {
}); });
}); });
}); });
describe('removeAllListeners', function () {
it('valid listener', function () {
var callbackOk = false;
var map, options;
return ServerConnector.getProject().then(function (project) {
map = helper.createCustomMap(project);
helper.createSearchDbOverlay(map);
var proxy = createProxy(map);
options = {
dbOverlayName: "search",
type: "onSearch",
callback: function (elements) {
assert.ok(elements.length > 0);
assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
callbackOk = true;
}
};
proxy.project.map.addListener(options);
var removedListeners = proxy.project.map.removeAllListeners();
assert.equal(1, removedListeners.length);
return map.destroy();
});
});
it('no listeners', function () {
var callbackOk = false;
var map, options;
return ServerConnector.getProject().then(function (project) {
map = helper.createCustomMap(project);
helper.createSearchDbOverlay(map);
var proxy = createProxy(map);
var removedListeners = proxy.project.map.removeAllListeners();
assert.equal(0, removedListeners.length);
return map.destroy();
});
});
});
describe("getBioEntityById", function () { describe("getBioEntityById", function () {
it("for alias", function () { it("for alias", function () {
......
...@@ -81,4 +81,22 @@ describe('Plugin', function () { ...@@ -81,4 +81,22 @@ describe('Plugin', function () {
}); });
}); });
}); });
describe('unload', function () {
it('warning about cleaning', function () {
var map = helper.createCustomMap();
helper.createSearchDbOverlay(map);
var plugin = new Plugin({
url: "./testFiles/plugin-invalid/unclean-unregister.js",
map: map,
configuration: helper.getConfiguration()
});
return plugin.load().then(function () {
assert.equal(0, logger.getWarnings().length);
return plugin.unload();
}).then(function () {
assert.equal(1, logger.getWarnings().length);
});
});
});
}); });
define(function () {
return {
register: function (minervaObject) {
options = {
dbOverlayName: "search",
type: "onSearch",
callback: function (elements) {
console.log("hi there");
}
};
minervaObject.project.map.addListener(options);
},
unregister: function () {
console.log("unregistering test plugin");
},
getName: function () {
return "high test";
},
getVersion: function () {
return "0.0.1";
}
};
});
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment