UNPKG

2.56 kBJavaScriptView Raw
1'use strict';
2
3var objectOf = require('../src/objectOf'),
4 assert = require('chai').assert;
5
6describe('objectOf', function() {
7 var TRUE_PREDICATE = function() {
8 return true;
9 },
10 EXAMPLE_OBJECT = {
11 key0: 0,
12 key1: 1,
13 key2: 2,
14 key3: 3,
15 key4: 4
16 },
17 isNumber = function(property) {
18 return typeof property === 'number';
19 };
20
21 it('returns a function if only argument provided', function() {
22 assert.ok(objectOf(TRUE_PREDICATE) instanceof Function);
23 });
24
25 it('throws TypeError if predicate is not a function', function() {
26 assert.throws(function() {
27 objectOf('definitely not a function')('value');
28 });
29 });
30
31 it('does not call all predicates if one of them has not been satisfied earlier', function() {
32 var counter = 0,
33 testPredicate = objectOf(function(value) {
34 counter++;
35 return value !== 2;
36 });
37
38 testPredicate(EXAMPLE_OBJECT);
39
40 assert.strictEqual(3, counter);
41 });
42
43 it('calls a predicate with the same context and proper arguments', function() {
44 var exampleContext = {
45 some: 'context'
46 },
47 expectedPropertyValues = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
48 testPredicate = function() {
49 var expectedPropertyValue = expectedPropertyValues.shift();
50 assert.strictEqual(exampleContext, this);
51 assert.strictEqual(arguments[0], expectedPropertyValue);
52 assert.strictEqual(arguments[1], 1);
53 assert.strictEqual(arguments[2], 2);
54 assert.strictEqual(arguments[3], 3);
55 assert.strictEqual(arguments[4], undefined);
56 return true;
57 };
58
59 objectOf.call(exampleContext, testPredicate, EXAMPLE_OBJECT, 1, 2, 3);
60 objectOf(testPredicate).call(exampleContext, EXAMPLE_OBJECT, 1, 2, 3);
61 assert.deepEqual(expectedPropertyValues, [], 'Predicate has not been called enough times');
62 });
63
64 it('checks whether every enumerable property satisfies a predicate', function() {
65 var invalidObject = {
66 key0: 0,
67 key1: 'string'
68 };
69 assert.ok(objectOf(isNumber, EXAMPLE_OBJECT));
70 assert.ok(objectOf(isNumber)(EXAMPLE_OBJECT));
71 assert.ok(objectOf(isNumber, invalidObject) === false);
72 assert.ok(objectOf(isNumber)(invalidObject) === false);
73 });
74});