mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-15 04:39:31 +00:00
Bug 801487 - Update StringEncoding API per the latest spec and fix some bugs. r=sicking
This commit is contained in:
parent
154f3090d2
commit
08d52f057c
@ -4,6 +4,7 @@
|
||||
|
||||
#include "mozilla/dom/EncodingUtils.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
@ -86,19 +87,19 @@ static const LabelEncoding labelsEncodings[] = {
|
||||
{"iso_8859-7:1987", "iso-8859-7"},
|
||||
{"sun_eu_greek", "iso-8859-7"},
|
||||
{"csiso88598e", "iso-8859-8"},
|
||||
{"csiso88598i", "iso-8859-8"},
|
||||
{"csisolatinhebrew", "iso-8859-8"},
|
||||
{"hebrew", "iso-8859-8"},
|
||||
{"iso-8859-8", "iso-8859-8"},
|
||||
{"iso-8859-8-e", "iso-8859-8"},
|
||||
{"iso-8859-8-i", "iso-8859-8"},
|
||||
{"iso-ir-138", "iso-8859-8"},
|
||||
{"iso8859-8", "iso-8859-8"},
|
||||
{"iso88598", "iso-8859-8"},
|
||||
{"iso_8859-8", "iso-8859-8"},
|
||||
{"iso_8859-8:1988", "iso-8859-8"},
|
||||
{"logical", "iso-8859-8"},
|
||||
{"visual", "iso-8859-8"},
|
||||
{"csiso88598i", "iso-8859-8-i"},
|
||||
{"iso-8859-8-i", "iso-8859-8-i"},
|
||||
{"logical", "iso-8859-8-i"},
|
||||
{"csisolatin6", "iso-8859-10"},
|
||||
{"iso-8859-10", "iso-8859-10"},
|
||||
{"iso-ir-157", "iso-8859-10"},
|
||||
@ -208,28 +209,29 @@ static const LabelEncoding labelsEncodings[] = {
|
||||
{"x-euc-jp", "euc-jp"},
|
||||
{"csiso2022jp", "iso-2022-jp"},
|
||||
{"iso-2022-jp", "iso-2022-jp"},
|
||||
{"csshiftjis", "shift-jis"},
|
||||
{"ms_kanji", "shift-jis"},
|
||||
{"shift-jis", "shift-jis"},
|
||||
{"shift_jis", "shift-jis"},
|
||||
{"sjis", "shift-jis"},
|
||||
{"windows-31j", "shift-jis"},
|
||||
{"x-sjis", "shift-jis"},
|
||||
{"csshiftjis", "shift_jis"},
|
||||
{"ms_kanji", "shift_jis"},
|
||||
{"shift-jis", "shift_jis"},
|
||||
{"shift_jis", "shift_jis"},
|
||||
{"sjis", "shift_jis"},
|
||||
{"windows-31j", "shift_jis"},
|
||||
{"x-sjis", "shift_jis"},
|
||||
{"cseuckr", "euc-kr"},
|
||||
{"csksc56011987", "x-windows-949"},
|
||||
{"euc-kr", "x-windows-949"},
|
||||
{"iso-ir-149", "x-windows-949"},
|
||||
{"korean", "x-windows-949"},
|
||||
{"ks_c_5601-1987", "x-windows-949"},
|
||||
{"ks_c_5601-1989", "x-windows-949"},
|
||||
{"ksc5601", "x-windows-949"},
|
||||
{"ksc_5601", "x-windows-949"},
|
||||
{"windows-949", "x-windows-949"},
|
||||
{"csksc56011987", "euc-kr"},
|
||||
{"euc-kr", "euc-kr"},
|
||||
{"iso-ir-149", "euc-kr"},
|
||||
{"korean", "euc-kr"},
|
||||
{"ks_c_5601-1987", "euc-kr"},
|
||||
{"ks_c_5601-1989", "euc-kr"},
|
||||
{"ksc5601", "euc-kr"},
|
||||
{"ksc_5601", "euc-kr"},
|
||||
{"windows-949", "euc-kr"},
|
||||
{"csiso2022kr", "iso-2022-kr"},
|
||||
{"iso-2022-kr", "iso-2022-kr"},
|
||||
{"utf-16", "utf-16le"},
|
||||
{"utf-16le", "utf-16le"},
|
||||
{"utf-16be", "utf-16be"}
|
||||
{"utf-16be", "utf-16be"},
|
||||
{"x-user-defined", "x-user-defined"},
|
||||
};
|
||||
|
||||
EncodingUtils::EncodingUtils()
|
||||
@ -322,7 +324,7 @@ EncodingUtils::FindEncodingForLabel(const nsAString& aLabel,
|
||||
return false;
|
||||
}
|
||||
|
||||
ToLowerCase(label);
|
||||
nsContentUtils::ASCIIToLower(label);
|
||||
const char* encoding = self->mLabelsEncodings.Get(label);
|
||||
if (!encoding) {
|
||||
return false;
|
||||
|
@ -240,13 +240,6 @@ TextDecoder::GetEncoding(nsAString& aEncoding)
|
||||
return;
|
||||
}
|
||||
|
||||
// Similarly, "x-windows-949" is used for the "euc-kr" family. Therefore, if
|
||||
// the internal encoding name is "x-windows-949", "euc-kr" is returned.
|
||||
if (!strcmp(mEncoding, "x-windows-949")) {
|
||||
aEncoding.AssignLiteral("euc-kr");
|
||||
return;
|
||||
}
|
||||
|
||||
aEncoding.AssignASCII(mEncoding);
|
||||
}
|
||||
|
||||
|
@ -296,24 +296,63 @@ function testDecoderForThaiEncoding()
|
||||
function testDecoderGetEncoding()
|
||||
{
|
||||
var labelEncodings = [
|
||||
{label: "utf-16", encoding: "utf-16"},
|
||||
{label: "utf-16le", encoding: "utf-16"},
|
||||
{label: "euc-kr", encoding: "euc-kr"},
|
||||
{label: "x-windows-949", error: "EncodingError"},
|
||||
{encoding: "utf-8", labels: ["unicode-1-1-utf-8", "utf-8", "utf8"]},
|
||||
{encoding: "ibm866", labels: ["866", "cp866", "csibm866", "ibm866"]},
|
||||
{encoding: "iso-8859-2", labels: ["csisolatin2", "iso-8859-2", "iso-ir-101", "iso8859-2", "iso88592", "iso_8859-2", "iso_8859-2:1987", "l2", "latin2"]},
|
||||
{encoding: "iso-8859-3", labels: ["csisolatin3", "iso-8859-3", "iso-ir-109", "iso8859-3", "iso88593", "iso_8859-3", "iso_8859-3:1988", "l3", "latin3"]},
|
||||
{encoding: "iso-8859-4", labels: ["csisolatin4", "iso-8859-4", "iso-ir-110", "iso8859-4", "iso88594", "iso_8859-4", "iso_8859-4:1988", "l4", "latin4"]},
|
||||
{encoding: "iso-8859-5", labels: ["csisolatincyrillic", "cyrillic", "iso-8859-5", "iso-ir-144", "iso8859-5", "iso88595", "iso_8859-5", "iso_8859-5:1988"]},
|
||||
{encoding: "iso-8859-6", labels: ["arabic", "asmo-708", "csiso88596e", "csiso88596i", "csisolatinarabic", "ecma-114", "iso-8859-6", "iso-8859-6-e", "iso-8859-6-i", "iso-ir-127", "iso8859-6", "iso88596", "iso_8859-6", "iso_8859-6:1987"]},
|
||||
{encoding: "iso-8859-7", labels: ["csisolatingreek", "ecma-118", "elot_928", "greek", "greek8", "iso-8859-7", "iso-ir-126", "iso8859-7", "iso88597", "iso_8859-7", "iso_8859-7:1987", "sun_eu_greek"]},
|
||||
{encoding: "iso-8859-8", labels: ["csiso88598e", "csisolatinhebrew", "hebrew", "iso-8859-8", "iso-8859-8-e", "iso-ir-138", "iso8859-8", "iso88598", "iso_8859-8", "iso_8859-8:1988", "visual"]},
|
||||
{encoding: "iso-8859-8-i", labels: ["csiso88598i", "iso-8859-8-i", "logical"]},
|
||||
{encoding: "iso-8859-10", labels: ["csisolatin6", "iso-8859-10", "iso-ir-157", "iso8859-10", "iso885910", "l6", "latin6"]},
|
||||
{encoding: "iso-8859-13", labels: ["iso-8859-13", "iso8859-13", "iso885913"]},
|
||||
{encoding: "iso-8859-14", labels: ["iso-8859-14", "iso8859-14", "iso885914"]},
|
||||
{encoding: "iso-8859-15", labels: ["csisolatin9", "iso-8859-15", "iso8859-15", "iso885915", "iso_8859-15", "l9"]},
|
||||
{encoding: "iso-8859-16", labels: ["iso-8859-16"]},
|
||||
{encoding: "koi8-r", labels: ["cskoi8r", "koi", "koi8", "koi8-r", "koi8_r"]},
|
||||
{encoding: "koi8-u", labels: ["koi8-u"]},
|
||||
{encoding: "macintosh", labels: ["csmacintosh", "mac", "macintosh", "x-mac-roman"]},
|
||||
{encoding: "windows-874", labels: ["dos-874", "iso-8859-11", "iso8859-11", "iso885911", "tis-620", "windows-874"]},
|
||||
{encoding: "windows-1250", labels: ["cp1250", "windows-1250", "x-cp1250"]},
|
||||
{encoding: "windows-1251", labels: ["cp1251", "windows-1251", "x-cp1251"]},
|
||||
{encoding: "windows-1252", labels: ["ansi_x3.4-1968", "ascii", "cp1252", "cp819", "csisolatin1", "ibm819", "iso-8859-1", "iso-ir-100", "iso8859-1", "iso88591", "iso_8859-1", "iso_8859-1:1987", "l1", "latin1", "us-ascii", "windows-1252", "x-cp1252"]},
|
||||
{encoding: "windows-1253", labels: ["cp1253", "windows-1253", "x-cp1253"]},
|
||||
{encoding: "windows-1254", labels: ["cp1254", "csisolatin5", "iso-8859-9", "iso-ir-148", "iso8859-9", "iso88599", "iso_8859-9", "iso_8859-9:1989", "l5", "latin5", "windows-1254", "x-cp1254"]},
|
||||
{encoding: "windows-1255", labels: ["cp1255", "windows-1255", "x-cp1255"]},
|
||||
{encoding: "windows-1256", labels: ["cp1256", "windows-1256", "x-cp1256"]},
|
||||
{encoding: "windows-1257", labels: ["cp1257", "windows-1257", "x-cp1257"]},
|
||||
{encoding: "windows-1258", labels: ["cp1258", "windows-1258", "x-cp1258"]},
|
||||
{encoding: "x-mac-cyrillic", labels: ["x-mac-cyrillic", "x-mac-ukrainian"]},
|
||||
{encoding: "gbk", labels: ["chinese", "csgb2312", "csiso58gb231280", "gb2312", "gb_2312", "gb_2312-80", "gbk", "iso-ir-58", "x-gbk"]},
|
||||
{encoding: "gb18030", labels: ["gb18030"]},
|
||||
{encoding: "hz-gb-2312", labels: ["hz-gb-2312"]},
|
||||
{encoding: "big5", labels: ["big5", "big5-hkscs", "cn-big5", "csbig5", "x-x-big5"]},
|
||||
{encoding: "euc-jp", labels: ["cseucpkdfmtjapanese", "euc-jp", "x-euc-jp"]},
|
||||
{encoding: "iso-2022-jp", labels: ["csiso2022jp", "iso-2022-jp"]},
|
||||
{encoding: "shift_jis", labels: ["csshiftjis", "ms_kanji", "shift-jis", "shift_jis", "sjis", "windows-31j", "x-sjis"]},
|
||||
{encoding: "euc-kr", labels: ["cseuckr", "csksc56011987", "euc-kr", "iso-ir-149", "korean", "ks_c_5601-1987", "ks_c_5601-1989", "ksc5601", "ksc_5601", "windows-949"]},
|
||||
{encoding: "iso-2022-kr", labels: ["csiso2022kr", "iso-2022-kr"]},
|
||||
{encoding: "utf-16", labels: ["utf-16", "utf-16le"]},
|
||||
{encoding: "utf-16be", labels: ["utf-16be"]},
|
||||
{encoding: "x-user-defined", labels: ["x-user-defined"]},
|
||||
{error: "EncodingError", labels: ["x-windows-949", "\u0130SO-8859-1"]},
|
||||
];
|
||||
|
||||
labelEncodings.forEach(function(le){
|
||||
try {
|
||||
var decoder = TextDecoder(le.label);
|
||||
if (le.encoding) {
|
||||
assert_equals(decoder.encoding, le.encoding, le.label + " label encoding test.");
|
||||
} else {
|
||||
assert_unreached(le.label + " label encoding unsupported test should throw " + le.error);
|
||||
for (var le of labelEncodings) {
|
||||
for (var label of le.labels) {
|
||||
try {
|
||||
var decoder = TextDecoder(label);
|
||||
} catch (e) {
|
||||
assert_true(!!le.error, label + " shoud not throw " + e.name);
|
||||
assert_equals(e.name, le.error, label + " label encoding unsupported test.");
|
||||
continue;
|
||||
}
|
||||
} catch (e) {
|
||||
assert_equals(e.name, le.error, le.label + " label encoding unsupported test.");
|
||||
assert_true(!le.error, label + " shoud throw " + le.error);
|
||||
assert_equals(decoder.encoding, le.encoding, label + " label encoding test.");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function testCharset(test)
|
||||
|
@ -263,12 +263,15 @@ function testArrayOfStrings(test)
|
||||
function testEncoderGetEncoding()
|
||||
{
|
||||
var labelEncodings = [
|
||||
{label: "utf-16", encoding: "utf-16"},
|
||||
{label: "utf-16le", encoding: "utf-16"},
|
||||
{encoding: "utf-8", labels: ["unicode-1-1-utf-8", "utf-8", "utf8"]},
|
||||
{encoding: "utf-16", labels: ["utf-16", "utf-16le"]},
|
||||
{encoding: "utf-16be", labels: ["utf-16be"]},
|
||||
];
|
||||
|
||||
labelEncodings.forEach(function(le){
|
||||
var decoder = TextEncoder(le.label);
|
||||
assert_equals(decoder.encoding, le.encoding, le.label + " label encoding test.");
|
||||
});
|
||||
for (var le of labelEncodings) {
|
||||
for (var label of le.labels) {
|
||||
var encoder = TextEncoder(label);
|
||||
assert_equals(encoder.encoding, le.encoding, label + " label encoding test.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user