Files
postcss/test/node.coffee
T

119 lines
3.2 KiB
CoffeeScript

AtRule = require('../lib/at-rule')
Node = require('../lib/node')
Root = require('../lib/root')
Rule = require('../lib/rule')
Raw = require('../lib/raw')
describe 'Node', ->
describe '.prop()', ->
it 'defines virtual property', ->
class A extends Node
@prop 'test',
set: (v) -> @setted = v
get: -> 1
a = new A()
a.test.should.eql(1)
a.test = 2
a.setted.should.eql(2)
describe '.raw()', ->
class B extends Node
@raw 'one'
it 'creates trimmed/raw property', ->
b = new B()
(b.one == undefined).should.true
b.one = new Raw('trim', 'raw')
b.one.should.eql('trim')
b._one.toString().should.eql('raw')
b.one = 'trim1'
b.one.should.eql('trim1')
b._one.toString().should.eql('trim1')
it 'works without magic', ->
b = new B()
b.one = '1'
b.one.should.eql('1')
b._one.toString().should.eql('1')
describe 'removeSelf()', ->
it 'removes node from parent', ->
rule = new Rule(selector: 'a')
rule.append(prop: 'color', value: 'black')
rule.decls[0].removeSelf()
rule.decls.should.be.empty
describe 'clone()', ->
it 'clones nodes', ->
rule = new Rule(selector: 'a')
rule.append(prop: 'color', value: '/**/black', before: '')
clone = rule.clone()
clone.append(prop: 'display', value: 'none')
clone.decls[0].parent.should.exactly clone
rule.decls[0].parent.should.exactly rule
rule.toString().should.eql('a {color: /**/black}')
clone.toString().should.eql('a {color: /**/black;display: none}')
it 'overrides properties', ->
clone = ( new Rule(selector: 'a') ).clone(selector: 'b')
clone.selector.should.eql('b')
describe 'toJSON()', ->
it 'cleans parents inside', ->
rule = new Rule(selector: 'a')
rule.append(prop: 'color', value: 'b')
json = rule.toJSON()
(json.parent == undefined).should.be.true
(json.decls[0].parent == undefined).should.be.true
JSON.stringify(rule).should.eql('{"type":"rule","decls":[' +
'{"type":"decl","prop":"color","_value":"b"}' +
'],"_selector":"a"}')
describe 'style()', ->
it 'uses defaults without parent', ->
rule = new Rule(selector: 'a')
rule.style().should.eql { between: ' ', after: '' }
it 'uses defaults for artificial nodes', ->
root = new Root()
root.append(new Rule(selector: 'a'))
root.first.style().should.eql { between: ' ', after: '' }
it 'uses nodes style', ->
root = new Root()
root.append(new Rule(selector: 'a', between: '', after: ''))
root.first.style().should.eql { between: '', after: '' }
it 'clones style from first node', ->
root = new Root()
root.append(new Rule(selector: 'a', between: '', after: ' ' ))
root.append(new Rule(selector: 'b' ))
root.last.style().should.eql { between: '', after: ' ' }
it 'uses different style for different node style type', ->
root = new Root()
root.append(new AtRule(name: 'page', rules: []))
root.append(new AtRule(name: 'import'))
root.first.style().should.eql { between: ' ', after: '' }
root.last.style().should.eql { between: '' }