forked from codesandbox/codesandbox-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnode-fs-write-file-sync.ts
More file actions
95 lines (76 loc) · 2.68 KB
/
node-fs-write-file-sync.ts
File metadata and controls
95 lines (76 loc) · 2.68 KB
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
import fs from '../../../../src/core/node_fs';
import * as path from 'path';
import assert from '../../../harness/wrapped-assert';
import common from '../../../harness/common';
export default function() {
//var openCount = 0;
var mode: number;
var content: string;
var rootFS = fs.getRootFS();
// Removes a file if it exists.
function removeFile(file: string) {
try {
//if (isWindows)
// fs.chmodSync(file, 0666);
fs.unlinkSync(file);
} catch (err) {
if (err && err.code !== 'ENOENT')
throw err;
}
}
function openSync() {
//openCount++;
return (<any>rootFS)._openSync.apply(rootFS, arguments);
}
function closeSync() {
//openCount--;
return (<any>fs)._closeSync.apply(fs, arguments);
}
// Only works for file systems that support synchronous ops.
if (!(rootFS.isReadOnly() || !rootFS.supportsSynch())) {
// Need to hijack fs.open/close to make sure that things
// get closed once they're opened.
(<any>rootFS)._openSync = rootFS.openSync;
rootFS.openSync = openSync;
(<any>fs)._closeSync = fs.closeSync;
fs.closeSync = closeSync;
// BFS: Restore old handlers.
process.on('exit', function() {
rootFS.openSync = (<any>rootFS)._openSync;
fs.closeSync = (<any>fs)._closeSync;
});
// Reset the umask for testing
// BFS: Not supported.
//var mask = process.umask(0);
// On Windows chmod is only able to manipulate read-only bit. Test if creating
// the file in read-only mode works.
mode = 0o755;
// Test writeFileSync
var file1 = path.join(common.tmpDir, 'testWriteFileSync.txt');
removeFile(file1);
fs.writeFileSync(file1, '123', {mode: mode});
content = fs.readFileSync(file1, {encoding: 'utf8'});
assert.equal('123', content,
'File contents mismatch: \'' + content + '\' != \'123\'');
if (rootFS.supportsProps()) {
var actual = fs.statSync(file1).mode & 0o777;
assert.equal(mode, actual,
'Expected mode 0' + mode.toString(8) + ', got mode 0' + actual.toString(8));
}
removeFile(file1);
// Test appendFileSync
var file2 = path.join(common.tmpDir, 'testAppendFileSync.txt');
removeFile(file2);
fs.appendFileSync(file2, 'abc', {mode: mode});
content = fs.readFileSync(file2, {encoding: 'utf8'});
assert.equal('abc', content,
'File contents mismatch: \'' + content + '\' != \'abc\'');
if (rootFS.supportsProps()) {
assert.equal(mode, fs.statSync(file2).mode & mode);
}
removeFile(file2);
// Verify that all opened files were closed.
// BFS: Some file systems call themselves, and not the node API directly.
// assert.equal(0, openCount);
}
};