yapm
Version:
npm wrapper allowing to use package.yaml instead of package.json
145 lines (128 loc) • 4.2 kB
JavaScript
var yaml = require('js-yaml');
var fs = require('fs');
var assert = require('assert');
var async = require('async');
var read = fs.readFileSync;
var write = fs.writeFileSync;
var unlink = fs.unlinkSync;
var exists = fs.existsSync;
var tests = [];
var Y = yaml.safeLoad(require('fs').readFileSync('../package.yaml', 'utf8'));
require('../lib');
['package.yaml', 'package.json'].forEach(function(file) {
if (exists(file)) {
console.error('%s exists in current directory, refusing to start', file);
process.exit(1);
}
});
function addtest(desc, fn) {
var i = tests.length;
tests.push(function() {
console.log('running test %s/%s: %s', i+1, tests.length, desc);
fn.apply(null, arguments);
});
}
process.nextTick(function() {
async.series(tests, function(err) {
if (err) throw err;
try {
unlink('package.json');
} catch(e) {}
try {
unlink('package.yaml');
} catch(e) {}
console.log('completed');
});
});
// no config file exists just yet
addtest('nothing#sync', function(cb) {
fs.writeFileSync('package.json', JSON.stringify(Y));
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
addtest('nothing#async', function(cb) {
fs.writeFile('package.json', JSON.stringify(Y), function(err, res) {
assert(!err);
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
});
// with encoding
addtest('nothing#sync2', function(cb) {
fs.writeFileSync('package.json', JSON.stringify(Y), 'utf8');
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
addtest('nothing#async2', function(cb) {
fs.writeFile('package.json', JSON.stringify(Y), 'utf8', function(err, res) {
assert(!err);
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
});
// creating package.json, should write there
addtest('json#sync', function(cb) {
write('package.json', '{"garbage":"garbage"}', 'utf8');
fs.writeFileSync('package.json', JSON.stringify(Y));
assert(!exists('package.yaml'));
assert.deepEqual(JSON.parse(read('package.json').toString('utf8')), Y);
unlink('package.json');
cb();
});
addtest('json#async', function(cb) {
write('package.json', '{"garbage":"garbage"}', 'utf8');
fs.writeFile('package.json', JSON.stringify(Y), function(err, res) {
assert(!err);
assert(!exists('package.yaml'));
assert.deepEqual(JSON.parse(read('package.json').toString('utf8')), Y);
unlink('package.json');
cb();
});
});
// creating package.yaml, should write there
addtest('yaml#sync', function(cb) {
write('package.yaml', 'garbage: garbage', 'utf8');
fs.writeFileSync('package.json', JSON.stringify(Y));
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
addtest('yaml#async', function(cb) {
write('package.yaml', 'garbage: garbage', 'utf8');
fs.writeFile('package.json', JSON.stringify(Y), function(err, res) {
assert(!err);
assert(!exists('package.json'));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), Y);
unlink('package.yaml');
cb();
});
});
// both exist, choose json (?)
addtest('both#sync', function(cb) {
write('package.json', '{"garbage":1}', 'utf8');
write('package.yaml', 'garbage: 1', 'utf8');
fs.writeFileSync('package.json', JSON.stringify(Y));
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), {garbage:1});
assert.deepEqual(JSON.parse(read('package.json').toString('utf8')), Y);
cb();
});
addtest('both#async', function(cb) {
write('package.json', '{"garbage":"garbage"}', 'utf8');
write('package.yaml', 'garbage: 1', 'utf8');
fs.writeFile('package.json', JSON.stringify(Y), function(err, res) {
assert(!err);
assert.deepEqual(yaml.safeLoad(read('package.yaml').toString('utf8')), {garbage:1});
assert.deepEqual(JSON.parse(read('package.json').toString('utf8')), Y);
cb();
});
});