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,27 @@
1
+ var stylize = require('../vows/console').stylize;
2
+ var inspect = require('../vows/console').inspect;
3
+
4
+ require('assert').AssertionError.prototype.toString = function () {
5
+ var that = this,
6
+ source = this.stack.match(/([a-zA-Z0-9._-]+\.js)(:\d+):\d+/);
7
+
8
+ function parse(str) {
9
+ return str.replace(/{actual}/g, inspect(that.actual)).
10
+ replace(/{operator}/g, stylize(that.operator, 'bold')).
11
+ replace(/{expected}/g, (that.expected instanceof Function)
12
+ ? that.expected.name
13
+ : inspect(that.expected));
14
+ }
15
+
16
+ if (this.message) {
17
+ return stylize(parse(this.message), 'yellow') +
18
+ stylize(' // ' + source[1] + source[2], 'grey');
19
+ } else {
20
+ return stylize([
21
+ this.expected,
22
+ this.operator,
23
+ this.actual
24
+ ].join(' '), 'yellow');
25
+ }
26
+ };
27
+
@@ -0,0 +1,215 @@
1
+ var assert = require('assert'),
2
+ utils = require('./utils');
3
+
4
+ var messages = {
5
+ 'equal' : "expected {expected},\n\tgot\t {actual} ({operator})",
6
+ 'notEqual' : "didn't expect {actual} ({operator})"
7
+ };
8
+ messages['strictEqual'] = messages['deepEqual'] = messages['equal'];
9
+ messages['notStrictEqual'] = messages['notDeepEqual'] = messages['notEqual'];
10
+
11
+ for (var key in messages) {
12
+ assert[key] = (function (key, callback) {
13
+ return function (actual, expected, message) {
14
+ callback(actual, expected, message || messages[key]);
15
+ };
16
+ })(key, assert[key]);
17
+ }
18
+
19
+ assert.ok = (function (callback) {
20
+ return function (actual, message) {
21
+ callback(actual, message || "expected expression to evaluate to {expected}, but was {actual}");
22
+ };
23
+ })(assert.ok);
24
+
25
+ assert.match = function (actual, expected, message) {
26
+ if (! expected.test(actual)) {
27
+ assert.fail(actual, expected, message || "expected {actual} to match {expected}", "match", assert.match);
28
+ }
29
+ };
30
+ assert.matches = assert.match;
31
+
32
+ assert.isTrue = function (actual, message) {
33
+ if (actual !== true) {
34
+ assert.fail(actual, true, message || "expected {expected}, got {actual}", "===", assert.isTrue);
35
+ }
36
+ };
37
+ assert.isFalse = function (actual, message) {
38
+ if (actual !== false) {
39
+ assert.fail(actual, false, message || "expected {expected}, got {actual}", "===", assert.isFalse);
40
+ }
41
+ };
42
+ assert.isZero = function (actual, message) {
43
+ if (actual !== 0) {
44
+ assert.fail(actual, 0, message || "expected {expected}, got {actual}", "===", assert.isZero);
45
+ }
46
+ };
47
+ assert.isNotZero = function (actual, message) {
48
+ if (actual === 0) {
49
+ assert.fail(actual, 0, message || "expected non-zero value, got {actual}", "===", assert.isNotZero);
50
+ }
51
+ };
52
+
53
+ assert.greater = function (actual, expected, message) {
54
+ if (actual <= expected) {
55
+ assert.fail(actual, expected, message || "expected {actual} to be greater than {expected}", ">", assert.greater);
56
+ }
57
+ };
58
+ assert.lesser = function (actual, expected, message) {
59
+ if (actual >= expected) {
60
+ assert.fail(actual, expected, message || "expected {actual} to be lesser than {expected}", "<", assert.lesser);
61
+ }
62
+ };
63
+
64
+ assert.inDelta = function (actual, expected, delta, message) {
65
+ var lower = expected - delta;
66
+ var upper = expected + delta;
67
+ if (actual < lower || actual > upper) {
68
+ assert.fail(actual, expected, message || "expected {actual} to be in within *" + delta.toString() + "* of {expected}", null, assert.inDelta);
69
+ }
70
+ };
71
+
72
+ //
73
+ // Inclusion
74
+ //
75
+ assert.include = function (actual, expected, message) {
76
+ if ((function (obj) {
77
+ if (isArray(obj) || isString(obj)) {
78
+ return obj.indexOf(expected) === -1;
79
+ } else if (isObject(actual)) {
80
+ return ! obj.hasOwnProperty(expected);
81
+ }
82
+ return false;
83
+ })(actual)) {
84
+ assert.fail(actual, expected, message || "expected {actual} to include {expected}", "include", assert.include);
85
+ }
86
+ };
87
+ assert.includes = assert.include;
88
+
89
+ assert.deepInclude = function (actual, expected, message) {
90
+ if (!isArray(actual)) {
91
+ return assert.include(actual, expected, message);
92
+ }
93
+ if (!actual.some(function (item) { return utils.deepEqual(item, expected) })) {
94
+ assert.fail(actual, expected, message || "expected {actual} to include {expected}", "include", assert.deepInclude);
95
+ }
96
+ };
97
+ assert.deepIncludes = assert.deepInclude;
98
+
99
+ //
100
+ // Length
101
+ //
102
+ assert.isEmpty = function (actual, message) {
103
+ if ((isObject(actual) && Object.keys(actual).length > 0) || actual.length > 0) {
104
+ assert.fail(actual, 0, message || "expected {actual} to be empty", "length", assert.isEmpty);
105
+ }
106
+ };
107
+ assert.isNotEmpty = function (actual, message) {
108
+ if ((isObject(actual) && Object.keys(actual).length === 0) || actual.length === 0) {
109
+ assert.fail(actual, 0, message || "expected {actual} to be not empty", "length", assert.isNotEmpty);
110
+ }
111
+ };
112
+
113
+ assert.length = function (actual, expected, message) {
114
+ if (actual.length !== expected) {
115
+ assert.fail(actual, expected, message || "expected {actual} to have {expected} element(s)", "length", assert.length);
116
+ }
117
+ };
118
+
119
+ //
120
+ // Type
121
+ //
122
+ assert.isArray = function (actual, message) {
123
+ assertTypeOf(actual, 'array', message || "expected {actual} to be an Array", assert.isArray);
124
+ };
125
+ assert.isObject = function (actual, message) {
126
+ assertTypeOf(actual, 'object', message || "expected {actual} to be an Object", assert.isObject);
127
+ };
128
+ assert.isNumber = function (actual, message) {
129
+ if (isNaN(actual)) {
130
+ assert.fail(actual, 'number', message || "expected {actual} to be of type {expected}", "isNaN", assert.isNumber);
131
+ } else {
132
+ assertTypeOf(actual, 'number', message || "expected {actual} to be a Number", assert.isNumber);
133
+ }
134
+ };
135
+ assert.isBoolean = function (actual, message) {
136
+ if (actual !== true && actual !== false) {
137
+ assert.fail(actual, 'boolean', message || "expected {actual} to be a Boolean", "===", assert.isBoolean);
138
+ }
139
+ };
140
+ assert.isNaN = function (actual, message) {
141
+ if (actual === actual) {
142
+ assert.fail(actual, 'NaN', message || "expected {actual} to be NaN", "===", assert.isNaN);
143
+ }
144
+ };
145
+ assert.isNull = function (actual, message) {
146
+ if (actual !== null) {
147
+ assert.fail(actual, null, message || "expected {expected}, got {actual}", "===", assert.isNull);
148
+ }
149
+ };
150
+ assert.isNotNull = function (actual, message) {
151
+ if (actual === null) {
152
+ assert.fail(actual, null, message || "expected non-null value, got {actual}", "===", assert.isNotNull);
153
+ }
154
+ };
155
+ assert.isUndefined = function (actual, message) {
156
+ if (actual !== undefined) {
157
+ assert.fail(actual, undefined, message || "expected {actual} to be {expected}", "===", assert.isUndefined);
158
+ }
159
+ };
160
+ assert.isDefined = function (actual, message) {
161
+ if(actual === undefined) {
162
+ assert.fail(actual, 0, message || "expected {actual} to be defined", "===", assert.isDefined);
163
+ }
164
+ };
165
+ assert.isString = function (actual, message) {
166
+ assertTypeOf(actual, 'string', message || "expected {actual} to be a String", assert.isString);
167
+ };
168
+ assert.isFunction = function (actual, message) {
169
+ assertTypeOf(actual, 'function', message || "expected {actual} to be a Function", assert.isFunction);
170
+ };
171
+ assert.typeOf = function (actual, expected, message) {
172
+ assertTypeOf(actual, expected, message, assert.typeOf);
173
+ };
174
+ assert.instanceOf = function (actual, expected, message) {
175
+ if (! (actual instanceof expected)) {
176
+ assert.fail(actual, expected, message || "expected {actual} to be an instance of {expected}", "instanceof", assert.instanceOf);
177
+ }
178
+ };
179
+
180
+ //
181
+ // Utility functions
182
+ //
183
+
184
+ function assertTypeOf(actual, expected, message, caller) {
185
+ if (typeOf(actual) !== expected) {
186
+ assert.fail(actual, expected, message || "expected {actual} to be of type {expected}", "typeOf", caller);
187
+ }
188
+ };
189
+
190
+ function isArray (obj) {
191
+ return Array.isArray(obj);
192
+ }
193
+
194
+ function isString (obj) {
195
+ return typeof(obj) === 'string' || obj instanceof String;
196
+ }
197
+
198
+ function isObject (obj) {
199
+ return typeof(obj) === 'object' && obj && !isArray(obj);
200
+ }
201
+
202
+ // A better `typeof`
203
+ function typeOf(value) {
204
+ var s = typeof(value),
205
+ types = [Object, Array, String, RegExp, Number, Function, Boolean, Date];
206
+
207
+ if (s === 'object' || s === 'function') {
208
+ if (value) {
209
+ types.forEach(function (t) {
210
+ if (value instanceof t) { s = t.name.toLowerCase() }
211
+ });
212
+ } else { s = 'null' }
213
+ }
214
+ return s;
215
+ }
@@ -0,0 +1,77 @@
1
+
2
+ // Taken from node/lib/assert.js
3
+ exports.deepEqual = function (actual, expected) {
4
+ if (actual === expected) {
5
+ return true;
6
+
7
+ } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
8
+ if (actual.length != expected.length) return false;
9
+
10
+ for (var i = 0; i < actual.length; i++) {
11
+ if (actual[i] !== expected[i]) return false;
12
+ }
13
+ return true;
14
+
15
+ } else if (actual instanceof Date && expected instanceof Date) {
16
+ return actual.getTime() === expected.getTime();
17
+
18
+ } else if (typeof actual != 'object' && typeof expected != 'object') {
19
+ return actual == expected;
20
+
21
+ } else {
22
+ return objEquiv(actual, expected);
23
+ }
24
+ }
25
+
26
+ // Taken from node/lib/assert.js
27
+ exports.notDeepEqual = function (actual, expected, message) {
28
+ if (exports.deepEqual(actual, expected)) {
29
+ fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
30
+ }
31
+ }
32
+
33
+ // Taken from node/lib/assert.js
34
+ function isUndefinedOrNull(value) {
35
+ return value === null || value === undefined;
36
+ }
37
+
38
+ // Taken from node/lib/assert.js
39
+ function isArguments(object) {
40
+ return Object.prototype.toString.call(object) == '[object Arguments]';
41
+ }
42
+
43
+ // Taken from node/lib/assert.js
44
+ function objEquiv(a, b) {
45
+ if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
46
+ return false;
47
+ if (a.prototype !== b.prototype) return false;
48
+ if (isArguments(a)) {
49
+ if (!isArguments(b)) {
50
+ return false;
51
+ }
52
+ a = pSlice.call(a);
53
+ b = pSlice.call(b);
54
+ return exports.deepEqual(a, b);
55
+ }
56
+ try {
57
+ var ka = Object.keys(a),
58
+ kb = Object.keys(b),
59
+ key, i;
60
+ } catch (e) {
61
+ return false;
62
+ }
63
+ if (ka.length != kb.length)
64
+ return false;
65
+ ka.sort();
66
+ kb.sort();
67
+ for (i = ka.length - 1; i >= 0; i--) {
68
+ if (ka[i] != kb[i])
69
+ return false;
70
+ }
71
+ for (i = ka.length - 1; i >= 0; i--) {
72
+ key = ka[i];
73
+ if (!exports.deepEqual(a[key], b[key])) return false;
74
+ }
75
+ return true;
76
+ }
77
+
@@ -0,0 +1,193 @@
1
+ //
2
+ // Vows.js - asynchronous event-based BDD for node.js
3
+ //
4
+ // usage:
5
+ //
6
+ // var vows = require('vows');
7
+ //
8
+ // vows.describe('Deep Thought').addBatch({
9
+ // "An instance of DeepThought": {
10
+ // topic: new DeepThought,
11
+ //
12
+ // "should know the answer to the ultimate question of life": function (deepThought) {
13
+ // assert.equal (deepThought.question('what is the answer to the universe?'), 42);
14
+ // }
15
+ // }
16
+ // }).run();
17
+ //
18
+ var sys = require('sys'),
19
+ path = require('path'),
20
+ events = require('events'),
21
+ vows = exports;
22
+
23
+ // Options
24
+ vows.options = {
25
+ Emitter: events.EventEmitter,
26
+ reporter: require('./vows/reporters/dot-matrix'),
27
+ matcher: /.*/,
28
+ error: true // Handle "error" event
29
+ };
30
+
31
+ vows.__defineGetter__('reporter', function () {
32
+ return vows.options.reporter;
33
+ });
34
+
35
+ var stylize = require('./vows/console').stylize;
36
+ var console = require('./vows/console');
37
+
38
+ vows.inspect = require('./vows/console').inspect;
39
+ vows.prepare = require('./vows/extras').prepare;
40
+ vows.tryEnd = require('./vows/suite').tryEnd;
41
+
42
+ //
43
+ // Assertion Macros & Extensions
44
+ //
45
+ require('./assert/error');
46
+ require('./assert/macros');
47
+
48
+ //
49
+ // Suite constructor
50
+ //
51
+ var Suite = require('./vows/suite').Suite;
52
+
53
+ //
54
+ // This function gets added to events.EventEmitter.prototype, by default.
55
+ // It's essentially a wrapper around `on`, which adds all the specification
56
+ // goodness.
57
+ //
58
+ function addVow(vow) {
59
+ var batch = vow.batch;
60
+
61
+ batch.total ++;
62
+ batch.vows.push(vow);
63
+
64
+ return this.on("success", function () {
65
+ var args = Array.prototype.slice.call(arguments);
66
+ // If the callback is expecting two or more arguments,
67
+ // pass the error as the first (null) and the result after.
68
+ if (vow.callback.length >= 2 && batch.suite.options.error) {
69
+ args.unshift(null);
70
+ }
71
+ runTest(args, this.ctx);
72
+ vows.tryEnd(batch);
73
+
74
+ }).on("error", function (err) {
75
+ if (vow.callback.length >= 2 || !batch.suite.options.error) {
76
+ runTest(arguments, this.ctx);
77
+ } else {
78
+ output('errored', { type: 'promise', error: err.stack || err.message || JSON.stringify(err) });
79
+ }
80
+ vows.tryEnd(batch);
81
+ });
82
+
83
+ function runTest(args, ctx) {
84
+ var topic, status;
85
+
86
+ if (vow.callback instanceof String) {
87
+ return output('pending');
88
+ }
89
+
90
+ // Run the test, and try to catch `AssertionError`s and other exceptions;
91
+ // increment counters accordingly.
92
+ try {
93
+ vow.callback.apply(ctx === global || !ctx ? vow.binding : ctx, args);
94
+ output('honored');
95
+ } catch (e) {
96
+ if (e.name && e.name.match(/AssertionError/)) {
97
+ output('broken', e.toString());
98
+ } else {
99
+ output('errored', e.stack || e.message || e);
100
+ }
101
+ }
102
+ }
103
+
104
+ function output(status, exception) {
105
+ batch[status] ++;
106
+ vow.status = status;
107
+
108
+ if (vow.context && batch.lastContext !== vow.context) {
109
+ batch.lastContext = vow.context;
110
+ batch.suite.report(['context', vow.context]);
111
+ }
112
+ batch.suite.report(['vow', {
113
+ title: vow.description,
114
+ context: vow.context,
115
+ status: status,
116
+ exception: exception || null
117
+ }]);
118
+ }
119
+ };
120
+
121
+ //
122
+ // On exit, check that all promises have been fired.
123
+ // If not, report an error message.
124
+ //
125
+ process.on('exit', function () {
126
+ var results = { honored: 0, broken: 0, errored: 0, pending: 0, total: 0 }, failure;
127
+
128
+ vows.suites.forEach(function (s) {
129
+ if ((s.results.total > 0) && (s.results.time === null)) {
130
+ s.reporter.print('\n\n');
131
+ s.reporter.report(['error', { error: "Asynchronous Error", suite: s }]);
132
+ }
133
+ s.batches.forEach(function (b) {
134
+ var unFired = [];
135
+
136
+ b.vows.forEach(function (vow) {
137
+ if (! vow.status) {
138
+ if (unFired.indexOf(vow.context) === -1) {
139
+ unFired.push(vow.context);
140
+ }
141
+ }
142
+ });
143
+
144
+ if (unFired.length > 0) { sys.print('\n') }
145
+
146
+ unFired.forEach(function (title) {
147
+ s.reporter.report(['error', {
148
+ error: "callback not fired",
149
+ context: title,
150
+ batch: b,
151
+ suite: s
152
+ }]);
153
+ });
154
+
155
+ if (b.status === 'begin') {
156
+ failure = true;
157
+ results.errored ++;
158
+ results.total ++;
159
+ }
160
+ Object.keys(results).forEach(function (k) { results[k] += b[k] });
161
+ });
162
+ });
163
+ if (failure) {
164
+ sys.puts(console.result(results));
165
+ }
166
+ });
167
+
168
+ vows.suites = [];
169
+
170
+ //
171
+ // Create a new test suite
172
+ //
173
+ vows.describe = function (subject) {
174
+ var suite = new(Suite)(subject);
175
+
176
+ this.options.Emitter.prototype.addVow = addVow;
177
+ this.suites.push(suite);
178
+
179
+ //
180
+ // Add any additional arguments as batches if they're present
181
+ //
182
+ if (arguments.length > 1) {
183
+ for (var i = 1, l = arguments.length; i < l; ++i) {
184
+ suite.addBatch(arguments[i]);
185
+ }
186
+ }
187
+
188
+ return suite;
189
+ };
190
+
191
+
192
+ vows.version = require('fs').readFileSync(path.join(__dirname, '..', 'package.json'))
193
+ .toString().match(/"version"\s*:\s*"([\d.]+)"/)[1];