services/common/tests/unit/test_observers.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:832a600ef4c0
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 Components.utils.import("resource://services-common/observers.js");
5
6 let gSubject = {};
7
8 function run_test() {
9 run_next_test();
10 }
11
12 add_test(function test_function_observer() {
13 let foo = false;
14
15 let onFoo = function(subject, data) {
16 foo = !foo;
17 do_check_eq(subject, gSubject);
18 do_check_eq(data, "some data");
19 };
20
21 Observers.add("foo", onFoo);
22 Observers.notify("foo", gSubject, "some data");
23
24 // The observer was notified after being added.
25 do_check_true(foo);
26
27 Observers.remove("foo", onFoo);
28 Observers.notify("foo");
29
30 // The observer was not notified after being removed.
31 do_check_true(foo);
32
33 run_next_test();
34 });
35
36 add_test(function test_method_observer() {
37 let obj = {
38 foo: false,
39 onFoo: function(subject, data) {
40 this.foo = !this.foo;
41 do_check_eq(subject, gSubject);
42 do_check_eq(data, "some data");
43 }
44 };
45
46 // The observer is notified after being added.
47 Observers.add("foo", obj.onFoo, obj);
48 Observers.notify("foo", gSubject, "some data");
49 do_check_true(obj.foo);
50
51 // The observer is not notified after being removed.
52 Observers.remove("foo", obj.onFoo, obj);
53 Observers.notify("foo");
54 do_check_true(obj.foo);
55
56 run_next_test();
57 });
58
59 add_test(function test_object_observer() {
60 let obj = {
61 foo: false,
62 observe: function(subject, topic, data) {
63 this.foo = !this.foo;
64
65 do_check_eq(subject, gSubject);
66 do_check_eq(topic, "foo");
67 do_check_eq(data, "some data");
68 }
69 };
70
71 Observers.add("foo", obj);
72 Observers.notify("foo", gSubject, "some data");
73
74 // The observer is notified after being added.
75 do_check_true(obj.foo);
76
77 Observers.remove("foo", obj);
78 Observers.notify("foo");
79
80 // The observer is not notified after being removed.
81 do_check_true(obj.foo);
82
83 run_next_test();
84 });

mercurial