react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / browser-resolve / test / modules.js
80724 viewsvar assert = require('assert');1var resolve = require('../');23var fixtures_dir = __dirname + '/fixtures/node_modules';45// no package.json, load index.js6test('index.js of module dir', function(done) {7resolve('module-a', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {8assert.ifError(err);9assert.equal(path, require.resolve('./fixtures/node_modules/module-a/index'));10assert.strictEqual(pkg, undefined);11done();12});13});1415// package.json main field specifies other location16test('alternate main', function(done) {17resolve('module-b', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {18assert.ifError(err);19assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));20assert.strictEqual(pkg.main, './main.js');21done();22});23});2425// package.json has 'browser' field which is a string26test('string browser field as main', function(done) {27resolve('module-c', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {28assert.ifError(err);29assert.equal(path, require.resolve('./fixtures/node_modules/module-c/browser'));30assert.equal(pkg.main, './browser.js');31done();32});33});3435// package.json has 'browser' field which is a string36test('string browser field as main - require subfile', function(done) {37var parent = {38filename: fixtures_dir + '/module-c/browser.js',39paths: [ fixtures_dir + '/module-c/node_modules' ],40package: { main: './browser.js' }41};4243resolve('./bar', parent, function(err, path, pkg) {44assert.ifError(err);45assert.equal(path, require.resolve('./fixtures/node_modules/module-c/bar'));46assert.equal(pkg.main, './browser.js');47done();48});49});5051// package.json has an alternative 'browser' field which is a string52test('string alt browser field as main - require subfile', function(done) {53var parent = {54filename: fixtures_dir + '/module-c/chromeapp.js',55paths: [ fixtures_dir + '/module-c/node_modules' ],56package: { main: './chromeapp.js' },57browser: 'chromeapp'58};5960resolve('./foo', parent, function(err, path, pkg) {61assert.ifError(err);62assert.equal(path, require.resolve('./fixtures/node_modules/module-c/foo'));63assert.equal(pkg.main, './chromeapp.js');64done();65});66});6768// package.json has browser field as object69// one of the keys replaces the main file70// this would be done if the user needed to replace main and some other module71test('object browser field as main', function(done) {72resolve('module-d', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {73assert.ifError(err);74assert.equal(path, require.resolve('./fixtures/node_modules/module-d/browser'));75assert.equal(pkg.main, './browser.js');76done();77});78});7980// package.json has browser field as object81// one of the keys replaces the main file82// however the main has no prefix and browser uses ./ prefix for the same file83test('object browser field as main', function(done) {84resolve('module-k', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {85assert.ifError(err);86assert.equal(path, require.resolve('./fixtures/node_modules/module-k/browser'));87assert.equal(pkg.main, './browser.js');88done();89});90});9192test('deep module reference mapping', function(done) {93resolve('module-l/direct', { basedir: __dirname + '/fixtures', package: { main: 'fixtures' } }, function(err, path, pkg) {94assert.ifError(err);95assert.equal(path, require.resolve('./fixtures/node_modules/module-l/browser-direct'));96assert.equal(pkg.main, './browser.js');97done();98});99});100101// browser field in package.json maps ./foo.js -> ./browser.js102// when we resolve ./foo while in module-e, this mapping should take effect103// the result is that ./foo resolves to ./browser104test('object browser field replace file', function(done) {105var parent = {106filename: fixtures_dir + '/module-e/main.js',107package: { main: './main.js' }108};109110resolve('./foo', parent, function(err, path, pkg) {111assert.ifError(err);112assert.equal(path, require.resolve('./fixtures/node_modules/module-e/browser'));113assert.equal(pkg.main, './main.js');114done();115});116});117118// browser field in package.json maps "module" -> "alternate module"119test('test foobar -> module-b replacement', function(done) {120var parent = {121filename: fixtures_dir + '/module-h/index.js',122package: { main: './index.js' }123};124125resolve('foobar', parent, function(err, path, pkg) {126assert.ifError(err);127assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));128assert.equal(pkg.main, './main.js');129done();130});131});132133// same as above but replacing core134test('test core -> module-c replacement', function(done) {135var parent = {136filename: fixtures_dir + '/module-h/index.js',137package: { main: './index.js' }138};139140resolve('querystring', parent, function(err, path, pkg) {141assert.ifError(err);142assert.equal(path, require.resolve('./fixtures/node_modules/module-c/browser'));143assert.equal(pkg.main, './browser.js');144done();145});146});147148// same as above but with alt browser149test('test core -> module-c replacement with alt browser', function(done) {150var parent = {151filename: fixtures_dir + '/module-h/index.js',152package: { main: './index.js' },153browser: 'chromeapp'154};155156resolve('querystring', parent, function(err, path, pkg) {157assert.ifError(err);158assert.equal(path, require.resolve('./fixtures/node_modules/module-c/chromeapp'));159assert.equal(pkg.main, './chromeapp.js');160done();161});162});163164// browser field in package.json maps "module" -> "alternate module"165test('test foobar -> module-b replacement with transform', function(done) {166var parent = {167filename: fixtures_dir + '/module-i/index.js',168package: { main: './index.js' }169};170171resolve('foobar', parent, function(err, path, pkg) {172assert.ifError(err);173assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));174assert.equal(pkg.main, './main.js');175done();176});177});178179test('test foobar -> module-i replacement with transform in replacement', function(done) {180var parent = {181filename: fixtures_dir + '/module-j/index.js',182package: { main: './index.js' }183};184185resolve('foobar', parent, function(err, path, pkg) {186assert.ifError(err);187assert.equal(path, require.resolve('./fixtures/node_modules/module-i/index'));188assert.equal(pkg.main, './index.js');189assert.equal(pkg.browser['foobar'], 'module-b');190assert.equal(pkg.browserify.transform, 'deamdify');191done();192});193});194195// same as above, but without a paths field in parent196// should still checks paths on the filename of parent197test('object browser field replace file - no paths', function(done) {198var parent = {199filename: fixtures_dir + '/module-f/lib/main.js',200package: { main: './lib/main.js' }201};202203resolve('./foo', parent, function(err, path, pkg) {204assert.ifError(err);205assert.equal(path, require.resolve('./fixtures/node_modules/module-f/lib/browser'));206assert.equal(pkg.main, './lib/main.js');207done();208});209});210211test('replace module in browser field object', function(done) {212var parent = {213filename: fixtures_dir + '/module-g/index.js',214package: { main: './index.js' }215};216217resolve('foobar', parent, function(err, path, pkg) {218assert.ifError(err);219assert.equal(path, require.resolve('./fixtures/node_modules/module-g/foobar-browser'));220assert.equal(pkg.main, './index.js');221done();222});223});224225test('override engine shim', function(done) {226var parent = {227filename: fixtures_dir + '/override-engine-shim/index.js',228package: { main: './index.js' },229modules: { url: 'wonderland' }230};231resolve('url', parent, function(err, path, pkg) {232assert.ifError(err);233assert.equal(path, require.resolve('./fixtures/node_modules/override-engine-shim/url-browser'));234done();235});236});237238test('alt-browser field', function(done) {239var parent = {240filename: fixtures_dir + '/alt-browser-field/index.js',241package: { main: './index.js' },242browser: 'chromeapp'243};244245resolve('url', parent, function(err, path, pkg) {246assert.ifError(err);247assert.equal(path, require.resolve('./fixtures/node_modules/alt-browser-field/url-chromeapp'));248assert.equal(pkg.main, './index.js');249done();250});251});252253test('alt-browser deep module reference mapping', function(done) {254resolve('alt-browser-field/direct', {255basedir: __dirname + '/fixtures',256package: { main: 'fixtures' },257browser: 'chromeapp'258}, function(err, path, pkg) {259assert.ifError(err);260assert.equal(path, require.resolve('./fixtures/node_modules/alt-browser-field/chromeapp-direct'));261assert.equal(pkg.main, './chromeapp.js');262done();263});264});265266test('alt-browser fallback to "browser" on deps of deps', function(done) {267var parent = {268filename: fixtures_dir + '/alt-browser-field/foo.js',269package: { main: './index.js' },270browser: 'chromeapp'271};272273resolve('foobar', parent, function(err, path, pkg) {274assert.ifError(err);275assert.equal(path, require.resolve('./fixtures/node_modules/module-k/browser'));276assert.equal(pkg.main, './browser.js');277assert.equal(pkg.browser['./index.js'], './browser.js');278done();279});280});281282283