<!doctype html>
<html lang=en>
<meta charset=utf-8>
<title>XMLHttpRequest: upload formdata</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::P[1]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata" data-tested-assertations=".. following::P[1]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations=".. following::UL[1]/LI[1] following::UL[1]/LI[2] following::UL[1]/LI[3]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-FormData" data-tested-assertations="following::DD[1]" />
<div id="log"></div>
<form id="form">
  <input type="hidden" name="key" value="value">
</form>
<script>
  function do_test (name, fd, expected) {
    var test = async_test(name);
    test.step(function() {
      var client = new XMLHttpRequest();
      client.onreadystatechange = test.step_func(function () {
        if (client.readyState !== 4) return;
        assert_equals(client.responseText, expected);
        test.done();
      });
      client.open("POST", "resources/upload.py");
      client.send(fd);
    });
  }

  function create_formdata () {
    var fd = new FormData();
    for (var i = 0; i < arguments.length; i++) {
      fd.append.apply(fd, arguments[i]);
    };
    return fd;
  }

  do_test("empty formdata", new FormData(), '\n');
  do_test("formdata with string", create_formdata(['key', 'value']), 'key=value,\n');
  do_test("formdata with named string", create_formdata(['key', new Blob(['value'], {type: 'text/plain'}), 'kv.txt']), '\nkey=kv.txt:text/plain:5,');
  do_test("formdata from form", new FormData(document.getElementById('form')), 'key=value,\n');

</script>
