vulcan 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/README.md +1 -80
  2. data/lib/vulcan/cli.rb +12 -33
  3. data/lib/vulcan/version.rb +1 -1
  4. data/server/bin/make +3 -1
  5. data/server/lib/spawner.js +4 -9
  6. data/server/node_modules/connect-form/node_modules/formidable/Readme.md +2 -13
  7. data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +7 -19
  8. data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +1 -12
  9. data/server/node_modules/connect-form/node_modules/formidable/package.json +1 -1
  10. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +10 -0
  11. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +9 -0
  12. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +1 -1
  13. data/server/node_modules/cradle/lib/cradle.js +1 -0
  14. data/server/node_modules/cradle/node_modules/vows/LICENSE +20 -0
  15. data/server/node_modules/cradle/node_modules/vows/Makefile +7 -0
  16. data/server/node_modules/cradle/node_modules/vows/README.md +39 -0
  17. data/server/node_modules/cradle/node_modules/vows/bin/vows +515 -0
  18. data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +27 -0
  19. data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +215 -0
  20. data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +77 -0
  21. data/server/node_modules/cradle/node_modules/vows/lib/vows.js +193 -0
  22. data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +131 -0
  23. data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +55 -0
  24. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +29 -0
  25. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +2 -0
  26. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +61 -0
  27. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +54 -0
  28. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +54 -0
  29. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +38 -0
  30. data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +28 -0
  31. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +67 -0
  32. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +16 -0
  33. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +8 -0
  34. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +44 -0
  35. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +39 -0
  36. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +90 -0
  37. data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +319 -0
  38. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +20 -0
  39. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +4 -0
  40. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +72 -0
  41. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +233 -0
  42. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +14 -0
  43. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +55 -0
  44. data/server/node_modules/cradle/node_modules/vows/package.json +14 -0
  45. data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +135 -0
  46. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +18 -0
  47. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +18 -0
  48. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +17 -0
  49. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +18 -0
  50. data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +140 -0
  51. data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +133 -0
  52. data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +51 -0
  53. data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +374 -0
  54. data/server/node_modules/cradle/package.json +3 -3
  55. data/server/node_modules/cradle/test/cache-test.js +7 -6
  56. data/server/node_modules/cradle/test/cradle-test.js +5 -4
  57. data/server/node_modules/cradle/test/response-test.js +6 -5
  58. data/server/node_modules/express/History.md +1 -53
  59. data/server/node_modules/express/Makefile +9 -3
  60. data/server/node_modules/express/Readme.md +1 -3
  61. data/server/node_modules/express/bin/express +66 -65
  62. data/server/node_modules/express/lib/express.js +1 -1
  63. data/server/node_modules/express/lib/request.js +9 -23
  64. data/server/node_modules/express/lib/response.js +2 -3
  65. data/server/node_modules/express/lib/utils.js +0 -13
  66. data/server/node_modules/express/lib/view.js +16 -19
  67. data/server/node_modules/express/lib/view/view.js +1 -2
  68. data/server/node_modules/express/node_modules/connect/lib/connect.js +1 -1
  69. data/server/node_modules/express/node_modules/connect/lib/http.js +0 -2
  70. data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +31 -135
  71. data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +1 -5
  72. data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +2 -2
  73. data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +21 -26
  74. data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +38 -91
  75. data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +1 -1
  76. data/server/node_modules/express/node_modules/connect/lib/utils.js +4 -11
  77. data/server/node_modules/express/node_modules/connect/package.json +6 -7
  78. data/server/node_modules/express/node_modules/connect/test.js +31 -44
  79. data/server/node_modules/express/node_modules/mime/index.js +1 -0
  80. data/server/node_modules/express/node_modules/mime/mime.js +3 -3
  81. data/server/node_modules/express/node_modules/mime/{types/mime.types → mime.types} +0 -0
  82. data/server/node_modules/express/node_modules/mime/{types/node.types → node.types} +0 -17
  83. data/server/node_modules/express/node_modules/mime/package.json +10 -21
  84. data/server/node_modules/express/node_modules/mime/test.js +3 -2
  85. data/server/node_modules/express/node_modules/qs/History.md +0 -11
  86. data/server/node_modules/express/node_modules/qs/Makefile +3 -1
  87. data/server/node_modules/express/node_modules/qs/Readme.md +4 -2
  88. data/server/node_modules/express/node_modules/qs/lib/querystring.js +74 -100
  89. data/server/node_modules/express/node_modules/qs/package.json +2 -9
  90. data/server/node_modules/express/node_modules/qs/support/expresso/History.md +128 -0
  91. data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +53 -0
  92. data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +61 -0
  93. data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +856 -0
  94. data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +1080 -0
  95. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +377 -0
  96. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +290 -0
  97. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +3 -0
  98. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +42 -0
  99. data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +4 -0
  100. data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +16 -0
  101. data/server/node_modules/express/node_modules/qs/support/expresso/package.json +12 -0
  102. data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +91 -0
  103. data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +12 -0
  104. data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +13 -0
  105. data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +14 -0
  106. data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +146 -0
  107. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +39 -0
  108. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +48 -0
  109. data/server/node_modules/express/node_modules/qs/support/should/History.md +22 -0
  110. data/server/node_modules/express/node_modules/qs/support/should/Makefile +6 -0
  111. data/server/node_modules/express/node_modules/qs/support/should/Readme.md +248 -0
  112. data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +53 -0
  113. data/server/node_modules/express/node_modules/qs/support/should/index.js +2 -0
  114. data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +91 -0
  115. data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +548 -0
  116. data/server/node_modules/express/node_modules/qs/support/should/package.json +8 -0
  117. data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +358 -0
  118. data/server/node_modules/express/node_modules/qs/test/{parse.js → parse.test.js} +2 -1
  119. data/server/node_modules/express/node_modules/qs/test/{stringify.js → stringify.test.js} +0 -0
  120. data/server/node_modules/express/package.json +8 -9
  121. data/server/node_modules/node-uuid/README.md +67 -166
  122. data/server/node_modules/node-uuid/package.json +3 -5
  123. data/server/node_modules/node-uuid/{benchmark → test}/benchmark-native.c +0 -0
  124. data/server/node_modules/node-uuid/test/benchmark.js +27 -0
  125. data/server/node_modules/node-uuid/test/test.html +0 -3
  126. data/server/node_modules/node-uuid/test/test.js +57 -214
  127. data/server/node_modules/node-uuid/uuid.js +56 -225
  128. data/server/node_modules/restler/README.md +7 -20
  129. data/server/node_modules/restler/bin/restler +1 -1
  130. data/server/node_modules/restler/lib/multipartform.js +8 -9
  131. data/server/node_modules/restler/lib/restler.js +22 -64
  132. data/server/node_modules/restler/package.json +2 -2
  133. data/server/node_modules/restler/test/restler.js +2 -22
  134. data/server/node_modules/restler/test/test_helper.js +1 -20
  135. data/server/package.json +10 -10
  136. data/server/web.js +7 -30
  137. metadata +96 -89
  138. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/plain.txt +0 -1
  139. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/no-filename/generic.http +0 -13
  140. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/no-filename.js +0 -3
  141. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +0 -14
  142. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +0 -286
  143. data/server/node_modules/express/node_modules/connect/node_modules/formidable/TODO +0 -3
  144. data/server/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +0 -70
  145. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +0 -43
  146. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +0 -48
  147. data/server/node_modules/express/node_modules/connect/node_modules/formidable/index.js +0 -1
  148. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +0 -61
  149. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +0 -377
  150. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +0 -3
  151. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +0 -312
  152. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +0 -25
  153. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +0 -6
  154. data/server/node_modules/express/node_modules/connect/node_modules/formidable/package.json +0 -22
  155. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +0 -19
  156. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +0 -1
  157. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +0 -1
  158. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/no-filename/generic.http +0 -13
  159. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +0 -3
  160. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +0 -26
  161. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +0 -24
  162. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +0 -23
  163. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +0 -24
  164. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +0 -22
  165. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +0 -22
  166. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +0 -22
  167. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +0 -3
  168. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +0 -21
  169. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multi_video.upload +0 -0
  170. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +0 -72
  171. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +0 -89
  172. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +0 -24
  173. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +0 -80
  174. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +0 -104
  175. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +0 -715
  176. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +0 -50
  177. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +0 -45
  178. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +0 -72
  179. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +0 -2
  180. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +0 -63
  181. data/server/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +0 -47
  182. data/server/node_modules/express/node_modules/mkdirp/LICENSE +0 -21
  183. data/server/node_modules/express/node_modules/mkdirp/README.markdown +0 -21
  184. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js +0 -6
  185. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.orig +0 -6
  186. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.rej +0 -19
  187. data/server/node_modules/express/node_modules/mkdirp/index.js +0 -20
  188. data/server/node_modules/express/node_modules/mkdirp/package.json +0 -23
  189. data/server/node_modules/express/node_modules/mkdirp/test/mkdirp.js +0 -28
  190. data/server/node_modules/express/node_modules/mkdirp/test/race.js +0 -41
  191. data/server/node_modules/express/node_modules/mkdirp/test/rel.js +0 -32
  192. data/server/node_modules/express/node_modules/qs/test/mocha.opts +0 -2
  193. data/server/node_modules/express/testing/foo/app.js +0 -35
  194. data/server/node_modules/express/testing/foo/package.json +0 -9
  195. data/server/node_modules/express/testing/foo/public/stylesheets/style.css +0 -8
  196. data/server/node_modules/express/testing/foo/routes/index.js +0 -10
  197. data/server/node_modules/express/testing/foo/views/index.jade +0 -2
  198. data/server/node_modules/express/testing/foo/views/layout.jade +0 -6
  199. data/server/node_modules/express/testing/index.js +0 -43
  200. data/server/node_modules/express/testing/public/test.txt +0 -2971
  201. data/server/node_modules/express/testing/views/page.html +0 -1
  202. data/server/node_modules/express/testing/views/page.jade +0 -3
  203. data/server/node_modules/express/testing/views/test.md +0 -1
  204. data/server/node_modules/express/testing/views/user/index.jade +0 -1
  205. data/server/node_modules/express/testing/views/user/list.jade +0 -1
  206. data/server/node_modules/node-uuid/benchmark/README.md +0 -53
  207. data/server/node_modules/node-uuid/benchmark/bench.gnu +0 -174
  208. data/server/node_modules/node-uuid/benchmark/bench.sh +0 -34
  209. data/server/node_modules/node-uuid/benchmark/benchmark.js +0 -84
  210. data/server/node_modules/node-uuid/test/benchmark-native +0 -0
  211. data/server/node_modules/node-uuid/test/compare_v1.js +0 -63
