function testHas() { var f = new FormData();
f.append("foo", "bar");
f.append("another", "value");
ok(f.has("foo"), "has() on existing name should be true.");
ok(f.has("another"), "has() on existing name should be true.");
ok(!f.has("nonexistent"), "has() on non-existent name should be false.");
}
function testGet() { var f = new FormData();
f.append("foo", "bar");
f.append("foo", "bar2");
f.append("blob", new Blob(["hey"], { type: "text/plain" }));
f.append("file", new File(["hey"], "testname", { type: "text/plain" }));
is(f.get("foo"), "bar", "get() on existing name should return first value");
ok(
f.get("blob") instanceof Blob, "get() on existing name should return first value"
);
is(
f.get("blob").type, "text/plain", "get() on existing name should return first value"
);
ok(
f.get("file") instanceof File, "get() on existing name should return first value"
);
is(
f.get("file").name, "testname", "get() on existing name should return first value"
);
is(
f.get("nonexistent"), null, "get() on non-existent name should return null."
);
}
function testGetAll() { var f = new FormData();
f.append("other", "value");
f.append("foo", "bar");
f.append("foo", "bar2");
f.append("foo", new Blob(["hey"], { type: "text/plain" }));
var arr = f.getAll("foo");
is(arr.length, 3, "getAll() should retrieve all matching entries.");
is(arr[0], "bar", "values should match and be in order");
is(arr[1], "bar2", "values should match and be in order");
ok(arr[2] instanceof Blob, "values should match and be in order");
is(
f.get("nonexistent"), null, "get() on non-existent name should return null."
);
}
function testDelete() { var f = new FormData();
f.append("other", "value");
f.append("foo", "bar");
f.append("foo", "bar2");
f.append("foo", new Blob(["hey"], { type: "text/plain" }));
ok(f.has("foo"), "has() on existing name should be true.");
f.delete("foo");
ok(!f.has("foo"), "has() on deleted name should be false.");
is(f.getAll("foo").length, 0, "all entries should be deleted.");
is(f.getAll("other").length, 1, "other names should still be there.");
f.delete("other");
is(f.getAll("other").length, 0, "all entries should be deleted.");
}
function testSet() { var f = new FormData();
f.set("other", "value");
ok(f.has("other"), "set() on new name should be similar to append()");
is(
f.getAll("other").length,
1, "set() on new name should be similar to append()"
);
f.append("other", "value2");
is(
f.getAll("other").length,
2, "append() should not replace existing entries."
);
f.append("foo", "bar");
f.append("other", "value3");
f.append("other", "value3");
f.append("other", "value3");
is(
f.getAll("other").length,
5, "append() should not replace existing entries."
);
f.set("other", "value4");
is(f.getAll("other").length, 1, "set() should replace existing entries.");
is(f.getAll("other")[0], "value4", "set() should replace existing entries.");
}
function testFilename() { var f = new FormData();
f.append("blob", new Blob(["hi"]));
ok(f.get("blob") instanceof Blob, "We should have a blob back.");
// If a filename is passed, that should replace the original.
f.append("blob2", new Blob(["hi"]), "blob2.txt");
is(
f.get("blob2").name, "blob2.txt", 'Explicit filename should override "blob".'
);
var file = new File(["hi"], "file1.txt");
f.append("file1", file); // If a file is passed, the "create entry" algorithm should not create a new File, but reuse the existing one.
is(
f.get("file1"),
file, "Retrieved File object should be original File object and not a copy."
);
is(
f.get("file1").name, "file1.txt", "File's filename should be original's name if no filename is explicitly passed."
);
file = new File(["hi"], "file2.txt");
f.append("file2", file, "fakename.txt");
ok(
f.get("file2") !== file, "Retrieved File object should be new File object if explicit filename is passed."
);
is(
f.get("file2").name, "fakename.txt", "File's filename should be explicitly passed name."
);
f.append("file3", new File(["hi"], ""));
is(f.get("file3").name, "", "File's filename is returned even if empty.");
}
function testIterable() { var fd = new FormData();
fd.set("1", "2");
fd.set("2", "4");
fd.set("3", "6");
fd.set("4", "8");
fd.set("5", "10");
var key_iter = fd.keys(); var value_iter = fd.values(); var entries_iter = fd.entries(); for (var i = 0; i < 5; ++i) { var v = i + 1; var key = key_iter.next(); var value = value_iter.next(); var entry = entries_iter.next();
is(key.value, v.toString(), "Correct Key iterator: " + v.toString());
ok(!key.done, "key.done is false");
is(
value.value,
(v * 2).toString(), "Correct Value iterator: " + (v * 2).toString()
);
ok(!value.done, "value.done is false");
is(
entry.value[0],
v.toString(), "Correct Entry 0 iterator: " + v.toString()
);
is(
entry.value[1],
(v * 2).toString(), "Correct Entry 1 iterator: " + (v * 2).toString()
);
ok(!entry.done, "entry.done is false");
}
var last = key_iter.next();
ok(last.done, "Nothing more to read.");
is(last.value, undefined, "Undefined is the last key");
last = value_iter.next();
ok(last.done, "Nothing more to read.");
is(last.value, undefined, "Undefined is the last value");
last = entries_iter.next();
ok(last.done, "Nothing more to read.");
last = key_iter.next();
ok(last.done, "Nothing more to read.");
is(last.value, undefined, "Undefined is the last key");
}
function testSend(doneCb) { var xhr = new XMLHttpRequest();
xhr.open("POST", "form_submit_server.sjs");
xhr.onload = function () { var response = xhr.response;
for (var entry of response) {
is(entry.body, "hey");
is(entry.headers["Content-Type"], "text/plain");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.