FileSystemDirectoryHandle-iteration.js (3333B)
1 'use strict'; 2 3 directory_test(async (t, root) => { 4 const file_name1 = 'foo1.txt'; 5 const file_name2 = 'foo2.txt'; 6 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 7 await createFileWithContents(file_name2, 'contents', /*parent=*/ root); 8 9 for await (let entry of root) { 10 break; 11 } 12 13 }, 'returning early from an iteration doesn\'t crash'); 14 15 directory_test(async (t, root) => { 16 const file_name1 = 'foo1.txt'; 17 const file_name2 = 'foo2.txt'; 18 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 19 await createFileWithContents(file_name2, 'contents', /*parent=*/ root); 20 21 let names = []; 22 for await (let entry of root) { 23 assert_true(Array.isArray(entry)); 24 assert_equals(entry.length, 2); 25 assert_equals(typeof entry[0], 'string'); 26 assert_true(entry[1] instanceof FileSystemFileHandle); 27 assert_equals(entry[0], entry[1].name); 28 names.push(entry[0]); 29 } 30 names.sort(); 31 assert_array_equals(names, [file_name1, file_name2]); 32 33 }, '@@asyncIterator: full iteration works'); 34 35 directory_test(async (t, root) => { 36 const file_name1 = 'foo1.txt'; 37 const file_name2 = 'foo2.txt'; 38 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 39 await createFileWithContents(file_name2, 'contents', /*parent=*/ root); 40 41 let names = []; 42 for await (let entry of root.entries()) { 43 assert_true(Array.isArray(entry)); 44 assert_equals(entry.length, 2); 45 assert_equals(typeof entry[0], 'string'); 46 assert_true(entry[1] instanceof FileSystemFileHandle); 47 assert_equals(entry[0], entry[1].name); 48 names.push(entry[0]); 49 } 50 names.sort(); 51 assert_array_equals(names, [file_name1, file_name2]); 52 }, 'entries: full iteration works'); 53 54 directory_test(async (t, root) => { 55 const file_name1 = 'foo1.txt'; 56 const file_name2 = 'foo2.txt'; 57 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 58 await createFileWithContents(file_name2, 'contents', /*parent=*/ root); 59 60 let names = []; 61 for await (let entry of root.values()) { 62 assert_true(entry instanceof FileSystemFileHandle); 63 names.push(entry.name); 64 } 65 names.sort(); 66 assert_array_equals(names, [file_name1, file_name2]); 67 }, 'values: full iteration works'); 68 69 directory_test(async (t, root) => { 70 const file_name1 = 'foo1.txt'; 71 const file_name2 = 'foo2.txt'; 72 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 73 await createFileWithContents(file_name2, 'contents', /*parent=*/ root); 74 75 let names = []; 76 for await (let entry of root.keys()) { 77 assert_equals(typeof entry, 'string'); 78 names.push(entry); 79 } 80 names.sort(); 81 assert_array_equals(names, [file_name1, file_name2]); 82 }, 'keys: full iteration works'); 83 84 directory_test(async (t, root) => { 85 const file_name1 = 'foo1.txt'; 86 await createFileWithContents(file_name1, 'contents', /*parent=*/ root); 87 88 const next = (() => { 89 const iterator = root.entries(); 90 return iterator.next(); 91 })(); 92 garbageCollect(); 93 let entry = await next; 94 assert_false(entry.done); 95 assert_true(Array.isArray(entry.value)); 96 assert_equals(entry.value.length, 2); 97 assert_equals(entry.value[0], file_name1); 98 assert_true(entry.value[1] instanceof FileSystemFileHandle); 99 assert_equals(entry.value[1].name, file_name1); 100 }, 'iteration while iterator gets garbage collected');