levels-test.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. "use strict";
  2. var vows = require('vows')
  3. , assert = require('assert')
  4. , levels = require('../lib/levels');
  5. function assertThat(level) {
  6. function assertForEach(assertion, test, otherLevels) {
  7. otherLevels.forEach(function(other) {
  8. assertion.call(assert, test.call(level, other));
  9. });
  10. }
  11. return {
  12. isLessThanOrEqualTo: function(levels) {
  13. assertForEach(assert.isTrue, level.isLessThanOrEqualTo, levels);
  14. },
  15. isNotLessThanOrEqualTo: function(levels) {
  16. assertForEach(assert.isFalse, level.isLessThanOrEqualTo, levels);
  17. },
  18. isGreaterThanOrEqualTo: function(levels) {
  19. assertForEach(assert.isTrue, level.isGreaterThanOrEqualTo, levels);
  20. },
  21. isNotGreaterThanOrEqualTo: function(levels) {
  22. assertForEach(assert.isFalse, level.isGreaterThanOrEqualTo, levels);
  23. },
  24. isEqualTo: function(levels) {
  25. assertForEach(assert.isTrue, level.isEqualTo, levels);
  26. },
  27. isNotEqualTo: function(levels) {
  28. assertForEach(assert.isFalse, level.isEqualTo, levels);
  29. }
  30. };
  31. }
  32. vows.describe('levels').addBatch({
  33. 'values': {
  34. topic: levels,
  35. 'should define some levels': function(levels) {
  36. assert.isNotNull(levels.ALL);
  37. assert.isNotNull(levels.TRACE);
  38. assert.isNotNull(levels.DEBUG);
  39. assert.isNotNull(levels.INFO);
  40. assert.isNotNull(levels.WARN);
  41. assert.isNotNull(levels.ERROR);
  42. assert.isNotNull(levels.FATAL);
  43. assert.isNotNull(levels.OFF);
  44. },
  45. 'ALL': {
  46. topic: levels.ALL,
  47. 'should be less than the other levels': function(all) {
  48. assertThat(all).isLessThanOrEqualTo(
  49. [
  50. levels.ALL,
  51. levels.TRACE,
  52. levels.DEBUG,
  53. levels.INFO,
  54. levels.WARN,
  55. levels.ERROR,
  56. levels.FATAL,
  57. levels.OFF
  58. ]
  59. );
  60. },
  61. 'should be greater than no levels': function(all) {
  62. assertThat(all).isNotGreaterThanOrEqualTo(
  63. [
  64. levels.TRACE,
  65. levels.DEBUG,
  66. levels.INFO,
  67. levels.WARN,
  68. levels.ERROR,
  69. levels.FATAL,
  70. levels.OFF
  71. ]
  72. );
  73. },
  74. 'should only be equal to ALL': function(all) {
  75. assertThat(all).isEqualTo([levels.toLevel("ALL")]);
  76. assertThat(all).isNotEqualTo(
  77. [
  78. levels.TRACE,
  79. levels.DEBUG,
  80. levels.INFO,
  81. levels.WARN,
  82. levels.ERROR,
  83. levels.FATAL,
  84. levels.OFF
  85. ]
  86. );
  87. }
  88. },
  89. 'TRACE': {
  90. topic: levels.TRACE,
  91. 'should be less than DEBUG': function(trace) {
  92. assertThat(trace).isLessThanOrEqualTo(
  93. [
  94. levels.DEBUG,
  95. levels.INFO,
  96. levels.WARN,
  97. levels.ERROR,
  98. levels.FATAL,
  99. levels.OFF
  100. ]
  101. );
  102. assertThat(trace).isNotLessThanOrEqualTo([levels.ALL]);
  103. },
  104. 'should be greater than ALL': function(trace) {
  105. assertThat(trace).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]);
  106. assertThat(trace).isNotGreaterThanOrEqualTo(
  107. [
  108. levels.DEBUG,
  109. levels.INFO,
  110. levels.WARN,
  111. levels.ERROR,
  112. levels.FATAL,
  113. levels.OFF
  114. ]
  115. );
  116. },
  117. 'should only be equal to TRACE': function(trace) {
  118. assertThat(trace).isEqualTo([levels.toLevel("TRACE")]);
  119. assertThat(trace).isNotEqualTo(
  120. [
  121. levels.ALL,
  122. levels.DEBUG,
  123. levels.INFO,
  124. levels.WARN,
  125. levels.ERROR,
  126. levels.FATAL,
  127. levels.OFF
  128. ]
  129. );
  130. }
  131. },
  132. 'DEBUG': {
  133. topic: levels.DEBUG,
  134. 'should be less than INFO': function(debug) {
  135. assertThat(debug).isLessThanOrEqualTo(
  136. [
  137. levels.INFO,
  138. levels.WARN,
  139. levels.ERROR,
  140. levels.FATAL,
  141. levels.OFF
  142. ]
  143. );
  144. assertThat(debug).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE]);
  145. },
  146. 'should be greater than TRACE': function(debug) {
  147. assertThat(debug).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE]);
  148. assertThat(debug).isNotGreaterThanOrEqualTo(
  149. [
  150. levels.INFO,
  151. levels.WARN,
  152. levels.ERROR,
  153. levels.FATAL,
  154. levels.OFF
  155. ]
  156. );
  157. },
  158. 'should only be equal to DEBUG': function(trace) {
  159. assertThat(trace).isEqualTo([levels.toLevel("DEBUG")]);
  160. assertThat(trace).isNotEqualTo(
  161. [
  162. levels.ALL,
  163. levels.TRACE,
  164. levels.INFO,
  165. levels.WARN,
  166. levels.ERROR,
  167. levels.FATAL,
  168. levels.OFF
  169. ]
  170. );
  171. }
  172. },
  173. 'INFO': {
  174. topic: levels.INFO,
  175. 'should be less than WARN': function(info) {
  176. assertThat(info).isLessThanOrEqualTo([
  177. levels.WARN,
  178. levels.ERROR,
  179. levels.FATAL,
  180. levels.OFF
  181. ]);
  182. assertThat(info).isNotLessThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]);
  183. },
  184. 'should be greater than DEBUG': function(info) {
  185. assertThat(info).isGreaterThanOrEqualTo([levels.ALL, levels.TRACE, levels.DEBUG]);
  186. assertThat(info).isNotGreaterThanOrEqualTo([
  187. levels.WARN,
  188. levels.ERROR,
  189. levels.FATAL,
  190. levels.OFF
  191. ]);
  192. },
  193. 'should only be equal to INFO': function(trace) {
  194. assertThat(trace).isEqualTo([levels.toLevel("INFO")]);
  195. assertThat(trace).isNotEqualTo([
  196. levels.ALL,
  197. levels.TRACE,
  198. levels.DEBUG,
  199. levels.WARN,
  200. levels.ERROR,
  201. levels.FATAL,
  202. levels.OFF
  203. ]);
  204. }
  205. },
  206. 'WARN': {
  207. topic: levels.WARN,
  208. 'should be less than ERROR': function(warn) {
  209. assertThat(warn).isLessThanOrEqualTo([levels.ERROR, levels.FATAL, levels.OFF]);
  210. assertThat(warn).isNotLessThanOrEqualTo([
  211. levels.ALL,
  212. levels.TRACE,
  213. levels.DEBUG,
  214. levels.INFO
  215. ]);
  216. },
  217. 'should be greater than INFO': function(warn) {
  218. assertThat(warn).isGreaterThanOrEqualTo([
  219. levels.ALL,
  220. levels.TRACE,
  221. levels.DEBUG,
  222. levels.INFO
  223. ]);
  224. assertThat(warn).isNotGreaterThanOrEqualTo([levels.ERROR, levels.FATAL, levels.OFF]);
  225. },
  226. 'should only be equal to WARN': function(trace) {
  227. assertThat(trace).isEqualTo([levels.toLevel("WARN")]);
  228. assertThat(trace).isNotEqualTo([
  229. levels.ALL,
  230. levels.TRACE,
  231. levels.DEBUG,
  232. levels.INFO,
  233. levels.ERROR,
  234. levels.FATAL,
  235. levels.OFF
  236. ]);
  237. }
  238. },
  239. 'ERROR': {
  240. topic: levels.ERROR,
  241. 'should be less than FATAL': function(error) {
  242. assertThat(error).isLessThanOrEqualTo([levels.FATAL, levels.OFF]);
  243. assertThat(error).isNotLessThanOrEqualTo([
  244. levels.ALL,
  245. levels.TRACE,
  246. levels.DEBUG,
  247. levels.INFO,
  248. levels.WARN
  249. ]);
  250. },
  251. 'should be greater than WARN': function(error) {
  252. assertThat(error).isGreaterThanOrEqualTo([
  253. levels.ALL,
  254. levels.TRACE,
  255. levels.DEBUG,
  256. levels.INFO,
  257. levels.WARN
  258. ]);
  259. assertThat(error).isNotGreaterThanOrEqualTo([levels.FATAL, levels.OFF]);
  260. },
  261. 'should only be equal to ERROR': function(trace) {
  262. assertThat(trace).isEqualTo([levels.toLevel("ERROR")]);
  263. assertThat(trace).isNotEqualTo([
  264. levels.ALL,
  265. levels.TRACE,
  266. levels.DEBUG,
  267. levels.INFO,
  268. levels.WARN,
  269. levels.FATAL,
  270. levels.OFF
  271. ]);
  272. }
  273. },
  274. 'FATAL': {
  275. topic: levels.FATAL,
  276. 'should be less than OFF': function(fatal) {
  277. assertThat(fatal).isLessThanOrEqualTo([levels.OFF]);
  278. assertThat(fatal).isNotLessThanOrEqualTo([
  279. levels.ALL,
  280. levels.TRACE,
  281. levels.DEBUG,
  282. levels.INFO,
  283. levels.WARN,
  284. levels.ERROR
  285. ]);
  286. },
  287. 'should be greater than ERROR': function(fatal) {
  288. assertThat(fatal).isGreaterThanOrEqualTo([
  289. levels.ALL,
  290. levels.TRACE,
  291. levels.DEBUG,
  292. levels.INFO,
  293. levels.WARN,
  294. levels.ERROR
  295. ]);
  296. assertThat(fatal).isNotGreaterThanOrEqualTo([levels.OFF]);
  297. },
  298. 'should only be equal to FATAL': function(fatal) {
  299. assertThat(fatal).isEqualTo([levels.toLevel("FATAL")]);
  300. assertThat(fatal).isNotEqualTo([
  301. levels.ALL,
  302. levels.TRACE,
  303. levels.DEBUG,
  304. levels.INFO,
  305. levels.WARN,
  306. levels.ERROR,
  307. levels.OFF
  308. ]);
  309. }
  310. },
  311. 'OFF': {
  312. topic: levels.OFF,
  313. 'should not be less than anything': function(off) {
  314. assertThat(off).isNotLessThanOrEqualTo([
  315. levels.ALL,
  316. levels.TRACE,
  317. levels.DEBUG,
  318. levels.INFO,
  319. levels.WARN,
  320. levels.ERROR,
  321. levels.FATAL
  322. ]);
  323. },
  324. 'should be greater than everything': function(off) {
  325. assertThat(off).isGreaterThanOrEqualTo([
  326. levels.ALL,
  327. levels.TRACE,
  328. levels.DEBUG,
  329. levels.INFO,
  330. levels.WARN,
  331. levels.ERROR,
  332. levels.FATAL
  333. ]);
  334. },
  335. 'should only be equal to OFF': function(off) {
  336. assertThat(off).isEqualTo([levels.toLevel("OFF")]);
  337. assertThat(off).isNotEqualTo([
  338. levels.ALL,
  339. levels.TRACE,
  340. levels.DEBUG,
  341. levels.INFO,
  342. levels.WARN,
  343. levels.ERROR,
  344. levels.FATAL
  345. ]);
  346. }
  347. }
  348. },
  349. 'isGreaterThanOrEqualTo': {
  350. topic: levels.INFO,
  351. 'should handle string arguments': function(info) {
  352. assertThat(info).isGreaterThanOrEqualTo(["all", "trace", "debug"]);
  353. assertThat(info).isNotGreaterThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'off']);
  354. }
  355. },
  356. 'isLessThanOrEqualTo': {
  357. topic: levels.INFO,
  358. 'should handle string arguments': function(info) {
  359. assertThat(info).isNotLessThanOrEqualTo(["all", "trace", "debug"]);
  360. assertThat(info).isLessThanOrEqualTo(['warn', 'ERROR', 'Fatal', 'off']);
  361. }
  362. },
  363. 'isEqualTo': {
  364. topic: levels.INFO,
  365. 'should handle string arguments': function(info) {
  366. assertThat(info).isEqualTo(["info", "INFO", "iNfO"]);
  367. }
  368. },
  369. 'toLevel': {
  370. 'with lowercase argument': {
  371. topic: levels.toLevel("debug"),
  372. 'should take the string and return the corresponding level': function(level) {
  373. assert.equal(level, levels.DEBUG);
  374. }
  375. },
  376. 'with uppercase argument': {
  377. topic: levels.toLevel("DEBUG"),
  378. 'should take the string and return the corresponding level': function(level) {
  379. assert.equal(level, levels.DEBUG);
  380. }
  381. },
  382. 'with varying case': {
  383. topic: levels.toLevel("DeBuG"),
  384. 'should take the string and return the corresponding level': function(level) {
  385. assert.equal(level, levels.DEBUG);
  386. }
  387. },
  388. 'with unrecognised argument': {
  389. topic: levels.toLevel("cheese"),
  390. 'should return undefined': function(level) {
  391. assert.isUndefined(level);
  392. }
  393. },
  394. 'with unrecognised argument and default value': {
  395. topic: levels.toLevel("cheese", levels.DEBUG),
  396. 'should return default value': function(level) {
  397. assert.equal(level, levels.DEBUG);
  398. }
  399. }
  400. }
  401. }).export(module);