tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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');