Skip to content

Commit 28ce5f1

Browse files
committed
add tests for util functions
1 parent 8dbfed9 commit 28ce5f1

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

__tests__/clamp.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import clamp from 'utils/clamp.js';
2+
3+
const max = 100;
4+
const min = 10;
5+
6+
test('Clamps a value within a range', () => {
7+
expect(clamp(50, min, max))
8+
.toBe(50);
9+
10+
expect(clamp(110, min, max))
11+
.toBe(max);
12+
13+
expect(clamp(0, min, max))
14+
.toBe(min);
15+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import getParallaxOffsets from 'utils/getParallaxOffsets.js';
2+
import { parseValueAndUnit, scaleBetween } from 'utils';
3+
4+
const offset = {
5+
xMin: parseValueAndUnit('-100px'),
6+
xMax: parseValueAndUnit('40px'),
7+
yMin: parseValueAndUnit('-80%'),
8+
yMax: parseValueAndUnit('50%'),
9+
};
10+
11+
const percentMoved = 44;
12+
13+
test('Gets offsets based on percent in view', () => {
14+
expect(getParallaxOffsets(offset, percentMoved, false)).toEqual({
15+
x: {
16+
value: scaleBetween(percentMoved, offset.xMax.value, offset.xMin.value, 0, 100),
17+
unit: offset.xMax.unit,
18+
},
19+
y: {
20+
value: scaleBetween(percentMoved, offset.yMax.value, offset.yMin.value, 0, 100),
21+
unit: offset.yMax.unit,
22+
},
23+
});
24+
25+
expect(getParallaxOffsets(offset, percentMoved, true)).toEqual({
26+
x: {
27+
value: scaleBetween(percentMoved, offset.xMin.value, offset.xMax.value, 0, 100),
28+
unit: offset.xMax.unit,
29+
},
30+
y: {
31+
value: scaleBetween(percentMoved, offset.yMin.value, offset.yMax.value, 0, 100),
32+
unit: offset.yMax.unit,
33+
},
34+
});
35+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import parseValueAndUnit from 'utils/parseValueAndUnit';
2+
3+
test('Parse a string to get the value and unit in either pixels or percent', () => {
4+
expect(parseValueAndUnit('5px'))
5+
.toEqual({ unit: 'px', value: 5 });
6+
expect(parseValueAndUnit('52%'))
7+
.toEqual({ unit: '%', value: 52 });
8+
expect(parseValueAndUnit(13.333))
9+
.toEqual({ unit: null, value: 13.333 });
10+
expect(parseValueAndUnit('75.8%'))
11+
.toEqual({ unit: '%', value: 75 });
12+
expect(parseValueAndUnit('23.1px'))
13+
.toEqual({ unit: 'px', value: 23 });
14+
expect(() => parseValueAndUnit(false))
15+
.toThrow();
16+
});

__tests__/scaleBetween.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import scaleBetween from 'utils/scaleBetween.js';
2+
3+
const oldMin = 0;
4+
const oldMax = 1;
5+
6+
const newMin = 0;
7+
const newMax = 100;
8+
9+
test('Scales a value from a given range to a new range', () => {
10+
expect(scaleBetween(0.4, newMin, newMax, oldMin, oldMax))
11+
.toBe(40);
12+
expect(scaleBetween(0.1, newMin, newMax, oldMin, oldMax))
13+
.toBe(10);
14+
expect(scaleBetween(0.3, newMin, newMax, oldMin, oldMax))
15+
.toBe(30);
16+
expect(scaleBetween(0.333, newMin, newMax, oldMin, oldMax))
17+
.toBeCloseTo(33.3);
18+
});

0 commit comments

Comments
 (0)