diff -r 000000000000 -r 6474c204b198 extensions/universalchardet/tests/CharsetDetectionTests.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/universalchardet/tests/CharsetDetectionTests.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vim: set ts=8 et sw=4 tw=80: */ +var gExpectedCharset; +var gOldPref; +var gDetectorList; +var gTestIndex; +var gLocalDir; +const Cc = Components.classes; +const Ci = Components.interfaces; + +function CharsetDetectionTests(aTestFile, aExpectedCharset, aDetectorList) +{ + gExpectedCharset = aExpectedCharset; + gDetectorList = aDetectorList; + + InitDetectorTests(); + + var fileURI = gLocalDir + aTestFile; + $("testframe").src = fileURI; + + SimpleTest.waitForExplicitFinish(); +} + +function InitDetectorTests() +{ + var prefService = Cc["@mozilla.org/preferences-service;1"] + .getService(Ci.nsIPrefBranch); + var str = Cc["@mozilla.org/supports-string;1"] + .createInstance(Ci.nsISupportsString); + var loader = Cc["@mozilla.org/moz/jssubscript-loader;1"] + .getService(Ci.mozIJSSubScriptLoader); + var ioService = Cc['@mozilla.org/network/io-service;1'] + .getService(Ci.nsIIOService); + loader.loadSubScript("chrome://mochikit/content/chrome-harness.js"); + + try { + gOldPref = prefService + .getComplexValue("intl.charset.detector", + Ci.nsIPrefLocalizedString).data; + } catch (e) { + gOldPref = ""; + } + SetDetectorPref(gDetectorList[0]); + gTestIndex = 0; + $("testframe").onload = DoDetectionTest; + + if (gExpectedCharset == "default") { + // No point trying to be generic here, because we have plenty of other + // unit tests that fail if run using a non-windows-1252 locale. + gExpectedCharset = "windows-1252"; + } + + // Get the local directory. This needs to be a file: URI because chrome: + // URIs are always UTF-8 (bug 617339) and we are testing decoding from other + // charsets. + var jar = getJar(getRootDirectory(window.location.href)); + var dir = jar ? + extractJarToTmp(jar) : + getChromeDir(getResolvedURI(window.location.href)); + gLocalDir = ioService.newFileURI(dir).spec; +} + +function SetDetectorPref(aPrefValue) +{ + var prefService = Cc["@mozilla.org/preferences-service;1"] + .getService(Ci.nsIPrefBranch); + var str = Cc["@mozilla.org/supports-string;1"] + .createInstance(Ci.nsISupportsString); + str.data = aPrefValue; + prefService.setComplexValue("intl.charset.detector", + Ci.nsISupportsString, str); + gCurrentDetector = aPrefValue; +} + +function DoDetectionTest() { + var iframeDoc = $("testframe").contentDocument; + var charset = iframeDoc.characterSet; + + is(charset, gExpectedCharset, + "decoded as " + gExpectedCharset + " by " + gDetectorList[gTestIndex]); + + if (++gTestIndex < gDetectorList.length) { + SetDetectorPref(gDetectorList[gTestIndex]); + iframeDoc.location.reload(); + } else { + CleanUpDetectionTests(); + } +} + +function CleanUpDetectionTests() { + SetDetectorPref(gOldPref); + SimpleTest.finish(); +} +