<!doctype html>
<html lang=en>
<meta charset=utf-8>
<title>FormData: foreach</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" />
<script>
    var fd = new FormData();
    fd.append('n1', 'v1');
    fd.append('n2', 'v2');
    fd.append('n3', 'v3');
    fd.append('n1', 'v4');
    fd.append('n2', 'v5');
    fd.append('n3', 'v6');
    fd.delete('n2');

    var file = new File(['hello'], "hello.txt");
    fd.append('f1', file);

    var expected_keys = ['n1', 'n3', 'n1', 'n3', 'f1'];
    var expected_values = ['v1', 'v3', 'v4', 'v6', file];
    test(function() {
        var mykeys = [], myvalues = [];
        for(var entry of fd) {
            assert_equals(entry.length, 2,
                          'Default iterator should yield key/value pairs');
            mykeys.push(entry[0]);
            myvalues.push(entry[1]);
        }
        assert_array_equals(mykeys, expected_keys,
                            'Default iterator should see duplicate keys');
        assert_array_equals(myvalues, expected_values,
                            'Default iterator should see non-deleted values');
    }, 'Iterator should return duplicate keys and non-deleted values');
    test(function() {
        var mykeys = [], myvalues = [];
        for(var entry of fd.entries()) {
            assert_equals(entry.length, 2,
                          'entries() iterator should yield key/value pairs');
            mykeys.push(entry[0]);
            myvalues.push(entry[1]);
        }
        assert_array_equals(mykeys, expected_keys,
                            'entries() iterator should see duplicate keys');
        assert_array_equals(myvalues, expected_values,
                            'entries() iterator should see non-deleted values');
    }, 'Entries iterator should return duplicate keys and non-deleted values');
    test(function() {
        var mykeys = [];
        for(var entry of fd.keys())
            mykeys.push(entry);
        assert_array_equals(mykeys, expected_keys,
                            'keys() iterator should see duplicate keys');
    }, 'Keys iterator should return duplicates');
    test(function() {
        var myvalues = [];
        for(var entry of fd.values())
            myvalues.push(entry);
        assert_array_equals(myvalues, expected_values,
                            'values() iterator should see non-deleted values');
    }, 'Values iterator should return non-deleted values');
</script>
