1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/test-host-events.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,99 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +'use strict'; 1.8 + 1.9 +const { Cc, Ci } = require('chrome'); 1.10 +const { defer, all } = require('sdk/core/promise'); 1.11 +const { setTimeout } = require('sdk/timers'); 1.12 +const { request, response } = require('sdk/addon/host'); 1.13 +const { send } = require('sdk/addon/events'); 1.14 +const { filter } = require('sdk/event/utils'); 1.15 +const { on, emit, off } = require('sdk/event/core'); 1.16 + 1.17 +let stream = filter(request, (data) => /sdk-x-test/.test(data.event)); 1.18 + 1.19 +exports.testSend = function (assert, done) { 1.20 + on(stream, 'data', handle); 1.21 + send('sdk-x-test-simple', { title: 'my test data' }).then((data) => { 1.22 + assert.equal(data.title, 'my response', 'response is handled'); 1.23 + off(stream, 'data', handle); 1.24 + done(); 1.25 + }, (reason) => { 1.26 + assert.fail('should not call reject'); 1.27 + }); 1.28 + function handle (e) { 1.29 + assert.equal(e.event, 'sdk-x-test-simple', 'correct event name'); 1.30 + assert.ok(e.id != null, 'message has an ID'); 1.31 + assert.equal(e.data.title, 'my test data', 'serialized data passes'); 1.32 + e.data.title = 'my response'; 1.33 + emit(response, 'data', e); 1.34 + } 1.35 +}; 1.36 + 1.37 +exports.testSendError = function (assert, done) { 1.38 + on(stream, 'data', handle); 1.39 + send('sdk-x-test-error', { title: 'my test data' }).then((data) => { 1.40 + assert.fail('should not call success'); 1.41 + }, (reason) => { 1.42 + assert.equal(reason, 'ErrorInfo', 'should reject with error/reason'); 1.43 + off(stream, 'data', handle); 1.44 + done(); 1.45 + }); 1.46 + function handle (e) { 1.47 + e.error = 'ErrorInfo'; 1.48 + emit(response, 'data', e); 1.49 + } 1.50 +}; 1.51 + 1.52 +exports.testMultipleSends = function (assert, done) { 1.53 + let count = 0; 1.54 + let ids = []; 1.55 + on(stream, 'data', handle); 1.56 + ['firefox', 'thunderbird', 'rust'].map(data => 1.57 + send('sdk-x-test-multi', { data: data }).then(val => { 1.58 + assert.ok(val === 'firefox' || val === 'rust', 'successful calls resolve correctly'); 1.59 + if (++count === 3) { 1.60 + off(stream, 'data', handle); 1.61 + done(); 1.62 + } 1.63 + }, reason => { 1.64 + assert.equal(reason.error, 'too blue', 'rejected calls are rejected'); 1.65 + if (++count === 3) { 1.66 + off(stream, 'data', handle); 1.67 + done(); 1.68 + } 1.69 + })); 1.70 + 1.71 + function handle (e) { 1.72 + if (e.data !== 'firefox' || e.data !== 'rust') 1.73 + e.error = { data: e.data, error: 'too blue' }; 1.74 + assert.ok(!~ids.indexOf(e.id), 'ID should be unique'); 1.75 + assert.equal(e.event, 'sdk-x-test-multi', 'has event name'); 1.76 + ids.push(e.id); 1.77 + emit(response, 'data', e); 1.78 + } 1.79 +}; 1.80 + 1.81 +exports.testSerialization = function (assert, done) { 1.82 + on(stream, 'data', handle); 1.83 + let object = { title: 'my test data' }; 1.84 + let resObject; 1.85 + send('sdk-x-test-serialize', object).then(data => { 1.86 + data.title = 'another title'; 1.87 + assert.equal(object.title, 'my test data', 'original object not modified'); 1.88 + assert.equal(resObject.title, 'new title', 'object passed by value from host'); 1.89 + off(stream, 'data', handle); 1.90 + done(); 1.91 + }, (reason) => { 1.92 + assert.fail('should not call reject'); 1.93 + }); 1.94 + function handle (e) { 1.95 + e.data.title = 'new title'; 1.96 + assert.equal(object.title, 'my test data', 'object passed by value to host'); 1.97 + resObject = e.data; 1.98 + emit(response, 'data', e); 1.99 + } 1.100 +}; 1.101 + 1.102 +require('test').run(exports);