michael@0: // Tests encoding of characters below U+0020 michael@0: load('CharsetConversionTests.js'); michael@0: michael@0: const inString = "Hello\u000aWorld"; michael@0: const expectedString = "Hello\nWorld"; michael@0: michael@0: function run_test() { michael@0: var failures = false; michael@0: var ccManager = Cc["@mozilla.org/charset-converter-manager;1"] michael@0: .getService(Ci.nsICharsetConverterManager); michael@0: var encodingConverter = CreateScriptableConverter(); michael@0: michael@0: var charsetList = ccManager.getDecoderList(); michael@0: var counter = 0; michael@0: while (charsetList.hasMore()) { michael@0: ++counter; michael@0: var charset = charsetList.getNext(); michael@0: michael@0: // exclude known non-ASCII compatible charsets michael@0: if (charset.substr(0, "UTF-16".length) == "UTF-16" || michael@0: charset == "x-imap4-modified-utf7") { michael@0: dump("skipping " + counter + " " + charset + "\n"); michael@0: continue; michael@0: } michael@0: dump("testing " + counter + " " + charset + "\n"); michael@0: michael@0: try { michael@0: encodingConverter.charset = charset; michael@0: } catch(e) { michael@0: dump("Warning: couldn't set encoder charset to " + charset + "\n"); michael@0: continue; michael@0: } michael@0: var codepageString = encodingConverter.ConvertFromUnicode(inString) + michael@0: encodingConverter.Finish(); michael@0: if (codepageString != expectedString) { michael@0: dump(charset + " encoding failed\n"); michael@0: for (var i = 0; i < expectedString.length; ++i) { michael@0: if (codepageString.charAt(i) != expectedString.charAt(i)) { michael@0: dump(i.toString(16) + ": 0x" + michael@0: codepageString.charCodeAt(i).toString(16) + " != " + michael@0: expectedString.charCodeAt(i).toString(16) + "\n"); michael@0: } michael@0: } michael@0: failures = true; michael@0: } michael@0: } michael@0: if (failures) { michael@0: do_throw("test failed\n"); michael@0: } michael@0: }