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:
Boris Zbarsky 2012-12-26 13:42:39 -08:00
Родитель 5762c55113
Коммит a6929b0c24
4 изменённых файлов: 99 добавлений и 25 удалений

Просмотреть файл

@ -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;