diff --git a/test/parallel/test-module-_stat.js b/test/parallel/test-module-_stat.js new file mode 100644 index 00000000000000..db254fe7d320c9 --- /dev/null +++ b/test/parallel/test-module-_stat.js @@ -0,0 +1,54 @@ +'use strict'; +require('../common'); + +// This tests Module._stat. + +const Module = require('module'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); +const { mkdirSync, writeFileSync } = require('fs'); +const { strictEqual } = require('assert'); + +const directory = path.join(tmpdir.path, 'directory'); +const doesNotExist = path.join(tmpdir.path, 'does-not-exist'); +const file = path.join(tmpdir.path, 'file'); + +tmpdir.refresh(); +writeFileSync(file, ''); +mkdirSync(directory); + +strictEqual(Module._stat(directory), 1); +strictEqual(Module._stat(doesNotExist), -2); +strictEqual(Module._stat(file), 0); + +const vfsDirectory = path.join(process.execPath, 'directory'); +const vfsDoesNotExist = path.join(process.execPath, 'does-not-exist'); +const vfsFile = path.join(process.execPath, 'file'); + +strictEqual(Module._stat(vfsDirectory), -20); +strictEqual(Module._stat(vfsDoesNotExist), -20); +strictEqual(Module._stat(vfsFile), -20); + +const originalStat = Module._stat; +Module._stat = function(filename) { + if (!filename.startsWith(process.execPath)) { + return originalStat(filename); + } + + switch (filename) { + case vfsDirectory: + return 1; + case vfsDoesNotExist: + return -2; + case vfsFile: + return 0; + } +}; + +strictEqual(Module._stat(directory), 1); +strictEqual(Module._stat(doesNotExist), -2); +strictEqual(Module._stat(file), 0); + +strictEqual(Module._stat(vfsDirectory), 1); +strictEqual(Module._stat(vfsDoesNotExist), -2); +strictEqual(Module._stat(vfsFile), 0);