diff -r 000000000000 -r 6474c204b198 addon-sdk/source/test/event/helpers.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/test/event/helpers.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { on, once, off, emit, count } = require("sdk/event/core"); + +function scenario(setup) { + return function(unit) { + return function(assert) { + let actual = []; + let input = {}; + unit(input, function(output, events, expected, message) { + let result = setup(output, expected, actual); + + events.forEach(function(event) emit(input, "data", event)); + + assert.deepEqual(actual, result, message); + }); + } + } +} + +exports.emits = scenario(function(output, expected, actual) { + on(output, "data", function(data) actual.push(this, data)); + + return expected.reduce(function($$, $) $$.concat(output, $), []); +}); + +exports.registerOnce = scenario(function(output, expected, actual) { + function listener(data) actual.push(data); + on(output, "data", listener); + on(output, "data", listener); + on(output, "data", listener); + + return expected; +}); + +exports.ignoreNew = scenario(function(output, expected, actual) { + on(output, "data", function(data) { + actual.push(data + "#1"); + on(output, "data", function(data) { + actual.push(data + "#2"); + }); + }); + + return expected.map(function($) $ + "#1"); +}); + +exports.FIFO = scenario(function(target, expected, actual) { + on(target, "data", function($) actual.push($ + "#1")); + on(target, "data", function($) actual.push($ + "#2")); + on(target, "data", function($) actual.push($ + "#3")); + + return expected.reduce(function(result, value) { + return result.concat(value + "#1", value + "#2", value + "#3"); + }, []); +});