var Ci = Components.interfaces; var Cc = Components.classes; var CC = Components.Constructor; function CreateScriptableConverter() { var ScriptableUnicodeConverter = CC("@mozilla.org/intl/scriptableunicodeconverter", "nsIScriptableUnicodeConverter"); return new ScriptableUnicodeConverter(); } function checkDecode(converter, charset, inText, expectedText) { try { converter.charset = charset; } catch(e) { converter.charset = "iso-8859-1"; } dump("testing decoding from " + charset + " to Unicode.\n"); try { var outText = converter.ConvertToUnicode(inText); } catch(e) { outText = "\ufffd"; } if (outText != expectedText) { for (var i = 0; i < inText.length; ++i) { var inn = inText[i]; var out = outText[i]; var expected = expectedText[i]; if (out != expected) { dump("Decoding error at position " + i + ": for input " + escape(inn) + " expected " + escape(expected) + " but got " + escape(out) + "\n"); } } } do_check_eq(outText, expectedText); } function checkEncode(converter, charset, inText, expectedText) { try { converter.charset = charset; } catch(e) { converter.charset = "iso-8859-1"; } dump("testing encoding from Unicode to " + charset + "\n"); var outText = converter.ConvertFromUnicode(inText) + converter.Finish(); if (outText != expectedText) { for (var i = 0; i < inText.length; ++i) { var inn = inText[i]; var out = outText[i]; var expected = expectedText[i]; if (out != expected) { dump("Encoding error at position " + i + ": for input " + escape(inn) + " expected " + escape(expected) + " but got " + escape(out) + "\n"); } } } do_check_eq(outText, expectedText); } function testDecodeAliases() { var converter = CreateScriptableConverter(); for (var i = 0; i < aliases.length; ++i) { checkDecode(converter, aliases[i], inString, expectedString); } } function testEncodeAliases() { var converter = CreateScriptableConverter(); for (var i = 0; i < aliases.length; ++i) { checkEncode(converter, aliases[i], inString, expectedString); } } function testDecodeAliasesInternal() { var converter = CreateScriptableConverter(); converter.isInternal = true; for (var i = 0; i < aliases.length; ++i) { checkDecode(converter, aliases[i], inString, expectedString); } } function testEncodeAliasesInternal() { var converter = CreateScriptableConverter(); converter.isInternal = true; for (var i = 0; i < aliases.length; ++i) { checkEncode(converter, aliases[i], inString, expectedString); } }