Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
module: support multi-dot file extension
Support multi-dot file extensions like '.coffee.md' in Module.load. PR-URL: #23416 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
- Loading branch information
Showing
with
111 additions
and 20 deletions.
There are no files selected for viewing
| @@ -0,0 +1,94 @@ | ||
| 'use strict'; | ||
|
|
||
| // Refs: https://github.com/nodejs/node/issues/4778 | ||
|
|
||
| const common = require('../common'); | ||
| const assert = require('assert'); | ||
| const fs = require('fs'); | ||
| const path = require('path'); | ||
| const Module = require('module'); | ||
| const tmpdir = require('../common/tmpdir'); | ||
| const file = path.join(tmpdir.path, 'test-extensions.foo.bar'); | ||
| const dotfile = path.join(tmpdir.path, '.bar'); | ||
| const dotfileWithExtension = path.join(tmpdir.path, '.foo.bar'); | ||
|
|
||
| tmpdir.refresh(); | ||
| fs.writeFileSync(file, 'console.log(__filename);', 'utf8'); | ||
| fs.writeFileSync(dotfile, 'console.log(__filename);', 'utf8'); | ||
| fs.writeFileSync(dotfileWithExtension, 'console.log(__filename);', 'utf8'); | ||
|
|
||
| { | ||
| require.extensions['.bar'] = common.mustNotCall(); | ||
| require.extensions['.foo.bar'] = common.mustCall(); | ||
| const modulePath = path.join(tmpdir.path, 'test-extensions'); | ||
| require(modulePath); | ||
| require(file); | ||
| delete require.cache[file]; | ||
| delete require.extensions['.bar']; | ||
| delete require.extensions['.foo.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| require.extensions['.foo.bar'] = common.mustCall(); | ||
| const modulePath = path.join(tmpdir.path, 'test-extensions'); | ||
| require(modulePath); | ||
| assert.throws( | ||
| () => require(`${modulePath}.foo`), | ||
| new Error(`Cannot find module '${modulePath}.foo'`) | ||
| ); | ||
| require(`${modulePath}.foo.bar`); | ||
| delete require.cache[file]; | ||
| delete require.extensions['.foo.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| const modulePath = path.join(tmpdir.path, 'test-extensions'); | ||
| assert.throws( | ||
| () => require(modulePath), | ||
| new Error(`Cannot find module '${modulePath}'`) | ||
| ); | ||
| delete require.cache[file]; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| require.extensions['.bar'] = common.mustNotCall(); | ||
| require.extensions['.foo.bar'] = common.mustCall(); | ||
| const modulePath = path.join(tmpdir.path, 'test-extensions.foo'); | ||
| require(modulePath); | ||
| delete require.cache[file]; | ||
| delete require.extensions['.bar']; | ||
| delete require.extensions['.foo.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| require.extensions['.foo.bar'] = common.mustNotCall(); | ||
| const modulePath = path.join(tmpdir.path, 'test-extensions.foo'); | ||
| assert.throws( | ||
| () => require(modulePath), | ||
| new Error(`Cannot find module '${modulePath}'`) | ||
| ); | ||
| delete require.extensions['.foo.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| require.extensions['.bar'] = common.mustNotCall(); | ||
| require(dotfile); | ||
| delete require.cache[dotfile]; | ||
| delete require.extensions['.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } | ||
|
|
||
| { | ||
| require.extensions['.bar'] = common.mustCall(); | ||
| require.extensions['.foo.bar'] = common.mustNotCall(); | ||
| require(dotfileWithExtension); | ||
| delete require.cache[dotfileWithExtension]; | ||
| delete require.extensions['.bar']; | ||
| delete require.extensions['.foo.bar']; | ||
| Module._pathCache = Object.create(null); | ||
| } |