mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 23:43:43 +00:00
util.enforce_arity takes a function and returns a new version which throws an error if an incorrect number of arguments (as determined by the function prototype) are passed. (imported from commit 20e69a6dc7b6f8455726ab4fae8d5b7b04dc4103)
125 lines
3.7 KiB
JavaScript
125 lines
3.7 KiB
JavaScript
var assert = require('assert');
|
|
|
|
(function set_up_dependencies () {
|
|
global._ = require('third/underscore/underscore.js');
|
|
global.util = require('js/util.js');
|
|
global.$ = {};
|
|
}());
|
|
|
|
var util = global.util;
|
|
|
|
(function test_CachedValue() {
|
|
var x = 5;
|
|
|
|
var cv = new util.CachedValue({
|
|
compute_value: function () {
|
|
return x * 2;
|
|
}
|
|
});
|
|
|
|
assert.equal(cv.get(), 10);
|
|
|
|
x = 6;
|
|
assert.equal(cv.get(), 10);
|
|
cv.reset();
|
|
assert.equal(cv.get(), 12);
|
|
|
|
}());
|
|
|
|
(function test_lower_bound() {
|
|
var arr = [10, 20, 30, 40, 50];
|
|
assert.equal(util.lower_bound(arr, 5), 0);
|
|
assert.equal(util.lower_bound(arr, 10), 0);
|
|
assert.equal(util.lower_bound(arr, 15), 1);
|
|
assert.equal(util.lower_bound(arr, 50), 4);
|
|
assert.equal(util.lower_bound(arr, 55), 5);
|
|
assert.equal(util.lower_bound(arr, 2, 4, 31), 3);
|
|
|
|
arr = [{x: 10}, {x: 20}, {x:30}];
|
|
|
|
function compare (a, b) {
|
|
return a.x < b;
|
|
}
|
|
|
|
assert.equal(util.lower_bound(arr, 5, compare), 0);
|
|
assert.equal(util.lower_bound(arr, 10, compare), 0);
|
|
assert.equal(util.lower_bound(arr, 15, compare), 1);
|
|
|
|
}());
|
|
|
|
(function test_same_recipient() {
|
|
assert(util.same_recipient(
|
|
{type: 'stream', stream: 'Foo', subject: 'Bar'},
|
|
{type: 'stream', stream: 'fOO', subject: 'bar'}
|
|
));
|
|
|
|
assert(!util.same_recipient(
|
|
{type: 'stream', stream: 'Foo', subject: 'Bar'},
|
|
{type: 'stream', stream: 'yo', subject: 'whatever'}
|
|
));
|
|
|
|
assert(util.same_recipient(
|
|
{type: 'private', reply_to: 'fred@zulip.com,melissa@zulip.com'},
|
|
{type: 'private', reply_to: 'fred@zulip.com,melissa@zulip.com'}
|
|
));
|
|
|
|
assert(!util.same_recipient(
|
|
{type: 'private', reply_to: 'fred@zulip.com'},
|
|
{type: 'private', reply_to: 'Fred@zulip.com'}
|
|
));
|
|
}());
|
|
|
|
(function test_recipient_key() {
|
|
var message;
|
|
|
|
message = {type: 'stream', stream: 'Foo', subject: 'BAR'};
|
|
assert.equal(util.recipient_key(message), 'foo>bar');
|
|
|
|
global.$.trim = function (s) {
|
|
return s.trim();
|
|
};
|
|
message = {type: 'private', reply_to: ' bob@example.com, alice@example.com '};
|
|
assert.equal(util.recipient_key(message), 'alice@example.com,bob@example.com');
|
|
|
|
}());
|
|
|
|
(function test_robust_uri_decode() {
|
|
assert.equal(util.robust_uri_decode('xxx%3Ayyy'), 'xxx:yyy');
|
|
assert.equal(util.robust_uri_decode('xxx%3'), 'xxx');
|
|
}());
|
|
|
|
|
|
(function test_array_compare() {
|
|
assert(util.array_compare([], []));
|
|
assert(util.array_compare([1,2,3], [1,2,3]));
|
|
assert(!util.array_compare([1,2], [1,2,3]));
|
|
assert(!util.array_compare([1,2,3], [1,2]));
|
|
}());
|
|
|
|
(function test_enforce_arity() {
|
|
function f1() {}
|
|
var eaf1 = util.enforce_arity(f1);
|
|
|
|
assert.doesNotThrow(function () { f1('foo'); });
|
|
assert.doesNotThrow(function () { eaf1(); });
|
|
assert.throws(function () { eaf1('foo'); }, /called with \d+ arguments/);
|
|
assert.throws(function () { eaf1('foo', 'bar'); }, /called with \d+ arguments/);
|
|
|
|
function f2(x) {}
|
|
var eaf2 = util.enforce_arity(f2);
|
|
|
|
assert.doesNotThrow(function () { f2(); });
|
|
assert.doesNotThrow(function () { eaf2('foo'); });
|
|
assert.throws(function () { eaf2(); }, /called with \d+ arguments/);
|
|
assert.throws(function () { eaf2('foo', 'bar'); }, /called with \d+ arguments/);
|
|
|
|
function f3(x, y) {}
|
|
var eaf3 = util.enforce_arity(f3);
|
|
|
|
assert.doesNotThrow(function () { f3(); });
|
|
assert.doesNotThrow(function () { eaf3('foo', 'bar'); });
|
|
assert.throws(function () { eaf3(); }, /called with \d+ arguments/);
|
|
assert.throws(function () { eaf3('foo'); }, /called with \d+ arguments/);
|
|
assert.throws(function () { eaf3('foo','bar', 'baz'); }, /called with \d+ arguments/);
|
|
}());
|