1fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction encode(charset, unicode)
2fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
3fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    // Returns a value already encoded, since we can't do it synchronously.
4fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    return results[charset][unicode];
5fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
6fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
7fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction testsDone()
8fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
9fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var form = document.getElementById('form');
10fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var subframe = document.getElementById('subframe');
11fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
12fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    form.parentNode.removeChild(form);
13fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    subframe.parentNode.removeChild(subframe);
14fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
15fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    description("This tests encoding characters in various character sets.");
16fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
17fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    for (i = 0; i < charsets.length; ++i) {
18fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        shouldBe("encode('" + charsets[i] + "', '" + unicodes[i] + "')", "'" + expectedResults[i] + "'");
19fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    }
20fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
21fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    isSuccessfullyParsed();
22fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
23fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    if (window.layoutTestController)
24fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        layoutTestController.notifyDone();
25fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
26fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
27fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction processResult(result)
28fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
29fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var charsetResults = results[charsets[i]];
30fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    if (!charsetResults) {
31fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        charsetResults = new Object;
32fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        results[charsets[i]] = charsetResults;
33fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    }
34fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    charsetResults[unicodes[i]] = result;
35fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
36fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
37fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction subframeLoaded()
38fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
39fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var URL = "" + document.getElementById('subframe').contentWindow.location;
40fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    processResult(URL.substr(URL.indexOf('=') + 1));
41fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    ++i;
42fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    runTest();
43fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
44fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
45fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction runTest()
46fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
47fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    if (i >= charsets.length) {
48fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        testsDone();
49fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick        return;
50fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    }
51fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
52fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var form = document.getElementById('form');
53fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var text = document.getElementById('text');
54fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    var subframe = document.getElementById('subframe');
55fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
56fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    form.acceptCharset = charsets[i];
57fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    form.action = "resources/dummy.html";
58fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    subframe.onload = subframeLoaded;
59fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    text.value = String.fromCharCode(unicodes[i].replace('U+', '0x'));
60fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
61fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    form.submit();
62fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
63fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick
64fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrickfunction testEncode(charsetName, unicode, characterSequence)
65fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick{
66fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    charsets.push(charsetName);
67fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    unicodes.push(unicode);
68fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick    expectedResults.push(characterSequence);
69fd5c6425ce58eb75211be7718d5dee960842a37eIain Merrick}
70