Quite good looking graph derived from d3.js http://c3js.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

357 lines
10 KiB

import c3 from '../src';
const $$ = c3.chart.internal.fn;
$$.d3 = require("d3");
describe('data.convert', () => {
describe('$$.convertColumnsToData', () => {
it('converts column data to normalized data', () => {
const data = $$.convertColumnsToData([
["cat1", "a", "b", "c", "d"],
["data1", 30, 200, 100, 400],
["cat2", "b", "a", "c", "d", "e", "f"],
["data2", 400, 60, 200, 800, 10, 10]
]);
expect(data).toEqual({
keys: [ 'cat1', 'data1', 'cat2', 'data2' ],
rows: [{
cat1: 'a',
data1: 30,
cat2: 'b',
data2: 400
}, {
cat1: 'b',
data1: 200,
cat2: 'a',
data2: 60
}, {
cat1: 'c',
data1: 100,
cat2: 'c',
data2: 200
}, {
cat1: 'd',
data1: 400,
cat2: 'd',
data2: 800
}, {
cat2: 'e',
data2: 10
}, {
cat2: 'f',
data2: 10
}]
});
});
it('throws when the column data contains undefined', () => {
expect(() => $$.convertColumnsToData([
["cat1", "a", "b", "c", "d"],
["data1", undefined]
])).toThrowError(Error, /Source data is missing a component/);
});
});
describe('$$.convertRowsToData', () => {
it('converts the row data to normalized data', () => {
const data = $$.convertRowsToData([
['data1', 'data2', 'data3'],
[90, 120, 300],
[40, 160, 240],
[50, 200, 290],
[120, 160, 230],
[80, 130, 300],
[90, 220, 320]
]);
expect(data).toEqual({
keys: ['data1', 'data2', 'data3'],
rows: [{
data1: 90,
data2: 120,
data3: 300
}, {
data1: 40,
data2: 160,
data3: 240
}, {
data1: 50,
data2: 200,
data3: 290
}, {
data1: 120,
data2: 160,
data3: 230
}, {
data1: 80,
data2: 130,
data3: 300
}, {
data1: 90,
data2: 220,
data3: 320
}]
});
});
it('throws when the row data contains undefined', () => {
expect(() => $$.convertRowsToData([
['data1', 'data2', 'data3'],
[40, 160, 240],
[90, 120, undefined]
])).toThrowError(Error, /Source data is missing a component/);
});
});
describe('$$.convertXsvToData', () => {
it('converts the csv data to normalized data', () => {
const data = [{
data1: '90',
data2: '120',
data3: '300'
}, {
data1: '40',
data2: '160',
data3: '240'
}, {
data1: '50',
data2: '200',
data3: '290'
}, {
data1: '120',
data2: '160',
data3: '230'
}, {
data1: '80',
data2: '130',
data3: '300'
}, {
data1: '90',
data2: '220',
data3: '320'
}];
data.columns = ['data1', 'data2', 'data3'];
expect($$.convertXsvToData(data)).toEqual({
keys: ['data1', 'data2', 'data3'],
rows: [{
data1: '90',
data2: '120',
data3: '300'
}, {
data1: '40',
data2: '160',
data3: '240'
}, {
data1: '50',
data2: '200',
data3: '290'
}, {
data1: '120',
data2: '160',
data3: '230'
}, {
data1: '80',
data2: '130',
data3: '300'
}, {
data1: '90',
data2: '220',
data3: '320'
}]
});
});
it('converts one lined CSV data', () => {
const data = [];
data.columns = ['data1', 'data2', 'data3'];
expect($$.convertXsvToData(data)).toEqual({
keys: ['data1', 'data2', 'data3'],
rows: [{
data1: null,
data2: null,
data3: null
}]
});
});
});
describe('$$.convertDataToTargets', () => {
beforeEach(() => {
$$.cache = {};
$$.data = {
xs: []
};
$$.config = {
data_idConverter: (v) => v
};
});
it('converts the legacy data format into targets', () => {
const targets = $$.convertDataToTargets([ {
data1: 90,
data2: 120,
data3: 300
}, {
data1: 40,
data2: 160,
data3: 240
} ]);
expect(targets).toEqual([{
id: 'data1',
id_org: 'data1',
values: [ { x: 0, value: 90, id: 'data1', index: 0 }, { x: 1, value: 40, id: 'data1', index: 1 } ]
}, {
id: 'data2',
id_org: 'data2',
values: [ { x: 0, value: 120, id: 'data2', index: 0 }, { x: 1, value: 160, id: 'data2', index: 1 } ]
}, {
id: 'data3',
id_org: 'data3',
values: [ { x: 0, value: 300, id: 'data3', index: 0 }, { x: 1, value: 240, id: 'data3', index: 1 } ]
}]);
});
it('converts the data into targets', () => {
const targets = $$.convertDataToTargets({
keys: [ 'data1', 'data2', 'data3' ],
rows: [ {
data1: 90,
data2: 120,
data3: 300
}, {
data1: 40,
data2: 160,
data3: 240
} ]
});
expect(targets).toEqual([{
id: 'data1',
id_org: 'data1',
values: [ { x: 0, value: 90, id: 'data1', index: 0 }, { x: 1, value: 40, id: 'data1', index: 1 } ]
}, {
id: 'data2',
id_org: 'data2',
values: [ { x: 0, value: 120, id: 'data2', index: 0 }, { x: 1, value: 160, id: 'data2', index: 1 } ]
}, {
id: 'data3',
id_org: 'data3',
values: [ { x: 0, value: 300, id: 'data3', index: 0 }, { x: 1, value: 240, id: 'data3', index: 1 } ]
}]);
});
});
describe('$$.convertJsonToData', () => {
it('converts JSON as object (no keys provided)', () => {
const data = $$.convertJsonToData({
data1: [ 90, 40, 50, 120, 80, 90 ],
data2: [ 120, 160, 200, 160, 130, 220 ],
data3: [ 300, 240, 290, 230, 300, 320 ]
});
expect(data).toEqual({
keys: ['data1', 'data2', 'data3'],
rows: [{
data1: 90,
data2: 120,
data3: 300
}, {
data1: 40,
data2: 160,
data3: 240
}, {
data1: 50,
data2: 200,
data3: 290
}, {
data1: 120,
data2: 160,
data3: 230
}, {
data1: 80,
data2: 130,
data3: 300
}, {
data1: 90,
data2: 220,
data3: 320
}]
});
});
it('converts JSON as rows (keys provided)', () => {
const data = $$.convertJsonToData([{
data1: 90,
data2: 120,
data3: 300,
unused: 42
}, {
data1: 40,
data2: 160,
data3: 240,
unused: 42
}, {
data1: 50,
data2: 200,
data3: 290,
unused: 42
}, {
data1: 120,
data2: 160,
data3: 230,
unused: 42
}, {
data1: 80,
data2: 130,
data3: 300,
unused: 42
}, {
data1: 90,
data2: 220,
data3: 320,
unused: 42
}], {
value: [ 'data1', 'data2', 'data3' ]
});
expect(data).toEqual({
keys: ['data1', 'data2', 'data3'],
rows: [{
data1: 90,
data2: 120,
data3: 300
}, {
data1: 40,
data2: 160,
data3: 240
}, {
data1: 50,
data2: 200,
data3: 290
}, {
data1: 120,
data2: 160,
data3: 230
}, {
data1: 80,
data2: 130,
data3: 300
}, {
data1: 90,
data2: 220,
data3: 320
}]
});
});
});
});