Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
<title>CSS Test: handling of invalid url() functions</title>
<link rel="author" title="L. David Baron" href="https://dbaron.org/" />
<link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" />
<meta name="flags" content="invalid" />
<style type="text/css">
div { background-color: red }
</style>
<style type="text/css">
/* not a URI token, but handled according to rules for parsing errors */
#one { background: url(foo"bar") }
#one { background-color: green; }
</style>
<style type="text/css">
/* not a URI token, but handled according to rules for parsing errors */
#foo { background: url(foo"bar
) }
#two { background-color: green; }
</style>
<style type="text/css">
/* not a URI token; bad-url token is consumed until the first closing ) */
#foo { background: url(foo"bar) }
#three { background-color: green; }
</style>
<style type="text/css">
/* not a URI token; bad-url token is consumed until the first closing ) */
#four { background-color: green; }
#foo { background: url(foo"bar) }
) }
#four { background-color: red; }
</style>
<style type="text/css">
/* not a URI token; the unterminated string ends at end of line, so
the brace never matches */
#five { background-color: green; }
#foo { background: url("bar) }
#five { background-color: red; }
</style>
<style type="text/css">
/* not a URI token; the unterminated string ends at end of line */
#foo { background: url("bar) }
) }
#six { background-color: green; }
</style>
<style type="text/css">
/* not a URI token, but brace matching should work */
#seven { background: url(()); background-color: green; }
</style>
<style type="text/css">
/* not a URI token, but brace matching should work */
#eight { background: url([{}]); background-color: green; }
</style>
<style type="text/css">
/* not a URI token, but brace matching should work */
#nine { background: url([)]); background-color: green; }
</style>
<style type="text/css">
/* perfectly good URI token (image is a 404, though) */
#ten { background: url({) green; }
</style>
<style type="text/css">
/* perfectly good URI token (image is a 404, though) */
#eleven { background: url([) green; }
</style>
<style type="text/css">
/* not a URI token; bad-url token is consumed until the first closing )
so the brace immediately after it closes the declaration block */
#twelve { background-color: green; }
#twelve { background: url(}{""{)}); background-color: red; }
</style>
<style type="text/css">
/* invalid URI token absorbs the [ */
#thirteen { background: url([""); background-color: green; }
</style>
<style type="text/css">
/* not a URI token; bad-url token is consumed until the first closing ) */
#foo { background: url(() }
#fourteen { background-color: green; }
</style>
<!-- The next three tests test that invalid URI tokens absorb [ and { -->
<style type="text/css">
#foo { background: url(a()); }
#fifteen { background-color: green }
</style>
<style type="text/css">
#foo { background: url([()); }
#sixteen { background-color: green }
</style>
<style type="text/css">
#foo { background: url({()); }
#seventeen { background-color: green }
</style>
<!-- Test that url() starting with a quote and without its closing ')' eaten
by any of the tokens that come after the initial quote doesn't eat the rest of
the stylesheet. In particular, this checks whether, once we reach the end of
the string and discover garbage after it, we tokenize the garbage or just skip
to the nearest ')'. -->
<style type="text/css">
#eighteen { background-color: red; }
#foo { background: url('('')'); }
#eighteen { background-color: green; }
</style>
<!-- And the same thing with double quotes -->
<style type="text/css">
#nineteen { background-color: red; }
#foo { background: url("("')'); }
#nineteen { background-color: green; }
</style>
</head>
<body>
<div id="one">This should have a green background</div>
<div id="two">This should have a green background</div>
<div id="three">This should have a green background</div>
<div id="four">This should have a green background</div>
<div id="five">This should have a green background</div>
<div id="six">This should have a green background</div>
<div id="seven">This should have a green background</div>
<div id="eight">This should have a green background</div>
<div id="nine">This should have a green background</div>
<div id="ten">This should have a green background</div>
<div id="eleven">This should have a green background</div>
<div id="twelve">This should have a green background</div>
<div id="thirteen">This should have a green background</div>
<div id="fourteen">This should have a green background</div>
<div id="fifteen">This should have a green background</div>
<div id="sixteen">This should have a green background</div>
<div id="seventeen">This should have a green background</div>
<div id="eighteen">This should have a green background</div>
<div id="nineteen">This should have a green background</div>
</body>
</html>