gecko/layout/style/test/test_parse_url.html
L. David Baron 34651d06fe Include the opening "url(" in URL and Bad_URL tokens (though the latter do not have a close paren), and make tokenization of url() function be noncontextual, as required by CSS. (Bug 604179, patch 7) r=bzbarsky
Note that tokenization of url-prefix() and domain() remains contextual.

Needed to help CSS 2.1 meet Proposed Recommendation entrance criteria.
2011-03-11 11:29:45 -06:00

187 lines
6.5 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=473914
-->
<head>
<title>Test for Bug 473914</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=473914">Mozilla Bug 473914</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 473914 **/
var div = document.getElementById("content");
// This test relies on normalization (insertion of quote marks) that
// we're not really guaranteed to continue doing in the future.
div.style.listStyleImage = 'url(http://example.org/**/)';
is(div.style.listStyleImage, 'url("http://example.org/**/")',
"not treated as comment");
div.style.listStyleImage = 'url("http://example.org/**/")';
is(div.style.listStyleImage, 'url("http://example.org/**/")',
"not treated as comment");
div.style.listStyleImage = 'url(/**/foo)';
is(div.style.listStyleImage, 'url("/**/foo")',
"not treated as comment");
div.style.listStyleImage = 'url("/**/foo")';
is(div.style.listStyleImage, 'url("/**/foo")',
"not treated as comment");
div.style.listStyleImage = 'url(/**/)';
is(div.style.listStyleImage, 'url("/**/")',
"not treated as comment");
div.style.listStyleImage = 'url("/**/")';
is(div.style.listStyleImage, 'url("/**/")',
"not treated as comment");
// Tests from Alfred Keyser's patch in bug 337287 (modified by dbaron)
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good /*bad comment*/)';
is(div.style.listStyleImage, 'url("bad")',
"comment not allowed inside token");
div.style.listStyleImage = 'url(good /*bad comments*/ /*Hello*/)';
is(div.style.listStyleImage, 'url("bad")',
"comment not allowed inside token");
div.style.listStyleImage = 'url(good/*commentaspartofurl*/)';
is(div.style.listStyleImage, 'url("good/*commentaspartofurl*/")',
"comment-like syntax not comment inside of url");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good/**/ /*secondcommentcanbeskipped*/ )';
is(div.style.listStyleImage, 'url("bad")',
"comment not allowed inside token");
div.style.listStyleImage = 'url(/*partofurl*/good)';
is(div.style.listStyleImage, 'url("/*partofurl*/good")',
"comment not parsed as part of url");
div.style.listStyleImage = 'url(good';
is(div.style.listStyleImage, 'url("good")',
"URL ending with eof not correctly handled");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good /*)*/';
is(div.style.listStyleImage, 'url("bad")',
"comment not allowed inside token");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good /*)*/ tokenaftercommentevenwithclosebracketisinvalid';
is(div.style.listStyleImage, 'url("bad")',
"comment not allowed inside token");
div.style.listStyleImage = 'url(bad)';
div.style.listStyleImage = 'url("good"';
is(div.style.listStyleImage, 'url("good")',
"URL as string without close bracket");
div.style.listStyleImage = 'url(bad)';
div.style.listStyleImage = 'url("good';
is(div.style.listStyleImage, 'url("good")',
"URL as string without closing quote");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good notgood';
is(div.style.listStyleImage, 'url("bad")',
"second token should make url invalid");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good(notgood';
is(div.style.listStyleImage, 'url("bad")',
"open bracket in url not recognized as invalid");
var longurl = '';
for (i=0;i<1000;i++) {
longurl = longurl + 'verylongurlindeed_thequickbrownfoxjumpsoverthelazydoq';
}
div.style.listStyleImage = 'url(' + longurl;
is(div.style.listStyleImage, 'url("' + longurl + '")',
"very long url not correctly parsed");
// Additional tests from
// https://bugzilla.mozilla.org/show_bug.cgi?id=337287#c21
div.style.listStyleImage = 'url(good/*)';
is(div.style.listStyleImage, 'url("good/*")',
"URL containing comment start is valid");
div.style.listStyleImage = 'url("bad")';
div.style.listStyleImage = 'url(good bad)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(\\g b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url( \\g b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(c\\g b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(cc\\g b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(\\f b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url( \\f b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(c\\f b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
div.style.listStyleImage = 'url(cc\\f b)';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with spaces not allowed");
var chars = [ 1, 2, 3, 4, 5, 6, 7, 8, 11, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 ];
for (var i in chars) {
var charcode = chars[i];
div.style.listStyleImage = 'url(' + String.fromCharCode(charcode) + ')';
is(div.style.listStyleImage, 'url("bad")',
"unquoted URL with control character " + charcode + " not allowed");
}
div.style.listStyleImage = 'url(\\f good)';
is(div.style.listStyleImage, 'url("\\F good")', "URL allowed");
div.style.listStyleImage = 'url( \\f good)';
is(div.style.listStyleImage, 'url("\\F good")', "URL allowed");
div.style.listStyleImage = 'url(f\\f good)';
is(div.style.listStyleImage, 'url("f\\F good")', "URL allowed");
div.style.listStyleImage = 'url(go\\od)';
is(div.style.listStyleImage, 'url("good")', "URL allowed");
div.style.listStyleImage = 'url(goo\\d)';
is(div.style.listStyleImage, 'url("goo\\D ")', "URL allowed");
div.style.listStyleImage = 'url(go\\o)';
is(div.style.listStyleImage, 'url("goo")', "URL allowed");
div.setAttribute("style", "color: url(/*); color: green");
is(div.style.color, 'green',
"URL tokenized correctly outside properties taking URLs");
</script>
</pre>
</body>
</html>