@@ -0,0 +1,377 @@
1
+ <html>
2
+ <head>
3
+ <title>Expresso - TDD Framework For Node</title>
4
+ <style>
5
+ body {
6
+ font: 13px/1.4 "Helvetica", "Lucida Grande", Arial, sans-serif;
7
+ text-align: center;
8
+ }
9
+ #ribbon {
10
+ position: absolute;
11
+ top: 0;
12
+ right: 0;
13
+ z-index: 10;
14
+ }
15
+ #wrapper {
16
+ margin: 0 auto;
17
+ padding: 50px 80px;
18
+ width: 700px;
19
+ text-align: left;
20
+ }
21
+ h1, h2, h3 {
22
+ margin: 25px 0 15px 0;
23
+ }
24
+ h1 {
25
+ font-size: 35px;
26
+ }
27
+ pre {
28
+ margin: 0 5px;
29
+ padding: 15px;
30
+ border: 1px solid #eee;
31
+ }
32
+ a {
33
+ color: #00aaff;
34
+ }
35
+ </style>
36
+ </head>
37
+ <body>
38
+ <a href="http://github.com/visionmedia/expresso">
39
+ <img alt="Fork me on GitHub" id="ribbon" src="http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png" />
40
+ </a>
41
+ <div id="wrapper">
42
+ <h1>Expresso</h1>
43
+ <div class='mp'>
44
+ <h2 id="NAME">NAME</h2>
45
+ <p class="man-name">
46
+ <code>index</code>
47
+ </p>
48
+ <p><a href="http://github.com/visionmedia/expresso">Expresso</a> is a JavaScript <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> framework written for <a href="http://nodejs.org">nodejs</a>. Expresso is extremely fast, and is packed with features such as additional assertion methods, code coverage reporting, CI support, and more.</p>
49
+
50
+ <h2 id="Features">Features</h2>
51
+
52
+ <ul>
53
+ <li>light-weight</li>
54
+ <li>intuitive async support</li>
55
+ <li>intuitive test runner executable</li>
56
+ <li>test coverage support and reporting via <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a></li>
57
+ <li>uses and extends the core <em>assert</em> module</li>
58
+ <li><code>assert.eql()</code> alias of <code>assert.deepEqual()</code></li>
59
+ <li><code>assert.response()</code> http response utility</li>
60
+ <li><code>assert.includes()</code></li>
61
+ <li><code>assert.isNull()</code></li>
62
+ <li><code>assert.isUndefined()</code></li>
63
+ <li><code>assert.isNotNull()</code></li>
64
+ <li><code>assert.isDefined()</code></li>
65
+ <li><code>assert.match()</code></li>
66
+ <li><code>assert.length()</code></li>
67
+ </ul>
68
+
69
+
70
+ <h2 id="Installation">Installation</h2>
71
+
72
+ <p>To install both expresso <em>and</em> node-jscoverage run
73
+ the command below, which will first compile node-jscoverage:</p>
74
+
75
+ <pre><code>$ make install
76
+ </code></pre>
77
+
78
+ <p>To install expresso alone without coverage reporting run:</p>
79
+
80
+ <pre><code>$ make install-expresso
81
+ </code></pre>
82
+
83
+ <p>Install via npm:</p>
84
+
85
+ <pre><code>$ npm install expresso
86
+ </code></pre>
87
+
88
+ <h2 id="Examples">Examples</h2>
89
+
90
+ <p>To define tests we simply export several functions:</p>
91
+
92
+ <pre><code>exports['test String#length'] = function(){
93
+ assert.equal(6, 'foobar'.length);
94
+ };
95
+ </code></pre>
96
+
97
+ <p>Alternatively for large numbers of tests you may want to
98
+ export your own object containing the tests, however this
99
+ is essentially the as above:</p>
100
+
101
+ <pre><code>module.exports = {
102
+ 'test String#length': function(){
103
+ assert.equal(6, 'foobar'.length);
104
+ }
105
+ };
106
+ </code></pre>
107
+
108
+ <p>If you prefer not to use quoted keys:</p>
109
+
110
+ <pre><code>exports.testsStringLength = function(){
111
+ assert.equal(6, 'foobar'.length);
112
+ };
113
+ </code></pre>
114
+
115
+ <p>The argument passed to each callback is <em>beforeExit</em>,
116
+ which is typically used to assert that callbacks have been
117
+ invoked.</p>
118
+
119
+ <pre><code>exports.testAsync = function(beforeExit){
120
+ var n = 0;
121
+ setTimeout(function(){
122
+ ++n;
123
+ assert.ok(true);
124
+ }, 200);
125
+ setTimeout(function(){
126
+ ++n;
127
+ assert.ok(true);
128
+ }, 200);
129
+ beforeExit(function(){
130
+ assert.equal(2, n, 'Ensure both timeouts are called');
131
+ });
132
+ };
133
+ </code></pre>
134
+
135
+ <h2 id="Assert-Utilities">Assert Utilities</h2>
136
+
137
+ <h3 id="assert-isNull-val-msg-">assert.isNull(val[, msg])</h3>
138
+
139
+ <p>Asserts that the given <em>val</em> is <em>null</em>.</p>
140
+
141
+ <pre><code>assert.isNull(null);
142
+ </code></pre>
143
+
144
+ <h3 id="assert-isNotNull-val-msg-">assert.isNotNull(val[, msg])</h3>
145
+
146
+ <p>Asserts that the given <em>val</em> is not <em>null</em>.</p>
147
+
148
+ <pre><code>assert.isNotNull(undefined);
149
+ assert.isNotNull(false);
150
+ </code></pre>
151
+
152
+ <h3 id="assert-isUndefined-val-msg-">assert.isUndefined(val[, msg])</h3>
153
+
154
+ <p>Asserts that the given <em>val</em> is <em>undefined</em>.</p>
155
+
156
+ <pre><code>assert.isUndefined(undefined);
157
+ </code></pre>
158
+
159
+ <h3 id="assert-isDefined-val-msg-">assert.isDefined(val[, msg])</h3>
160
+
161
+ <p>Asserts that the given <em>val</em> is not <em>undefined</em>.</p>
162
+
163
+ <pre><code>assert.isDefined(null);
164
+ assert.isDefined(false);
165
+ </code></pre>
166
+
167
+ <h3 id="assert-match-str-regexp-msg-">assert.match(str, regexp[, msg])</h3>
168
+
169
+ <p>Asserts that the given <em>str</em> matches <em>regexp</em>.</p>
170
+
171
+ <pre><code>assert.match('foobar', /^foo(bar)?/);
172
+ assert.match('foo', /^foo(bar)?/);
173
+ </code></pre>
174
+
175
+ <h3 id="assert-length-val-n-msg-">assert.length(val, n[, msg])</h3>
176
+
177
+ <p>Assert that the given <em>val</em> has a length of <em>n</em>.</p>
178
+
179
+ <pre><code>assert.length([1,2,3], 3);
180
+ assert.length('foo', 3);
181
+ </code></pre>
182
+
183
+ <h3 id="assert-type-obj-type-msg-">assert.type(obj, type[, msg])</h3>
184
+
185
+ <p>Assert that the given <em>obj</em> is typeof <em>type</em>.</p>
186
+
187
+ <pre><code>assert.type(3, 'number');
188
+ </code></pre>
189
+
190
+ <h3 id="assert-eql-a-b-msg-">assert.eql(a, b[, msg])</h3>
191
+
192
+ <p>Assert that object <em>b</em> is equal to object <em>a</em>. This is an
193
+ alias for the core <em>assert.deepEqual()</em> method which does complex
194
+ comparisons, opposed to <em>assert.equal()</em> which uses <em>==</em>.</p>
195
+
196
+ <pre><code>assert.eql('foo', 'foo');
197
+ assert.eql([1,2], [1,2]);
198
+ assert.eql({ foo: 'bar' }, { foo: 'bar' });
199
+ </code></pre>
200
+
201
+ <h3 id="assert-includes-obj-val-msg-">assert.includes(obj, val[, msg])</h3>
202
+
203
+ <p>Assert that <em>obj</em> is within <em>val</em>. This method supports <em>Array_s
204
+ and </em>Strings_s.</p>
205
+
206
+ <pre><code>assert.includes([1,2,3], 3);
207
+ assert.includes('foobar', 'foo');
208
+ assert.includes('foobar', 'bar');
209
+ </code></pre>
210
+
211
+ <h3 id="assert-response-server-req-res-fn-msg-fn-">assert.response(server, req, res|fn[, msg|fn])</h3>
212
+
213
+ <p>Performs assertions on the given <em>server</em>, which should <em>not</em> call
214
+ listen(), as this is handled internally by expresso and the server
215
+ is killed after all responses have completed. This method works with
216
+ any <em>http.Server</em> instance, so <em>Connect</em> and <em>Express</em> servers will work
217
+ as well.</p>
218
+
219
+ <p>The <em>req</em> object may contain:</p>
220
+
221
+ <ul>
222
+ <li><em>url</em> request url</li>
223
+ <li><em>timeout</em> timeout in milliseconds</li>
224
+ <li><em>method</em> HTTP method</li>
225
+ <li><em>data</em> request body</li>
226
+ <li><em>headers</em> headers object</li>
227
+ </ul>
228
+
229
+
230
+ <p>The <em>res</em> object may be a callback function which
231
+ receives the response for assertions, or an object
232
+ which is then used to perform several assertions
233
+ on the response with the following properties:</p>
234
+
235
+ <ul>
236
+ <li><em>body</em> assert response body (regexp or string)</li>
237
+ <li><em>status</em> assert response status code</li>
238
+ <li><em>header</em> assert that all given headers match (unspecified are ignored, use a regexp or string)</li>
239
+ </ul>
240
+
241
+
242
+ <p>When providing <em>res</em> you may then also pass a callback function
243
+ as the fourth argument for additional assertions.</p>
244
+
245
+ <p>Below are some examples:</p>
246
+
247
+ <pre><code>assert.response(server, {
248
+ url: '/', timeout: 500
249
+ }, {
250
+ body: 'foobar'
251
+ });
252
+
253
+ assert.response(server, {
254
+ url: '/',
255
+ method: 'GET'
256
+ },{
257
+ body: '{"name":"tj"}',
258
+ status: 200,
259
+ headers: {
260
+ 'Content-Type': 'application/json; charset=utf8',
261
+ 'X-Foo': 'bar'
262
+ }
263
+ });
264
+
265
+ assert.response(server, {
266
+ url: '/foo',
267
+ method: 'POST',
268
+ data: 'bar baz'
269
+ },{
270
+ body: '/foo bar baz',
271
+ status: 200
272
+ }, 'Test POST');
273
+
274
+ assert.response(server, {
275
+ url: '/foo',
276
+ method: 'POST',
277
+ data: 'bar baz'
278
+ },{
279
+ body: '/foo bar baz',
280
+ status: 200
281
+ }, function(res){
282
+ // All done, do some more tests if needed
283
+ });
284
+
285
+ assert.response(server, {
286
+ url: '/'
287
+ }, function(res){
288
+ assert.ok(res.body.indexOf('tj') &gt;= 0, 'Test assert.response() callback');
289
+ });
290
+ </code></pre>
291
+
292
+ <h2 id="expresso-1-">expresso(1)</h2>
293
+
294
+ <p>To run a single test suite (file) run:</p>
295
+
296
+ <pre><code>$ expresso test/a.test.js
297
+ </code></pre>
298
+
299
+ <p>To run several suites we may simply append another:</p>
300
+
301
+ <pre><code>$ expresso test/a.test.js test/b.test.js
302
+ </code></pre>
303
+
304
+ <p>We can also pass a whitelist of tests to run within all suites:</p>
305
+
306
+ <pre><code>$ expresso --only "foo()" --only "bar()"
307
+ </code></pre>
308
+
309
+ <p>Or several with one call:</p>
310
+
311
+ <pre><code>$ expresso --only "foo(), bar()"
312
+ </code></pre>
313
+
314
+ <p>Globbing is of course possible as well:</p>
315
+
316
+ <pre><code>$ expresso test/*
317
+ </code></pre>
318
+
319
+ <p>When expresso is called without any files, <em>test/*</em> is the default,
320
+ so the following is equivalent to the command above:</p>
321
+
322
+ <pre><code>$ expresso
323
+ </code></pre>
324
+
325
+ <p>If you wish to unshift a path to <code>require.paths</code> before
326
+ running tests, you may use the <code>-I</code> or <code>--include</code> flag.</p>
327
+
328
+ <pre><code>$ expresso --include lib test/*
329
+ </code></pre>
330
+
331
+ <p>The previous example is typically what I would recommend, since expresso
332
+ supports test coverage via <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a> (bundled with expresso),
333
+ so you will need to expose an instrumented version of you library.</p>
334
+
335
+ <p>To instrument your library, simply run <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a>,
336
+ passing the <em>src</em> and <em>dest</em> directories:</p>
337
+
338
+ <pre><code>$ node-jscoverage lib lib-cov
339
+ </code></pre>
340
+
341
+ <p>Now we can run our tests again, using the <em>lib-cov</em> directory that has been
342
+ instrumented with coverage statements:</p>
343
+
344
+ <pre><code>$ expresso -I lib-cov test/*
345
+ </code></pre>
346
+
347
+ <p>The output will look similar to below, depending on your test coverage of course :)</p>
348
+
349
+ <p><img src="http://dl.dropbox.com/u/6396913/cov.png" alt="node coverage" /></p>
350
+
351
+ <p>To make this process easier expresso has the <em>-c</em> or <em>--cov</em> which essentially
352
+ does the same as the two commands above. The following two commands will
353
+ run the same tests, however one will auto-instrument, and unshift <em>lib-cov</em>,
354
+ and the other will run tests normally:</p>
355
+
356
+ <pre><code>$ expresso -I lib test/*
357
+ $ expresso -I lib --cov test/*
358
+ </code></pre>
359
+
360
+ <p>Currently coverage is bound to the <em>lib</em> directory, however in the
361
+ future <code>--cov</code> will most likely accept a path.</p>
362
+
363
+ <h2 id="Async-Exports">Async Exports</h2>
364
+
365
+ <p>Sometimes it is useful to postpone running of tests until a callback or event has fired, currently the <em>exports.foo = function(){};</em> syntax is supported for this:</p>
366
+
367
+ <pre><code>setTimeout(function(){
368
+ exports['test async exports'] = function(){
369
+ assert.ok('wahoo');
370
+ };
371
+ }, 100);
372
+ </code></pre>
373
+
374
+ </div>
375
+ </div>
376
+ </body>
377
+ </html>
@@ -0,0 +1,290 @@
1
+
2
+ [Expresso](http://github.com/visionmedia/expresso) is a JavaScript [TDD](http://en.wikipedia.org/wiki/Test-driven_development) framework written for [nodejs](http://nodejs.org). Expresso is extremely fast, and is packed with features such as additional assertion methods, code coverage reporting, CI support, and more.
3
+
4
+ ## Features
5
+
6
+ - light-weight
7
+ - intuitive async support
8
+ - intuitive test runner executable
9
+ - test coverage support and reporting via [node-jscoverage](http://github.com/visionmedia/node-jscoverage)
10
+ - uses and extends the core _assert_ module
11
+ - `assert.eql()` alias of `assert.deepEqual()`
12
+ - `assert.response()` http response utility
13
+ - `assert.includes()`
14
+ - `assert.isNull()`
15
+ - `assert.isUndefined()`
16
+ - `assert.isNotNull()`
17
+ - `assert.isDefined()`
18
+ - `assert.match()`
19
+ - `assert.length()`
20
+
21
+ ## Installation
22
+
23
+ To install both expresso _and_ node-jscoverage run
24
+ the command below, which will first compile node-jscoverage:
25
+
26
+ $ make install
27
+
28
+ To install expresso alone without coverage reporting run:
29
+
30
+ $ make install-expresso
31
+
32
+ Install via npm:
33
+
34
+ $ npm install expresso
35
+
36
+ ## Examples
37
+
38
+ To define tests we simply export several functions:
39
+
40
+ exports['test String#length'] = function(){
41
+ assert.equal(6, 'foobar'.length);
42
+ };
43
+
44
+ Alternatively for large numbers of tests you may want to
45
+ export your own object containing the tests, however this
46
+ is essentially the as above:
47
+
48
+ module.exports = {
49
+ 'test String#length': function(){
50
+ assert.equal(6, 'foobar'.length);
51
+ }
52
+ };
53
+
54
+ If you prefer not to use quoted keys:
55
+
56
+ exports.testsStringLength = function(){
57
+ assert.equal(6, 'foobar'.length);
58
+ };
59
+
60
+ The argument passed to each callback is _beforeExit_,
61
+ which is typically used to assert that callbacks have been
62
+ invoked.
63
+
64
+ exports.testAsync = function(beforeExit){
65
+ var n = 0;
66
+ setTimeout(function(){
67
+ ++n;
68
+ assert.ok(true);
69
+ }, 200);
70
+ setTimeout(function(){
71
+ ++n;
72
+ assert.ok(true);
73
+ }, 200);
74
+ beforeExit(function(){
75
+ assert.equal(2, n, 'Ensure both timeouts are called');
76
+ });
77
+ };
78
+
79
+ ## Assert Utilities
80
+
81
+ ### assert.isNull(val[, msg])
82
+
83
+ Asserts that the given _val_ is _null_.
84
+
85
+ assert.isNull(null);
86
+
87
+ ### assert.isNotNull(val[, msg])
88
+
89
+ Asserts that the given _val_ is not _null_.
90
+
91
+ assert.isNotNull(undefined);
92
+ assert.isNotNull(false);
93
+
94
+ ### assert.isUndefined(val[, msg])
95
+
96
+ Asserts that the given _val_ is _undefined_.
97
+
98
+ assert.isUndefined(undefined);
99
+
100
+ ### assert.isDefined(val[, msg])
101
+
102
+ Asserts that the given _val_ is not _undefined_.
103
+
104
+ assert.isDefined(null);
105
+ assert.isDefined(false);
106
+
107
+ ### assert.match(str, regexp[, msg])
108
+
109
+ Asserts that the given _str_ matches _regexp_.
110
+
111
+ assert.match('foobar', /^foo(bar)?/);
112
+ assert.match('foo', /^foo(bar)?/);
113
+
114
+ ### assert.length(val, n[, msg])
115
+
116
+ Assert that the given _val_ has a length of _n_.
117
+
118
+ assert.length([1,2,3], 3);
119
+ assert.length('foo', 3);
120
+
121
+ ### assert.type(obj, type[, msg])
122
+
123
+ Assert that the given _obj_ is typeof _type_.
124
+
125
+ assert.type(3, 'number');
126
+
127
+ ### assert.eql(a, b[, msg])
128
+
129
+ Assert that object _b_ is equal to object _a_. This is an
130
+ alias for the core _assert.deepEqual()_ method which does complex
131
+ comparisons, opposed to _assert.equal()_ which uses _==_.
132
+
133
+ assert.eql('foo', 'foo');
134
+ assert.eql([1,2], [1,2]);
135
+ assert.eql({ foo: 'bar' }, { foo: 'bar' });
136
+
137
+ ### assert.includes(obj, val[, msg])
138
+
139
+ Assert that _obj_ is within _val_. This method supports _Array_s
140
+ and _Strings_s.
141
+
142
+ assert.includes([1,2,3], 3);
143
+ assert.includes('foobar', 'foo');
144
+ assert.includes('foobar', 'bar');
145
+
146
+ ### assert.response(server, req, res|fn[, msg|fn])
147
+
148
+ Performs assertions on the given _server_, which should _not_ call
149
+ listen(), as this is handled internally by expresso and the server
150
+ is killed after all responses have completed. This method works with
151
+ any _http.Server_ instance, so _Connect_ and _Express_ servers will work
152
+ as well.
153
+
154
+ The _req_ object may contain:
155
+
156
+ - _url_ request url
157
+ - _timeout_ timeout in milliseconds
158
+ - _method_ HTTP method
159
+ - _data_ request body
160
+ - _headers_ headers object
161
+
162
+ The _res_ object may be a callback function which
163
+ receives the response for assertions, or an object
164
+ which is then used to perform several assertions
165
+ on the response with the following properties:
166
+
167
+ - _body_ assert response body (regexp or string)
168
+ - _status_ assert response status code
169
+ - _header_ assert that all given headers match (unspecified are ignored, use a regexp or string)
170
+
171
+ When providing _res_ you may then also pass a callback function
172
+ as the fourth argument for additional assertions.
173
+
174
+ Below are some examples:
175
+
176
+ assert.response(server, {
177
+ url: '/', timeout: 500
178
+ }, {
179
+ body: 'foobar'
180
+ });
181
+
182
+ assert.response(server, {
183
+ url: '/',
184
+ method: 'GET'
185
+ },{
186
+ body: '{"name":"tj"}',
187
+ status: 200,
188
+ headers: {
189
+ 'Content-Type': 'application/json; charset=utf8',
190
+ 'X-Foo': 'bar'
191
+ }
192
+ });
193
+
194
+ assert.response(server, {
195
+ url: '/foo',
196
+ method: 'POST',
197
+ data: 'bar baz'
198
+ },{
199
+ body: '/foo bar baz',
200
+ status: 200
201
+ }, 'Test POST');
202
+
203
+ assert.response(server, {
204
+ url: '/foo',
205
+ method: 'POST',
206
+ data: 'bar baz'
207
+ },{
208
+ body: '/foo bar baz',
209
+ status: 200
210
+ }, function(res){
211
+ // All done, do some more tests if needed
212
+ });
213
+
214
+ assert.response(server, {
215
+ url: '/'
216
+ }, function(res){
217
+ assert.ok(res.body.indexOf('tj') >= 0, 'Test assert.response() callback');
218
+ });
219
+
220
+
221
+ ## expresso(1)
222
+
223
+ To run a single test suite (file) run:
224
+
225
+ $ expresso test/a.test.js
226
+
227
+ To run several suites we may simply append another:
228
+
229
+ $ expresso test/a.test.js test/b.test.js
230
+
231
+ We can also pass a whitelist of tests to run within all suites:
232
+
233
+ $ expresso --only "foo()" --only "bar()"
234
+
235
+ Or several with one call:
236
+
237
+ $ expresso --only "foo(), bar()"
238
+
239
+ Globbing is of course possible as well:
240
+
241
+ $ expresso test/*
242
+
243
+ When expresso is called without any files, _test/*_ is the default,
244
+ so the following is equivalent to the command above:
245
+
246
+ $ expresso
247
+
248
+ If you wish to unshift a path to `require.paths` before
249
+ running tests, you may use the `-I` or `--include` flag.
250
+
251
+ $ expresso --include lib test/*
252
+
253
+ The previous example is typically what I would recommend, since expresso
254
+ supports test coverage via [node-jscoverage](http://github.com/visionmedia/node-jscoverage) (bundled with expresso),
255
+ so you will need to expose an instrumented version of you library.
256
+
257
+ To instrument your library, simply run [node-jscoverage](http://github.com/visionmedia/node-jscoverage),
258
+ passing the _src_ and _dest_ directories:
259
+
260
+ $ node-jscoverage lib lib-cov
261
+
262
+ Now we can run our tests again, using the _lib-cov_ directory that has been
263
+ instrumented with coverage statements:
264
+
265
+ $ expresso -I lib-cov test/*
266
+
267
+ The output will look similar to below, depending on your test coverage of course :)
268
+
269
+ ![node coverage](http://dl.dropbox.com/u/6396913/cov.png)
270
+
271
+ To make this process easier expresso has the _-c_ or _--cov_ which essentially
272
+ does the same as the two commands above. The following two commands will
273
+ run the same tests, however one will auto-instrument, and unshift _lib-cov_,
274
+ and the other will run tests normally:
275
+
276
+ $ expresso -I lib test/*
277
+ $ expresso -I lib --cov test/*
278
+
279
+ Currently coverage is bound to the _lib_ directory, however in the
280
+ future `--cov` will most likely accept a path.
281
+
282
+ ## Async Exports
283
+
284
+ Sometimes it is useful to postpone running of tests until a callback or event has fired, currently the _exports.foo = function(){};_ syntax is supported for this:
285
+
286
+ setTimeout(function(){
287
+ exports['test async exports'] = function(){
288
+ assert.ok('wahoo');
289
+ };
290
+ }, 100);