UNPKG

2.74 kBJavaScriptView Raw
1'use strict';
2
3var all = require('../src/all'),
4 assert = require('chai').assert;
5
6describe('all', 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(all(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 all(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 all();
27 }, Error, 'need to provide at least two predicates');
28
29 assert.throws(function() {
30 all(TRUE_PREDICATE);
31 }, Error, 'need to provide at least two predicates');
32
33 assert.doesNotThrow(function() {
34 all(TRUE_PREDICATE, FALSE_PREDICATE);
35 });
36 });
37
38 it('calls predicates in order', function() {
39 var counter = 0;
40 all(function() {
41 assert.strictEqual(counter, 0);
42 counter++;
43 return true;
44 }, function() {
45 assert.strictEqual(counter, 1);
46 counter++;
47 return true;
48 }, function() {
49 assert.strictEqual(counter, 2);
50 counter++;
51 return true;
52 })('value');
53 assert.strictEqual(counter, 3, 'Not all predicates have been called');
54 });
55
56 it('calls predicates with correct context and arguments', function() {
57 var args = [1, 2, 3, 4],
58 context = {example: 'context'},
59 predicate = function(arg1, arg2, arg3, arg4, arg5) {
60 assert.strictEqual(context, this);
61 assert.strictEqual(arg1, 1);
62 assert.strictEqual(arg2, 2);
63 assert.strictEqual(arg3, 3);
64 assert.strictEqual(arg4, 4);
65 assert.strictEqual(arg5, undefined);
66 return false;
67 },
68 testPredicate = all(predicate, predicate, predicate, predicate);
69
70 assert.ok(!testPredicate.apply(context, args));
71 });
72
73 it('checks whether all predicates are satisfied', function() {
74 assert.ok(all(TRUE_PREDICATE, TRUE_PREDICATE, TRUE_PREDICATE)('value'));
75 assert.ok(all(TRUE_PREDICATE, FALSE_PREDICATE)('value') === false);
76 });
77
78 it('does not call all predicates if one of them has not been satisfied earlier', function() {
79 assert.ok(all(FALSE_PREDICATE, function() {
80 throw new Error('Last predicate should not be called');
81 })('value') === false);
82 });
83});