mobile/android/base/tests/testOrderedBroadcast.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:d3bd9083d51c
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();

mercurial