addon-sdk/source/test/test-host-events.js

changeset 0
6474c204b198
     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);

mercurial