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 }] }); }); }); });