find-package-json
Version:
Find package.json files in parent directories, keep finding until you find the right one using iterators.
91 lines (70 loc) • 2.57 kB
JavaScript
;
var itIfSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? it : it.skip;
describe('find-package-json', function () {
var assume = require('assume')
, path = require('path')
, find = require('./');
it('is exported as function', function () {
assume(find).is.a('function');
});
it('returns iterator', function () {
var f = find(__dirname);
assume(f).is.a('object');
assume(f.next).is.a('function');
assume(f.next()).is.a('object');
assume(f.next().done).is.a('boolean');
});
itIfSymbols('returns an iterable', function () {
var f = find(__dirname);
assume(f).is.a('object');
assume(f[Symbol.iterator]).is.a('function');
assume(f[Symbol.iterator]()).equals(f);
var next = f.next();
assume(next).is.a('object');
assume(next[Symbol.iterator]).is.a('function');
assume(next[Symbol.iterator]()).equals(next);
assume(next.done).equals(false);
var next = f.next();
assume(next).is.a('object');
assume(next[Symbol.iterator]).is.a('function');
assume(next[Symbol.iterator]()).equals(next);
assume(next.done).equals(true);
});
it('finds the package.json in this directory', function () {
var f = find(__dirname)
, data = f.next();
assume(data.value).is.a('object');
assume(data.filename).equals(path.join(__dirname, 'package.json'));
assume(data.value.name).equals('find-package-json');
});
it('accepts a filename', function () {
var f = find(__filename)
, data = f.next();
assume(data.value).is.a('object');
assume(data.filename).equals(path.join(__dirname, 'package.json'));
assume(data.value.name).equals('find-package-json');
});
it('accepts a module object', function () {
var f = find(require('./fixture/module-test'))
, data = f.next();
assume(data.value).is.a('object');
assume(data.filename).equals(path.join(__dirname, 'fixture', 'package.json'));
assume(data.value.name).equals('fixture');
});
it('returns false when it cannot find more packages', function () {
var f = find(__dirname);
while (true) {
if (f.next().done) break;
}
});
it('supports package.json with BOM', function () {
var f = find(path.join(__dirname, 'fixture'))
, data = f.next();
assume(data.value.name).equals('fixture');
});
it('ignores broken fixtures', function () {
var f = find(path.join(__dirname, 'fixture', 'broken'))
, data = f.next();
assume(data.value.name).equals('fixture');
});
});