This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
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.
292 lines
6.6 KiB
292 lines
6.6 KiB
var Hash = require('hashish'); |
|
var optimist = require('../index'); |
|
var test = require('tap').test; |
|
|
|
test('usageFail', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -z 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.demand(['x','y']) |
|
.argv; |
|
}); |
|
t.same( |
|
r.result, |
|
{ x : 10, z : 20, _ : [], $0 : './usage' } |
|
); |
|
|
|
t.same( |
|
r.errors.join('\n').split(/\n+/), |
|
[ |
|
'Usage: ./usage -x NUM -y NUM', |
|
'Options:', |
|
' -x [required]', |
|
' -y [required]', |
|
'Missing required arguments: y', |
|
] |
|
); |
|
t.same(r.logs, []); |
|
t.ok(r.exit); |
|
t.end(); |
|
}); |
|
|
|
|
|
test('usagePass', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -y 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.demand(['x','y']) |
|
.argv; |
|
}); |
|
t.same(r, { |
|
result : { x : 10, y : 20, _ : [], $0 : './usage' }, |
|
errors : [], |
|
logs : [], |
|
exit : false, |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('checkPass', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -y 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.check(function (argv) { |
|
if (!('x' in argv)) throw 'You forgot about -x'; |
|
if (!('y' in argv)) throw 'You forgot about -y'; |
|
}) |
|
.argv; |
|
}); |
|
t.same(r, { |
|
result : { x : 10, y : 20, _ : [], $0 : './usage' }, |
|
errors : [], |
|
logs : [], |
|
exit : false, |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('checkFail', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -z 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.check(function (argv) { |
|
if (!('x' in argv)) throw 'You forgot about -x'; |
|
if (!('y' in argv)) throw 'You forgot about -y'; |
|
}) |
|
.argv; |
|
}); |
|
|
|
t.same( |
|
r.result, |
|
{ x : 10, z : 20, _ : [], $0 : './usage' } |
|
); |
|
|
|
t.same( |
|
r.errors.join('\n').split(/\n+/), |
|
[ |
|
'Usage: ./usage -x NUM -y NUM', |
|
'You forgot about -y' |
|
] |
|
); |
|
|
|
t.same(r.logs, []); |
|
t.ok(r.exit); |
|
t.end(); |
|
}); |
|
|
|
test('checkCondPass', function (t) { |
|
function checker (argv) { |
|
return 'x' in argv && 'y' in argv; |
|
} |
|
|
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -y 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.check(checker) |
|
.argv; |
|
}); |
|
t.same(r, { |
|
result : { x : 10, y : 20, _ : [], $0 : './usage' }, |
|
errors : [], |
|
logs : [], |
|
exit : false, |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('checkCondFail', function (t) { |
|
function checker (argv) { |
|
return 'x' in argv && 'y' in argv; |
|
} |
|
|
|
var r = checkUsage(function () { |
|
return optimist('-x 10 -z 20'.split(' ')) |
|
.usage('Usage: $0 -x NUM -y NUM') |
|
.check(checker) |
|
.argv; |
|
}); |
|
|
|
t.same( |
|
r.result, |
|
{ x : 10, z : 20, _ : [], $0 : './usage' } |
|
); |
|
|
|
t.same( |
|
r.errors.join('\n').split(/\n+/).join('\n'), |
|
'Usage: ./usage -x NUM -y NUM\n' |
|
+ 'Argument check failed: ' + checker.toString() |
|
); |
|
|
|
t.same(r.logs, []); |
|
t.ok(r.exit); |
|
t.end(); |
|
}); |
|
|
|
test('countPass', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('1 2 3 --moo'.split(' ')) |
|
.usage('Usage: $0 [x] [y] [z] {OPTIONS}') |
|
.demand(3) |
|
.argv; |
|
}); |
|
t.same(r, { |
|
result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' }, |
|
errors : [], |
|
logs : [], |
|
exit : false, |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('countFail', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('1 2 --moo'.split(' ')) |
|
.usage('Usage: $0 [x] [y] [z] {OPTIONS}') |
|
.demand(3) |
|
.argv; |
|
}); |
|
t.same( |
|
r.result, |
|
{ _ : [ '1', '2' ], moo : true, $0 : './usage' } |
|
); |
|
|
|
t.same( |
|
r.errors.join('\n').split(/\n+/), |
|
[ |
|
'Usage: ./usage [x] [y] [z] {OPTIONS}', |
|
'Not enough non-option arguments: got 2, need at least 3', |
|
] |
|
); |
|
|
|
t.same(r.logs, []); |
|
t.ok(r.exit); |
|
t.end(); |
|
}); |
|
|
|
test('defaultSingles', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('--foo 50 --baz 70 --powsy'.split(' ')) |
|
.default('foo', 5) |
|
.default('bar', 6) |
|
.default('baz', 7) |
|
.argv |
|
; |
|
}); |
|
t.same(r.result, { |
|
foo : '50', |
|
bar : 6, |
|
baz : '70', |
|
powsy : true, |
|
_ : [], |
|
$0 : './usage', |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('defaultAliases', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('') |
|
.alias('f', 'foo') |
|
.default('f', 5) |
|
.argv |
|
; |
|
}); |
|
t.same(r.result, { |
|
f : '5', |
|
foo : '5', |
|
_ : [], |
|
$0 : './usage', |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('defaultHash', function (t) { |
|
var r = checkUsage(function () { |
|
return optimist('--foo 50 --baz 70'.split(' ')) |
|
.default({ foo : 10, bar : 20, quux : 30 }) |
|
.argv |
|
; |
|
}); |
|
t.same(r.result, { |
|
_ : [], |
|
$0 : './usage', |
|
foo : 50, |
|
baz : 70, |
|
bar : 20, |
|
quux : 30, |
|
}); |
|
t.end(); |
|
}); |
|
|
|
test('rebase', function (t) { |
|
t.equal( |
|
optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'), |
|
'./foo/bar/baz' |
|
); |
|
t.equal( |
|
optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'), |
|
'../../..' |
|
); |
|
t.equal( |
|
optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'), |
|
'../pow/zoom.txt' |
|
); |
|
t.end(); |
|
}); |
|
|
|
function checkUsage (f) { |
|
|
|
var exit = false; |
|
|
|
process._exit = process.exit; |
|
process._env = process.env; |
|
process._argv = process.argv; |
|
|
|
process.exit = function (t) { exit = true }; |
|
process.env = Hash.merge(process.env, { _ : 'node' }); |
|
process.argv = [ './usage' ]; |
|
|
|
var errors = []; |
|
var logs = []; |
|
|
|
console._error = console.error; |
|
console.error = function (msg) { errors.push(msg) }; |
|
console._log = console.log; |
|
console.log = function (msg) { logs.push(msg) }; |
|
|
|
var result = f(); |
|
|
|
process.exit = process._exit; |
|
process.env = process._env; |
|
process.argv = process._argv; |
|
|
|
console.error = console._error; |
|
console.log = console._log; |
|
|
|
return { |
|
errors : errors, |
|
logs : logs, |
|
exit : exit, |
|
result : result, |
|
}; |
|
};
|
|
|