-
Notifications
You must be signed in to change notification settings - Fork 879
/
file-utils_test.ts
77 lines (67 loc) · 2.11 KB
/
file-utils_test.ts
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
/**
* @license
* Copyright 2022 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
import {suite} from 'uvu';
// eslint-disable-next-line import/extensions
import * as assert from 'uvu/assert';
import {FilesystemTestRig} from '@lit-internal/tests/utils/filesystem-test-rig.js';
import {writeFileTree} from '../lib/file-utils.js';
const writeFileTreeTest = suite<{tempFs: FilesystemTestRig}>('writeFileTree');
writeFileTreeTest.before(async (ctx) => {
ctx.tempFs = new FilesystemTestRig();
await ctx.tempFs.setup();
});
writeFileTreeTest.after(async ({tempFs}) => {
await tempFs.cleanup();
});
writeFileTreeTest('top-level files', async ({tempFs}) => {
await writeFileTree(tempFs.rootDir, {
foo: 'foo',
'bar.js': 'bar.js',
});
assert.equal(await tempFs.read('foo'), 'foo');
assert.equal(await tempFs.read('bar.js'), 'bar.js');
});
writeFileTreeTest('files in folders', async ({tempFs}) => {
await writeFileTree(tempFs.rootDir, {
dir1: {
foo1: 'foo1',
'bar1.js': 'bar1.js',
dir2: {
dir3: {
'some-really_long.filename.js': 'some-really_long.filename.js',
},
},
},
});
assert.equal(await tempFs.read('dir1/foo1'), 'foo1');
assert.equal(await tempFs.read('dir1/bar1.js'), 'bar1.js');
assert.equal(
await tempFs.read('dir1/dir2/dir3/some-really_long.filename.js'),
'some-really_long.filename.js'
);
});
writeFileTreeTest('filenames containing folders', async ({tempFs}) => {
await writeFileTree(tempFs.rootDir, {
'file/with/dir/baz.js': 'baz.js',
dir3: {
'file/in/dir3/zot.js': 'zot.js',
},
});
assert.equal(await tempFs.read('file/with/dir/baz.js'), 'baz.js');
assert.equal(await tempFs.read('dir3/file/in/dir3/zot.js'), 'zot.js');
});
writeFileTreeTest('errors when file escapes root folder', async ({tempFs}) => {
try {
await writeFileTree(tempFs.rootDir, {
'too_many/../../dots': 'baz.js',
});
assert.unreachable('Expected writeFileTree to throw an error');
} catch (e) {
assert.instance(e, Error);
assert.match((e as Error).message, 'is not contained in');
}
});
writeFileTreeTest.run();