Current section
Files
Jump to
Current section
Files
test/css_parser_test.exs
defmodule CssParserTest do
use ExUnit.Case
# doctest CssParser
@css """
/* first comment */ p {font-weight: bold;} /* second comment */
/*
* comment one here
*/
h4, h3 {
color: blue;
font-size: 20px;
}
h1{
color: red;
font-size: 25px;
}
/* inner comment */
@media (max-width: 600px) {
.sidebar { display: none;}
.main {display: visible;
}
}
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2"),
url("/fonts/OpenSans-Regular-webfont.woff") format("woff");
}
@font-face {
font-family: "SwitzeraADF";
src
: url("SwitzeraADF-Regular.eot");
src: url("SwitzeraADF-Regular.eot?#iefix") format("embedded-opentype"),
url("SwitzeraADF-Regular.woff") format("woff"),
url("SwitzeraADF-Regular.ttf") format("truetype"),
url("SwitzeraADF-Regular.svg#switzera_adf_regular") format("svg");
unicode-range: U+590-5FF;
}
"""
@css1 "/* comment here */\n h1, h4\n{color: red;\nfont-size: 25px;\n}"
describe "css parsing" do
test "removes comments" do
assert(
"/* first comment */ p {font-weight: bold;} /* second comment */"
|> CssParser.parse()
|> Kernel.==([%{"rules" => "font-weight: bold;", "selectors" => "p", "type" => "rules"}])
)
end
test "returns rules, selectors and type" do
[map_result] = result = CssParser.parse(@css1)
assert is_list(result)
assert Map.get(map_result, "rules") == "color: red;font-size: 25px;"
assert Map.get(map_result, "selectors") == "h1, h4"
assert Map.get(map_result, "type") == "rules"
end
test "returns font-face type with descriptors" do
font_faces =
CssParser.parse(@css)
|> Enum.filter(&(Map.get(&1, "type") =~ "font"))
assert length(font_faces) == 2
assert [%{"descriptors" => _, "type" => "font-face"}, _] = font_faces
end
test "reads file and parses if of valid source" do
assert CssParser.parse("invalid/css/file/path", source: :file) ==
[error: "File invalid/css/file/path not found."]
assert :ok = File.write("/tmp/testing.css", @css)
media_rules =
CssParser.parse("/tmp/testing.css", source: :file)
|> Enum.find(&(Map.get(&1, "type") =~ "media"))
assert media_rules ==
%{
"children" => [
%{"rules" => "display: none;", "selectors" => ".sidebar", "type" => "rules"}
],
"selectors" => "@media (max-width: 600px)",
"type" => "media"
}
on_exit(fn -> File.rm!("/tmp/testing.css") end)
end
end
end