Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 function encode(charset, unicode) | 1 let uniqueId = 0; |
| 2 { | 2 function encodeText(charsetName, unicode) { |
| 3 // Returns a value already encoded, since we can't do it synchronously. | 3 return new Promise((resolve, reject) => { |
| 4 return results[charset][unicode]; | 4 const frame_id = `subframe${++uniqueId}`; |
| 5 | |
| 6 const iframe = document.createElement('iframe'); | |
| 7 iframe.style.display = 'none'; | |
| 8 // |iframe.name| must be assigned before adding frame to the body or | |
| 9 // |form.target| will not find it. | |
| 10 iframe.name = frame_id; | |
| 11 document.body.appendChild(iframe); | |
| 12 | |
| 13 const form = document.body.appendChild(document.createElement('form')); | |
| 14 form.style.display = 'none'; | |
| 15 form.method = 'GET'; | |
| 16 form.action = 'resources/dummy.html'; | |
| 17 form.acceptCharset = charsetName; | |
| 18 form.target = frame_id; | |
| 19 | |
| 20 const input = form.appendChild(document.createElement('input')); | |
| 21 input.type = 'text'; | |
| 22 input.setAttribute('name', 'text'); | |
|
foolip
2016/10/04 09:35:18
input.name = 'text'?
jsbell
2016/10/04 17:41:39
Thanks - leftover from investigating why iframe.na
| |
| 23 input.value = String.fromCharCode(unicode.replace('U+', '0x')); | |
| 24 | |
| 25 iframe.onload = e => { | |
|
foolip
2016/10/04 09:35:18
e is unused, so ()?
jsbell
2016/10/04 17:41:39
Sure, done.
| |
| 26 const url = String(iframe.contentWindow.location); | |
|
foolip
2016/10/04 09:35:18
Maybe intentional, but iframe.contentWindow.locati
jsbell
2016/10/04 17:41:39
I don't believe it was intentional. Changed.
| |
| 27 const result = url.substr(url.indexOf('=') + 1); | |
| 28 | |
| 29 iframe.remove(); | |
| 30 form.remove(); | |
| 31 | |
| 32 resolve(result); | |
| 33 }; | |
| 34 form.submit(); | |
| 35 }); | |
| 5 } | 36 } |
| 6 | 37 |
| 7 function testsDone() | 38 function testEncode(charsetName, unicode, characterSequence) { |
| 8 { | 39 promise_test(t => { |
| 9 var form = document.getElementById('form'); | 40 return encodeText(charsetName, unicode).then(result => { |
| 10 var subframe = document.getElementById('subframe'); | 41 assert_equals(result, characterSequence); |
| 11 | 42 t.done(); |
|
foolip
2016/10/04 09:35:18
t.done() ought not be needed with promise_test?
jsbell
2016/10/04 17:41:39
D'oh, was an async_test for a while. Thanks, remov
| |
| 12 form.parentNode.removeChild(form); | 43 }); |
| 13 subframe.parentNode.removeChild(subframe); | 44 }, `Encode ${charsetName}: ${unicode} -> ${characterSequence}`); |
| 14 | |
| 15 description("This tests encoding characters in various character sets."); | |
| 16 | |
| 17 for (i = 0; i < charsets.length; ++i) { | |
| 18 shouldBe("encode('" + charsets[i] + "', '" + unicodes[i] + "')", "'" + e xpectedResults[i] + "'"); | |
| 19 } | |
| 20 | |
| 21 if (window.testRunner) | |
| 22 testRunner.notifyDone(); | |
| 23 } | 45 } |
| 24 | |
| 25 function processResult(result) | |
| 26 { | |
| 27 var charsetResults = results[charsets[i]]; | |
| 28 if (!charsetResults) { | |
| 29 charsetResults = new Object; | |
| 30 results[charsets[i]] = charsetResults; | |
| 31 } | |
| 32 charsetResults[unicodes[i]] = result; | |
| 33 } | |
| 34 | |
| 35 function subframeLoaded() | |
| 36 { | |
| 37 var URL = "" + document.getElementById('subframe').contentWindow.location; | |
| 38 processResult(URL.substr(URL.indexOf('=') + 1)); | |
| 39 ++i; | |
| 40 runTest(); | |
| 41 } | |
| 42 | |
| 43 function runTest() | |
| 44 { | |
| 45 if (i >= charsets.length) { | |
| 46 testsDone(); | |
| 47 return; | |
| 48 } | |
| 49 | |
| 50 var form = document.getElementById('form'); | |
| 51 var text = document.getElementById('text'); | |
| 52 var subframe = document.getElementById('subframe'); | |
| 53 | |
| 54 form.acceptCharset = charsets[i]; | |
| 55 form.action = "resources/dummy.html"; | |
| 56 subframe.onload = subframeLoaded; | |
| 57 text.value = String.fromCharCode(unicodes[i].replace('U+', '0x')); | |
| 58 | |
| 59 form.submit(); | |
| 60 } | |
| 61 | |
| 62 function testEncode(charsetName, unicode, characterSequence) | |
| 63 { | |
| 64 charsets.push(charsetName); | |
| 65 unicodes.push(unicode); | |
| 66 expectedResults.push(characterSequence); | |
| 67 } | |
| OLD | NEW |