UNPKG

nvd3

Version:

A reusable charting library written in d3.js

195 lines (161 loc) 6.42 kB
describe 'NVD3', -> describe 'Utils', -> objects = [ 'nv.utils.windowSize' 'nv.utils.windowResize' 'nv.utils.getColor' 'nv.utils.defaultColor' 'nv.utils.customTheme' 'nv.utils.pjax' 'nv.utils.calcApproxTextWidth' 'nv.utils.NaNtoZero' 'nv.utils.renderWatch' 'nv.utils.deepExtend' 'nv.utils.state' 'nv.utils.optionsFunc' 'nv.utils.sanitizeHeight' 'nv.utils.sanitizeWidth' 'nv.utils.availableHeight' 'nv.utils.availableWidth' 'nv.utils.noData' ] describe 'has ', -> for obj in objects it " #{obj} object", -> should.exist eval obj it 'has working nv.utils.NaNtoZero function', -> nv.utils.NaNtoZero().should.be.equal 0 nv.utils.NaNtoZero(undefined ).should.be.equal 0 nv.utils.NaNtoZero(NaN).should.be.equal 0 nv.utils.NaNtoZero(null).should.be.equal 0 nv.utils.NaNtoZero(Infinity).should.be.equal 0 nv.utils.NaNtoZero(-Infinity).should.be.equal 0 nv.utils.NaNtoZero(1).should.be.equal 1 nv.utils.NaNtoZero(0).should.be.equal 0 nv.utils.NaNtoZero(-1).should.be.equal -1 it 'should return a function if passing a function into nv.utils.getColor', -> uno = (d,i) -> 1 nv.utils.getColor(uno).should.be.equal uno it 'should return a function wrapping an array if passing an array into nv.utils.getColor', -> arr = ['#fff', '#ccc', '#aaa', '#000'] returnedFunction = nv.utils.getColor(arr) returnedFunction({},0).should.be.equal '#fff' returnedFunction({},1).should.be.equal '#ccc' returnedFunction({},2).should.be.equal '#aaa' returnedFunction({},3).should.be.equal '#000' createCont = (wh = false)-> obj = document.createElement('div') obj.style.cssText = 'width:964px;height:404px' if wh d3.select(obj) describe 'Sanitize Height and Width for a Container', -> it 'provides default height and width', -> cont = createCont() expect(nv.utils.sanitizeHeight(null, cont)).to.equal 400 expect(nv.utils.sanitizeWidth(null, cont)).to.equal 960 expect(nv.utils.sanitizeHeight(undefined, cont)).to.equal 400 expect(nv.utils.sanitizeWidth(undefined, cont)).to.equal 960 expect(nv.utils.sanitizeHeight(0, cont)).to.equal 400 expect(nv.utils.sanitizeWidth(0, cont)).to.equal 960 it 'uses container width and height', -> cont = createCont(true) expect(nv.utils.sanitizeHeight(null, cont)).to.equal 404 expect(nv.utils.sanitizeWidth(null, cont)).to.equal 964 it 'uses given width and height', -> cont = createCont(true) expect(nv.utils.sanitizeHeight(408, cont)).to.equal 408 expect(nv.utils.sanitizeWidth(968, cont)).to.equal 968 describe 'Available Container Height and Width', -> it 'calculates height and width properly', -> cont = createCont(true) m = { left: 5, right: 6, top: 7, bottom: 8 } expect(nv.utils.availableHeight(300, cont, m)).to.equal 285 expect(nv.utils.availableWidth(300, cont, m)).to.equal 289 expect(nv.utils.availableHeight(0, cont, m)).to.equal 389 expect(nv.utils.availableWidth(0, cont, m)).to.equal 953 describe 'Interactive Bisect', -> it 'works with no accessor', -> list = [{ x:0 },{ x:1 },{ x:1 },{ x:2 },{ x:3 },{ x:5 },{ x:8 },{ x:13 },{ x:21 },{ x:34 }] expect(nv.interactiveBisect(list,7)).to.equal 6 runTest = (list, searchVal, accessor = null)-> xAcc = unless accessor? (d)-> d else accessor nv.interactiveBisect list, searchVal, xAcc it 'exists', -> expect(nv.interactiveBisect).to.exist it 'returns null when no array', -> expect(nv.interactiveBisect('bad', 'a')).to.equal null it 'basic test', -> expect(runTest([0,1,2,3,4,5], 3)).to.equal 3 it 'zero bound', -> expect(runTest([0,1,2,3,4,5], 0)).to.equal 0 it 'length bound', -> expect(runTest([0,1,2,3,4,5], 5)).to.equal 5 it 'negative number', -> expect(runTest([0,1,2,3,4,5], -4)).to.equal 0 it 'past the end', -> expect(runTest([0,1,2,3,4,5], 10)).to.equal 5 it 'floating point number 1', -> expect(runTest([0,1,2,3,4,5], 0.34)).to.equal 0 it 'floating point number 2', -> expect(runTest([0,1,2,3,4,5], 1.50001)).to.equal 2 it 'fibonacci - existing', -> list = [0,1,1,2,3,5,8,13,21,34] expect(runTest(list,8)).to.equal 6 it 'fibonacci - inbetween item (left)', -> list = [0,1,1,2,3,5,8,13,21,34] expect(runTest(list,15)).to.equal 7 it 'fibonacci - inbetween item (right)', -> list = [0,1,1,2,3,5,8,13,21,34] expect(runTest(list,20)).to.equal 8 it 'empty array', -> expect(runTest([],4)).to.equal 0 it 'single element array', -> expect(runTest([0],0)).to.equal 0 it 'single element array - negative bound', -> expect(runTest([0],-4)).to.equal 0 it 'single element array - past the end', -> expect(runTest([0],1)).to.equal 0 describe 'NoData Chart Clearing', -> sampleData1 = [ key: 'Series 1' values: [ [-1,-1] [0,0] [1,1] [2,2] ] ] options = x: (d)-> d[0] y: (d)-> d[1] margin: top: 30 right: 20 bottom: 50 left: 75 color: nv.utils.defaultColor() height: 400 width: 800 showLegend: true showXAxis: true showYAxis: true rightAlignYAxis: true useInteractiveGuideline: true noData: 'No Data Available' duration: 0 clipEdge: false isArea: (d)-> d.area defined: (d)-> true interpolate: 'linear' it 'shows no data text', -> builder = new ChartBuilder nv.models.lineChart() builder.build options, [] noData = builder.$ '.nv-noData' noData[0].textContent.should.equal 'No Data Available' it 'clears chart objects for no data', -> builder = new ChartBuilder nv.models.lineChart() builder.buildover options, sampleData1, [] groups = builder.$ 'g' groups.length.should.equal 0, 'removes chart components'