2012-02-22 11:14:46 +08:00
|
|
|
var vows = require('vows')
|
|
|
|
, assert = require('assert')
|
|
|
|
, levels = require('../lib/levels');
|
|
|
|
|
|
|
|
function assertThat(level) {
|
|
|
|
function assertForEach(assertion, test, otherLevels) {
|
|
|
|
otherLevels.forEach(function(other) {
|
|
|
|
assertion.call(assert, test.call(level, other));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
isLessThanOrEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isTrue, level.isLessThanOrEqualTo, levels);
|
|
|
|
},
|
|
|
|
isNotLessThanOrEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isFalse, level.isLessThanOrEqualTo, levels);
|
|
|
|
},
|
|
|
|
isGreaterThanOrEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isTrue, level.isGreaterThanOrEqualTo, levels);
|
|
|
|
},
|
|
|
|
isNotGreaterThanOrEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isFalse, level.isGreaterThanOrEqualTo, levels);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
isEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isTrue, level.isEqualTo, levels);
|
|
|
|
},
|
|
|
|
isNotEqualTo: function(levels) {
|
|
|
|
assertForEach(assert.isFalse, level.isEqualTo, levels);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
vows.describe('levels').addBatch({
|
|
|
|
'values': {
|
|
|
|
topic: levels,
|
|
|
|
'should define some levels': function(levels) {
|
|
|
|
assert.isNotNull(levels.ALL);
|
|
|
|
assert.isNotNull(levels.TRACE);
|
|
|
|
assert.isNotNull(levels.DEBUG);
|
|
|
|
assert.isNotNull(levels.INFO);
|
|
|
|
assert.isNotNull(levels.WARN);
|
|
|
|
assert.isNotNull(levels.ERROR);
|
|
|
|
assert.isNotNull(levels.FATAL);
|
|
|
|
assert.isNotNull(levels.OFF);
|
|
|
|
},
|
|
|
|
'ALL': {
|
|
|
|
topic: levels.ALL,
|
|
|
|
'should be less than the other levels': function(all) {
|
|
|
|
assertThat(all).isLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
|
|
|
},
|
|
|
|
'should be greater than no levels': function(all) {
|
|
|
|
assertThat(all).isNotGreaterThanOrEqualTo([levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to ALL': function(all) {
|
|
|
|
assertThat(all).isEqualTo([levels.toLevel("ALL")]);
|
|
|
|
assertThat(all).isNotEqualTo([levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'TRACE': {
|
|
|
|
topic: levels.TRACE,
|
|
|
|
'should be less than DEBUG': function(trace) {
|
|
|
|
assertThat(trace).isLessThanOrEqualTo([levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
|
|
|
assertThat(trace).isNotLessThanOrEqualTo([levels.ALL]);
|
|
|
|
},
|
|
|
|
'should be greater than ALL': function(trace) {
|
|
|
|
assertThat(trace).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]);
|
|
|
|
assertThat(trace).isNotGreaterThanOrEqualTo([levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to TRACE': function(trace) {
|
|
|
|
assertThat(trace).isEqualTo([levels.toLevel("TRACE")]);
|
|
|
|
assertThat(trace).isNotEqualTo([levels.ALL, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'DEBUG': {
|
|
|
|
topic: levels.DEBUG,
|
|
|
|
'should be less than INFO': function(debug) {
|
|
|
|
assertThat(debug).isLessThanOrEqualTo([levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
|
|
|
assertThat(debug).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE]);
|
|
|
|
},
|
|
|
|
'should be greater than TRACE': function(debug) {
|
|
|
|
assertThat(debug).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]);
|
|
|
|
assertThat(debug).isNotGreaterThanOrEqualTo([levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to DEBUG': function(trace) {
|
|
|
|
assertThat(trace).isEqualTo([levels.toLevel("DEBUG")]);
|
|
|
|
assertThat(trace).isNotEqualTo([levels.ALL, levels.TRACE, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'INFO': {
|
|
|
|
topic: levels.INFO,
|
|
|
|
'should be less than WARN': function(info) {
|
|
|
|
assertThat(info).isLessThanOrEqualTo([levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
|
|
|
assertThat(info).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]);
|
|
|
|
},
|
|
|
|
'should be greater than DEBUG': function(info) {
|
|
|
|
assertThat(info).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]);
|
|
|
|
assertThat(info).isNotGreaterThanOrEqualTo([levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to INFO': function(trace) {
|
|
|
|
assertThat(trace).isEqualTo([levels.toLevel("INFO")]);
|
|
|
|
assertThat(trace).isNotEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.WARN, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'WARN': {
|
|
|
|
topic: levels.WARN,
|
|
|
|
'should be less than ERROR': function(warn) {
|
|
|
|
assertThat(warn).isLessThanOrEqualTo([levels.ERROR, levels.FATAL, levels.OFF]);
|
|
|
|
assertThat(warn).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO]);
|
|
|
|
},
|
|
|
|
'should be greater than INFO': function(warn) {
|
|
|
|
assertThat(warn).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO]);
|
|
|
|
assertThat(warn).isNotGreaterThanOrEqualTo([levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to WARN': function(trace) {
|
|
|
|
assertThat(trace).isEqualTo([levels.toLevel("WARN")]);
|
|
|
|
assertThat(trace).isNotEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.ERROR, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'ERROR': {
|
|
|
|
topic: levels.ERROR,
|
|
|
|
'should be less than FATAL': function(error) {
|
|
|
|
assertThat(error).isLessThanOrEqualTo([levels.FATAL, levels.OFF]);
|
|
|
|
assertThat(error).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN]);
|
|
|
|
},
|
|
|
|
'should be greater than WARN': function(error) {
|
|
|
|
assertThat(error).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN]);
|
|
|
|
assertThat(error).isNotGreaterThanOrEqualTo([levels.FATAL, levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to ERROR': function(trace) {
|
|
|
|
assertThat(trace).isEqualTo([levels.toLevel("ERROR")]);
|
|
|
|
assertThat(trace).isNotEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.FATAL, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'FATAL': {
|
|
|
|
topic: levels.FATAL,
|
|
|
|
'should be less than OFF': function(fatal) {
|
|
|
|
assertThat(fatal).isLessThanOrEqualTo([levels.OFF]);
|
|
|
|
assertThat(fatal).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR]);
|
|
|
|
},
|
|
|
|
'should be greater than ERROR': function(fatal) {
|
|
|
|
assertThat(fatal).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR]);
|
|
|
|
assertThat(fatal).isNotGreaterThanOrEqualTo([levels.OFF]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to FATAL': function(fatal) {
|
|
|
|
assertThat(fatal).isEqualTo([levels.toLevel("FATAL")]);
|
|
|
|
assertThat(fatal).isNotEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.OFF]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'OFF': {
|
|
|
|
topic: levels.OFF,
|
|
|
|
'should not be less than anything': function(off) {
|
|
|
|
assertThat(off).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL]);
|
|
|
|
},
|
|
|
|
'should be greater than everything': function(off) {
|
|
|
|
assertThat(off).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL]);
|
2012-06-01 09:11:07 +08:00
|
|
|
},
|
|
|
|
'should only be equal to OFF': function(off) {
|
|
|
|
assertThat(off).isEqualTo([levels.toLevel("OFF")]);
|
|
|
|
assertThat(off).isNotEqualTo([levels.ALL, levels.TRACE, levels.DEBUG, levels.INFO, levels.WARN, levels.ERROR, levels.FATAL]);
|
2012-02-22 11:14:46 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'isGreaterThanOrEqualTo': {
|
|
|
|
topic: levels.INFO,
|
|
|
|
'should handle string arguments': function(info) {
|
|
|
|
assertThat(info).isGreaterThanOrEqualTo(["all", "trace", "debug"]);
|
|
|
|
assertThat(info).isNotGreaterThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'off']);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'isLessThanOrEqualTo': {
|
|
|
|
topic: levels.INFO,
|
|
|
|
'should handle string arguments': function(info) {
|
|
|
|
assertThat(info).isNotLessThanOrEqualTo(["all", "trace", "debug"]);
|
|
|
|
assertThat(info).isLessThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'off']);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'toLevel': {
|
|
|
|
'with lowercase argument': {
|
|
|
|
topic: levels.toLevel("debug"),
|
|
|
|
'should take the string and return the corresponding level': function(level) {
|
|
|
|
assert.equal(level, levels.DEBUG);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'with uppercase argument': {
|
|
|
|
topic: levels.toLevel("DEBUG"),
|
|
|
|
'should take the string and return the corresponding level': function(level) {
|
|
|
|
assert.equal(level, levels.DEBUG);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'with varying case': {
|
|
|
|
topic: levels.toLevel("DeBuG"),
|
|
|
|
'should take the string and return the corresponding level': function(level) {
|
|
|
|
assert.equal(level, levels.DEBUG);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'with unrecognised argument': {
|
|
|
|
topic: levels.toLevel("cheese"),
|
|
|
|
'should return undefined': function(level) {
|
|
|
|
assert.isUndefined(level);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'with unrecognised argument and default value': {
|
|
|
|
topic: levels.toLevel("cheese", levels.DEBUG),
|
|
|
|
'should return default value': function(level) {
|
|
|
|
assert.equal(level, levels.DEBUG);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}).export(module);
|