Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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/. */
6 Components.utils.import("resource://gre/modules/OrderedBroadcast.jsm");
7 Components.utils.import("resource://gre/modules/Promise.jsm");
9 let _observerId = 0;
11 function makeObserver() {
12 let deferred = Promise.defer();
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 };
26 return ret;
27 };
29 add_task(function test_send() {
30 let deferred = Promise.defer();
32 let observer = makeObserver();
34 let token = { a: "bcde", b: 1234 };
35 sendOrderedBroadcast("org.mozilla.gecko.test.receiver",
36 token, observer.callback);
38 let value = yield observer.promise;
40 do_check_eq(observer.count, 1);
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");
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);
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 });
59 add_task(function test_null_token() {
60 let deferred = Promise.defer();
62 let observer = makeObserver();
64 sendOrderedBroadcast("org.mozilla.gecko.test.receiver",
65 null, observer.callback);
67 let value = yield observer.promise;
69 do_check_eq(observer.count, 1);
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");
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 });
82 add_task(function test_string_token() {
83 let deferred = Promise.defer();
85 let observer = makeObserver();
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);
92 let value = yield observer.promise;
94 do_check_eq(observer.count, 1);
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");
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 });
109 add_task(function test_permission() {
110 let deferred = Promise.defer();
112 let observer = makeObserver();
114 sendOrderedBroadcast("org.mozilla.gecko.test.receiver",
115 null, observer.callback,
116 "org.mozilla.gecko.fake.permission");
118 let value = yield observer.promise;
120 do_check_eq(observer.count, 1);
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");
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 });
132 add_task(function test_send_no_receiver() {
133 let deferred = Promise.defer();
135 let observer = makeObserver();
137 sendOrderedBroadcast("org.mozilla.gecko.test.no.receiver",
138 { a: "bcd", b: 123 }, observer.callback);
140 let value = yield observer.promise;
142 do_check_eq(observer.count, 1);
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 });
154 run_next_test();