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.

245 lines
6.1 KiB

import { d3, initChart } from './c3-helper'
describe('c3 api region', function() {
'use strict'
var chart, args
beforeEach(function(done) {
chart = initChart(chart, args, done)
})
describe('api.region', function() {
beforeAll(function() {
args = {
data: {
columns: [['data1', 30, 200, 100, 400, 150, 250]]
},
regions: [
{
axis: 'y',
start: 300,
end: 400,
class: 'green',
label: 'Region 1'
},
{
axis: 'y',
start: 0,
end: 100,
class: 'green'
}
]
}
})
it('updates regions', function(done) {
var main = chart.internal.main,
expectedRegions = [
{
axis: 'y',
start: 250,
end: 350,
class: 'red',
label: 'Region 1'
},
{
axis: 'y',
start: 25,
end: 75,
class: 'red',
label: ''
}
],
regions
// Call regions API
chart.regions(expectedRegions)
setTimeout(function() {
regions = main.selectAll('.c3-region')
expect(regions.size()).toBe(expectedRegions.length)
regions.each(function(d, i) {
var region = d3.select(this),
label = region.select('text'),
y = +region.attr('y'),
height = +region.attr('height'),
expectedClass = 'red',
expectedLabel = expectedRegions[i].label,
unexpectedClass = 'green',
expectedStart = Math.round(
chart.internal.y(expectedRegions[i].start)
),
expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
expectedY = expectedEnd,
expectedHeight = expectedStart - expectedEnd
expect(y).toBeCloseTo(expectedY, -1)
expect(height).toBeCloseTo(expectedHeight, -1)
expect(region.classed(expectedClass)).toBeTruthy()
expect(region.classed(unexpectedClass)).toBeFalsy()
expect(label.text()).toBe(expectedLabel)
})
}, 500)
setTimeout(function() {
done()
}, 1000)
})
})
describe('api.region.add', function() {
beforeAll(function() {
args = {
data: {
columns: [['data1', 30, 200, 100, 400, 150, 250]]
},
regions: [
{
axis: 'y',
start: 300,
end: 400,
class: 'green'
},
{
axis: 'y',
start: 0,
end: 100,
class: 'green'
}
]
}
})
it('should add regions', function(done) {
var main = chart.internal.main,
expectedRegions = [
{
axis: 'y',
start: 300,
end: 400,
class: 'green'
},
{
axis: 'y',
start: 0,
end: 100,
class: 'green'
},
{
axis: 'y',
start: 250,
end: 350,
class: 'red'
},
{
axis: 'y',
start: 25,
end: 75,
class: 'red'
}
],
expectedClasses = ['green', 'green', 'red', 'red'],
regions
// Call regions API
chart.regions(expectedRegions)
setTimeout(function() {
regions = main.selectAll('.c3-region')
expect(regions.size()).toBe(expectedRegions.length)
regions.each(function(d, i) {
var region = d3.select(this),
y = +region.attr('y'),
height = +region.attr('height'),
expectedClass = expectedClasses[i],
expectedStart = Math.round(
chart.internal.y(expectedRegions[i].start)
),
expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
expectedY = expectedEnd,
expectedHeight = expectedStart - expectedEnd
expect(y).toBeCloseTo(expectedY, -1)
expect(height).toBeCloseTo(expectedHeight, -1)
expect(region.classed(expectedClass)).toBeTruthy()
})
}, 500)
setTimeout(function() {
done()
}, 1000)
})
})
describe('api.region.remove', function() {
beforeAll(function() {
args = {
data: {
columns: [['data1', 30, 200, 100, 400, 150, 250]]
},
regions: [
{
axis: 'y',
start: 300,
end: 400,
class: 'green'
},
{
axis: 'y',
start: 0,
end: 100,
class: 'green'
},
{
axis: 'y',
start: 250,
end: 350,
class: 'red'
}
]
}
})
it('should remove regions', function(done) {
var main = chart.internal.main,
expectedRegions = [
{
axis: 'y',
start: 250,
end: 350,
class: 'red'
}
],
expectedClasses = ['red'],
regions
// Call regions API
chart.regions(expectedRegions)
setTimeout(function() {
regions = main.selectAll('.c3-region')
expect(regions.size()).toBe(expectedRegions.length)
regions.each(function(d, i) {
var region = d3.select(this),
y = +region.attr('y'),
height = +region.attr('height'),
expectedClass = expectedClasses[i],
expectedStart = Math.round(
chart.internal.y(expectedRegions[i].start)
),
expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
expectedY = expectedEnd,
expectedHeight = expectedStart - expectedEnd
expect(y).toBeCloseTo(expectedY, -1)
expect(height).toBeCloseTo(expectedHeight, -1)
expect(region.classed(expectedClass)).toBeTruthy()
})
}, 500)
setTimeout(function() {
done()
}, 1000)
})
})
})