summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fs/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js
blob: 6a63edecc5fa98a1a941c77a8e17dca8325e6f52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
'use strict';

directory_test(async (t, root) => {
  await promise_rejects_dom(
      t, 'NotFoundError', root.getDirectoryHandle('non-existing-dir'));
}, 'getDirectoryHandle(create=false) rejects for non-existing directories');

directory_test(async (t, root) => {
  const handle =
      await root.getDirectoryHandle('non-existing-dir', {create: true});
  t.add_cleanup(() => root.removeEntry('non-existing-dir', {recursive: true}));

  assert_equals(handle.kind, 'directory');
  assert_equals(handle.name, 'non-existing-dir');
  assert_equals(await getDirectoryEntryCount(handle), 0);
  assert_array_equals(
      await getSortedDirectoryEntries(root), ['non-existing-dir/']);
}, 'getDirectoryHandle(create=true) creates an empty directory');

directory_test(async (t, root) => {
  const existing_handle =
      await root.getDirectoryHandle('dir-with-contents', {create: true});
  t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true}));
  const file_handle = await createEmptyFile(t, 'test-file', existing_handle);

  const handle =
      await root.getDirectoryHandle('dir-with-contents', {create: false});

  assert_equals(handle.kind, 'directory');
  assert_equals(handle.name, 'dir-with-contents');
  assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']);
}, 'getDirectoryHandle(create=false) returns existing directories');

directory_test(async (t, root) => {
  const existing_handle =
      await root.getDirectoryHandle('dir-with-contents', {create: true});
  t.add_cleanup(() => root.removeEntry('dir-with-contents', {recursive: true}));
  const file_handle =
      await existing_handle.getFileHandle('test-file', {create: true});

  const handle =
      await root.getDirectoryHandle('dir-with-contents', {create: true});

  assert_equals(handle.kind, 'directory');
  assert_equals(handle.name, 'dir-with-contents');
  assert_array_equals(await getSortedDirectoryEntries(handle), ['test-file']);
}, 'getDirectoryHandle(create=true) returns existing directories without erasing');

directory_test(async (t, root) => {
  await createEmptyFile(t, 'file-name', root);

  await promise_rejects_dom(
      t, 'TypeMismatchError', root.getDirectoryHandle('file-name'));
  await promise_rejects_dom(
      t, 'TypeMismatchError',
      root.getDirectoryHandle('file-name', {create: false}));
  await promise_rejects_dom(
      t, 'TypeMismatchError',
      root.getDirectoryHandle('file-name', {create: true}));
}, 'getDirectoryHandle() when a file already exists with the same name');

directory_test(async (t, dir) => {
  await promise_rejects_js(
      t, TypeError, dir.getDirectoryHandle('', {create: true}));
  await promise_rejects_js(
      t, TypeError, dir.getDirectoryHandle('', {create: false}));
}, 'getDirectoryHandle() with empty name');

directory_test(async (t, dir) => {
  await promise_rejects_js(
      t, TypeError, dir.getDirectoryHandle(kCurrentDirectory));
  await promise_rejects_js(
      t, TypeError, dir.getDirectoryHandle(kCurrentDirectory, {create: true}));
}, `getDirectoryHandle() with "${kCurrentDirectory}" name`);

directory_test(async (t, dir) => {
  const subdir = await createDirectory(t, 'subdir-name', /*parent=*/ dir);

  await promise_rejects_js(
      t, TypeError, subdir.getDirectoryHandle(kParentDirectory));
  await promise_rejects_js(
      t, TypeError,
      subdir.getDirectoryHandle(kParentDirectory, {create: true}));
}, `getDirectoryHandle() with "${kParentDirectory}" name`);

directory_test(async (t, dir) => {
  const first_subdir_name = 'first-subdir-name';
  const first_subdir =
      await createDirectory(t, first_subdir_name, /*parent=*/ dir);

  const second_subdir_name = 'second-subdir-name';
  const second_subdir =
      await createDirectory(t, second_subdir_name, /*parent=*/ first_subdir);

  for (let i = 0; i < kPathSeparators.length; ++i) {
    const path_with_separator =
        `${first_subdir_name}${kPathSeparators[i]}${second_subdir_name}`;
    await promise_rejects_js(
        t, TypeError, dir.getDirectoryHandle(path_with_separator),
        `getDirectoryHandle() must reject names containing "${
            kPathSeparators[i]}"`);
  }
}, 'getDirectoryHandle(create=false) with a path separator when the directory exists');

directory_test(async (t, dir) => {
  const subdir_name = 'subdir-name';
  const subdir = await createDirectory(t, subdir_name, /*parent=*/ dir);

  for (let i = 0; i < kPathSeparators.length; ++i) {
    const path_with_separator = `${subdir_name}${kPathSeparators[i]}file_name`;
    await promise_rejects_js(
        t, TypeError,
        dir.getDirectoryHandle(path_with_separator, {create: true}),
        `getDirectoryHandle(true) must reject names containing "${
            kPathSeparators[i]}"`);
  }
}, 'getDirectoryHandle(create=true) with a path separator');