import { d3, initChart } from './c3-helper' describe('c3 api grid', function() { 'use strict' var chart, args beforeEach(function(done) { chart = initChart(chart, args, done) }) describe('ygrid.add and ygrid.remove', function() { beforeAll(function() { args = { data: { columns: [['data1', 30, 200, 100, 400, 150, 250]] } } }) it('updates y grids', function(done) { var main = chart.internal.main, expectedGrids = [ { value: 100, text: 'Pressure Low' }, { value: 200, text: 'Pressure High' } ], grids // Call ygrids.add chart.ygrids.add(expectedGrids) setTimeout(function() { grids = main.selectAll('.c3-ygrid-line') expect(grids.size()).toBe(expectedGrids.length) grids.each(function(d, i) { var y = +d3 .select(this) .select('line') .attr('y1'), text = d3 .select(this) .select('text') .text(), expectedY = Math.round(chart.internal.y(expectedGrids[i].value)), expectedText = expectedGrids[i].text expect(y).toBe(expectedY) expect(text).toBe(expectedText) }) // Call ygrids.remove chart.ygrids.remove(expectedGrids) setTimeout(function() { grids = main.selectAll('.c3-ygrid-line') expect(grids.size()).toBe(0) }, 500) }, 500) setTimeout(function() { done() }, 1200) }) it('updates x ygrids even if zoomed', function(done) { var main = chart.internal.main, expectedGrids = [ { value: 0, text: 'Pressure Low' }, { value: 1, text: 'Pressure High' } ], grids, domain chart.zoom([0, 2]) setTimeout(function() { // Call xgrids chart.xgrids(expectedGrids) setTimeout(function() { grids = main.selectAll('.c3-xgrid-line') expect(grids.size()).toBe(expectedGrids.length) grids.each(function(d, i) { var x = +d3 .select(this) .select('line') .attr('x1'), text = d3 .select(this) .select('text') .text(), expectedX = Math.round(chart.internal.x(expectedGrids[i].value)), expectedText = expectedGrids[i].text expect(x).toBe(expectedX) expect(text).toBe(expectedText) }) // check if it was not rescaled domain = chart.internal.y.domain() expect(domain[0]).toBeLessThan(0) expect(domain[1]).toBeGreaterThan(400) // Call xgrids.remove chart.xgrids.remove(expectedGrids) setTimeout(function() { grids = main.selectAll('.c3-xgrid-line') expect(grids.size()).toBe(0) }, 500) // for xgrids.remove() }, 500) // for xgrids() }, 500) // for zoom setTimeout(function() { done() }, 1700) }) }) })