deno.land / std@0.224.0 / fs / ensure_link_test.ts

ensure_link_test.ts
View Documentation
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.// TODO(axetroy): Add test for Windows once symlink is implemented for Windows.import { assertEquals, assertRejects, assertThrows } from "../assert/mod.ts";import * as path from "../path/mod.ts";import { ensureLink, ensureLinkSync } from "./ensure_link.ts";
const moduleDir = path.dirname(path.fromFileUrl(import.meta.url));const testdataDir = path.resolve(moduleDir, "testdata");
Deno.test("ensureLink() rejects if src and dest do not exist", async function () { const srcDir = path.join(testdataDir, "ensure_link_1"); const destDir = path.join(testdataDir, "ensure_link_1_2"); const testFile = path.join(srcDir, "test.txt"); const linkFile = path.join(destDir, "link.txt");
await assertRejects( async () => { await ensureLink(testFile, linkFile); }, );
await Deno.remove(destDir, { recursive: true });});
Deno.test("ensureLinkSync() throws if src and dest do not exist", function () { const testDir = path.join(testdataDir, "ensure_link_2"); const testFile = path.join(testDir, "test.txt"); const linkFile = path.join(testDir, "link.txt");
assertThrows(() => { ensureLinkSync(testFile, linkFile); });
Deno.removeSync(testDir, { recursive: true });});
Deno.test("ensureLink() ensures dest links to the src", async function () { const testDir = path.join(testdataDir, "ensure_link_3"); const testFile = path.join(testDir, "test.txt"); const linkFile = path.join(testDir, "link.txt");
await Deno.mkdir(testDir, { recursive: true }); await Deno.writeFile(testFile, new Uint8Array());
await ensureLink(testFile, linkFile);
const srcStat = await Deno.lstat(testFile); const linkStat = await Deno.lstat(linkFile);
assertEquals(srcStat.isFile, true); assertEquals(linkStat.isFile, true);
// har link success. try to change one of them. they should be change both.
// let's change origin file. await Deno.writeTextFile(testFile, "123");
const testFileContent1 = await Deno.readTextFile(testFile); const linkFileContent1 = await Deno.readTextFile(testFile);
assertEquals(testFileContent1, "123"); assertEquals(testFileContent1, linkFileContent1);
// let's change link file. await Deno.writeFile(testFile, new TextEncoder().encode("abc"));
const testFileContent2 = await Deno.readTextFile(testFile); const linkFileContent2 = await Deno.readTextFile(testFile);
assertEquals(testFileContent2, "abc"); assertEquals(testFileContent2, linkFileContent2);
await Deno.remove(testDir, { recursive: true });});
Deno.test("ensureLinkSync() ensures dest links to the src", function () { const testDir = path.join(testdataDir, "ensure_link_4"); const testFile = path.join(testDir, "test.txt"); const linkFile = path.join(testDir, "link.txt");
Deno.mkdirSync(testDir, { recursive: true }); Deno.writeFileSync(testFile, new Uint8Array());
ensureLinkSync(testFile, linkFile);
const srcStat = Deno.lstatSync(testFile);
const linkStat = Deno.lstatSync(linkFile);
assertEquals(srcStat.isFile, true); assertEquals(linkStat.isFile, true);
// har link success. try to change one of them. they should be change both.
// let's change origin file. Deno.writeFileSync(testFile, new TextEncoder().encode("123"));
const testFileContent1 = new TextDecoder().decode( Deno.readFileSync(testFile), ); const linkFileContent1 = new TextDecoder().decode( Deno.readFileSync(testFile), );
assertEquals(testFileContent1, "123"); assertEquals(testFileContent1, linkFileContent1);
// let's change link file. Deno.writeFileSync(testFile, new TextEncoder().encode("abc"));
const testFileContent2 = new TextDecoder().decode( Deno.readFileSync(testFile), ); const linkFileContent2 = new TextDecoder().decode( Deno.readFileSync(testFile), );
assertEquals(testFileContent2, "abc"); assertEquals(testFileContent2, linkFileContent2);
Deno.removeSync(testDir, { recursive: true });});
Deno.test("ensureLink() rejects if link does not exist", async function () { const testDir = path.join(testdataDir, "ensure_link_origin_3"); const linkDir = path.join(testdataDir, "ensure_link_link_3"); const testFile = path.join(testDir, "test.txt");
await Deno.mkdir(testDir, { recursive: true }); await Deno.writeFile(testFile, new Uint8Array());
await assertRejects( async () => { await ensureLink(testDir, linkDir); }, // "Operation not permitted (os error 1)" // throw an local matching test // "Access is denied. (os error 5)" // throw in CI );
await Deno.remove(testDir, { recursive: true });});
Deno.test("ensureLinkSync() throws if link does not exist", function () { const testDir = path.join(testdataDir, "ensure_link_origin_3"); const linkDir = path.join(testdataDir, "ensure_link_link_3"); const testFile = path.join(testDir, "test.txt");
Deno.mkdirSync(testDir, { recursive: true }); Deno.writeFileSync(testFile, new Uint8Array());
assertThrows( () => { ensureLinkSync(testDir, linkDir); }, // "Operation not permitted (os error 1)" // throw an local matching test // "Access is denied. (os error 5)" // throw in CI );
Deno.removeSync(testDir, { recursive: true });});
std

Version Info

Tagged at
6 months ago