Skip to content

Commit 046ecef

Browse files
committed
Add tests
1 parent fa8d34b commit 046ecef

File tree

4 files changed

+173
-0
lines changed

4 files changed

+173
-0
lines changed

src/lib/__tests__/dereference-test.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,57 @@ describe('dereference', () => {
1616
expect(Array.isArray(container[0].transforms[0].y)).toBe(true);
1717
expect(Array.isArray(container[0].x)).toBe(true);
1818
});
19+
20+
it('handles multidimensional srcs correctly', () => {
21+
const container = [{zsrc: ['z1', 'z2'], type: 'heatmap'}];
22+
dereference(container, {z1: [1, 2, 3], z2: [2, 2, 2]});
23+
24+
// contents should have been transposed
25+
expect(Array.isArray(container[0].z[0])).toBe(true);
26+
expect(Array.isArray(container[0].z[1])).toBe(true);
27+
expect(Array.isArray(container[0].z[2])).toBe(true);
28+
29+
expect(container[0].z[0][0]).toBe(1);
30+
expect(container[0].z[0][1]).toBe(2);
31+
expect(container[0].z[1][0]).toBe(2);
32+
expect(container[0].z[1][1]).toBe(2);
33+
expect(container[0].z[2][0]).toBe(3);
34+
expect(container[0].z[2][1]).toBe(2);
35+
});
36+
37+
it('handles ambiguous 2d srcs correctly', () => {
38+
const container = [{zsrc: ['z1'], type: 'heatmap'}];
39+
dereference(container, {z1: [1, 2, 3]});
40+
41+
// contents should have been transposed
42+
expect(Array.isArray(container[0].z[0])).toBe(true);
43+
expect(Array.isArray(container[0].z[1])).toBe(true);
44+
expect(Array.isArray(container[0].z[2])).toBe(true);
45+
46+
expect(container[0].z[0][0]).toBe(1);
47+
expect(container[0].z[1][0]).toBe(2);
48+
expect(container[0].z[2][0]).toBe(3);
49+
});
50+
51+
it('uses special joinSrcs function if provided in config', () => {
52+
const customParsing = src => src.split(',');
53+
const container = [{zsrc: 'z1,z2', type: 'heatmap'}];
54+
dereference(
55+
container,
56+
{z1: [1, 2, 3], z2: [2, 2, 2]},
57+
{splitSrcs: customParsing}
58+
);
59+
60+
// contents should have been transposed
61+
expect(Array.isArray(container[0].z[0])).toBe(true);
62+
expect(Array.isArray(container[0].z[1])).toBe(true);
63+
expect(Array.isArray(container[0].z[2])).toBe(true);
64+
65+
expect(container[0].z[0][0]).toBe(1);
66+
expect(container[0].z[0][1]).toBe(2);
67+
expect(container[0].z[1][0]).toBe(2);
68+
expect(container[0].z[1][1]).toBe(2);
69+
expect(container[0].z[2][0]).toBe(3);
70+
expect(container[0].z[2][1]).toBe(2);
71+
});
1972
});
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {maybeAdjustSrc} from '../index';
2+
/* eslint-disable no-magic-numbers */
3+
describe('maybeAdjustSrc', () => {
4+
it('uses custom joinSrcs function if one is provided', () => {
5+
const customJoin = srcs => srcs.join('$');
6+
const adjusted = maybeAdjustSrc(['z1', 'z2'], 'zsrc', 'heatmap', {
7+
joinSrcs: customJoin,
8+
});
9+
expect(adjusted).toBe('z1$z2');
10+
});
11+
12+
it('reduces src to string when just one src element in array', () => {
13+
const adjusted = maybeAdjustSrc(['z1'], 'zsrc', 'heatmap');
14+
expect(adjusted).toBe('z1');
15+
});
16+
17+
it('reduces src to string for special table case', () => {
18+
const adjusted = maybeAdjustSrc(['z1'], 'header.valuessrc', 'table');
19+
expect(adjusted).toBe('z1');
20+
});
21+
});
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import {maybeTransposeData} from '../index';
2+
/* eslint-disable no-magic-numbers */
3+
describe('maybeTransposeData', () => {
4+
it('transposes 2d data for row based traceTypes', () => {
5+
const transposed = maybeTransposeData(
6+
[[1, 2, 3], [4, 5, 6]],
7+
'zsrc',
8+
'heatmap'
9+
);
10+
11+
// [[1, 4], [2, 5], [3, 6]]
12+
expect(transposed.length).toBe(3);
13+
});
14+
15+
it('transposes 1d data for row based traceTypes', () => {
16+
const transposed = maybeTransposeData([1, 2, 3], 'zsrc', 'heatmap');
17+
18+
// [[1], [2], [3]]
19+
expect(transposed.length).toBe(3);
20+
});
21+
22+
it('does not transpose data for column based traceTypes', () => {
23+
const transposed = maybeTransposeData(
24+
[[1, 2, 3], [4, 5, 6]],
25+
'header.valuessrc',
26+
'table'
27+
);
28+
29+
// [[1, 2, 3], [4, 5, 6]]
30+
expect(transposed.length).toBe(2);
31+
});
32+
33+
it('removes extra array wrapping for special cases in tables', () => {
34+
const transposed = maybeTransposeData(
35+
[[1, 2, 3]],
36+
'header.valuessrc',
37+
'table'
38+
);
39+
40+
// [1, 2, 3]
41+
expect(Array.isArray(transposed[0])).toBe(false);
42+
expect(transposed.length).toBe(3);
43+
});
44+
});
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import {transpose} from '../index';
2+
/* eslint-disable no-magic-numbers */
3+
describe('transpose', () => {
4+
it('correctly transposes 1d arrays', () => {
5+
const originalArray = [1, 2, 3];
6+
const transposedArray = transpose(originalArray);
7+
8+
expect(transposedArray.length).toBe(3);
9+
10+
transposedArray.forEach(subArray => {
11+
expect(Array.isArray(subArray)).toBe(true);
12+
expect(subArray.length).toBe(1);
13+
});
14+
15+
expect(transposedArray[0][0]).toBe(1);
16+
expect(transposedArray[1][0]).toBe(2);
17+
expect(transposedArray[2][0]).toBe(3);
18+
});
19+
20+
it('correctly transposes 2d arrays', () => {
21+
const originalArray = [[1, 2, 3], [9, 8, 7]];
22+
const transposedArray = transpose(originalArray);
23+
24+
expect(transposedArray.length).toBe(3);
25+
transposedArray.forEach(subArray => {
26+
expect(Array.isArray(subArray)).toBe(true);
27+
expect(subArray.length).toBe(2);
28+
});
29+
30+
expect(transposedArray[0][0]).toBe(1);
31+
expect(transposedArray[0][1]).toBe(9);
32+
expect(transposedArray[1][0]).toBe(2);
33+
expect(transposedArray[1][1]).toBe(8);
34+
expect(transposedArray[2][0]).toBe(3);
35+
expect(transposedArray[2][1]).toBe(7);
36+
});
37+
38+
it('correctly fills non symmetrical 2d arrays', () => {
39+
const originalArray = [[1, 2], [9, 8, 7]];
40+
const transposedArray = transpose(originalArray);
41+
42+
expect(transposedArray.length).toBe(3);
43+
transposedArray.forEach(subArray => {
44+
expect(Array.isArray(subArray)).toBe(true);
45+
expect(subArray.length).toBe(2);
46+
});
47+
48+
expect(transposedArray[0][0]).toBe(1);
49+
expect(transposedArray[0][1]).toBe(9);
50+
expect(transposedArray[1][0]).toBe(2);
51+
expect(transposedArray[1][1]).toBe(8);
52+
expect(transposedArray[2][0]).toBe(null);
53+
expect(transposedArray[2][1]).toBe(7);
54+
});
55+
});

0 commit comments

Comments
 (0)