test/test_parse_properties.rb in crass-0.1.0 vs test/test_parse_properties.rb in crass-0.2.0

- old
+ new

@@ -38,19 +38,34 @@ assert_equal("a", prop[:name]) assert_equal("b", prop[:value]) assert_equal(false, prop[:important]) assert_tokens("a:b;", prop[:tokens]) + assert_equal([ + {:node=>:ident, :pos=>2, :raw=>"b", :value=>"b"} + ], prop[:children]) + assert_tokens(" ", tree[1], 4) prop = tree[2] assert_equal(:property, prop[:node]) assert_equal("c", prop[:name]) assert_equal("d 42", prop[:value]) assert_equal(true, prop[:important]) assert_tokens("c:d 42!important;", prop[:tokens], 5) + assert_equal([ + {:node=>:ident, :pos=>7, :raw=>"d", :value=>"d"}, + {:node=>:whitespace, :pos=>8, :raw=>" "}, + {:node=>:number, + :pos=>9, + :raw=>"42", + :repr=>"42", + :type=>:integer, + :value=>42} + ], prop[:children]) + assert_tokens("\n", tree[3], 22) end it 'should parse at-rules even though they may be invalid in the given context' do tree = parse("@import 'foo.css'; a:b; @import 'bar.css'") @@ -69,10 +84,14 @@ assert_equal("a", prop[:name]) assert_equal("b", prop[:value]) assert_equal(false, prop[:important]) assert_tokens("a:b;", prop[:tokens], 19) + assert_equal([ + {:node=>:ident, :pos=>21, :raw=>"b", :value=>"b"} + ], prop[:children]) + assert_tokens(" ", tree[3], 23) rule = tree[4] assert_equal(:at_rule, rule[:node]) assert_equal("import", rule[:name]) @@ -113,10 +132,13 @@ assert_equal(:property, prop[:node]) assert_equal("a", prop[:name]) assert_equal("b", prop[:value]) assert_equal(false, prop[:important]) assert_tokens("a:b;", prop[:tokens], 24) + assert_equal([ + {:node=>:ident, :pos=>26, :raw=>"b", :value=>"b"} + ], prop[:children]) assert_tokens("; ", tree[3..4], 28) rule = tree[5] assert_equal(:at_rule, rule[:node]) @@ -168,8 +190,74 @@ assert_equal(:simple_block, block[:node]) assert_equal("{", block[:start]) assert_equal("}", block[:end]) assert_equal([], block[:value]) assert_tokens("{", block[:tokens], 47) + end + + it 'should parse values containing functions' do + tree = parse("content: attr(data-foo) \" \";") + + assert_equal([ + {:node=>:property, + :name=>"content", + :value=>"attr(data-foo) \" \"", + :important=>false, + :children=> + [{:node=>:whitespace, :pos=>8, :raw=>" "}, + {:node=>:function, :pos=>9, :raw=>"attr(", :value=>"attr"}, + {:node=>:ident, :pos=>14, :raw=>"data-foo", :value=>"data-foo"}, + {:node=>:")", :pos=>22, :raw=>")"}, + {:node=>:whitespace, :pos=>23, :raw=>" "}, + {:node=>:string, :pos=>24, :raw=>"\" \"", :value=>" "}], + :tokens=> + [{:node=>:ident, :pos=>0, :raw=>"content", :value=>"content"}, + {:node=>:colon, :pos=>7, :raw=>":"}, + {:node=>:whitespace, :pos=>8, :raw=>" "}, + {:node=>:function, :pos=>9, :raw=>"attr(", :value=>"attr"}, + {:node=>:ident, :pos=>14, :raw=>"data-foo", :value=>"data-foo"}, + {:node=>:")", :pos=>22, :raw=>")"}, + {:node=>:whitespace, :pos=>23, :raw=>" "}, + {:node=>:string, :pos=>24, :raw=>"\" \"", :value=>" "}, + {:node=>:semicolon, :pos=>27, :raw=>";"}]} + ], tree) + end + + it 'should parse values containing nested functions' do + tree = parse("width: expression(alert(1));") + + assert_equal([ + {:node=>:property, + :name=>"width", + :value=>"expression(alert(1))", + :important=>false, + :children=> + [{:node=>:whitespace, :pos=>6, :raw=>" "}, + {:node=>:function, :pos=>7, :raw=>"expression(", :value=>"expression"}, + {:node=>:function, :pos=>18, :raw=>"alert(", :value=>"alert"}, + {:node=>:number, + :pos=>24, + :raw=>"1", + :repr=>"1", + :type=>:integer, + :value=>1}, + {:node=>:")", :pos=>25, :raw=>")"}, + {:node=>:")", :pos=>26, :raw=>")"}], + :tokens=> + [{:node=>:ident, :pos=>0, :raw=>"width", :value=>"width"}, + {:node=>:colon, :pos=>5, :raw=>":"}, + {:node=>:whitespace, :pos=>6, :raw=>" "}, + {:node=>:function, :pos=>7, :raw=>"expression(", :value=>"expression"}, + {:node=>:function, :pos=>18, :raw=>"alert(", :value=>"alert"}, + {:node=>:number, + :pos=>24, + :raw=>"1", + :repr=>"1", + :type=>:integer, + :value=>1}, + {:node=>:")", :pos=>25, :raw=>")"}, + {:node=>:")", :pos=>26, :raw=>")"}, + {:node=>:semicolon, :pos=>27, :raw=>";"}]} + ], tree) end end end