-
Notifications
You must be signed in to change notification settings - Fork 5
/
test.js
139 lines (114 loc) · 2.42 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
const assert = require('assert');
const ease = require('./index');
let rafCalls = 0;
let setTimeoutCalls = 0;
global.window = {
requestAnimationFrame: func => {
rafCalls++;
func();
},
setTimeout: func => {
setTimeoutCalls++;
func();
}
};
// rudimentary testing function
function it(desc, func) {
let result;
try {
result = func();
result.test(result.actual, result.expected, desc);
console.info(`✓ "${desc}" passed.`);
} catch (err) {
if (result) {
console.error(`✘ "${desc}" failed. Expected ${result.actual} to be ${result.expected}`);
} else {
console.error(`✘ "${desc}" failed. No result was returned`);
}
}
}
it('should use requestAnimationFrame when available', () => {
ease({
durationMs: 160,
onStep: () => {}
});
return {
actual: rafCalls, // should be calling raf
expected: 10,
test: assert.equal,
};
});
it('should polyfill requestAnimationFrame', () => {
const originalRaf = window.requestAnimationFrame;
delete window.requestAnimationFrame;
ease({
durationMs: 160,
onStep: () => {}
});
window.requestAnimationFrame = originalRaf;
return {
actual: setTimeoutCalls, // should be calling setTimeout
expected: 10,
test: assert.equal,
};
});
it('should apply a default start value', () => {
let startValue = null;
ease({
onStep: value => {
if (startValue === null) startValue = value;
}
});
return {
actual: Math.round(startValue),
expected: 0,
test: assert.equal,
};
});
it('should apply a default end value', () => {
let endValue = null;
ease({
onStep: value => {
endValue = value;
}
});
return {
actual: endValue,
expected: 1,
test: assert.equal,
};
});
it('should apply a default duration', () => {
let onStepCalls = 0;
const expectedDuration = 200;
ease({
onStep: () => onStepCalls++
});
return {
actual: onStepCalls,
expected: Math.round(expectedDuration / 16),
test: assert.equal,
};
});
it('should call onComplete() when complete', () => {
let onCompleteCalled = false;
ease({
onStep: () => {},
onComplete: () => {
onCompleteCalled = true;
}
});
return {
actual: onCompleteCalled,
expected: true,
test: assert.equal,
};
});
it('should throw if onStep is not provided', () => {
return {
actual: () => {
ease({});
},
test: assert.throws,
};
});