diff options
Diffstat (limited to 'testing/web-platform/tests/xhr/responsetype.any.js')
-rw-r--r-- | testing/web-platform/tests/xhr/responsetype.any.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/testing/web-platform/tests/xhr/responsetype.any.js b/testing/web-platform/tests/xhr/responsetype.any.js new file mode 100644 index 0000000000..444c3e3d16 --- /dev/null +++ b/testing/web-platform/tests/xhr/responsetype.any.js @@ -0,0 +1,135 @@ +// META: title=XMLHttpRequest.responseType + +/** + * Author: Mathias Bynens <http://mathiasbynens.be/> + * Author: Ms2ger <mailto:Ms2ger@gmail.com> + * + * Spec: <https://xhr.spec.whatwg.org/#the-responsetype-attribute> + */ +test(function() { + var xhr = new XMLHttpRequest(); + assert_equals(xhr.responseType, ''); +}, 'Initial value of responseType'); + +var types = ['', 'json', 'document', 'arraybuffer', 'blob', 'text', "nosuchtype"]; + +function isIgnoredType(type) { + if (type == "nosuchtype") { + return true; + } + + if (type != "document") { + return false; + } + + // "document" is ignored only on workers. + return GLOBAL.isWorker(); +} + +function expectedType(type) { + if (!isIgnoredType(type)) { + return type; + } + + return ""; +} + +types.forEach(function(type) { + test(function() { + var xhr = new XMLHttpRequest(); + xhr.responseType = type; + assert_equals(xhr.responseType, expectedType(type)); + }, 'Set responseType to ' + format_value(type) + ' when readyState is UNSENT.'); + + test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); + xhr.responseType = type; + assert_equals(xhr.responseType, expectedType(type)); + }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED.'); + + async_test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) { + xhr.responseType = type; + assert_equals(xhr.responseType, expectedType(type)); + this.done(); + } + }); + xhr.send(); + }, 'Set responseType to ' + format_value(type) + ' when readyState is HEADERS_RECEIVED.'); + + async_test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState === XMLHttpRequest.LOADING) { + if (isIgnoredType(type)) { + xhr.responseType = type; + } else { + assert_throws_dom("InvalidStateError", function() { + xhr.responseType = type; + }); + } + assert_equals(xhr.responseType, ""); + this.done(); + } + }); + xhr.send(); + }, 'Set responseType to ' + format_value(type) + ' when readyState is LOADING.'); + + async_test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); + xhr.onreadystatechange = this.step_func(function() { + if (xhr.readyState === XMLHttpRequest.DONE) { + var text = xhr.responseText; + assert_not_equals(text, ""); + if (isIgnoredType(type)) { + xhr.responseType = type; + } else { + assert_throws_dom("InvalidStateError", function() { + xhr.responseType = type; + }); + } + assert_equals(xhr.responseType, ""); + assert_equals(xhr.responseText, text); + this.done(); + } + }); + xhr.send(); + }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE.'); + + // Note: the case of setting responseType first, and then calling synchronous + // open(), is tested in open-method-responsetype-set-sync.htm. + test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/', false); + if (GLOBAL.isWorker() || isIgnoredType(type)) { + // Setting responseType on workers is valid even for a sync XHR. + xhr.responseType = type; + assert_equals(xhr.responseType, expectedType(type)); + } else { + assert_throws_dom("InvalidAccessError", function() { + xhr.responseType = type; + }); + } + }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED and the sync flag is set.'); + + test(function() { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/', false); + xhr.send(); + assert_equals(xhr.readyState, XMLHttpRequest.DONE); + if (isIgnoredType(type)) { + xhr.responseType = type; + } else { + assert_throws_dom("InvalidStateError", function() { + xhr.responseType = type; + }); + } + assert_equals(xhr.responseType, ""); + }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE and the sync flag is set.'); +}); |