зеркало из https://github.com/mozilla/gecko-dev.git
78 строки
2.1 KiB
JavaScript
78 строки
2.1 KiB
JavaScript
|
/* 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 { dispatcher } = require("sdk/util/dispatcher");
|
||
|
|
||
|
exports["test dispatcher API"] = assert => {
|
||
|
const dispatch = dispatcher();
|
||
|
|
||
|
assert.equal(typeof(dispatch), "function",
|
||
|
"dispatch is a function");
|
||
|
|
||
|
assert.equal(typeof(dispatch.define), "function",
|
||
|
"dispatch.define is a function");
|
||
|
|
||
|
assert.equal(typeof(dispatch.implement), "function",
|
||
|
"dispatch.implement is a function");
|
||
|
|
||
|
assert.equal(typeof(dispatch.when), "function",
|
||
|
"dispatch.when is a function");
|
||
|
};
|
||
|
|
||
|
exports["test dispatcher"] = assert => {
|
||
|
const isDuck = dispatcher();
|
||
|
|
||
|
const quacks = x => x && typeof(x.quack) === "function";
|
||
|
|
||
|
const Duck = function() {};
|
||
|
const Goose = function() {};
|
||
|
|
||
|
const True = _ => true;
|
||
|
const False = _ => false;
|
||
|
|
||
|
|
||
|
|
||
|
isDuck.define(Goose, False);
|
||
|
isDuck.define(Duck, True);
|
||
|
isDuck.when(quacks, True);
|
||
|
|
||
|
assert.equal(isDuck(new Goose()), false,
|
||
|
"Goose ain't duck");
|
||
|
|
||
|
assert.equal(isDuck(new Duck()), true,
|
||
|
"Ducks are ducks");
|
||
|
|
||
|
assert.equal(isDuck({ quack: () => "Quaaaaaack!" }), true,
|
||
|
"It's a duck if it quacks");
|
||
|
|
||
|
|
||
|
assert.throws(() => isDuck({}), /Type does not implements method/, "not implemneted");
|
||
|
|
||
|
isDuck.define(Object, False);
|
||
|
|
||
|
assert.equal(isDuck({}), false,
|
||
|
"Ain't duck if it does not quacks!");
|
||
|
};
|
||
|
|
||
|
exports["test redefining fails"] = assert => {
|
||
|
const isPM = dispatcher();
|
||
|
const isAfternoon = time => time.getHours() > 12;
|
||
|
|
||
|
isPM.when(isAfternoon, _ => true);
|
||
|
|
||
|
assert.equal(isPM(new Date(Date.parse("Jan 23, 1985, 13:20:00"))), true,
|
||
|
"yeap afternoon");
|
||
|
assert.equal(isPM({ getHours: _ => 17 }), true,
|
||
|
"seems like afternoon");
|
||
|
|
||
|
assert.throws(() => isPM.when(isAfternoon, x => x > 12 && x < 24),
|
||
|
/Already implemented for the given predicate/,
|
||
|
"can't redefine on same predicate");
|
||
|
|
||
|
};
|
||
|
|
||
|
require("sdk/test").run(exports);
|