1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mobile/android/base/tests/testOrderedBroadcast.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,154 @@ 1.4 +// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.7 + * You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +Components.utils.import("resource://gre/modules/OrderedBroadcast.jsm"); 1.10 +Components.utils.import("resource://gre/modules/Promise.jsm"); 1.11 + 1.12 +let _observerId = 0; 1.13 + 1.14 +function makeObserver() { 1.15 + let deferred = Promise.defer(); 1.16 + 1.17 + let ret = { 1.18 + id: _observerId++, 1.19 + count: 0, 1.20 + promise: deferred.promise, 1.21 + callback: function(data, token, action) { 1.22 + ret.count += 1; 1.23 + deferred.resolve({ data: data, 1.24 + token: token, 1.25 + action: action }); 1.26 + }, 1.27 + }; 1.28 + 1.29 + return ret; 1.30 +}; 1.31 + 1.32 +add_task(function test_send() { 1.33 + let deferred = Promise.defer(); 1.34 + 1.35 + let observer = makeObserver(); 1.36 + 1.37 + let token = { a: "bcde", b: 1234 }; 1.38 + sendOrderedBroadcast("org.mozilla.gecko.test.receiver", 1.39 + token, observer.callback); 1.40 + 1.41 + let value = yield observer.promise; 1.42 + 1.43 + do_check_eq(observer.count, 1); 1.44 + 1.45 + // We get back the correct action and token. 1.46 + do_check_neq(value, null); 1.47 + do_check_matches(value.token, token); 1.48 + do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); 1.49 + 1.50 + // Data is provided by testOrderedBroadcast.java.in. 1.51 + do_check_neq(value.data, null); 1.52 + do_check_eq(value.data.c, "efg"); 1.53 + do_check_eq(value.data.d, 456); 1.54 + 1.55 + // And the provided token is returned to us (as a string) by 1.56 + // testOrderedBroadcast.java.in. 1.57 + do_check_neq(value.data.token, null); 1.58 + do_check_eq(typeof(value.data.token), "string"); 1.59 + do_check_matches(JSON.parse(value.data.token), token); 1.60 +}); 1.61 + 1.62 +add_task(function test_null_token() { 1.63 + let deferred = Promise.defer(); 1.64 + 1.65 + let observer = makeObserver(); 1.66 + 1.67 + sendOrderedBroadcast("org.mozilla.gecko.test.receiver", 1.68 + null, observer.callback); 1.69 + 1.70 + let value = yield observer.promise; 1.71 + 1.72 + do_check_eq(observer.count, 1); 1.73 + 1.74 + // We get back the correct action and token. 1.75 + do_check_neq(value, null); 1.76 + do_check_eq(value.token, null); 1.77 + do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); 1.78 + 1.79 + // Data is provided by testOrderedBroadcast.java.in. 1.80 + do_check_neq(value.data, null); 1.81 + do_check_eq(value.data.c, "efg"); 1.82 + do_check_eq(value.data.d, 456); 1.83 +}); 1.84 + 1.85 +add_task(function test_string_token() { 1.86 + let deferred = Promise.defer(); 1.87 + 1.88 + let observer = makeObserver(); 1.89 + 1.90 + let token = "string_token"; 1.91 + let permission = null; // means any receiver can listen for our intent 1.92 + sendOrderedBroadcast("org.mozilla.gecko.test.receiver", 1.93 + token, observer.callback, permission); 1.94 + 1.95 + let value = yield observer.promise; 1.96 + 1.97 + do_check_eq(observer.count, 1); 1.98 + 1.99 + // We get back the correct action and token. 1.100 + do_check_neq(value, null); 1.101 + do_check_eq(value.token, token); 1.102 + do_check_eq(typeof(value.token), "string"); 1.103 + do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); 1.104 + 1.105 + // Data is provided by testOrderedBroadcast.java.in. 1.106 + do_check_neq(value.data, null); 1.107 + do_check_eq(value.data.c, "efg"); 1.108 + do_check_eq(value.data.d, 456); 1.109 + do_check_eq(value.data.token, token); 1.110 +}); 1.111 + 1.112 +add_task(function test_permission() { 1.113 + let deferred = Promise.defer(); 1.114 + 1.115 + let observer = makeObserver(); 1.116 + 1.117 + sendOrderedBroadcast("org.mozilla.gecko.test.receiver", 1.118 + null, observer.callback, 1.119 + "org.mozilla.gecko.fake.permission"); 1.120 + 1.121 + let value = yield observer.promise; 1.122 + 1.123 + do_check_eq(observer.count, 1); 1.124 + 1.125 + // We get back the correct action and token. 1.126 + do_check_neq(value, null); 1.127 + do_check_eq(value.token, null); 1.128 + do_check_eq(value.action, "org.mozilla.gecko.test.receiver"); 1.129 + 1.130 + // Data would be provided by testOrderedBroadcast.java.in, except 1.131 + // the no package has the permission, so no responder exists. 1.132 + do_check_eq(value.data, null); 1.133 +}); 1.134 + 1.135 +add_task(function test_send_no_receiver() { 1.136 + let deferred = Promise.defer(); 1.137 + 1.138 + let observer = makeObserver(); 1.139 + 1.140 + sendOrderedBroadcast("org.mozilla.gecko.test.no.receiver", 1.141 + { a: "bcd", b: 123 }, observer.callback); 1.142 + 1.143 + let value = yield observer.promise; 1.144 + 1.145 + do_check_eq(observer.count, 1); 1.146 + 1.147 + // We get back the correct action and token, but the default is to 1.148 + // return no data. 1.149 + do_check_neq(value, null); 1.150 + do_check_neq(value.token, null); 1.151 + do_check_eq(value.token.a, "bcd"); 1.152 + do_check_eq(value.token.b, 123); 1.153 + do_check_eq(value.action, "org.mozilla.gecko.test.no.receiver"); 1.154 + do_check_eq(value.data, null); 1.155 +}); 1.156 + 1.157 +run_next_test();