diff -r 000000000000 -r 6474c204b198 addon-sdk/source/test/test-registry.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/test/test-registry.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,82 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +exports['test:add'] = function(assert) { + function Class() {} + let fixture = require('sdk/util/registry').Registry(Class); + let isAddEmitted = false; + fixture.on('add', function(item) { + assert.ok( + item instanceof Class, + 'if object added is not an instance should construct instance from it' + ); + assert.ok( + fixture.has(item), + 'callback is called after instance is added' + ); + assert.ok( + !isAddEmitted, + 'callback should be called for the same item only once' + ); + isAddEmitted = true; + }); + + let object = fixture.add({}); + fixture.add(object); +}; + +exports['test:remove'] = function(assert) { + function Class() {} + let fixture = require('sdk/util/registry').Registry(Class); + fixture.on('remove', function(item) { + assert.ok( + item instanceof Class, + 'if object removed can be only instance of Class' + ); + assert.ok( + fixture.has(item), + 'callback is called before instance is removed' + ); + assert.ok( + !isRemoveEmitted, + 'callback should be called for the same item only once' + ); + isRemoveEmitted = true; + }); + + fixture.remove({}); + let object = fixture.add({}); + fixture.remove(object); + fixture.remove(object); +}; + +exports['test:items'] = function(assert) { + function Class() {} + let fixture = require('sdk/util/registry').Registry(Class), + actual, + times = 0; + + function testItem(item) { + times ++; + assert.equal( + actual, + item, + 'item should match actual item being added/removed' + ); + } + + actual = fixture.add({}); + + fixture.on('add', testItem); + fixture.on('remove', testItem); + + fixture.remove(actual); + fixture.remove(fixture.add(actual = new Class())); + assert.equal(3, times, 'should notify listeners on each call'); +}; + +require('sdk/test').run(exports); +