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