1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
/* 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(test) {
function Class() {}
let fixture = require('sdk/util/registry').Registry(Class);
let isAddEmitted = false;
fixture.on('add', function(item) {
test.assert(
item instanceof Class,
'if object added is not an instance should construct instance from it'
);
test.assert(
fixture.has(item),
'callback is called after instance is added'
);
test.assert(
!isAddEmitted,
'callback should be called for the same item only once'
);
isAddEmitted = true;
});
let object = fixture.add({});
fixture.add(object);
};
exports['test:remove'] = function(test) {
function Class() {}
let fixture = require('sdk/util/registry').Registry(Class);
fixture.on('remove', function(item) {
test.assert(
item instanceof Class,
'if object removed can be only instance of Class'
);
test.assert(
fixture.has(item),
'callback is called before instance is removed'
);
test.assert(
!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(test) {
function Class() {}
let fixture = require('sdk/util/registry').Registry(Class),
actual,
times = 0;
function testItem(item) {
times ++;
test.assertEqual(
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()));
test.assertEqual(3, times, 'should notify listeners on each call');
}
|