var setMouseEvent = window.setMouseEvent; describe('c3 chart shape bar', function () { 'use strict'; var chart, args; beforeEach(function (done) { chart = window.initChart(chart, args, done); }); describe('with groups', function () { describe('with indexed data', function () { it('should update args', function () { args = { data: { columns: [ ['data1', 30, 200, -100, 400, -150, 250], ['data2', 50, 20, 10, 40, 15, 25], ], groups: [ ['data1', 'data2'], ], type: 'bar' }, }; expect(true).toBeTruthy(); }); it('should be stacked', function () { var expectedBottom = [275, 293, 365, 281, 395, 290]; chart.internal.main.selectAll('.c3-bars-data1 .c3-bar').each(function (d, i) { var rect = d3.select(this).node().getBoundingClientRect(); expect(rect.bottom).toBeCloseTo(expectedBottom[i], -1); }); }); }); describe('with timeseries data', function () { it('should update args', function () { args = { data: { x: 'date', columns: [ ['date', '2012-12-24', '2012-12-25', '2012-12-26', '2012-12-27', '2012-12-28', '2012-12-29'], ['data1', 30, 200, -100, 400, -150, 250], ['data2', 50, 20, 10, 40, 15, 25], ], groups: [ ['data1', 'data2'], ], type: 'bar' }, axis: { x: { type: 'timeseries', } } }; expect(true).toBeTruthy(); }); it('should be stacked', function () { var expectedBottom = [275, 293, 365, 281, 395, 290]; chart.internal.main.selectAll('.c3-bars-data1 .c3-bar').each(function (d, i) { var rect = d3.select(this).node().getBoundingClientRect(); expect(rect.bottom).toBeCloseTo(expectedBottom[i], -1); }); }); }); describe('with timeseries data, different [xs]', function () { it('should update args', function () { var t1 = 1474020000000; // "2016-09-16T10:00:00.000Z" var t2 = 1474056000000; // "2016-09-16T20:00:00.000Z" args = { data: { xs: { 'data1': 'x1', 'data2': 'x2', 'data3': 'x3' }, columns: [ ['x1', t1, t2], ['data1', 500, 500], ['x2', t1], ['data2', 500], ['x3', t1, t2], ['data3', 500, 500] ], type: 'bar', groups: [['data1', 'data2', 'data3']] }, axis: { x: { type: 'timeseries' } } }; expect(true).toBeTruthy(); }); it('should be stacked', function () { var expectedBottom = [ [301, 430], [430], [172, 301] ]; [1, 2, 3].forEach(function(dataIndex) { chart.internal.main.selectAll('.c3-bars-data' + dataIndex + ' .c3-bar').each(function (d, i) { var rect = d3.select(this).node().getBoundingClientRect(); expect(rect.bottom).toBeCloseTo(expectedBottom[dataIndex - 1][i], -1); }); }); }); }); describe('with category data', function () { it('should update args', function () { args = { data: { x: 'date', columns: [ ['date', '2012-12-24', '2012-12-25', '2012-12-26', '2012-12-27', '2012-12-28', '2012-12-29'], ['data1', 30, 200, -100, 400, -150, 250], ['data2', 50, 20, 10, 40, 15, 25], ], groups: [ ['data1', 'data2'], ], type: 'bar' }, axis: { x: { type: 'category', } } }; expect(true).toBeTruthy(); }); it('should be stacked', function () { var expectedBottom = [275, 293, 365, 281, 395, 290]; chart.internal.main.selectAll('.c3-bars-data1 .c3-bar').each(function (d, i) { var rect = d3.select(this).node().getBoundingClientRect(); expect(rect.bottom).toBeCloseTo(expectedBottom[i], -1); }); }); }); }); describe('internal.isWithinBar', function () { describe('with normal axis', function () { it('should update args', function () { args = { data: { columns: [ ['data1', 30, 200, 100, 400, -150, 250], ['data2', 50, 20, 10, 40, 15, 25], ['data3', -150, 120, 110, 140, 115, 125] ], type: 'bar' }, axis: { rotated: false } }; expect(true).toBeTruthy(); }); it('should not be within bar', function () { var bar = d3.select('.c3-target-data1 .c3-bar-0').node(); setMouseEvent(chart, 'click', 0, 0); expect(chart.internal.isWithinBar(bar)).toBeFalsy(); }); it('should be within bar', function () { var bar = d3.select('.c3-target-data1 .c3-bar-0').node(); setMouseEvent(chart, 'click', 31, 280); expect(chart.internal.isWithinBar(bar)).toBeTruthy(); }); it('should not be within bar of negative value', function () { var bar = d3.select('.c3-target-data3 .c3-bar-0').node(); setMouseEvent(chart, 'click', 68, 280); expect(chart.internal.isWithinBar(bar)).toBeFalsy(); }); it('should be within bar of negative value', function () { var bar = d3.select('.c3-target-data3 .c3-bar-0').node(); setMouseEvent(chart, 'click', 68, 350); expect(chart.internal.isWithinBar(bar)).toBeTruthy(); }); }); describe('with rotated axis', function () { it('should change the chart as axis rotated', function () { args.axis.rotated = true; expect(true).toBeTruthy(); }); it('should not be within bar', function () { var bar = d3.select('.c3-target-data1 .c3-bar-0').node(); setMouseEvent(chart, 'click', 0, 0); expect(chart.internal.isWithinBar(bar)).toBeFalsy(); }); it('should be within bar', function () { var bar = d3.select('.c3-target-data1 .c3-bar-0').node(); setMouseEvent(chart, 'click', 190, 20); expect(chart.internal.isWithinBar(bar)).toBeTruthy(); }); it('should be within bar of negative value', function () { var bar = d3.select('.c3-target-data3 .c3-bar-0').node(); setMouseEvent(chart, 'click', 68, 50); expect(chart.internal.isWithinBar(bar)).toBeTruthy(); }); }); }); });