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.
237 lines
7.0 KiB
237 lines
7.0 KiB
import { parseSvgPath } from './svg-helper' |
|
import { d3, initChart } from './c3-helper' |
|
|
|
describe('c3 chart shape line', function() { |
|
'use strict' |
|
|
|
var chart, args |
|
|
|
beforeEach(function(done) { |
|
chart = initChart(chart, args, done) |
|
}) |
|
|
|
describe('shape-rendering for line chart', function() { |
|
beforeAll(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: 'line' |
|
}, |
|
line: { |
|
step: { |
|
type: 'step' |
|
} |
|
} |
|
} |
|
}) |
|
|
|
it('Should render the lines correctly', function(done) { |
|
setTimeout(function() { |
|
var target = chart.internal.main.select( |
|
'.c3-chart-line.c3-target-data1' |
|
) |
|
var commands = parseSvgPath(target.select('.c3-line-data1').attr('d')) |
|
expect(commands.length).toBe(6) |
|
done() |
|
}, 500) |
|
}) |
|
|
|
it("should not have shape-rendering when it's line chart", function() { |
|
d3.selectAll('.c3-line').each(function() { |
|
var style = d3.select(this).style('shape-rendering') |
|
expect(style).toBe('auto') |
|
}) |
|
}) |
|
|
|
describe('should change to step chart', function() { |
|
beforeAll(function() { |
|
args.data.type = 'step' |
|
}) |
|
|
|
it("should have shape-rendering = crispedges when it's step chart", function() { |
|
d3.selectAll('.c3-line').each(function() { |
|
var style = d3 |
|
.select(this) |
|
.style('shape-rendering') |
|
.toLowerCase() |
|
expect(style).toBe('crispedges') |
|
}) |
|
}) |
|
}) |
|
|
|
describe('should change to step chart with step-after', function() { |
|
beforeAll(function() { |
|
args.line.step.type = 'step-after' |
|
}) |
|
it("should have shape-rendering = crispedges when it's step chart", function() { |
|
d3.selectAll('.c3-line').each(function() { |
|
var style = d3 |
|
.select(this) |
|
.style('shape-rendering') |
|
.toLowerCase() |
|
expect(style).toBe('crispedges') |
|
}) |
|
}) |
|
}) |
|
|
|
describe('should change to step chart with step-before', function() { |
|
beforeAll(function() { |
|
args.line.step.type = 'step-before' |
|
}) |
|
it("should have shape-rendering = crispedges when it's step chart", function() { |
|
d3.selectAll('.c3-line').each(function() { |
|
var style = d3 |
|
.select(this) |
|
.style('shape-rendering') |
|
.toLowerCase() |
|
expect(style).toBe('crispedges') |
|
}) |
|
}) |
|
}) |
|
|
|
describe('should change to spline chart', function() { |
|
beforeAll(function() { |
|
args.data.type = 'spline' |
|
}) |
|
|
|
it('should use cardinal interpolation by default', function() { |
|
expect(chart.internal.config.spline_interpolation_type).toBe('cardinal') |
|
}) |
|
}) |
|
}) |
|
|
|
describe('point.show option', function() { |
|
describe('should change args to include null data', function() { |
|
beforeAll(function() { |
|
args = { |
|
data: { |
|
columns: [ |
|
['data1', 30, null, 100, 400, -150, 250], |
|
['data2', 50, 20, 10, 40, 15, 25], |
|
['data3', -150, 120, 110, 140, 115, 125] |
|
], |
|
type: 'line' |
|
} |
|
} |
|
}) |
|
|
|
it('should not show the circle for null', function(done) { |
|
setTimeout(function() { |
|
var target = chart.internal.main.select( |
|
'.c3-chart-line.c3-target-data1' |
|
) |
|
expect(+target.select('.c3-circle-0').style('opacity')).toBe(1) |
|
expect(+target.select('.c3-circle-1').style('opacity')).toBe(0) |
|
expect(+target.select('.c3-circle-2').style('opacity')).toBe(1) |
|
done() |
|
}, 500) |
|
}) |
|
|
|
it('should not draw a line segment for null data', function(done) { |
|
setTimeout(function() { |
|
var target = chart.internal.main.select( |
|
'.c3-chart-line.c3-target-data1' |
|
) |
|
var commands = parseSvgPath(target.select('.c3-line-data1').attr('d')) |
|
var segments = 0 |
|
for (var i = 0; i < commands.length; i++) { |
|
commands[i].command === 'L' ? segments++ : null |
|
} |
|
expect(segments).toBe(3) |
|
done() |
|
}, 500) |
|
}) |
|
|
|
// it('should change args to include null data on scatter plot', function () { |
|
// args = { |
|
// data: { |
|
// columns: [ |
|
// ['data1', 30, null, 100, 400, -150, 250], |
|
// ['data2', 50, 20, 10, 40, 15, 25], |
|
// ['data3', -150, 120, 110, 140, 115, 125] |
|
// ], |
|
// type: 'scatter' |
|
// } |
|
// }; |
|
// expect(true).toBeTruthy(); |
|
// }); |
|
|
|
// it('should not show the circle for null', function (done) { |
|
// setTimeout(function () { |
|
// var target = chart.internal.main.select('.c3-chart-line.c3-target-data1'); |
|
// expect(+target.select('.c3-circle-0').style('opacity')).toBe(0.5); |
|
// expect(+target.select('.c3-circle-1').style('opacity')).toBe(0); |
|
// expect(+target.select('.c3-circle-2').style('opacity')).toBe(0.5); |
|
// done(); |
|
// }, 500); |
|
// }); |
|
}) |
|
|
|
describe('should allow passing a function', function() { |
|
beforeAll(function() { |
|
args = { |
|
data: { |
|
columns: [['data1', 30, 50, 100]], |
|
type: 'line' |
|
}, |
|
point: { |
|
show: function(d) { |
|
return d.value > 50 |
|
} |
|
} |
|
} |
|
}) |
|
|
|
it('should show point if function returns true', function() { |
|
var target = chart.internal.main.select( |
|
'.c3-chart-line.c3-target-data1' |
|
) |
|
expect(+target.select('.c3-circle-0').style('opacity')).toBe(0) |
|
expect(+target.select('.c3-circle-1').style('opacity')).toBe(0) |
|
expect(+target.select('.c3-circle-2').style('opacity')).toBe(1) |
|
}) |
|
}) |
|
}) |
|
|
|
describe('spline.interpolation option', function() { |
|
beforeAll(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: 'spline' |
|
}, |
|
spline: { |
|
interpolation: { |
|
type: 'monotone' |
|
} |
|
} |
|
} |
|
}) |
|
|
|
it('updates interpolation function', function() { |
|
expect(chart.internal.getInterpolate(chart.data()[0])).toBe( |
|
d3.curveMonotoneX |
|
) |
|
}) |
|
|
|
describe('should not use a non-valid interpolation', function() { |
|
beforeAll(function() { |
|
args.spline.interpolation.type = 'foo' |
|
}) |
|
|
|
it('should use cardinal interpolation when given option is not valid', function() { |
|
expect(chart.internal.getInterpolate(chart.data()[0])).toBe( |
|
d3.curveCardinal |
|
) |
|
}) |
|
}) |
|
}) |
|
})
|
|
|