require 'test_helper' class CssSplitterTest < ActiveSupport::TestCase test "#count_selectors" do assert_equal 2937, CssSplitter::Splitter.count_selectors('test/unit/too_many_selectors.css') end test "#count_selectors_of_rule" do assert_equal 1, CssSplitter::Splitter.count_selectors_of_rule('foo { color: baz; }') assert_equal 2, CssSplitter::Splitter.count_selectors_of_rule('foo, bar { color: baz; }') # split_string_into_rules splits the closing brace of a media query into its own rule assert_equal 0, CssSplitter::Splitter.count_selectors_of_rule('}') end # --- split_string_into_rules --- test '#split_string_into_rules' do simple = "a{foo:bar;}b{baz:qux;}" assert_equal ["a{foo:bar;}", "b{baz:qux;}"], CssSplitter::Splitter.split_string_into_rules(simple) end test '#split_string_into_rules for single line comments' do multi_line = "a{foo:bar;} /* comment p{bar:foo;} */ b{baz:qux;}" assert_equal ["a{foo:bar;}", " b{baz:qux;}"], CssSplitter::Splitter.split_string_into_rules(multi_line) end test '#split_string_into_rules for multiline comments' do multi_line = "a{foo:bar;}\n/*\nMultiline comment p{bar:foo;}\n*/\nb{baz:qux;}" assert_equal ["a{foo:bar;}", "\n\nb{baz:qux;}"], CssSplitter::Splitter.split_string_into_rules(multi_line) end test '#split_string_into_rules for strings with protocol independent urls' do simple = "a{foo:url(//assets.server.com);}b{bar:url(//assets/server.com);}" assert_equal ["a{foo:url(//assets.server.com);}", "b{bar:url(//assets/server.com);}"], CssSplitter::Splitter.split_string_into_rules(simple) end test '#split_string_into_rules containing media queries' do has_media = "a{foo:bar;}@media print{b{baz:qux;}c{quux:corge;}}d{grault:garply;}" assert_equal ["a{foo:bar;}", "@media print{b{baz:qux;}", "c{quux:corge;}", "}", "d{grault:garply;}"], CssSplitter::Splitter.split_string_into_rules(has_media) end test "#split_string_into_rules containing keyframes" do has_keyframes = "a{foo:bar;}@keyframes rubes{from{baz:qux;}50%{quux:corge;}}d{grault:garply;}" assert_equal ["a{foo:bar;}", "@keyframes rubes{from{baz:qux;}50%{quux:corge;}}", "d{grault:garply;}"], CssSplitter::Splitter.split_string_into_rules(has_keyframes) end # --- extract_charset --- test '#extract_charset with no charset' do first_rule = ".foo { color: black; }" assert_equal [nil, first_rule], CssSplitter::Splitter.send(:extract_charset, first_rule) end test '#extract_charset with charset' do first_rule = '@charset "UTF-8"; .foo { color: black; }' assert_equal ['@charset "UTF-8";', ' .foo { color: black; }'], CssSplitter::Splitter.send(:extract_charset, first_rule) end # --- extract_media --- test '#extract_media with no media block' do first_rule = ".foo { color: black; }" assert_equal nil, CssSplitter::Splitter.send(:extract_media, first_rule) end test '#extract_media with media block' do first_rule = <