mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.9 KiB
155 lines
3.9 KiB
var test = require('tap').test
|
|
var rpt = require('../rpt.js')
|
|
var path = require('path')
|
|
var fs = require('fs')
|
|
var archy = require('archy')
|
|
var fixtures = path.resolve(__dirname, 'fixtures')
|
|
var roots = [ 'root', 'other', 'selflink', 'noname' ]
|
|
var cwd = path.resolve(__dirname, '..')
|
|
|
|
var symlinks = {
|
|
'selflink/node_modules/@scope/z/node_modules/glob':
|
|
'../../../foo/node_modules/glob',
|
|
'other/node_modules/glob':
|
|
'../../root/node_modules/@scope/x/node_modules/glob',
|
|
'linkedroot':
|
|
'root',
|
|
'deep/root':
|
|
'../root',
|
|
'deeproot':
|
|
'deep'
|
|
}
|
|
|
|
function cleanup () {
|
|
Object.keys(symlinks).forEach(function (s) {
|
|
var p = path.resolve(cwd, 'test/fixtures', s)
|
|
try {
|
|
fs.unlinkSync(p)
|
|
} catch (er) {}
|
|
})
|
|
}
|
|
|
|
test('setup symlinks', function (t) {
|
|
cleanup()
|
|
|
|
Object.keys(symlinks).forEach(function (s) {
|
|
var p = path.resolve(cwd, 'test/fixtures', s)
|
|
fs.symlinkSync(symlinks [ s ], p, 'dir')
|
|
})
|
|
|
|
t.end()
|
|
})
|
|
|
|
roots.forEach(function (root) {
|
|
var dir = path.resolve(fixtures, root)
|
|
var expectedtxt = path.resolve(dir, 'archy.txt')
|
|
var expectedre = path.resolve(dir, 'archy.re')
|
|
|
|
test(root, function (t) {
|
|
rpt(dir, function (er, d) {
|
|
if (er && er.code !== 'ENOENT') throw er
|
|
|
|
var actual = archy(archyize(d)).trim()
|
|
// console . log ('----', dir)
|
|
console.log(actual)
|
|
// console . log (require ('util') . inspect (d, {
|
|
// depth: Infinity
|
|
// }))
|
|
try {
|
|
var expect = fs.readFileSync(expectedtxt, 'utf8').trim()
|
|
t.equal(actual, expect, root + ' tree')
|
|
} catch (e) {
|
|
var expect = new RegExp(fs.readFileSync(expectedre, 'utf8').trim())
|
|
t.like(actual, expect, root + ' tree')
|
|
}
|
|
t.end()
|
|
})
|
|
})
|
|
})
|
|
|
|
test('linkedroot', function (t) {
|
|
var dir = path.resolve(fixtures, 'linkedroot')
|
|
var out = dir + '-archy.txt'
|
|
rpt(dir, function (er, d) {
|
|
if (er && er.code !== 'ENOENT') throw er
|
|
|
|
var actual = archy(archyize(d)).trim()
|
|
console.log(actual)
|
|
var expect = fs.readFileSync(out, 'utf8').trim()
|
|
t.equal(actual, expect, 'linkedroot tree')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('deeproot', function (t) {
|
|
var dir = path.resolve(fixtures, 'deeproot/root')
|
|
var out = path.resolve(fixtures, 'deep') + '-archy.txt'
|
|
rpt(dir, function (er, d) {
|
|
if (er && er.code !== 'ENOENT') throw er
|
|
|
|
var actual = archy(archyize(d)).trim()
|
|
console.log(actual)
|
|
var expect = fs.readFileSync(out, 'utf8').trim()
|
|
t.equal(actual, expect, 'deeproot tree')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('broken json', function (t) {
|
|
rpt(path.resolve(fixtures, 'bad'), function (er, d) {
|
|
t.ok(d.error, 'Got an error object')
|
|
t.equal(d.error && d.error.code, 'EJSONPARSE')
|
|
t.ok(d, 'Got a tree')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('missing json does not obscure deeper errors', function (t) {
|
|
rpt(path.resolve(fixtures, 'empty'), function (er, d) {
|
|
var error = d.error
|
|
t.ok(error, 'Error reading json of top level')
|
|
t.equal(error && error.code, 'ENOENT')
|
|
var childError = d.children.length===1 && d.children[0].error
|
|
t.ok(childError, 'Error parsing JSON of child node')
|
|
t.equal(childError && childError.code, 'EJSONPARSE')
|
|
t.end()
|
|
})
|
|
})
|
|
test('missing folder', function (t) {
|
|
rpt(path.resolve(fixtures, 'does-not-exist'), function (er, d) {
|
|
t.ok(er, 'Got an error object')
|
|
t.equal(er && er.code, 'ENOENT')
|
|
t.ok(!d, 'No tree on top level error')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
|
|
function archyize (d, seen) {
|
|
seen = seen || {}
|
|
var path = d.path
|
|
if (d.target) {
|
|
path = d.target.path
|
|
}
|
|
|
|
var label = d.package._id ? d.package._id + ' ' :
|
|
d.package.name ? d.package.name + (d.package.version ? '@' + d.package.version : '') + ' ' :
|
|
''
|
|
label += path.substr(cwd.length + 1)
|
|
|
|
if (d . target) {
|
|
return { label: label + ' (symlink)', nodes: [] }
|
|
}
|
|
|
|
return {
|
|
label: label,
|
|
nodes: d.children.map(function (kid) {
|
|
return archyize(kid, seen)
|
|
})
|
|
}
|
|
}
|
|
|
|
test('cleanup', function (t) {
|
|
cleanup()
|
|
t.end()
|
|
})
|
|
|