Enable linting for the test directory. A number of changes was made so all tests conform the current rules used by lib and src directories. The only exception for tests is that unreachable (dead) code is allowed. test-fs-non-number-arguments-throw had to be excluded from the changes because of a weird issue on Windows CI. PR-URL: https://github.com/nodejs/io.js/pull/1721 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
141 lines
3.1 KiB
JavaScript
141 lines
3.1 KiB
JavaScript
'use strict';
|
|
var common = require('../common');
|
|
var assert = require('assert');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var got_error = false;
|
|
var success_count = 0;
|
|
var mode_async;
|
|
var mode_sync;
|
|
var is_windows = process.platform === 'win32';
|
|
|
|
// Need to hijack fs.open/close to make sure that things
|
|
// get closed once they're opened.
|
|
fs._open = fs.open;
|
|
fs._openSync = fs.openSync;
|
|
fs.open = open;
|
|
fs.openSync = openSync;
|
|
fs._close = fs.close;
|
|
fs._closeSync = fs.closeSync;
|
|
fs.close = close;
|
|
fs.closeSync = closeSync;
|
|
|
|
var openCount = 0;
|
|
|
|
function open() {
|
|
openCount++;
|
|
return fs._open.apply(fs, arguments);
|
|
}
|
|
|
|
function openSync() {
|
|
openCount++;
|
|
return fs._openSync.apply(fs, arguments);
|
|
}
|
|
|
|
function close() {
|
|
openCount--;
|
|
return fs._close.apply(fs, arguments);
|
|
}
|
|
|
|
function closeSync() {
|
|
openCount--;
|
|
return fs._closeSync.apply(fs, arguments);
|
|
}
|
|
|
|
|
|
// On Windows chmod is only able to manipulate read-only bit
|
|
if (is_windows) {
|
|
mode_async = 0o400; // read-only
|
|
mode_sync = 0o600; // read-write
|
|
} else {
|
|
mode_async = 0o777;
|
|
mode_sync = 0o644;
|
|
}
|
|
|
|
var file1 = path.join(common.fixturesDir, 'a.js'),
|
|
file2 = path.join(common.fixturesDir, 'a1.js');
|
|
|
|
fs.chmod(file1, mode_async.toString(8), function(err) {
|
|
if (err) {
|
|
got_error = true;
|
|
} else {
|
|
console.log(fs.statSync(file1).mode);
|
|
|
|
if (is_windows) {
|
|
assert.ok((fs.statSync(file1).mode & 0o777) & mode_async);
|
|
} else {
|
|
assert.equal(mode_async, fs.statSync(file1).mode & 0o777);
|
|
}
|
|
|
|
fs.chmodSync(file1, mode_sync);
|
|
if (is_windows) {
|
|
assert.ok((fs.statSync(file1).mode & 0o777) & mode_sync);
|
|
} else {
|
|
assert.equal(mode_sync, fs.statSync(file1).mode & 0o777);
|
|
}
|
|
success_count++;
|
|
}
|
|
});
|
|
|
|
fs.open(file2, 'a', function(err, fd) {
|
|
if (err) {
|
|
got_error = true;
|
|
console.error(err.stack);
|
|
return;
|
|
}
|
|
fs.fchmod(fd, mode_async.toString(8), function(err) {
|
|
if (err) {
|
|
got_error = true;
|
|
} else {
|
|
console.log(fs.fstatSync(fd).mode);
|
|
|
|
if (is_windows) {
|
|
assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_async);
|
|
} else {
|
|
assert.equal(mode_async, fs.fstatSync(fd).mode & 0o777);
|
|
}
|
|
|
|
fs.fchmodSync(fd, mode_sync);
|
|
if (is_windows) {
|
|
assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_sync);
|
|
} else {
|
|
assert.equal(mode_sync, fs.fstatSync(fd).mode & 0o777);
|
|
}
|
|
success_count++;
|
|
fs.close(fd);
|
|
}
|
|
});
|
|
});
|
|
|
|
// lchmod
|
|
if (fs.lchmod) {
|
|
var link = path.join(common.tmpDir, 'symbolic-link');
|
|
|
|
try {
|
|
fs.unlinkSync(link);
|
|
} catch (er) {}
|
|
fs.symlinkSync(file2, link);
|
|
|
|
fs.lchmod(link, mode_async, function(err) {
|
|
if (err) {
|
|
got_error = true;
|
|
} else {
|
|
console.log(fs.lstatSync(link).mode);
|
|
assert.equal(mode_async, fs.lstatSync(link).mode & 0o777);
|
|
|
|
fs.lchmodSync(link, mode_sync);
|
|
assert.equal(mode_sync, fs.lstatSync(link).mode & 0o777);
|
|
success_count++;
|
|
}
|
|
});
|
|
} else {
|
|
success_count++;
|
|
}
|
|
|
|
|
|
process.on('exit', function() {
|
|
assert.equal(3, success_count);
|
|
assert.equal(0, openCount);
|
|
assert.equal(false, got_error);
|
|
});
|
|
|