nvd3
Version:
A reusable charting library written in d3.js
121 lines (97 loc) • 3.75 kB
text/coffeescript
describe 'NVD3', ->
describe 'Legend', ->
sampleData1 = [
{"values":[{"x":1,"y":2},{"x":3,"y":4},{"x":5,"y":6}],"key":"key 1"}
{"values":[{"x":7,"y":8},{"x":9,"y":10},{"x":11,"y":12}],"key":"key 2"}
{"values":[{"x":13,"y":14},{"x":15,"y":16},{"x":17,"y":18}],"key":"key 3"}
]
sampleData2 = [
key: 'series 1'
,
key: 'series 2'
,
key: 'series 3'
,
key: 'series 4'
]
legendOptions =
margin:
top: 0
right: 0
bottom: 0
left: 0
width: 100
height: 100
key: (d) -> d.key
color: nv.utils.defaultColor()
align: true
rightAlign: false
updateState: true
radioButtonMode: false
builder = null
beforeEach ->
builder = new ChartBuilder nv.models.legend()
builder.build legendOptions, sampleData1
legend = builder.model
for opt, val of legendOptions
legend[opt](val)
afterEach ->
builder.teardown()
it 'api check', ->
legend = builder.model
for opt, val of legendOptions
should.exist legend[opt](), "#{opt} can be called"
it 'exists', ->
legend = builder.$('.nvd3.nv-legend')
should.exist legend[0], '.nvd3.nv-legend'
describe 'appends items correctly', ->
for item, i in sampleData1
do (item, i) ->
key = item.key
it "'#{key}' text, position and structure", ->
nvSeries = builder.$(".nvd3.nv-legend .nv-series")[i]
transformCalculated = "translate(0,#{i*20+5})"
transform = nvSeries.getAttribute 'transform'
transform.should.be.equal transformCalculated
nvLegendSymbol = nvSeries.querySelector('.nv-legend-symbol')
nvLegendText = nvSeries.querySelector('.nv-legend-text')
should.exist nvLegendSymbol
should.exist nvLegendText
nvLegendText.textContent.should.be.equal key
describe 'clicking and double clicking', ->
it 'clicking one legend turns it off', ->
legendItems = builder.$ '.nv-legend .nv-series'
legendItems.length.should.equal 3
clickFn = d3.select(legendItems[0]).on 'click'
clickFn(sampleData1[0])
sampleData1[0].disabled.should.equal true
clickFn(sampleData1[1])
sampleData1[1].disabled.should.equal true
clickFn(sampleData1[2])
sampleData1[0].disabled.should.equal false
sampleData1[1].disabled.should.equal false
sampleData1[2].disabled.should.equal false
it 'double clicking legend keeps only one on', ->
legendItems = builder.$ '.nv-legend .nv-series'
clickFn = d3.select(legendItems[0]).on 'dblclick'
clickFn(sampleData1[0])
sampleData1[0].disabled.should.equal false
sampleData1[1].disabled.should.equal true
sampleData1[2].disabled.should.equal true
it 'updating legend data does not break double click (issue 784)', ->
builder.updateData sampleData2
legendItems = builder.$ '.nv-legend .nv-series'
clickFn = d3.select(legendItems[0]).on 'dblclick'
clickFn(sampleData2[0])
sampleData2[0].disabled.should.equal false
sampleData2[1].disabled.should.equal true
sampleData2[2].disabled.should.equal true
sampleData2[3].disabled.should.equal true
it 'legend padding', ->
builder = new ChartBuilder nv.models.legend()
builder.build {padding: 40}, sampleData1
legendItems = builder.$ '.nv-legend .nv-series'
xSpacing = [0, 80, 160]
for legend,i in legendItems
transform = legend.getAttribute 'transform'
transform.should.equal "translate(#{xSpacing[i]},5)"