require 'test/unit' require File.dirname(__FILE__) + '/../lib/css_dryer' class TestCssDryer < Test::Unit::TestCase include CssDryer def test_should_build_structure_without_nesting css = < [ ' k00: v00;', ' k01: v01;' ] }, # { 's1' => [ ' k10: v10;', # ' /* comment 1 */', # { 's2' => [ 'k20: v20;', 'k21: v21;'] }, # ' k11: v11;', # { 's3' => [ ' k30: v30; ' ] } } ] # ] output = nested_css_to_structure(css) assert_equal 3, output.length assert_equal '/* comment 0 */', output.shift hsh = output.shift assert_equal 1, hsh.length assert hsh.multiline assert_equal 's0', hsh.keys.first ary = hsh.values.first assert_equal 2, ary.length assert_equal ' k00: v00;', ary.shift assert_equal ' k01: v01;', ary.shift hsh = output.shift assert_equal 1, hsh.length assert hsh.multiline assert_equal 's1', hsh.keys.first ary = hsh.values.first assert_equal 5, ary.length assert_equal ' k10: v10;', ary.shift assert_equal ' /* comment 1 */', ary.shift s2_hsh = ary.shift assert_equal 1, s2_hsh.length assert s2_hsh.multiline assert_equal 's2', s2_hsh.keys.first s2_ary = s2_hsh.values.first assert_equal 2, s2_ary.length assert_equal 'k20: v20;', s2_ary.shift assert_equal 'k21: v21;', s2_ary.shift assert_equal ' k11: v11;', ary.shift s3_hsh = ary.shift assert_equal 1, s3_hsh.length assert ! s3_hsh.multiline assert_equal 's3', s3_hsh.keys.first s3_ary = s3_hsh.values.first assert_equal 1, s3_ary.length assert_equal ' k30: v30; ', s3_ary.shift end def test_should_build_structure_with_triple_nesting css = < [ ' k00: v00;', ' k01: v01;' ] }, # { 's1' => [ ' k10: v10;', # ' /* comment 1 */', # { 's2' => [ 'k20: v20;', # 'k21: v21;', # { 's3' => [ 'k30: v30;' ] } ] }, # ' k11: v11;' ] # ] output = nested_css_to_structure(css) assert_equal 3, output.length assert_equal '/* comment 0 */', output.shift hsh = output.shift assert_equal 1, hsh.length assert hsh.multiline assert_equal 's0', hsh.keys.first ary = hsh.values.first assert_equal 2, ary.length assert_equal ' k00: v00;', ary.shift assert_equal ' k01: v01;', ary.shift hsh = output.shift assert_equal 1, hsh.length assert hsh.multiline assert_equal 's1', hsh.keys.first ary = hsh.values.first assert_equal 4, ary.length assert_equal ' k10: v10;', ary.shift assert_equal ' /* comment 1 */', ary.shift hsh = ary.shift assert_equal 1, hsh.length assert hsh.multiline assert_equal 's2', hsh.keys.first ary_prime = hsh.values.first assert_equal 3, ary_prime.length assert_equal 'k20: v20;', ary_prime.shift assert_equal 'k21: v21;', ary_prime.shift hsh = ary_prime.shift assert_equal 1, hsh.length assert ! hsh.multiline assert_equal 's3', hsh.keys.first assert_equal 'k30: v30;', hsh.values.first.shift assert_equal ' k11: v11;', ary.shift end def test_should_convert_type_selectors_aka_no_nesting_structure_to_css structure = [] structure << '/* comment 0 */' hsh = StyleHash['s0' => [ ' k00: v00;', ' k01: v01;' ] ] hsh.multiline = true structure << hsh structure << '/* comment 1 */' structure << StyleHash['s1' => [ ' k10: v10; ' ] ] hsh = StyleHash['s2' => [ ' k20: v20;', ' /* comment 2 */', ' k21: v21;' ] ] hsh.multiline = true structure << hsh assert_equal < [ ' k00: v00;', ' k01: v01;' ] ] hsh_s0.multiline = true structure << hsh_s0 hsh_s3 = StyleHash['s3' => [ ' k30: v30; ' ] ] hsh_s2 = StyleHash['s2' => [ 'k20: v20;', 'k21: v21;', hsh_s3 ] ] hsh_s2.multiline = true hsh_s1 = StyleHash['s1' => [ ' k10: v10;', ' /* comment 1 */', hsh_s2, ' k11: v11;' ] ] hsh_s1.multiline = true structure << hsh_s1 assert_equal < %w( foo ) ] assert hsh.has_non_style_hash_children hsh.value.pop hsh.value << StyleHash.new assert ! hsh.has_non_style_hash_children end def test_should_handle_class_selectors input = < p { color: yellow; > b { font-variant: small-caps; } } } END output = < p { color: yellow; } div > p > b { font-variant: small-caps; } END assert_equal output, process(input) end def test_should_handle_adjacent_selectors input = <