Bit = mojs.Bit
-ns = 'http://www.w3.org/2000/svg'
-svg = document.createElementNS?(ns, 'svg')
-bit = new Bit ctx: svg
-
-describe 'Bit', ->
- describe 'context', ->
- it 'context passed should be real svg node', ->
- expect(-> new Bit).toThrow()
- expect(-> bit = new Bit ctx: 'a').toThrow()
- expect(-> bit = new Bit ctx: svg).not.toThrow()
- describe 'methods', ->
- it 'should have vars method', ->
- expect(bit.vars).toBeDefined()
- describe 'render method', ->
- it 'should have render method', ->
- expect(bit.render).toBeDefined()
- it 'should call render method on init', ->
- expect(bit.isRendered).toBe(true)
- it 'should add self to context', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg
- expect(svg.firstChild).toBeTruthy()
- it 'should run draw method', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg
- spyOn bit, 'draw'
- bit.render()
- expect(bit.draw).toHaveBeenCalled()
- it 'should not run draw method if isDrawLess option passed', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit
- ctx: svg
- isDrawLess: true
- spyOn bit, 'draw'
- bit.render()
- expect(bit.draw).not.toHaveBeenCalled()
- describe 'draw method ->', ->
- it 'should set attributes', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit
- ctx: svg
- x: 20
- y: 20
- stroke: '#0f0'
- 'stroke-width': 3
- fill: '#0ff'
- 'stroke-dasharray': 100
- 'stroke-dashoffset': 50
- angle: 45
- stroke = bit.el.getAttribute 'stroke'
- strokeWidth = bit.el.getAttribute 'stroke-width'
- fill = bit.el.getAttribute 'fill'
- strokeDasharray = bit.el.getAttribute 'stroke-dasharray'
- strokeOffset = bit.el.getAttribute 'stroke-dashoffset'
- transform = bit.el.getAttribute 'transform'
- isTransform = transform is 'rotate(45, 20, 20)'
- isIE9Transform = transform is 'rotate(45 20 20)'
- expect(stroke) .toBe '#0f0'
- expect(strokeWidth) .toBe '3'
- expect(fill) .toBe '#0ff'
- expect(strokeDasharray) .toBe '100'
- expect(strokeOffset) .toBe '50'
- expect(isTransform or isIE9Transform).toBe true
- it 'should save its state', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit
- ctx: svg
- x: 20
- y: 20
- stroke: '#0f0'
- 'stroke-width': 3
- 'fill': '#0ff'
- 'fill-opacity': '#f0f'
- 'stroke-dasharray': 100
- 'stroke-dashoffset': 50
- 'stroke-linecap': 'round'
- 'stroke-opacity': .5
- angle: 45
- bit.draw()
- expect(bit.state['stroke']) .toBe '#0f0'
- expect(bit.state['stroke-width']) .toBe 3
- expect(bit.state['stroke-opacity']) .toBe .5
- expect(bit.state['stroke-dasharray']) .toBe 100
- expect(bit.state['stroke-dashoffset']).toBe 50
- expect(bit.state['stroke-linecap']) .toBe 'round'
- expect(bit.state['fill']) .toBe '#0ff'
- expect(bit.state['fill-opacity']) .toBe '#f0f'
- expect(bit.state['transform']) .toBe 'rotate(45, 20, 20)'
-
- it 'should not set attribute if property not changed ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, 'stroke-width': 3
- spyOn bit.el, 'setAttribute'
- bit.draw()
- expect(bit.el.setAttribute).not.toHaveBeenCalled()
-
- it 'should set attribute if property changed ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, 'stroke-width': 3
- spyOn bit.el, 'setAttribute'
- bit.setProp 'stroke-width': 4
- bit.draw()
- expect(bit.el.setAttribute).toHaveBeenCalled()
-
- describe 'setAttrsIfChanged method ->', ->
- it 'should not set attribute if property not changed ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, 'stroke-width': 3
- spyOn bit.el, 'setAttribute'
- bit.props['stroke-width'] = 3
- bit.setAttrsIfChanged 'stroke-width'
- expect(bit.el.setAttribute).not.toHaveBeenCalled()
-
- it 'should set attribute if property changed ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, 'stroke-width', 3
- spyOn bit.el, 'setAttribute'
- bit.props['stroke-width'] = 4
- bit.setAttrsIfChanged 'stroke-width'
- expect(bit.el.setAttribute).toHaveBeenCalled()
-
- it 'should save the current value to state if changed ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, 'stroke-width', 2
- bit.props['stroke-width'] = 30
- bit.setAttrsIfChanged 'stroke-width'
- expect(bit.state['stroke-width']).toBe 30
-
- it 'should recieve value to set ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, radius: 20
- bit.setAttrsIfChanged 'radius', 30
- expect(bit.state['radius']).toBe 30
-
- it 'should work with values hash ->', ->
- svg = document.createElementNS?(ns, 'svg')
- bit = new Bit ctx: svg, radius: 20
- bit.setAttrsIfChanged radius: 30, stroke: 'orange'
- expect(bit.state['radius']).toBe 30
- expect(bit.state['stroke']).toBe 'orange'
expect(bit.el.getAttribute('rx')) .toBe 30 -expect(bit.el.getAttribute('stroke')).toBe 'orange'
-