Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/fast/encoding/resources/char-decoding-utils.js |
| diff --git a/third_party/WebKit/LayoutTests/fast/encoding/resources/char-decoding-utils.js b/third_party/WebKit/LayoutTests/fast/encoding/resources/char-decoding-utils.js |
| index 4d5888cb7cf0574833ed9975f21ea1a460a696b8..28fb94c6a8d9d8bbf9f977089be41e5b541a5fe5 100644 |
| --- a/third_party/WebKit/LayoutTests/fast/encoding/resources/char-decoding-utils.js |
| +++ b/third_party/WebKit/LayoutTests/fast/encoding/resources/char-decoding-utils.js |
| @@ -1,34 +1,37 @@ |
| -function decodeText(charsetName, characterSequence) |
| -{ |
| - var req = new XMLHttpRequest; |
| - req.open('GET', 'data:text/plain,' + characterSequence, false); |
| - req.overrideMimeType('text/plain; charset="' + charsetName + '"'); |
| +function decodeText(charsetName, characterSequence) { |
|
foolip
2016/10/04 09:35:18
Can't this use https://encoding.spec.whatwg.org/#i
jsbell
2016/10/04 17:41:39
They do differ. :( Specifically the API flushes at
|
| + return new Promise((resolve, reject) => { |
| + const req = new XMLHttpRequest; |
| + req.open('GET', `data:text/plain,${characterSequence}`, /*async*/true); |
|
foolip
2016/10/04 09:35:18
async is the default, omit? (It helps understand t
jsbell
2016/10/04 17:41:39
Done.
|
| + req.overrideMimeType(`text/plain; charset="${charsetName}"`); |
| req.send(''); |
| - return req.responseText; |
| + req.onload = e => resolve(req.responseText); |
| + req.onerror = e => reject(new Error(req.statusText)); |
| + }); |
| } |
| -function decode(charsetName, characterSequence) |
| -{ |
| - var decodedText = decodeText(charsetName, characterSequence); |
| - var result = ""; |
| - for (var i = 0; i < decodedText.length; ++i) { |
| - var code = decodedText.charCodeAt(i).toString(16).toUpperCase(); |
| - if (i) |
| - result += "/"; |
| - result += "U+" + ("0000" + code).slice(-4); |
| - } |
| - return result; |
| +function decode(charsetName, characterSequence) { |
| + return decodeText(charsetName, characterSequence).then(decodedText => { |
| + return decodedText.split('') |
| + .map(char => char.charCodeAt(0)) |
| + .map(code => 'U+' + ('0000' + code.toString(16).toUpperCase()).slice(-4)) |
| + .join('/'); |
| + }); |
| } |
| -function testDecode(charsetName, characterSequence, unicode) |
| -{ |
| - shouldBe("decode('" + charsetName + "', '" + characterSequence + "')", "'" + unicode + "'"); |
| +function testDecode(charsetName, characterSequence, unicode) { |
| + promise_test(t => { |
| + return decode(charsetName, characterSequence).then(result => { |
| + assert_equals(result, unicode); |
| + }); |
| + }, `Decode ${charsetName}: ${characterSequence} => ${unicode}`); |
| } |
| -function batchTestDecode(inputData) |
| -{ |
| - for (var i in inputData.encodings) { |
| - for (var j in inputData.encoded) |
| - testDecode(inputData.encodings[i], inputData.encoded[j], inputData.unicode[j]); |
| +function batchTestDecode(inputData) { |
| + for (let i in inputData.encodings) { |
| + for (let j in inputData.encoded) { |
| + testDecode(inputData.encodings[i], |
| + inputData.encoded[j], |
| + inputData.unicode[j]); |
| } |
| + } |
| } |