// META: title=FormData: foreach 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');