simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

home_paths.js (4472B)


      1 'use strict';
      2 
      3 var fs = require('fs');
      4 var homedir = require('../lib/homedir');
      5 var path = require('path');
      6 
      7 var test = require('tape');
      8 var mkdirp = require('mkdirp');
      9 var rimraf = require('rimraf');
     10 var mv = require('mv');
     11 var copyDir = require('copy-dir');
     12 var tmp = require('tmp');
     13 
     14 var HOME = homedir();
     15 
     16 var hnm = path.join(HOME, '.node_modules');
     17 var hnl = path.join(HOME, '.node_libraries');
     18 
     19 var resolve = require('../async');
     20 
     21 function makeDir(t, dir, cb) {
     22     mkdirp(dir, function (err) {
     23         if (err) {
     24             cb(err);
     25         } else {
     26             t.teardown(function cleanup() {
     27                 rimraf.sync(dir);
     28             });
     29             cb();
     30         }
     31     });
     32 }
     33 
     34 function makeTempDir(t, dir, cb) {
     35     if (fs.existsSync(dir)) {
     36         var tmpResult = tmp.dirSync();
     37         t.teardown(tmpResult.removeCallback);
     38         var backup = path.join(tmpResult.name, path.basename(dir));
     39         mv(dir, backup, function (err) {
     40             if (err) {
     41                 cb(err);
     42             } else {
     43                 t.teardown(function () {
     44                     mv(backup, dir, cb);
     45                 });
     46                 makeDir(t, dir, cb);
     47             }
     48         });
     49     } else {
     50         makeDir(t, dir, cb);
     51     }
     52 }
     53 
     54 test('homedir module paths', function (t) {
     55     t.plan(7);
     56 
     57     makeTempDir(t, hnm, function (err) {
     58         t.error(err, 'no error with HNM temp dir');
     59         if (err) {
     60             return t.end();
     61         }
     62 
     63         var bazHNMDir = path.join(hnm, 'baz');
     64         var dotMainDir = path.join(hnm, 'dot_main');
     65         copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir);
     66         copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir);
     67 
     68         var bazPkg = { name: 'baz', main: 'quux.js' };
     69         var dotMainPkg = { main: 'index' };
     70 
     71         var bazHNMmain = path.join(bazHNMDir, 'quux.js');
     72         t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
     73         var dotMainMain = path.join(dotMainDir, 'index.js');
     74         t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`');
     75 
     76         makeTempDir(t, hnl, function (err) {
     77             t.error(err, 'no error with HNL temp dir');
     78             if (err) {
     79                 return t.end();
     80             }
     81             var bazHNLDir = path.join(hnl, 'baz');
     82             copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir);
     83 
     84             var dotSlashMainDir = path.join(hnl, 'dot_slash_main');
     85             var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js');
     86             var dotSlashMainPkg = { main: 'index' };
     87             copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir);
     88 
     89             t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`');
     90             t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`');
     91 
     92             t.test('with temp dirs', function (st) {
     93                 st.plan(3);
     94 
     95                 st.test('just in `$HOME/.node_modules`', function (s2t) {
     96                     s2t.plan(3);
     97 
     98                     resolve('dot_main', function (err, res, pkg) {
     99                         s2t.error(err, 'no error resolving `dot_main`');
    100                         s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`');
    101                         s2t.deepEqual(pkg, dotMainPkg);
    102                     });
    103                 });
    104 
    105                 st.test('just in `$HOME/.node_libraries`', function (s2t) {
    106                     s2t.plan(3);
    107 
    108                     resolve('dot_slash_main', function (err, res, pkg) {
    109                         s2t.error(err, 'no error resolving `dot_slash_main`');
    110                         s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`');
    111                         s2t.deepEqual(pkg, dotSlashMainPkg);
    112                     });
    113                 });
    114 
    115                 st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) {
    116                     s2t.plan(3);
    117 
    118                     resolve('baz', function (err, res, pkg) {
    119                         s2t.error(err, 'no error resolving `baz`');
    120                         s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both');
    121                         s2t.deepEqual(pkg, bazPkg);
    122                     });
    123                 });
    124             });
    125         });
    126     });
    127 });