describe('Chart.plugins', function() { var oldPlugins; beforeAll(function() { oldPlugins = Chart.plugins.getAll(); }); afterAll(function() { Chart.plugins.register(oldPlugins); }); beforeEach(function() { Chart.plugins.clear(); }); describe('Chart.plugins.register', function() { it('should register a plugin', function() { Chart.plugins.register({}); expect(Chart.plugins.count()).toBe(1); Chart.plugins.register({}); expect(Chart.plugins.count()).toBe(2); }); it('should register an array of plugins', function() { Chart.plugins.register([{}, {}, {}]); expect(Chart.plugins.count()).toBe(3); }); it('should succeed to register an already registered plugin', function() { var plugin = {}; Chart.plugins.register(plugin); expect(Chart.plugins.count()).toBe(1); Chart.plugins.register(plugin); expect(Chart.plugins.count()).toBe(1); Chart.plugins.register([{}, plugin, plugin]); expect(Chart.plugins.count()).toBe(2); }); }); describe('Chart.plugins.unregister', function() { it('should unregister a plugin', function() { var plugin = {}; Chart.plugins.register(plugin); expect(Chart.plugins.count()).toBe(1); Chart.plugins.unregister(plugin); expect(Chart.plugins.count()).toBe(0); }); it('should unregister an array of plugins', function() { var plugins = [{}, {}, {}]; Chart.plugins.register(plugins); expect(Chart.plugins.count()).toBe(3); Chart.plugins.unregister(plugins.slice(0, 2)); expect(Chart.plugins.count()).toBe(1); }); it('should succeed to unregister a plugin not registered', function() { var plugin = {}; Chart.plugins.register(plugin); expect(Chart.plugins.count()).toBe(1); Chart.plugins.unregister({}); expect(Chart.plugins.count()).toBe(1); Chart.plugins.unregister([{}, plugin]); expect(Chart.plugins.count()).toBe(0); }); }); describe('Chart.plugins.notify', function() { it('should call plugins with arguments', function() { var myplugin = { count: 0, trigger: function(chart) { myplugin.count = chart.count; } }; Chart.plugins.register(myplugin); Chart.plugins.notify('trigger', [{ count: 10 }]); expect(myplugin.count).toBe(10); }); it('should return TRUE if no plugin explicitly returns FALSE', function() { Chart.plugins.register({ check: function() {} }); Chart.plugins.register({ check: function() { return; } }); Chart.plugins.register({ check: function() { return null; } }); Chart.plugins.register({ check: function() { return 42 } }); var res = Chart.plugins.notify('check'); expect(res).toBeTruthy(); }); it('should return FALSE if no plugin explicitly returns FALSE', function() { Chart.plugins.register({ check: function() {} }); Chart.plugins.register({ check: function() { return; } }); Chart.plugins.register({ check: function() { return false; } }); Chart.plugins.register({ check: function() { return 42 } }); var res = Chart.plugins.notify('check'); expect(res).toBeFalsy(); }); }); });