tor-browser

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

FileSystemDirectoryHandle-move.js (11524B)


      1 // META: script=resources/test-helpers.js
      2 
      3 'use strict';
      4 
      5 directory_test(async (t, root) => {
      6  const dir = await root.getDirectoryHandle('dir-before', {create: true});
      7  await dir.move('dir-after');
      8 
      9  assert_array_equals(await getSortedDirectoryEntries(root), ['dir-after/']);
     10  assert_array_equals(await getSortedDirectoryEntries(dir), []);
     11 }, 'move(name) to rename an empty directory');
     12 
     13 directory_test(async (t, root) => {
     14  const dir = await root.getDirectoryHandle('dir-before', {create: true});
     15  await promise_rejects_js(t, TypeError, dir.move(''));
     16 
     17  assert_array_equals(await getSortedDirectoryEntries(root), ['dir-before/']);
     18  assert_array_equals(await getSortedDirectoryEntries(dir), []);
     19 }, 'move("") to rename an empty directory fails');
     20 
     21 directory_test(async (t, root) => {
     22  const dir = await root.getDirectoryHandle('dir-before', {create: true});
     23  await createFileWithContents('file-in-dir', 'abc', dir);
     24  await dir.move('dir-after');
     25 
     26  assert_array_equals(await getSortedDirectoryEntries(root), ['dir-after/']);
     27  assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']);
     28 }, 'move(name) to rename a non-empty directory');
     29 
     30 directory_test(async (t, root) => {
     31  const dir = await root.getDirectoryHandle('dir-before', {create: true});
     32  await dir.move(root, 'dir-after');
     33 
     34  assert_array_equals(await getSortedDirectoryEntries(root), ['dir-after/']);
     35  assert_array_equals(await getSortedDirectoryEntries(dir), []);
     36 }, 'move(dir, name) to rename an empty directory');
     37 
     38 directory_test(async (t, root) => {
     39  const dir = await root.getDirectoryHandle('dir-before', {create: true});
     40  await createFileWithContents('file-in-dir', 'abc', dir);
     41  await dir.move(root, 'dir-after');
     42 
     43  assert_array_equals(await getSortedDirectoryEntries(root), ['dir-after/']);
     44  assert_array_equals(await getSortedDirectoryEntries(dir), ['file-in-dir']);
     45 }, 'move(dir, name) to rename a non-empty directory');
     46 
     47 directory_test(async (t, root) => {
     48  const dir_src = await root.getDirectoryHandle('dir-src', {create: true});
     49  const dir_dest = await root.getDirectoryHandle('dir-dest', {create: true});
     50  const dir_in_dir =
     51      await dir_src.getDirectoryHandle('dir-in-dir', {create: true});
     52  await dir_in_dir.move(dir_dest);
     53 
     54  assert_array_equals(
     55      await getSortedDirectoryEntries(root), ['dir-dest/', 'dir-src/']);
     56  assert_array_equals(await getSortedDirectoryEntries(dir_src), []);
     57  assert_array_equals(
     58      await getSortedDirectoryEntries(dir_dest), ['dir-in-dir/']);
     59  assert_array_equals(await getSortedDirectoryEntries(dir_in_dir), []);
     60 }, 'move(dir) to move an empty directory to a new directory');
     61 
     62 directory_test(async (t, root) => {
     63  const dir_src = await root.getDirectoryHandle('dir-src', {create: true});
     64  const dir_dest = await root.getDirectoryHandle('dir-dest', {create: true});
     65  const dir_in_dir =
     66      await dir_src.getDirectoryHandle('dir-in-dir', {create: true});
     67  await dir_in_dir.move(dir_dest, 'dir-in-dir');
     68 
     69  assert_array_equals(
     70      await getSortedDirectoryEntries(root), ['dir-dest/', 'dir-src/']);
     71  assert_array_equals(await getSortedDirectoryEntries(dir_src), []);
     72  assert_array_equals(
     73      await getSortedDirectoryEntries(dir_dest), ['dir-in-dir/']);
     74  assert_array_equals(await getSortedDirectoryEntries(dir_in_dir), []);
     75 }, 'move(dir, name) to move an empty directory to a new directory');
     76 
     77 directory_test(async (t, root) => {
     78  const dir_src = await root.getDirectoryHandle('dir-src', {create: true});
     79  const dir_dest = await root.getDirectoryHandle('dir-dest', {create: true});
     80  const dir_in_dir =
     81      await dir_src.getDirectoryHandle('dir-in-dir', {create: true});
     82  const file = await createFileWithContents('file-in-dir', 'abc', dir_in_dir);
     83  await dir_in_dir.move(dir_dest);
     84 
     85  assert_array_equals(
     86      await getSortedDirectoryEntries(root), ['dir-dest/', 'dir-src/']);
     87  assert_array_equals(await getSortedDirectoryEntries(dir_src), []);
     88  assert_array_equals(
     89      await getSortedDirectoryEntries(dir_dest), ['dir-in-dir/']);
     90  assert_array_equals(
     91      await getSortedDirectoryEntries(dir_in_dir), ['file-in-dir']);
     92  // `file` should be invalidated after moving directories.
     93  await promise_rejects_dom(t, 'NotFoundError', getFileContents(file));
     94 }, 'move(dir) to move a non-empty directory to a new directory');
     95 
     96 directory_test(async (t, root) => {
     97  const dir_src = await root.getDirectoryHandle('dir-src', {create: true});
     98  const dir_dest = await root.getDirectoryHandle('dir-dest', {create: true});
     99  const dir_in_dir =
    100      await dir_src.getDirectoryHandle('dir-in-dir', {create: true});
    101  const file = await createFileWithContents('file-in-dir', 'abc', dir_in_dir);
    102  await dir_in_dir.move(dir_dest, 'dir-in-dir');
    103 
    104  assert_array_equals(
    105      await getSortedDirectoryEntries(root), ['dir-dest/', 'dir-src/']);
    106  assert_array_equals(await getSortedDirectoryEntries(dir_src), []);
    107  assert_array_equals(
    108      await getSortedDirectoryEntries(dir_dest), ['dir-in-dir/']);
    109  assert_array_equals(
    110      await getSortedDirectoryEntries(dir_in_dir), ['file-in-dir']);
    111  // `file` should be invalidated after moving directories.
    112  await promise_rejects_dom(t, 'NotFoundError', getFileContents(file));
    113 }, 'move(dir, name) to move a non-empty directory to a new directory');
    114 
    115 directory_test(async (t, root) => {
    116  const dir1 = await root.getDirectoryHandle('dir1', {create: true});
    117  const dir2 = await root.getDirectoryHandle('dir2', {create: true});
    118  const handle = await createFileWithContents('file', 'foo', root);
    119 
    120  await handle.move(dir1);
    121  assert_array_equals(
    122      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/']);
    123  assert_array_equals(await getSortedDirectoryEntries(dir1), ['file']);
    124  assert_array_equals(await getSortedDirectoryEntries(dir2), []);
    125  assert_equals(await getFileContents(handle), 'foo');
    126 
    127  await handle.move(dir2);
    128  assert_array_equals(
    129      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/']);
    130  assert_array_equals(await getSortedDirectoryEntries(dir1), []);
    131  assert_array_equals(await getSortedDirectoryEntries(dir2), ['file']);
    132  assert_equals(await getFileContents(handle), 'foo');
    133 
    134  await handle.move(root);
    135  assert_array_equals(
    136      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/', 'file']);
    137  assert_array_equals(await getSortedDirectoryEntries(dir1), []);
    138  assert_array_equals(await getSortedDirectoryEntries(dir2), []);
    139  assert_equals(await getFileContents(handle), 'foo');
    140 }, 'move(dir) can be called multiple times');
    141 
    142 directory_test(async (t, root) => {
    143  const dir1 = await root.getDirectoryHandle('dir1', {create: true});
    144  const dir2 = await root.getDirectoryHandle('dir2', {create: true});
    145  const handle = await createFileWithContents('file', 'foo', root);
    146 
    147  await handle.move(dir1, 'file-1');
    148  assert_array_equals(
    149      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/']);
    150  assert_array_equals(await getSortedDirectoryEntries(dir1), ['file-1']);
    151  assert_array_equals(await getSortedDirectoryEntries(dir2), []);
    152  assert_equals(await getFileContents(handle), 'foo');
    153 
    154  await handle.move(dir2, 'file-2');
    155  assert_array_equals(
    156      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/']);
    157  assert_array_equals(await getSortedDirectoryEntries(dir1), []);
    158  assert_array_equals(await getSortedDirectoryEntries(dir2), ['file-2']);
    159  assert_equals(await getFileContents(handle), 'foo');
    160 
    161  await handle.move(root, 'file-3');
    162  assert_array_equals(
    163      await getSortedDirectoryEntries(root), ['dir1/', 'dir2/', 'file-3']);
    164  assert_array_equals(await getSortedDirectoryEntries(dir1), []);
    165  assert_array_equals(await getSortedDirectoryEntries(dir2), []);
    166  assert_equals(await getFileContents(handle), 'foo');
    167 }, 'move(dir, name) can be called multiple times');
    168 
    169 directory_test(async (t, root) => {
    170  const handle = await createFileWithContents('file-before', 'foo', root);
    171  const valid_name = '#$23423@352^*3243';
    172  await handle.move(root, valid_name);
    173 
    174  assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]);
    175  assert_equals(await getFileContents(handle), 'foo');
    176  assert_equals(await getFileSize(handle), 3);
    177 
    178  const contains_invalid_characters = '/file\\';
    179  await promise_rejects_js(
    180      t, TypeError, handle.move(root, contains_invalid_characters));
    181 
    182  assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]);
    183  assert_equals(await getFileContents(handle), 'foo');
    184  assert_equals(await getFileSize(handle), 3);
    185 
    186  const empty_name = '';
    187  await promise_rejects_js(t, TypeError, handle.move(root, empty_name));
    188 
    189  assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]);
    190  assert_equals(await getFileContents(handle), 'foo');
    191  assert_equals(await getFileSize(handle), 3);
    192 
    193  const banned_name = '..';
    194  await promise_rejects_js(t, TypeError, handle.move(root, banned_name));
    195 
    196  assert_array_equals(await getSortedDirectoryEntries(root), [valid_name]);
    197  assert_equals(await getFileContents(handle), 'foo');
    198  assert_equals(await getFileSize(handle), 3);
    199 }, 'move(dir, name) with a name with invalid characters should fail');
    200 
    201 directory_test(async (t, root) => {
    202  const handle = await createFileWithContents('file-before', 'foo', root);
    203  await promise_rejects_js(t, TypeError, handle.move(root, ''));
    204 
    205  assert_array_equals(await getSortedDirectoryEntries(root), ['file-before']);
    206  assert_equals(await getFileContents(handle), 'foo');
    207  assert_equals(await getFileSize(handle), 3);
    208 }, 'move(dir, "") should fail');
    209 
    210 directory_test(async (t, root) => {
    211  const dir = await root.getDirectoryHandle('dir', {create: true});
    212  await promise_rejects_dom(
    213      t, 'InvalidModificationError', dir.move(dir));
    214 
    215  assert_array_equals(await getSortedDirectoryEntries(root), ['dir/']);
    216  assert_array_equals(await getSortedDirectoryEntries(dir), []);
    217 }, 'move(dir, name) to move a directory within itself fails');
    218 
    219 directory_test(async (t, root) => {
    220  const dir = await root.getDirectoryHandle('dir', {create: true});
    221  await promise_rejects_dom(
    222      t, 'InvalidModificationError', dir.move(dir, 'dir-fail'));
    223 
    224  assert_array_equals(await getSortedDirectoryEntries(root), ['dir/']);
    225  assert_array_equals(await getSortedDirectoryEntries(dir), []);
    226 }, 'move(dir, name) to move a directory within itself and rename fails');
    227 
    228 directory_test(async (t, root) => {
    229  const parent_dir =
    230      await root.getDirectoryHandle('parent-dir', {create: true});
    231  const child_dir =
    232      await parent_dir.getDirectoryHandle('child-dir', {create: true});
    233  await promise_rejects_dom(
    234      t, 'InvalidModificationError', parent_dir.move(child_dir));
    235 
    236  assert_array_equals(await getSortedDirectoryEntries(root), ['parent-dir/']);
    237  assert_array_equals(
    238      await getSortedDirectoryEntries(parent_dir), ['child-dir/']);
    239  assert_array_equals(await getSortedDirectoryEntries(child_dir), []);
    240 }, 'move(dir) to move a directory within a descendent fails');
    241 
    242 directory_test(async (t, root) => {
    243  const parent_dir =
    244      await root.getDirectoryHandle('parent-dir', {create: true});
    245  const child_dir =
    246      await parent_dir.getDirectoryHandle('child-dir', {create: true});
    247  await promise_rejects_dom(
    248      t, 'InvalidModificationError', parent_dir.move(child_dir, 'dir'));
    249 
    250  assert_array_equals(await getSortedDirectoryEntries(root), ['parent-dir/']);
    251  assert_array_equals(
    252      await getSortedDirectoryEntries(parent_dir), ['child-dir/']);
    253  assert_array_equals(await getSortedDirectoryEntries(child_dir), []);
    254 }, 'move(dir, name) to move a directory within a descendent fails');