зеркало из https://github.com/mozilla/gecko-dev.git
Bug 820909. Make LowerCaseEqualsASCII and LowerCaseEqualsLiteral actually do ASCII-case-insensitive matching instead of doing odd things with KELVIN SIGN and LATIN CAPITAL LETTER I WITH DOT ABOVE. r=bsmedberg, sr=dbaron
This commit is contained in:
Родитель
5762c55113
Коммит
a6929b0c24
|
@ -270,6 +270,7 @@ MOCHITEST_FILES_A = \
|
|||
test_domparser_null_char.html \
|
||||
test_bug811701.html \
|
||||
test_bug811701.xhtml \
|
||||
test_bug820909.html \
|
||||
$(NULL)
|
||||
|
||||
MOCHITEST_FILES_B = \
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=820909
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for Bug 820909</title>
|
||||
<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=820909">Mozilla Bug 820909</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<span dİsabled="CAPS"></span>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script>
|
||||
var bogusScriptRan = false;
|
||||
</script>
|
||||
<script type="applİcation/javascript">
|
||||
bogusScriptRan = true;
|
||||
</script>
|
||||
<script type="application/javascript">
|
||||
|
||||
/** Test for Bug 820909 **/
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 1
|
||||
ok(!bogusScriptRan, "Script types should be ASCII case-insensitive");
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 2
|
||||
var input = document.createElement("input");
|
||||
input.type = "radİo";
|
||||
is(input.type, "text", "Input types should be ASCII case-insensitive");
|
||||
|
||||
// XXX Not sure how to test items 3, 4, 5
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 6
|
||||
is(document.querySelector("[dİsabled='caps']"), null,
|
||||
"Checking whether an attribute is case-sensitive for selector-matching " +
|
||||
"purposes should be ASCII case-insensitive on the attr name");
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 7
|
||||
$("content").style.width = "0";
|
||||
$("content").style.width = "1İn";
|
||||
is($("content").style.width, "0px",
|
||||
"CSS unit names should be ASCII case-insensitive");
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 8
|
||||
$("content").style.setProperty("animation-name", "a");
|
||||
$("content").style.setProperty("-moz-anİmation-name", "b");
|
||||
is($("content").style.animationName, "a",
|
||||
"CSS property aliases should be ASCII case-insensitive");
|
||||
|
||||
// XXXbz don't know how to test item 9
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 10
|
||||
$("content").innerHTML = "<table><input type='hİdden'></table>";
|
||||
is($("content").querySelector("input").parentNode, $("content"),
|
||||
"Inputs that aren't actually type='hidden' should not be allowed as " +
|
||||
"table kids");
|
||||
|
||||
// XXXbz add test for item 11?
|
||||
|
||||
// XXXbz add test for item 12?
|
||||
|
||||
// Test for https://bugzilla.mozilla.org/show_bug.cgi?id=820909#c7 item 13
|
||||
$("content").style.setProperty("animation-name", "a");
|
||||
$("content").style.setProperty("anİmation-name", "b");
|
||||
is($("content").style.animationName, "a",
|
||||
"CSS property names should be ASCII case-insensitive");
|
||||
|
||||
$("content").style.setProperty("display", "none");
|
||||
$("content").style.setProperty("display", "İnline");
|
||||
is($("content").style.display, "none",
|
||||
"CSS keywords should be ASCII case-insensitive");
|
||||
|
||||
$("content").style.setProperty("color", "white");
|
||||
$("content").style.setProperty("color", "İndigo");
|
||||
is($("content").style.color, "white",
|
||||
"CSS color names should be ASCII case-insensitive");
|
||||
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -239,32 +239,17 @@ struct nsCharTraits<PRUnichar>
|
|||
}
|
||||
|
||||
/**
|
||||
* Convert c to its lower-case form, but only if the lower-case form is
|
||||
* ASCII. Otherwise leave it alone.
|
||||
*
|
||||
* There are only two non-ASCII Unicode characters whose lowercase
|
||||
* equivalents are ASCII: KELVIN SIGN and LATIN CAPITAL LETTER I WITH
|
||||
* DOT ABOVE. So it's a simple matter to handle those explicitly.
|
||||
* Convert c to its lower-case form, but only if c is in the ASCII
|
||||
* range. Otherwise leave it alone.
|
||||
*/
|
||||
static
|
||||
char_type
|
||||
ASCIIToLower( char_type c )
|
||||
{
|
||||
if (c < 0x100)
|
||||
{
|
||||
if (c >= 'A' && c <= 'Z')
|
||||
return char_type(c + ('a' - 'A'));
|
||||
if (c >= 'A' && c <= 'Z')
|
||||
return char_type(c + ('a' - 'A'));
|
||||
|
||||
return c;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == 0x212A) // KELVIN SIGN
|
||||
return 'k';
|
||||
if (c == 0x0130) // LATIN CAPITAL LETTER I WITH DOT ABOVE
|
||||
return 'i';
|
||||
return c;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
static
|
||||
|
|
|
@ -299,11 +299,12 @@ class nsTSubstring_CharT
|
|||
}
|
||||
#endif
|
||||
|
||||
// The LowerCaseEquals methods compare the lower case version of
|
||||
// this string to some ASCII/Literal string. The ASCII string is
|
||||
// *not* lowercased for you. If you compare to an ASCII or literal
|
||||
// string that contains an uppercase character, it is guaranteed to
|
||||
// return false. We will throw assertions too.
|
||||
// The LowerCaseEquals methods compare the ASCII-lowercase version of
|
||||
// this string (lowercasing only ASCII uppercase characters) to some
|
||||
// ASCII/Literal string. The ASCII string is *not* lowercased for
|
||||
// you. If you compare to an ASCII or literal string that contains an
|
||||
// uppercase character, it is guaranteed to return false. We will
|
||||
// throw assertions too.
|
||||
bool NS_FASTCALL LowerCaseEqualsASCII( const char* data, size_type len ) const;
|
||||
bool NS_FASTCALL LowerCaseEqualsASCII( const char* data ) const;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче