|
1 // -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
|
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 Components.utils.import("resource://gre/modules/OrderedBroadcast.jsm"); |
|
7 Components.utils.import("resource://gre/modules/Promise.jsm"); |
|
8 |
|
9 let _observerId = 0; |
|
10 |
|
11 function makeObserver() { |
|
12 let deferred = Promise.defer(); |
|
13 |
|
14 let ret = { |
|
15 id: _observerId++, |
|
16 count: 0, |
|
17 promise: deferred.promise, |
|
18 callback: function(data, token, action) { |
|
19 ret.count += 1; |
|
20 deferred.resolve({ data: data, |
|
21 token: token, |
|
22 action: action }); |
|
23 }, |
|
24 }; |
|
25 |
|
26 return ret; |
|
27 }; |
|
28 |
|
29 add_task(function test_send() { |
|
30 let deferred = Promise.defer(); |
|
31 |
|
32 let observer = makeObserver(); |
|
33 |
|
34 let token = { a: "bcde", b: 1234 }; |
|
35 sendOrderedBroadcast("org.mozilla.gecko.test.receiver", |
|
36 token, observer.callback); |
|
37 |
|
38 let value = yield observer.promise; |
|
39 |
|
40 do_check_eq(observer.count, 1); |
|
41 |
|
42 // We get back the correct action and token. |
|
43 do_check_neq(value, null); |
|
44 do_check_matches(value.token, token); |
|
45 do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); |
|
46 |
|
47 // Data is provided by testOrderedBroadcast.java.in. |
|
48 do_check_neq(value.data, null); |
|
49 do_check_eq(value.data.c, "efg"); |
|
50 do_check_eq(value.data.d, 456); |
|
51 |
|
52 // And the provided token is returned to us (as a string) by |
|
53 // testOrderedBroadcast.java.in. |
|
54 do_check_neq(value.data.token, null); |
|
55 do_check_eq(typeof(value.data.token), "string"); |
|
56 do_check_matches(JSON.parse(value.data.token), token); |
|
57 }); |
|
58 |
|
59 add_task(function test_null_token() { |
|
60 let deferred = Promise.defer(); |
|
61 |
|
62 let observer = makeObserver(); |
|
63 |
|
64 sendOrderedBroadcast("org.mozilla.gecko.test.receiver", |
|
65 null, observer.callback); |
|
66 |
|
67 let value = yield observer.promise; |
|
68 |
|
69 do_check_eq(observer.count, 1); |
|
70 |
|
71 // We get back the correct action and token. |
|
72 do_check_neq(value, null); |
|
73 do_check_eq(value.token, null); |
|
74 do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); |
|
75 |
|
76 // Data is provided by testOrderedBroadcast.java.in. |
|
77 do_check_neq(value.data, null); |
|
78 do_check_eq(value.data.c, "efg"); |
|
79 do_check_eq(value.data.d, 456); |
|
80 }); |
|
81 |
|
82 add_task(function test_string_token() { |
|
83 let deferred = Promise.defer(); |
|
84 |
|
85 let observer = makeObserver(); |
|
86 |
|
87 let token = "string_token"; |
|
88 let permission = null; // means any receiver can listen for our intent |
|
89 sendOrderedBroadcast("org.mozilla.gecko.test.receiver", |
|
90 token, observer.callback, permission); |
|
91 |
|
92 let value = yield observer.promise; |
|
93 |
|
94 do_check_eq(observer.count, 1); |
|
95 |
|
96 // We get back the correct action and token. |
|
97 do_check_neq(value, null); |
|
98 do_check_eq(value.token, token); |
|
99 do_check_eq(typeof(value.token), "string"); |
|
100 do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); |
|
101 |
|
102 // Data is provided by testOrderedBroadcast.java.in. |
|
103 do_check_neq(value.data, null); |
|
104 do_check_eq(value.data.c, "efg"); |
|
105 do_check_eq(value.data.d, 456); |
|
106 do_check_eq(value.data.token, token); |
|
107 }); |
|
108 |
|
109 add_task(function test_permission() { |
|
110 let deferred = Promise.defer(); |
|
111 |
|
112 let observer = makeObserver(); |
|
113 |
|
114 sendOrderedBroadcast("org.mozilla.gecko.test.receiver", |
|
115 null, observer.callback, |
|
116 "org.mozilla.gecko.fake.permission"); |
|
117 |
|
118 let value = yield observer.promise; |
|
119 |
|
120 do_check_eq(observer.count, 1); |
|
121 |
|
122 // We get back the correct action and token. |
|
123 do_check_neq(value, null); |
|
124 do_check_eq(value.token, null); |
|
125 do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); |
|
126 |
|
127 // Data would be provided by testOrderedBroadcast.java.in, except |
|
128 // the no package has the permission, so no responder exists. |
|
129 do_check_eq(value.data, null); |
|
130 }); |
|
131 |
|
132 add_task(function test_send_no_receiver() { |
|
133 let deferred = Promise.defer(); |
|
134 |
|
135 let observer = makeObserver(); |
|
136 |
|
137 sendOrderedBroadcast("org.mozilla.gecko.test.no.receiver", |
|
138 { a: "bcd", b: 123 }, observer.callback); |
|
139 |
|
140 let value = yield observer.promise; |
|
141 |
|
142 do_check_eq(observer.count, 1); |
|
143 |
|
144 // We get back the correct action and token, but the default is to |
|
145 // return no data. |
|
146 do_check_neq(value, null); |
|
147 do_check_neq(value.token, null); |
|
148 do_check_eq(value.token.a, "bcd"); |
|
149 do_check_eq(value.token.b, 123); |
|
150 do_check_eq(value.action, "org.mozilla.gecko.test.no.receiver"); |
|
151 do_check_eq(value.data, null); |
|
152 }); |
|
153 |
|
154 run_next_test(); |