@ -35,59 +35,68 @@ assert.strictEqual(process.mainModule, module,
// assert that it's *not* the main module in the required module.
require ( '../fixtures/not-main-module.js' ) ;
// require a file with a request that includes the extension
const a_js = require ( '../fixtures/a.js' ) ;
assert . strictEqual ( 42 , a_js . number ) ;
{
// require a file with a request that includes the extension
const a_js = require ( '../fixtures/a.js' ) ;
assert . strictEqual ( a_js . number , 42 ) ;
}
// require a file without any extensions
const foo_no_ext = require ( '../fixtures/foo' ) ;
assert . strictEqual ( 'ok' , foo_no_ext . foo ) ;
{
// require a file without any extensions
const foo_no_ext = require ( '../fixtures/foo' ) ;
assert . strictEqual ( foo_no_ext . foo , 'ok' ) ;
}
const a = require ( '../fixtures/a' ) ;
const c = require ( '../fixtures/b/c' ) ;
const d = require ( '../fixtures/b/d' ) ;
const d2 = require ( '../fixtures/b/d' ) ;
// Absolute
const d3 = require ( path . join ( __ dirname , '../fixtures/b/d' ) ) ;
// Relative
const d4 = require ( '../fixtures/b/d' ) ;
assert . strictEqual ( false , false , 'testing the test program.' ) ;
{
const c = require ( '../fixtures/b/c' ) ;
// Absolute
const d3 = require ( path . join ( __ dirname , '../fixtures/b/d' ) ) ;
// Relative
const d4 = require ( '../fixtures/b/d' ) ;
assert . ok ( a . A instanceof Function ) ;
assert . strictEqual ( 'A' , a . A ( ) ) ;
assert . ok ( a . A instanceof Function ) ;
assert . strictEqual ( a . A ( ) , 'A' ) ;
assert . ok ( a . C instanceof Function ) ;
assert . strictEqual ( 'C' , a . C ( ) ) ;
assert . ok ( a . C instanceof Function ) ;
assert . strictEqual ( a . C ( ) , 'C' ) ;
assert . ok ( a . D instanceof Function ) ;
assert . strictEqual ( 'D' , a . D ( ) ) ;
assert . ok ( a . D instanceof Function ) ;
assert . strictEqual ( a . D ( ) , 'D' ) ;
assert . ok ( d . D instanceof Function ) ;
assert . strictEqual ( 'D' , d . D ( ) ) ;
assert . ok ( d . D instanceof Function ) ;
assert . strictEqual ( d . D ( ) , 'D' ) ;
assert . ok ( d2 . D instanceof Function ) ;
assert . strictEqual ( 'D' , d2 . D ( ) ) ;
assert . ok ( d2 . D instanceof Function ) ;
assert . strictEqual ( d2 . D ( ) , 'D' ) ;
assert . ok ( d3 . D instanceof Function ) ;
assert . strictEqual ( 'D' , d3 . D ( ) ) ;
assert . ok ( d3 . D instanceof Function ) ;
assert . strictEqual ( d3 . D ( ) , 'D' ) ;
assert . ok ( d4 . D instanceof Function ) ;
assert . strictEqual ( 'D' , d4 . D ( ) ) ;
assert . ok ( d4 . D instanceof Function ) ;
assert . strictEqual ( d4 . D ( ) , 'D' ) ;
assert . ok ( ( new a . SomeClass ( ) ) instanceof c . SomeClass ) ;
assert . ok ( ( new a . SomeClass ( ) ) instanceof c . SomeClass ) ;
}
console . error ( 'test index.js modules ids and relative loading' ) ;
const one = require ( '../fixtures/nested-index/one' ) ;
const two = require ( '../fixtures/nested-index/two' ) ;
assert . notStrictEqual ( one . hello , two . hello ) ;
{
console . error ( 'test index.js modules ids and relative loading' ) ;
const one = require ( '../fixtures/nested-index/one' ) ;
const two = require ( '../fixtures/nested-index/two' ) ;
assert . notStrictEqual ( one . hello , two . hello ) ;
}
console . error ( 'test index.js in a folder with a trailing slash' ) ;
const three = require ( '../fixtures/nested-index/three' ) ;
const threeFolder = require ( '../fixtures/nested-index/three/' ) ;
const threeIndex = require ( '../fixtures/nested-index/three/index.js' ) ;
assert . strictEqual ( threeFolder , threeIndex ) ;
assert . notStrictEqual ( threeFolder , three ) ;
{
console . error ( 'test index.js in a folder with a trailing slash' ) ;
const three = require ( '../fixtures/nested-index/three' ) ;
const threeFolder = require ( '../fixtures/nested-index/three/' ) ;
const threeIndex = require ( '../fixtures/nested-index/three/index.js' ) ;
assert . strictEqual ( threeFolder , threeIndex ) ;
assert . notStrictEqual ( threeFolder , three ) ;
}
console . error ( 'test package.json require() loading' ) ;
assert . throws (
@ -104,31 +113,35 @@ assert.strictEqual(require('../fixtures/packages/main').ok, 'ok',
assert . strictEqual ( require ( '../fixtures/packages/main-index' ) . ok , 'ok' ,
'Failed loading package with index.js in main subdir' ) ;
console . error ( 'test cycles containing a .. path' ) ;
const root = require ( '../fixtures/cycles/root' ) ;
const foo = require ( '../fixtures/cycles/folder/foo' ) ;
assert . strictEqual ( root . foo , foo ) ;
assert . strictEqual ( root . sayHello ( ) , root . hello ) ;
{
console . error ( 'test cycles containing a .. path' ) ;
const root = require ( '../fixtures/cycles/root' ) ;
const foo = require ( '../fixtures/cycles/folder/foo' ) ;
assert . strictEqual ( root . foo , foo ) ;
assert . strictEqual ( root . sayHello ( ) , root . hello ) ;
}
console . error ( 'test node_modules folders' ) ;
// asserts are in the fixtures files themselves,
// since they depend on the folder structure.
require ( '../fixtures/node_modules/foo' ) ;
console . error ( 'test name clashes' ) ;
// this one exists and should import the local module
const my_path = require ( '../fixtures/path' ) ;
assert . ok ( my_path . path_func instanceof Function ) ;
// this one does not exist and should throw
assert . throws ( function ( ) { require ( './utils' ) ; } ,
/^Error: Cannot find module '\.\/utils'$/ ) ;
{
console . error ( 'test name clashes' ) ;
// this one exists and should import the local module
const my_path = require ( '../fixtures/path' ) ;
assert . ok ( my_path . path_func instanceof Function ) ;
// this one does not exist and should throw
assert . throws ( function ( ) { require ( './utils' ) ; } ,
/^Error: Cannot find module '\.\/utils'$/ ) ;
}
let errorThrown = false ;
try {
require ( '../fixtures/throws_error' ) ;
} catch ( e ) {
errorThrown = true ;
assert . strictEqual ( 'blah' , e . message ) ;
assert . strictEqual ( e . message , 'blah' ) ;
}
assert . strictEqual ( require ( 'path' ) . dirname ( __ filename ) , __ dirname ) ;
@ -136,7 +149,7 @@ assert.strictEqual(require('path').dirname(__filename), __dirname);
console . error ( 'load custom file types with extensions' ) ;
require . extensions [ '.test' ] = function ( module , filename ) {
let content = fs . readFileSync ( filename ) . toString ( ) ;
assert . strictEqual ( 'this is custom source\n' , content ) ;
assert . strictEqual ( content , 'this is custom source\n' ) ;
content = content . replace ( 'this is custom source' ,
'exports.test = \'passed\'' ) ;
module . _ compile ( content , filename ) ;
@ -166,114 +179,122 @@ try {
assert . strictEqual ( err . message , 'Cannot find module \'../fixtures/empty\'' ) ;
}
// Check load order is as expected
console . error ( 'load order' ) ;
const loadOrder = '../fixtures/module-load-order/' ;
const msg = 'Load order incorrect.' ;
require . extensions [ '.reg' ] = require . extensions [ '.js' ] ;
require . extensions [ '.reg2' ] = require . extensions [ '.js' ] ;
assert . strictEqual ( require ( loadOrder + 'file1' ) . file1 , 'file1' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file2' ) . file2 , 'file2.js' , msg ) ;
try {
require ( loadOrder + 'file3' ) ;
} catch ( e ) {
// Not a real .node module, but we know we require'd the right thing.
assert . ok ( e . message . replace ( /\\/g , '/' ) . match ( /file3\.node/ ) ) ;
{
// Check load order is as expected
console . error ( 'load order' ) ;
const loadOrder = '../fixtures/module-load-order/' ;
const msg = 'Load order incorrect.' ;
require . extensions [ '.reg' ] = require . extensions [ '.js' ] ;
require . extensions [ '.reg2' ] = require . extensions [ '.js' ] ;
assert . strictEqual ( require ( loadOrder + 'file1' ) . file1 , 'file1' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file2' ) . file2 , 'file2.js' , msg ) ;
try {
require ( loadOrder + 'file3' ) ;
} catch ( e ) {
// Not a real .node module, but we know we require'd the right thing.
assert . ok ( e . message . replace ( /\\/g , '/' ) . match ( /file3\.node/ ) ) ;
}
assert . strictEqual ( require ( loadOrder + 'file4' ) . file4 , 'file4.reg' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file5' ) . file5 , 'file5.reg2' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file6' ) . file6 , 'file6/index.js' , msg ) ;
try {
require ( loadOrder + 'file7' ) ;
} catch ( e ) {
assert . ok ( e . message . replace ( /\\/g , '/' ) . match ( /file7\/index\.node/ ) ) ;
}
assert . strictEqual ( require ( loadOrder + 'file8' ) . file8 , 'file8/index.reg' ,
msg ) ;
assert . strictEqual ( require ( loadOrder + 'file9' ) . file9 , 'file9/index.reg2' ,
msg ) ;
}
assert . strictEqual ( require ( loadOrder + 'file4' ) . file4 , 'file4.reg' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file5' ) . file5 , 'file5.reg2' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file6' ) . file6 , 'file6/index.js' , msg ) ;
try {
require ( loadOrder + 'file7' ) ;
} catch ( e ) {
assert . ok ( e . message . replace ( /\\/g , '/' ) . match ( /file7\/index\.node/ ) ) ;
}
assert . strictEqual ( require ( loadOrder + 'file8' ) . file8 , 'file8/index.reg' , msg ) ;
assert . strictEqual ( require ( loadOrder + 'file9' ) . file9 , 'file9/index.reg2' , msg ) ;
// make sure that module.require() is the same as
// doing require() inside of that module.
const parent = require ( '../fixtures/module-require/parent/' ) ;
const child = require ( '../fixtures/module-require/child/' ) ;
assert . strictEqual ( child . loaded , parent . loaded ) ;
{
// make sure that module.require() is the same as
// doing require() inside of that module.
const parent = require ( '../fixtures/module-require/parent/' ) ;
const child = require ( '../fixtures/module-require/child/' ) ;
assert . strictEqual ( child . loaded , parent . loaded ) ;
}
// #1357 Loading JSON files with require()
const json = require ( '../fixtures/packages/main/package.json' ) ;
assert . deepStrictEqual ( json , {
name : 'package-name' ,
version : '1.2.3' ,
main : 'package-main-module'
} ) ;
{
// #1357 Loading JSON files with require()
const json = require ( '../fixtures/packages/main/package.json' ) ;
assert . deepStrictEqual ( json , {
name : 'package-name' ,
version : '1.2.3' ,
main : 'package-main-module'
} ) ;
}
// now verify that module.children contains all the different
// modules that we've required, and that all of them contain
// the appropriate children, and so on.
const children = module . children . reduce ( function red ( set , child ) {
let id = path . relative ( path . dirname ( __ dirname ) , child . id ) ;
id = id . replace ( /\\/g , '/' ) ;
set [ id ] = child . children . reduce ( red , { } ) ;
return set ;
} , { } ) ;
assert . deepStrictEqual ( children , {
'common.js' : { } ,
'fixtures/not-main-module.js' : { } ,
'fixtures/a.js' : {
'fixtures/b/c.js' : {
'fixtures/b/d.js' : { } ,
'fixtures/b/package/index.js' : { }
}
} ,
'fixtures/foo' : { } ,
'fixtures/nested-index/one/index.js' : {
'fixtures/nested-index/one/hello.js' : { }
} ,
'fixtures/nested-index/two/index.js' : {
'fixtures/nested-index/two/hello.js' : { }
} ,
'fixtures/nested-index/three.js' : { } ,
'fixtures/nested-index/three/index.js' : { } ,
'fixtures/packages/index/index.js' : { } ,
'fixtures/packages/main/package-main-module.js' : { } ,
'fixtures/packages/main-index/package-main-module/index.js' : { } ,
'fixtures/cycles/root.js' : {
'fixtures/cycles/folder/foo.js' : { }
} ,
'fixtures/node_modules/foo.js' : {
'fixtures/node_modules/baz/index.js' : {
'fixtures/node_modules/bar.js' : { } ,
'fixtures/node_modules/baz/node_modules/asdf.js' : { }
}
} ,
'fixtures/path.js' : { } ,
'fixtures/throws_error.js' : { } ,
'fixtures/registerExt.test' : { } ,
'fixtures/registerExt.hello.world' : { } ,
'fixtures/registerExt2.test' : { } ,
'fixtures/empty.js' : { } ,
'fixtures/module-load-order/file1' : { } ,
'fixtures/module-load-order/file2.js' : { } ,
'fixtures/module-load-order/file3.node' : { } ,
'fixtures/module-load-order/file4.reg' : { } ,
'fixtures/module-load-order/file5.reg2' : { } ,
'fixtures/module-load-order/file6/index.js' : { } ,
'fixtures/module-load-order/file7/index.node' : { } ,
'fixtures/module-load-order/file8/index.reg' : { } ,
'fixtures/module-load-order/file9/index.reg2' : { } ,
'fixtures/module-require/parent/index.js' : {
'fixtures/module-require/child/index.js' : {
'fixtures/module-require/child/node_modules/target.js' : { }
}
} ,
'fixtures/packages/main/package.json' : { }
} ) ;
{
// now verify that module.children contains all the different
// modules that we've required, and that all of them contain
// the appropriate children, and so on.
const children = module . children . reduce ( function red ( set , child ) {
let id = path . relative ( path . dirname ( __ dirname ) , child . id ) ;
id = id . replace ( /\\/g , '/' ) ;
set [ id ] = child . children . reduce ( red , { } ) ;
return set ;
} , { } ) ;
assert . deepStrictEqual ( children , {
'common.js' : { } ,
'fixtures/not-main-module.js' : { } ,
'fixtures/a.js' : {
'fixtures/b/c.js' : {
'fixtures/b/d.js' : { } ,
'fixtures/b/package/index.js' : { }
}
} ,
'fixtures/foo' : { } ,
'fixtures/nested-index/one/index.js' : {
'fixtures/nested-index/one/hello.js' : { }
} ,
'fixtures/nested-index/two/index.js' : {
'fixtures/nested-index/two/hello.js' : { }
} ,
'fixtures/nested-index/three.js' : { } ,
'fixtures/nested-index/three/index.js' : { } ,
'fixtures/packages/index/index.js' : { } ,
'fixtures/packages/main/package-main-module.js' : { } ,
'fixtures/packages/main-index/package-main-module/index.js' : { } ,
'fixtures/cycles/root.js' : {
'fixtures/cycles/folder/foo.js' : { }
} ,
'fixtures/node_modules/foo.js' : {
'fixtures/node_modules/baz/index.js' : {
'fixtures/node_modules/bar.js' : { } ,
'fixtures/node_modules/baz/node_modules/asdf.js' : { }
}
} ,
'fixtures/path.js' : { } ,
'fixtures/throws_error.js' : { } ,
'fixtures/registerExt.test' : { } ,
'fixtures/registerExt.hello.world' : { } ,
'fixtures/registerExt2.test' : { } ,
'fixtures/empty.js' : { } ,
'fixtures/module-load-order/file1' : { } ,
'fixtures/module-load-order/file2.js' : { } ,
'fixtures/module-load-order/file3.node' : { } ,
'fixtures/module-load-order/file4.reg' : { } ,
'fixtures/module-load-order/file5.reg2' : { } ,
'fixtures/module-load-order/file6/index.js' : { } ,
'fixtures/module-load-order/file7/index.node' : { } ,
'fixtures/module-load-order/file8/index.reg' : { } ,
'fixtures/module-load-order/file9/index.reg2' : { } ,
'fixtures/module-require/parent/index.js' : {
'fixtures/module-require/child/index.js' : {
'fixtures/module-require/child/node_modules/target.js' : { }
}
} ,
'fixtures/packages/main/package.json' : { }
} ) ;
}
// require() must take string, and must be truthy
@ -289,29 +310,29 @@ assert.throws(function() {
process . on ( 'exit' , function ( ) {
assert . ok ( a . A instanceof Function ) ;
assert . strictEqual ( 'A done' , a . A ( ) ) ;
assert . strictEqual ( a . A ( ) , 'A done' ) ;
assert . ok ( a . C instanceof Function ) ;
assert . strictEqual ( 'C done' , a . C ( ) ) ;
assert . strictEqual ( a . C ( ) , 'C done' ) ;
assert . ok ( a . D instanceof Function ) ;
assert . strictEqual ( 'D done' , a . D ( ) ) ;
assert . strictEqual ( a . D ( ) , 'D done' ) ;
assert . ok ( d . D instanceof Function ) ;
assert . strictEqual ( 'D done' , d . D ( ) ) ;
assert . strictEqual ( d . D ( ) , 'D done' ) ;
assert . ok ( d2 . D instanceof Function ) ;
assert . strictEqual ( 'D done' , d2 . D ( ) ) ;
assert . strictEqual ( d2 . D ( ) , 'D done' ) ;
assert . strictEqual ( true , errorThrown ) ;
assert . strictEqual ( errorThrown , true ) ;
console . log ( 'exit' ) ;
} ) ;
// #1440 Loading files with a byte order marker.
assert . strictEqual ( 42 , require ( '../fixtures/utf8-bom.js' ) ) ;
assert . strictEqual ( 42 , require ( '../fixtures/utf8-bom.json' ) ) ;
assert . strictEqual ( require ( '../fixtures/utf8-bom.js' ) , 42 ) ;
assert . strictEqual ( require ( '../fixtures/utf8-bom.json' ) , 42 ) ;
// Error on the first line of a module should
// have the correct line number