diff --git a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js index ebe1fe64980963f0d7894433ad28c3b5910e7e93..5e72c1e755757c32a757eb92c4a9476f4749e56d 100644 --- a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js +++ b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js @@ -1,17 +1,11 @@ "use strict"; var IdentifiedElement = require('../map/data/IdentifiedElement'); -var ObjectWithListeners = require('../ObjectWithListeners'); var UserDbOverlay = require('../map/overlay/UserDbOverlay'); var Configuration = require('../Configuration'); var Promise = require("bluebird"); -var logger = require('../logger'); -var Functions = require('../Functions'); - -var id = 0; - function getOverlayByName(customMap, dbOverlayName) { var dbOverlay = customMap.getOverlayByName(dbOverlayName); if (dbOverlay === null) { @@ -294,7 +288,7 @@ function createProjectMap(options) { return submap.setCenter(new google.maps.Point(params.x, params.y)); }, fitBounds: function (params) { - var submap = customMap.getSubmapById(params.modelId); + var submap = map.getSubmapById(params.modelId); if (submap === null) { throw new Error("Unknown modelId: " + params.modelId); } diff --git a/frontend-js/src/main/js/plugin/Plugin.js b/frontend-js/src/main/js/plugin/Plugin.js index 8bc1f7f2c3a62c3703f963574a4005e4c63ebee7..d734ef48aa9fcda079a1a58eefb616f347efac0a 100644 --- a/frontend-js/src/main/js/plugin/Plugin.js +++ b/frontend-js/src/main/js/plugin/Plugin.js @@ -84,8 +84,6 @@ Plugin.prototype.load = function () { global.define = oldDefine; if (error) { return Promise.reject(error); - } else if (pluginData === undefined) { - return Promise.reject("Invalid plugin. Expected 'define(...)' expression."); } }) diff --git a/frontend-js/src/main/js/plugin/PluginManager.js b/frontend-js/src/main/js/plugin/PluginManager.js index 631daa46732ded4e52c15efe1fbdf77d4ada1ddf..f29bac0572b5cda1f42d28da39bb3410feaf8249 100644 --- a/frontend-js/src/main/js/plugin/PluginManager.js +++ b/frontend-js/src/main/js/plugin/PluginManager.js @@ -103,7 +103,7 @@ PluginManager.prototype.removePlugin = function (plugin) { } } if (!found) { - throw new Error("Plugin not registered"); + return Promise.reject(new Error("Plugin not registered")); } return plugin.unload(); }; diff --git a/frontend-js/src/test/js/Configuration-test.js b/frontend-js/src/test/js/Configuration-test.js index 2a8afc46006870b45d07c24ef825601127b858c4..1d26da921f35b11fd143568ec44588a68feca1d6 100644 --- a/frontend-js/src/test/js/Configuration-test.js +++ b/frontend-js/src/test/js/Configuration-test.js @@ -32,9 +32,7 @@ describe('Configuration', function () { }); it('copy', function () { return ServerConnector.getConfiguration().then(function (configuration) { - logger.debug(configuration.getOption(ConfigurationType.LEGEND_FILES)); var copy = new Configuration(configuration); - logger.debug(copy.getOption(ConfigurationType.LEGEND_FILES)); assert.equal(configuration.getElementTypes().length, copy.getElementTypes().length) }); diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js index f08fc415327a52465d3215757227d6db33e6ae25..3be929789d6eeeb2b65c1f99fd82d8be15fe43a8 100644 --- a/frontend-js/src/test/js/minerva-test.js +++ b/frontend-js/src/test/js/minerva-test.js @@ -134,7 +134,7 @@ describe('minerva global', function () { }).then(function (result) { assert.ok(result); // input file is not available so it's the background - return plugin.getProxy().project.map.getVisibleDataOverlays(); + return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); }).then(function (visibleDataOverlays) { // input file is available so it's not the background file but overlay assert.equal(visibleDataOverlays.length, 0); @@ -170,7 +170,7 @@ describe('minerva global', function () { }).then(function (result) { globalObject = result; assert.ok(result); - return plugin.getProxy().project.map.getVisibleDataOverlays(); + return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays(); }).then(function (visibleDataOverlays) { // input file is available so it's not the background file but overlay assert.equal(visibleDataOverlays.length, 1); @@ -190,7 +190,7 @@ describe('minerva global', function () { return minerva.create(options); }).then(function (result) { globalObject = result; - return plugin.getProxy().project.map.getHighlightedBioEntities("search"); + return plugin.getMinervaPluginProxy().project.map.getHighlightedBioEntities("search"); }).then(function (elements) { assert.ok(elements.length > 0); return globalObject.destroy(); diff --git a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js index 9f9800c390533027fde9453ac589ffbc5119974d..7d75b82467d94f1d3531183032ce3e5979afecfd 100644 --- a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js +++ b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js @@ -1,8 +1,5 @@ "use strict"; -/* exported logger */ -/* exported assert */ - require("../mocha-config"); var Alias = require('../../../main/js/map/data/Alias'); @@ -36,6 +33,7 @@ describe('MinervaPluginProxy', function () { assert.ok(proxy.element); assert.ok(proxy.project); assert.ok(proxy.configuration); + assert.equal(0, logger.getWarnings().length); }); it('add search listener', function () { @@ -284,4 +282,23 @@ describe('MinervaPluginProxy', function () { }); }); + it("fitBounds", function () { + var map, proxy; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + proxy = createProxy(map); + var center = map.getGoogleMap().getCenter(); + proxy.project.map.fitBounds({ + id: 329177, + modelId: 15781, + type: "ALIAS" + }); + var center2 = map.getGoogleMap().getCenter(); + assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng()); + }).then(function () { + map.destroy(); + }); + }); + + }); diff --git a/frontend-js/src/test/js/plugin/Plugin-test.js b/frontend-js/src/test/js/plugin/Plugin-test.js index bc4ccddc3c93fc33e13cded40ad50bfa357cee1c..601df1310b2314bd23688e27fcb5a6273cd66384 100644 --- a/frontend-js/src/test/js/plugin/Plugin-test.js +++ b/frontend-js/src/test/js/plugin/Plugin-test.js @@ -20,20 +20,6 @@ describe('Plugin', function () { }); assert.ok(plugin); }); - it('load', function () { - var map = helper.createCustomMap(); - - var plugin = new Plugin({ - url: "./testFiles/plugin/empty.js", - map: map, - configuration: helper.getConfiguration() - }); - return plugin.load().then(function () { - assert.equal("test plugin", plugin.getName()); - assert.equal("0.0.1", plugin.getVersion()); - assert.equal(0, logger.getWarnings().length); - }); - }); it('test plugins', function () { var map = helper.createCustomMap(); @@ -52,4 +38,47 @@ describe('Plugin', function () { }); return Promise.all(promises); }); + + describe('load', function () { + it('default', function () { + var map = helper.createCustomMap(); + + var plugin = new Plugin({ + url: "./testFiles/plugin/empty.js", + map: map, + configuration: helper.getConfiguration() + }); + return plugin.load().then(function () { + assert.equal("test plugin", plugin.getName()); + assert.equal("0.0.1", plugin.getVersion()); + assert.equal(0, logger.getWarnings().length); + }); + }); + + it('invalid javascript code', function () { + var plugin = new Plugin({ + url: "./testFiles/plugin-invalid/invalid_javascript.js", + map: helper.createCustomMap(), + configuration: helper.getConfiguration() + }); + return plugin.load().then(function () { + assert.false("expected error"); + }, function (error) { + assert.ok(error.message.indexOf("Unexpected identifier") >= 0); + }); + }); + + it('plugin register crash', function () { + var plugin = new Plugin({ + url: "./testFiles/plugin-invalid/invalid_register.js", + map: helper.createCustomMap(), + configuration: helper.getConfiguration() + }); + return plugin.load().then(function () { + assert.false("expected error"); + }, function (error) { + assert.ok(error.message.indexOf("Let's crash") >= 0); + }); + }); + }); }); diff --git a/frontend-js/src/test/js/plugin/PluginManager-test.js b/frontend-js/src/test/js/plugin/PluginManager-test.js index 8a726b453bd0bde35fbcf6cc4f881eccc06761df..61d8ac2df925f77b5b8f9fe3bceb686641a030e7 100644 --- a/frontend-js/src/test/js/plugin/PluginManager-test.js +++ b/frontend-js/src/test/js/plugin/PluginManager-test.js @@ -5,6 +5,7 @@ require("../mocha-config"); +var Plugin = require('../../../main/js/plugin/Plugin'); var PluginManager = require('../../../main/js/plugin/PluginManager'); var logger = require('../logger'); @@ -49,12 +50,23 @@ describe('PluginManager', function () { }); }); - it('removePlugin', function () { - var manager = new PluginManager(createParams()); - return manager.addPlugin({url: "testFiles/plugin/empty.js"}).then(function (plugin) { - return manager.removePlugin(plugin); - }).then(function () { - assert.equal(0, manager.getPlugins().length); + describe('removePlugin', function () { + it('default', function () { + var manager = new PluginManager(createParams()); + return manager.addPlugin({url: "testFiles/plugin/empty.js"}).then(function (plugin) { + return manager.removePlugin(plugin); + }).then(function () { + assert.equal(0, manager.getPlugins().length); + }); + }); + it('removing non existing plugin', function () { + var manager = new PluginManager(createParams()); + var plugin = new Plugin({url: "testFiles/plugin/empty.js"}); + return manager.removePlugin(plugin).then(function () { + assert.false("Error expected"); + }, function (error) { + assert.ok(error.message.indexOf("Plugin not registered") >= 0); + }); }); }); diff --git a/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js b/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js index e1dc9b28261d0124924263fe7fe5c3cbfc116e56..3f084b8ed5fbda5a1300d118a0bd7c7e419bcb1c 100644 --- a/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js +++ b/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js @@ -5,6 +5,8 @@ var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy'); var Promise = require('bluebird'); +var logger = require('../logger'); + function ProxyAccessPlugin() { } @@ -12,12 +14,9 @@ ProxyAccessPlugin.prototype = Object.create(Plugin.prototype); ProxyAccessPlugin.prototype.constructor = ProxyAccessPlugin; ProxyAccessPlugin.prototype.setOptions = function (options) { - this._proxy = new MinervaPluginProxy(options); + this.setMinervaPluginProxy(new MinervaPluginProxy(options)); }; -ProxyAccessPlugin.prototype.getProxy = function () { - return this._proxy; -}; ProxyAccessPlugin.prototype.load = function () { this.setLoadedPluginData({ getName: function () { @@ -27,8 +26,10 @@ ProxyAccessPlugin.prototype.load = function () { return "0.0.1"; }, unregister: function () { + logger.debug("un-registering ProxyAccessPlugin"); }, register: function () { + logger.debug("registering ProxyAccessPlugin"); } }); return Promise.resolve(); diff --git a/frontend-js/testFiles/plugin-invalid/invalid_javascript.js b/frontend-js/testFiles/plugin-invalid/invalid_javascript.js new file mode 100644 index 0000000000000000000000000000000000000000..66cfdc0c68bc2e46f3ba4b0100f9f58638365010 --- /dev/null +++ b/frontend-js/testFiles/plugin-invalid/invalid_javascript.js @@ -0,0 +1 @@ +some invalid js code \ No newline at end of file diff --git a/frontend-js/testFiles/plugin-invalid/invalid_register.js b/frontend-js/testFiles/plugin-invalid/invalid_register.js new file mode 100644 index 0000000000000000000000000000000000000000..f8b555f8c9aecccb91ace2d921e8964e8006ed11 --- /dev/null +++ b/frontend-js/testFiles/plugin-invalid/invalid_register.js @@ -0,0 +1,15 @@ +define(function () { + return { + register: function (object) { + throw new Error("Let's crash"); + }, + unregister: function () { + }, + getName: function () { + return "test plugin"; + }, + getVersion: function () { + return "0.0.1"; + } + }; +}); \ No newline at end of file diff --git a/frontend-js/testFiles/plugin/empty-without-function.js b/frontend-js/testFiles/plugin/empty-without-function.js new file mode 100644 index 0000000000000000000000000000000000000000..bafb6d13a6cf3b927941251b270111f11b70ffc2 --- /dev/null +++ b/frontend-js/testFiles/plugin/empty-without-function.js @@ -0,0 +1,14 @@ +define({ + register: function (object) { + console.log("registering test plugin"); + }, + unregister: function () { + console.log("unregistering test plugin"); + }, + getName: function () { + return "test plugin"; + }, + getVersion: function () { + return "0.0.1"; + } +}); \ No newline at end of file