UNPKG

2.66 kBJavaScriptView Raw
1'use strict';
2
3var any = require('../src/any'),
4 assert = require('chai').assert;
5
6describe('any', function() {
7 var TRUE_PREDICATE = function() {
8 return true;
9 },
10 FALSE_PREDICATE = function() {
11 return false;
12 };
13
14 it('returns a function', function() {
15 assert.ok(any(TRUE_PREDICATE, FALSE_PREDICATE) instanceof Function);
16 });
17
18 it('throws error if not every predicate is a function', function() {
19 assert.throws(function() {
20 any(TRUE_PREDICATE, 'definitely not a function');
21 });
22 });
23
24 it('throws error if zero or only one predicate provided', function() {
25 assert.throws(function() {
26 any();
27 }, Error, 'need to provide at least two predicates');
28
29 assert.throws(function() {
30 any(TRUE_PREDICATE);
31 }, Error, 'need to provide at least two predicates');
32
33 assert.doesNotThrow(function() {
34 any(TRUE_PREDICATE, FALSE_PREDICATE);
35 });
36 });
37
38 it('calls predicates in order', function() {
39 var counter = 0;
40 any(function() {
41 assert.strictEqual(counter, 0);
42 counter++;
43 }, function() {
44 assert.strictEqual(counter, 1);
45 counter++;
46 }, function() {
47 assert.strictEqual(counter, 2);
48 counter++;
49 })('value');
50 assert.strictEqual(counter, 3, 'Not all predicates have been called');
51 });
52
53 it('calls predicates with correct context and arguments', function() {
54 var args = [1, 2, 3, 4],
55 context = {example: 'context'},
56 predicate = function(arg1, arg2, arg3, arg4, arg5) {
57 assert.strictEqual(context, this);
58 assert.strictEqual(arg1, 1);
59 assert.strictEqual(arg2, 2);
60 assert.strictEqual(arg3, 3);
61 assert.strictEqual(arg4, 4);
62 assert.strictEqual(arg5, undefined);
63 return false;
64 },
65 testPredicate = any(predicate, predicate, predicate, predicate);
66
67 assert.ok(!testPredicate.apply(context, args));
68 });
69
70 it('checks whether at least one predicate has been satisfied', function() {
71 assert.ok(any(FALSE_PREDICATE, TRUE_PREDICATE, FALSE_PREDICATE)('value'));
72 assert.ok(any(FALSE_PREDICATE, FALSE_PREDICATE)('value') === false);
73 });
74
75 it('does not call all predicates if one of them has been satisfied earlier', function() {
76 assert.ok(any(TRUE_PREDICATE, function() {
77 throw new Error('Last predicate should not be called');
78 })('value'));
79 });
80});