summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/xhr/responsetype.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/xhr/responsetype.any.js')
-rw-r--r--testing/web-platform/tests/xhr/responsetype.any.js135
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.');
+});