let stat_tsuite = {
name: "fs stat",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "callback", method: "stat" },
let statSync_tsuite = {
name: "fs statSync",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "sync", method: "stat" },
let statP_tsuite = {
name: "fsp stat",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "promise", method: "stat" },
let lstat_tsuite = {
name: "fs lstat",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "callback", method: "lstat" },
let lstatSync_tsuite = {
name: "fs lstatSync",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "sync", method: "lstat" },
let lstatP_tsuite = {
name: "fsp lstat",
- skip: () => (!has_fs() || !has_buffer()),
+ skip: () => (!has_fs() || !has_fs_symbolic_link() || !has_buffer()),
T: stat_test,
prepare_args: p,
opts: { type: "promise", method: "lstat" },
let stages = [];
-Promise.resolve()
+let test = () => Promise.resolve()
.then(() => {
return fsp.writeFile(fname, fname);
})
.then(() => {
assert.compareArray(stages, ["init", "short circut", "chain", "errors ok"]);
})
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(test)
+ .then(() => assert.compareArray(stages, ["init", "short circut", "chain", "errors ok"]))
+}
+
+p.then($DONE, $DONE);
var fname = `${test_dir}/fs_promises_02`;
-var testSync = new Promise((resolve, reject) => {
- var failed = false;
+let stages = [];
+
+var testSync = () => new Promise((resolve, reject) => {
try {
fs.writeFileSync(fname, fname);
try {
fs.accessSync(fname + '___');
- failed = true;
- } catch(e) {
- failed = (e.syscall != 'access') || e.code != 'ENOENT';
+ reject(new Error('fs.accessSync error 1'));
+ } catch (e) {
+ if (e.syscall != 'access' || e.code != 'ENOENT') {
+ reject(new Error('fs.accessSync error 2'));
+ }
}
- resolve(Boolean(failed));
+
+ stages.push('testSync');
+
+ resolve();
+
} catch (e) {
reject(e);
}
});
-var testCallback = new Promise((resolve, reject) => {
- var failed = false;
-
+var testCallback = () => new Promise((resolve, reject) => {
fs.writeFileSync(fname, fname);
fs.access(fname, (err) => {
- failed = (err !== undefined);
+ if (err) {
+ reject(new Error('fs.access error 1'));
+ }
+
fs.access(fname, fs.constants.R_OK | fs.constants.W_OK, (err) => {
- failed |= (err !== undefined);
+ if (err) {
+ reject(err);
+ }
+
fs.access(fname + '___', (err) => {
- failed |= ((err === undefined) || (err.syscall != 'access')
- || err.code != 'ENOENT');
- resolve(Boolean(failed));
+ if (!err
+ || err.syscall != 'access'
+ || err.code != 'ENOENT')
+ {
+ reject(new Error('fs.access error 2'));
+ }
+
+ stages.push('testCallback');
+
+ resolve();
});
});
});
});
-let stages = [];
-
-Promise.resolve()
-.then(() => testSync)
-.then(failed => {
- stages.push('testSync');
- assert.sameValue(failed, false, 'testSync');
-})
-.then(() => testCallback)
-.then(failed => {
- stages.push('testCallback');
- assert.sameValue(failed, false, 'testCallback');
-})
+let testFsp = () => Promise.resolve()
.then(() => {
fs.writeFileSync(fname, fname);
assert.sameValue(e.path, fname + '___', 'testPromise');
assert.sameValue(e.code, 'ENOENT', 'testPromise');
})
-.then(() => {
- assert.compareArray(stages, ["testSync", "testCallback", "testPromise"]);
-})
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ["testSync", "testCallback", "testPromise"]))
+}
+
+p.then($DONE, $DONE);
var fname = `${test_dir}/fs_promises_03`;
+let stages = [];
+
var testSync = () => new Promise((resolve, reject) => {
try {
try {
void e;
}
+ stages.push("unlinkSync");
+
resolve();
} catch (e) {
reject(e);
}
});
-
var testCallback = () => new Promise((resolve, reject) => {
fs.unlink(fname, () => {
fs.unlink(fname, (err) => {
} catch (e) {
void e;
}
+
+ stages.push("unlink");
+
resolve();
});
});
});
});
-let stages = [];
-
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("unlinkSync");
-})
-
-.then(testCallback)
-.then(() => {
- stages.push("unlink");
-})
-
+let testFsp = () => Promise.resolve()
.then(() => fsp.unlink(fname)
.catch(() => {}))
.then(() => fsp.unlink(fname))
.then(() => { throw new Error('fsp.unlink error 1'); })
.catch((e) => { if (e.syscall != 'unlink') { throw e; } })
-
.then(() => {
fs.writeFileSync(fname, fname);
return fsp.unlink(fname);
.then(() => fsp.access(fname))
.then(() => { throw new Error('fsp.unlink error 2'); })
.catch((e) => { if (e.syscall != 'access') { throw e; } })
-
.then(() => {
stages.push("fsp.unlink");
})
-.then(() => assert.compareArray(stages, ['unlinkSync', 'unlink', 'fsp.unlink']))
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ['unlinkSync', 'unlink', 'fsp.unlink']))
+}
+
+p.then($DONE, $DONE);
var fname_utf8 = `${test_dir}/fs_promises_αβγ_04`;
var lname = `${test_dir}/fs_promises_lnk_04`;
+let stages = [];
+
var testSync = () => new Promise((resolve, reject) => {
try {
- try {
- fs.unlinkSync(fname);
- } catch (e) {
- void e;
- }
- try {
- fs.unlinkSync(lname);
- } catch (e) {
- void e;
- }
+ try { fs.unlinkSync(fname); } catch (e) {}
+ try { fs.unlinkSync(lname); } catch (e) {}
try {
fs.realpathSync(fname);
+
throw new Error('fs.realpathSync error 1');
+
} catch (e) {
- if (e.syscall != 'realpath' || e.code != 'ENOENT') {
- throw e;
+ if (e.code != 'ENOENT') {
+ throw new Error('fs.realpathSync error 2');
}
}
var rname_utf8 = fs.realpathSync(fname_utf8);
if (rname_utf8.slice(-6,-3) != 'αβγ') {
- throw new Error('fs.realpathSync error 2');
+ throw new Error('fs.realpathSync error 3');
}
fs.unlinkSync(lname);
fs.unlinkSync(fname);
fs.unlinkSync(fname_utf8);
+ stages.push("symlinkSync");
+
resolve();
} catch (e) {
reject(new Error('fs.realpath error 1'));
return;
}
- if (err.syscall != 'realpath' || err.code != 'ENOENT') {
+
+ if (err.code != 'ENOENT') {
reject(err);
return;
}
return;
}
+ stages.push("symlink");
+
resolve();
});
});
}
});
-let stages = [];
-
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("symlinkSync");
-})
-
-.then(testCallback)
-.then(() => {
- stages.push("symlink");
-})
-
+let testFsp = () => Promise.resolve()
.then(() => fsp.unlink(fname)
.catch(() => {}))
.then(() => fsp.unlink(lname)
fs.unlinkSync(lname);
fs.accessSync(fname);
fs.unlinkSync(fname);
-})
-.then(() => {
stages.push("fsp.symlink");
})
-.then(() => assert.compareArray(stages, ['symlinkSync', 'symlink', 'fsp.symlink']))
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs() && has_fs_symbolic_link()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ['symlinkSync', 'symlink', 'fsp.symlink']))
+}
+
+p.then($DONE, $DONE);
var dname_utf8 = `${test_dir}/fs_promises_αβγ_05`;
var fname = (d) => d + '/fs_promises_05_file';
+let stages = [];
+
var testSync = () => new Promise((resolve, reject) => {
try {
try { fs.unlinkSync(fname(dname)); } catch (e) {}
try {
fs.writeFileSync(fname(dname_utf8), fname(dname_utf8));
+ throw new Error('fs.mkdirSync error 1');
+
} catch (e) {
if (e.syscall != 'open' || e.code != 'EACCES') {
throw e;
fs.rmdirSync(dname_utf8);
+ stages.push("mkdirSync");
+
resolve();
} catch (e) {
reject(err);
}
+ stages.push("mkdir");
+
resolve();
});
});
}
});
-
-let stages = [];
-
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("mkdirSync");
-})
-
-
-.then(testCallback)
-.then(() => {
- stages.push("mkdir");
-})
-
+let testFsp = () => Promise.resolve()
.then(() => {
try { fs.unlinkSync(fname(dname)); } catch (e) {}
try { fs.unlinkSync(fname(dname_utf8)); } catch (e) {}
.then(() => {
stages.push("fsp.mkdir");
})
-.then(() => assert.compareArray(stages, ['mkdirSync', 'mkdir', 'fsp.mkdir']))
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ['mkdirSync', 'mkdir', 'fsp.mkdir']))
+}
+
+p.then($DONE, $DONE);
var fname = (d) => d + '/fs_promises_06_file';
var fname_utf8 = (d) => d + '/fs_promises_αβγ_06';
-var testSync = new Promise((resolve, reject) => {
+let stages = [];
+
+var testSync = () => new Promise((resolve, reject) => {
try {
try { fs.unlinkSync(fname(dname)); } catch (e) {}
try { fs.unlinkSync(fname_utf8(dname)); } catch (e) {}
if (e.syscall != 'rename'
|| (e.code != 'ENOTDIR' && e.code != 'EISDIR'))
{
- throw e;
+ reject(new Error('fs.unlinkSync error 1'));
}
}
+ stages.push("renameSync");
+
resolve();
} catch (e) {
}
});
-var testCallback = new Promise((resolve, reject) => {
+var testCallback = () => new Promise((resolve, reject) => {
try {
try { fs.unlinkSync(fname(dname)); } catch (e) {}
try { fs.unlinkSync(fname_utf8(dname)); } catch (e) {}
fs.rename(fname(dname), fname_utf8(dname), err => {
if (err) {
- throw err;
+ reject(new Error('fs.unlink error 1'));
}
- });
- fs.accessSync(fname_utf8(dname));
+ fs.accessSync(fname_utf8(dname));
- fs.rename(fname_utf8(dname), dname, err => {
- if (err.syscall != 'rename'
- || (err.code != 'ENOTDIR' && err.code != 'EISDIR'))
- {
- throw err;
- }
- });
+ fs.rename(fname_utf8(dname), dname, err => {
+ if (err.syscall != 'rename'
+ || (err.code != 'ENOTDIR' && err.code != 'EISDIR'))
+ {
+ reject(new Error('fs.unlink error 2'));
+ }
+ });
- resolve();
+ stages.push("rename");
+
+ resolve();
+ });
} catch (e) {
reject(e);
}
});
-let stages = [];
-
-Promise.resolve()
-.then(() => testSync)
-.then(() => {
- stages.push("renameSync");
-})
-.catch((e) => {
- console.log('test fs.renameSync failed', JSON.stringify(e));
-})
-
-.then(testCallback)
-.then(() => {
- stages.push("rename");
-})
-.catch((e) => {
- console.log('test fs.rename failed', JSON.stringify(e));
-})
-
+let testFsp = () => Promise.resolve()
.then(() => {
try { fs.unlinkSync(fname(dname)); } catch (e) {}
try { fs.unlinkSync(fname_utf8(dname)); } catch (e) {}
if (e.syscall != 'rename'
|| (e.code != 'ENOTDIR' && e.code != 'EISDIR'))
{
- throw e;
+ throw new Error('fsp.rename error 1');
}
})
.then(() => {
stages.push("fsp.rename");
})
-.then(() => assert.compareArray(stages, ["renameSync", "rename", "fsp.rename"]))
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ["renameSync", "rename", "fsp.rename"]))
+}
+
+p.then($DONE, $DONE);
var idx = dir_test.indexOf(entry.name);
try {
- switch(idx) {
+ switch (idx) {
case 0:
return entry.isDirectory();
case 1:
}
};
+let stages = [];
var testSync = () => new Promise((resolve, reject) => {
try {
throw new Error('fs.readdirSync - error 8');
}
+ stages.push("readdirSync");
+
resolve();
} catch (e) {
reject(new Error('fs.readdir - error 5'));
}
+ stages.push("readdir");
+
resolve();
});
});
}
});
-
-let stages = [];
-
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("readdirSync");
-})
-
-.then(testCallback)
-.then(() => {
- stages.push("readdir");
-})
-
+let testFsp = () => Promise.resolve()
.then(() => {
try { fs.rmdirSync(cname(dname)); } catch (e) {}
try { fs.unlinkSync(lname(dname)); } catch (e) {}
.then(() => {
stages.push("fsp.readdir");
})
-.then(() => assert.compareArray(stages, ["readdirSync", "readdir", "fsp.readdir"]))
-.then($DONE, $DONE);
+
+let p = Promise.resolve()
+if (has_fs() && has_fs_symbolic_link()) {
+ p = p
+ .then(testSync)
+ .then(testCallback)
+ .then(testFsp)
+ .then(() => assert.compareArray(stages, ['readdirSync', 'readdir', 'fsp.readdir']))
+}
+
+p.then($DONE, $DONE);
});
};
+let stages = [];
+
var testSync = () => new Promise((resolve, reject) => {
try {
wipePath(dname, path + '/' + path, true);
wipePath(dname, path);
fs.rmdirSync(dname);
+
+ stages.push("mkdirSync")
+
resolve();
} catch (e) {
reject(e);
}
});
-let stages = [];
+let p = Promise.resolve()
+if (has_fs()) {
+ p = p
+ .then(testSync)
+ .then(() => assert.compareArray(stages, ["mkdirSync"]))
+}
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("mkdirSync");
-})
-.catch((e) => {
- $DONOTEVALUATE();
-})
-.then(() => assert.compareArray(stages, ["mkdirSync"]))
-.then($DONE, $DONE);
+p.then($DONE, $DONE);
var isNode = () => process.argv[0].includes('node');
+let stages = [];
var testSync = () => new Promise((resolve, reject) => {
try {
}
}
+ stages.push("rmdirSync");
+
resolve();
} catch (e) {
}
});
+let p = Promise.resolve()
+if (has_fs() && has_fs_symbolic_link()) {
+ p = p
+ .then(testSync)
+ .then(() => assert.compareArray(stages, ['rmdirSync']))
+}
-let stages = [];
-
-Promise.resolve()
-.then(testSync)
-.then(() => {
- stages.push("rmdirSync");
-})
-.then(() => assert.compareArray(stages, ["rmdirSync"]))
-.then($DONE, $DONE);
+p.then($DONE, $DONE);
fsp = fs.promises;
}
-function has_fs() {
- return fs;
+if (typeof process == 'undefined') {
+ globalThis.process = {};
}
let test_dir = process.env && process.env['NJS_TEST_DIR'] || 'build';
test_dir = `${test_dir}/test`;
+
+function has_fs() {
+ return fs;
+}
+
+function has_fs_symbolic_link() {
+ if (!fs) {
+ return false;
+ }
+
+ let fname = test_dir + '/a';
+ let lname = test_dir + '/b';
+
+ try { fs.unlinkSync(fname); fs.unlinkSync(lname); } catch (e) {}
+
+ fs.writeFileSync(fname, fname);
+
+ fname = fs.realpathSync(fname);
+
+ try {
+ fs.symlinkSync(fname, lname);
+ } catch (e) {
+ return false;
+ }
+
+ return true;
+}
+
if (typeof print !== 'function') {
- print = console.log;
+ globalThis.print = console.log;
}
if (typeof crypto == 'undefined' && typeof require == 'function') {
- crypto = require('crypto').webcrypto;
+ globalThis.crypto = require('crypto').webcrypto;
}
function has_webcrypto() {