stylus-source 0.31.0 → 0.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +7 -0
  2. data/VERSION +1 -1
  3. data/vendor/lib/nodes/unit.js +1 -1
  4. data/vendor/lib/parser.js +0 -1
  5. data/vendor/lib/renderer.js +2 -0
  6. data/vendor/lib/visitor/compiler.js +6 -0
  7. data/vendor/node_modules/cssom/README.mdown +34 -0
  8. data/vendor/node_modules/cssom/package.json +2 -1
  9. data/vendor/node_modules/debug/History.md +15 -0
  10. data/vendor/node_modules/debug/Readme.md +3 -18
  11. data/vendor/node_modules/debug/component.json +9 -0
  12. data/vendor/node_modules/debug/debug.js +10 -2
  13. data/vendor/node_modules/debug/index.js +5 -2
  14. data/vendor/node_modules/debug/lib/debug.js +5 -6
  15. data/vendor/node_modules/debug/package.json +11 -6
  16. data/vendor/node_modules/mkdirp/package.json +6 -9
  17. data/vendor/node_modules/mkdirp/{README.markdown → readme.markdown} +26 -24
  18. data/vendor/node_modules/mocha/History.md +140 -58
  19. data/vendor/node_modules/mocha/LICENSE +2 -2
  20. data/vendor/node_modules/mocha/Makefile +20 -5
  21. data/vendor/node_modules/mocha/Readme.md +110 -22
  22. data/vendor/node_modules/mocha/_mocha.js +574 -182
  23. data/vendor/node_modules/mocha/bin/_mocha +39 -22
  24. data/vendor/node_modules/mocha/bin/mocha +6 -2
  25. data/vendor/node_modules/mocha/component.json +16 -0
  26. data/vendor/node_modules/mocha/lib/browser/debug.js +1 -2
  27. data/vendor/node_modules/mocha/lib/browser/diff.js +287 -0
  28. data/vendor/node_modules/mocha/lib/browser/tty.js +7 -2
  29. data/vendor/node_modules/mocha/lib/hook.js +0 -1
  30. data/vendor/node_modules/mocha/lib/interfaces/bdd.js +3 -3
  31. data/vendor/node_modules/mocha/lib/interfaces/exports.js +5 -5
  32. data/vendor/node_modules/mocha/lib/interfaces/qunit.js +38 -9
  33. data/vendor/node_modules/mocha/lib/interfaces/tdd.js +15 -2
  34. data/vendor/node_modules/mocha/lib/mocha.js +20 -4
  35. data/vendor/node_modules/mocha/lib/reporters/base.js +57 -37
  36. data/vendor/node_modules/mocha/lib/reporters/html.js +2 -4
  37. data/vendor/node_modules/mocha/lib/reporters/json-stream.js +4 -14
  38. data/vendor/node_modules/mocha/lib/reporters/json.js +9 -19
  39. data/vendor/node_modules/mocha/lib/reporters/markdown.js +0 -1
  40. data/vendor/node_modules/mocha/lib/reporters/min.js +2 -2
  41. data/vendor/node_modules/mocha/lib/reporters/nyan.js +33 -39
  42. data/vendor/node_modules/mocha/lib/reporters/tap.js +12 -2
  43. data/vendor/node_modules/mocha/lib/reporters/templates/coverage.jade +3 -3
  44. data/vendor/node_modules/mocha/lib/reporters/templates/menu.jade +1 -1
  45. data/vendor/node_modules/mocha/lib/reporters/xunit.js +4 -4
  46. data/vendor/node_modules/mocha/lib/runnable.js +7 -9
  47. data/vendor/node_modules/mocha/lib/runner.js +24 -9
  48. data/vendor/node_modules/mocha/lib/template.html +2 -1
  49. data/vendor/node_modules/mocha/lib/utils.js +3 -3
  50. data/vendor/node_modules/mocha/mocha.css +37 -13
  51. data/vendor/node_modules/mocha/mocha.js +661 -253
  52. data/vendor/node_modules/mocha/node_modules/commander/package.json +5 -1
  53. data/vendor/node_modules/mocha/node_modules/diff/package.json +5 -1
  54. data/vendor/node_modules/mocha/node_modules/glob/LICENSE +27 -0
  55. data/vendor/node_modules/mocha/node_modules/glob/README.md +250 -0
  56. data/vendor/node_modules/mocha/node_modules/glob/examples/g.js +9 -0
  57. data/vendor/node_modules/mocha/node_modules/glob/examples/usr-local.js +9 -0
  58. data/vendor/node_modules/mocha/node_modules/glob/glob.js +675 -0
  59. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/LICENSE +27 -0
  60. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/README.md +33 -0
  61. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +442 -0
  62. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/package.json +49 -0
  63. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/open.js +46 -0
  64. data/vendor/node_modules/mocha/node_modules/glob/node_modules/graceful-fs/test/ulimit.js +158 -0
  65. data/vendor/node_modules/mocha/node_modules/glob/node_modules/inherits/README.md +51 -0
  66. data/vendor/node_modules/mocha/node_modules/glob/node_modules/inherits/inherits.js +29 -0
  67. data/vendor/node_modules/mocha/node_modules/glob/node_modules/inherits/package.json +26 -0
  68. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/LICENSE +23 -0
  69. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/README.md +218 -0
  70. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/minimatch.js +1079 -0
  71. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS +8 -0
  72. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE +23 -0
  73. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md +97 -0
  74. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +257 -0
  75. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json +59 -0
  76. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/s.js +25 -0
  77. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js +329 -0
  78. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +52 -0
  79. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +50 -0
  80. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE +27 -0
  81. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md +53 -0
  82. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js +283 -0
  83. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json +38 -0
  84. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js +39 -0
  85. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js +24 -0
  86. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/package.json +36 -0
  87. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/basic.js +399 -0
  88. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/brace-expand.js +33 -0
  89. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/caching.js +14 -0
  90. data/vendor/node_modules/mocha/node_modules/glob/node_modules/minimatch/test/defaults.js +274 -0
  91. data/vendor/node_modules/mocha/node_modules/glob/package.json +40 -0
  92. data/vendor/node_modules/mocha/node_modules/glob/test/00-setup.js +176 -0
  93. data/vendor/node_modules/mocha/node_modules/glob/test/bash-comparison.js +63 -0
  94. data/vendor/node_modules/mocha/node_modules/glob/test/bash-results.json +350 -0
  95. data/vendor/node_modules/mocha/node_modules/glob/test/cwd-test.js +55 -0
  96. data/vendor/node_modules/mocha/node_modules/glob/test/globstar-match.js +19 -0
  97. data/vendor/node_modules/mocha/node_modules/glob/test/mark.js +74 -0
  98. data/vendor/node_modules/mocha/node_modules/glob/test/nocase-nomagic.js +113 -0
  99. data/vendor/node_modules/mocha/node_modules/glob/test/pause-resume.js +73 -0
  100. data/vendor/node_modules/mocha/node_modules/glob/test/root-nomount.js +39 -0
  101. data/vendor/node_modules/mocha/node_modules/glob/test/root.js +46 -0
  102. data/vendor/node_modules/mocha/node_modules/glob/test/stat.js +32 -0
  103. data/vendor/node_modules/mocha/node_modules/glob/test/zz-cleanup.js +11 -0
  104. data/vendor/node_modules/mocha/node_modules/growl/History.md +5 -0
  105. data/vendor/node_modules/mocha/node_modules/growl/lib/growl.js +2 -0
  106. data/vendor/node_modules/mocha/node_modules/growl/package.json +7 -3
  107. data/vendor/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json +5 -1
  108. data/vendor/node_modules/mocha/node_modules/jade/package.json +5 -1
  109. data/vendor/node_modules/mocha/node_modules/ms/package.json +5 -1
  110. data/vendor/node_modules/mocha/package.json +13 -7
  111. data/vendor/node_modules/mocha/test.js +10 -21
  112. data/vendor/node_modules/should/History.md +5 -0
  113. data/vendor/node_modules/should/Readme.md +172 -172
  114. data/vendor/node_modules/should/lib/eql.js +2 -0
  115. data/vendor/node_modules/should/lib/should.js +4 -3
  116. data/vendor/node_modules/should/package.json +8 -4
  117. data/vendor/node_modules/should/test/should.test.js +27 -0
  118. data/vendor/package.json +1 -1
  119. metadata +61 -35
  120. data/vendor/node_modules/debug/Makefile +0 -4
  121. data/vendor/node_modules/debug/debug.component.js +0 -120
  122. data/vendor/node_modules/debug/head.js +0 -1
  123. data/vendor/node_modules/debug/tail.js +0 -4
  124. data/vendor/node_modules/mocha/node_modules/mkdirp/LICENSE +0 -21
  125. data/vendor/node_modules/mocha/node_modules/mkdirp/README.markdown +0 -61
  126. data/vendor/node_modules/mocha/node_modules/mkdirp/examples/pow.js +0 -6
  127. data/vendor/node_modules/mocha/node_modules/mkdirp/examples/pow.js.orig +0 -6
  128. data/vendor/node_modules/mocha/node_modules/mkdirp/examples/pow.js.rej +0 -19
  129. data/vendor/node_modules/mocha/node_modules/mkdirp/index.js +0 -94
  130. data/vendor/node_modules/mocha/node_modules/mkdirp/package.json +0 -33
  131. data/vendor/node_modules/mocha/node_modules/mkdirp/test/chmod.js +0 -38
  132. data/vendor/node_modules/mocha/node_modules/mkdirp/test/clobber.js +0 -37
  133. data/vendor/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js +0 -28
  134. data/vendor/node_modules/mocha/node_modules/mkdirp/test/perm.js +0 -32
  135. data/vendor/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js +0 -39
  136. data/vendor/node_modules/mocha/node_modules/mkdirp/test/race.js +0 -41
  137. data/vendor/node_modules/mocha/node_modules/mkdirp/test/rel.js +0 -32
  138. data/vendor/node_modules/mocha/node_modules/mkdirp/test/return.js +0 -25
  139. data/vendor/node_modules/mocha/node_modules/mkdirp/test/return_sync.js +0 -24
  140. data/vendor/node_modules/mocha/node_modules/mkdirp/test/root.js +0 -18
  141. data/vendor/node_modules/mocha/node_modules/mkdirp/test/sync.js +0 -32
  142. data/vendor/node_modules/mocha/node_modules/mkdirp/test/umask.js +0 -28
  143. data/vendor/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js +0 -32
@@ -5,10 +5,10 @@
5
5
  */
6
6
 
7
7
  var program = require('commander')
8
- , exec = require('child_process').exec
8
+ , sprintf = require('util').format
9
9
  , path = require('path')
10
10
  , fs = require('fs')
11
- , vm = require('vm')
11
+ , glob = require('glob')
12
12
  , resolve = path.resolve
13
13
  , exists = fs.existsSync || path.existsSync
14
14
  , Mocha = require('../')
@@ -43,6 +43,12 @@ var files = [];
43
43
 
44
44
  var globals = [];
45
45
 
46
+ /**
47
+ * Requires.
48
+ */
49
+
50
+ var requires = [];
51
+
46
52
  /**
47
53
  * Images.
48
54
  */
@@ -74,7 +80,7 @@ program
74
80
  .option('--recursive', 'include sub directories')
75
81
  .option('--debug-brk', "enable node's debugger breaking on the first line")
76
82
  .option('--globals <names>', 'allow the given comma-delimited global [names]', list, [])
77
- .option('--ignore-leaks', 'ignore global variable leaks')
83
+ .option('--check-leaks', 'check for global variable leaks')
78
84
  .option('--interfaces', 'display available interfaces')
79
85
  .option('--reporters', 'display available reporters')
80
86
  .option('--compilers <ext>:<module>,...', 'use the given module(s) to compile files', list, [])
@@ -94,7 +100,8 @@ program
94
100
  var tmpl = fs.readFileSync(join(__dirname, '..', 'lib/template.html'));
95
101
  fs.writeFileSync(join(path, 'mocha.css'), css);
96
102
  fs.writeFileSync(join(path, 'mocha.js'), js);
97
- fs.writeFileSync(join(path, 'tests.html'), tmpl);
103
+ fs.writeFileSync(join(path, 'tests.js'), '');
104
+ fs.writeFileSync(join(path, 'index.html'), tmpl);
98
105
  process.exit(0);
99
106
  });
100
107
 
@@ -116,7 +123,7 @@ program.on('reporters', function(){
116
123
  console.log(' list - spec-style listing');
117
124
  console.log(' tap - test-anything-protocol');
118
125
  console.log(' landing - unicode landing strip');
119
- console.log(' xunit - xunit reportert');
126
+ console.log(' xunit - xunit reporter');
120
127
  console.log(' teamcity - teamcity ci support');
121
128
  console.log(' html-cov - HTML test coverage');
122
129
  console.log(' json-cov - JSON test coverage');
@@ -145,11 +152,9 @@ program.on('interfaces', function(){
145
152
  module.paths.push(cwd, join(cwd, 'node_modules'));
146
153
 
147
154
  program.on('require', function(mod){
148
- var abs = exists(mod)
149
- || exists(mod + '.js');
150
-
151
- if (abs) mod = join(cwd, mod);
152
- require(mod);
155
+ var abs = exists(mod) || exists(mod + '.js');
156
+ if (abs) mod = resolve(mod);
157
+ requires.push(mod);
153
158
  });
154
159
 
155
160
  // mocha.opts support
@@ -225,9 +230,9 @@ if (program.grep) mocha.grep(new RegExp(program.grep));
225
230
 
226
231
  if (program.invert) mocha.invert();
227
232
 
228
- // --ignore-leaks
233
+ // --check-leaks
229
234
 
230
- if (program.ignoreLeaks) mocha.ignoreLeaks();
235
+ if (program.checkLeaks) mocha.checkLeaks();
231
236
 
232
237
  // --growl
233
238
 
@@ -256,6 +261,12 @@ program.compilers.forEach(function(c) {
256
261
 
257
262
  var re = new RegExp('\\.(' + extensions.join('|') + ')$');
258
263
 
264
+ // requires
265
+
266
+ requires.forEach(function(mod) {
267
+ require(mod);
268
+ });
269
+
259
270
  // files
260
271
 
261
272
  var files = []
@@ -286,14 +297,13 @@ if (program.watch) {
286
297
  process.exit();
287
298
  });
288
299
 
289
- var frames = [
290
- ' \u001b[96m◜ \u001b[90mwatching\u001b[0m'
291
- , ' \u001b[96m \u001b[90mwatching\u001b[0m'
292
- , ' \u001b[96m◝ \u001b[90mwatching\u001b[0m'
293
- , ' \u001b[96m◞ \u001b[90mwatching\u001b[0m'
294
- , ' \u001b[96m \u001b[90mwatching\u001b[0m'
295
- , ' \u001b[96m◟ \u001b[90mwatching\u001b[0m'
296
- ];
300
+ var spinner = 'win32' == process.platform
301
+ ? ['|','/','-','\\']
302
+ : ['◜','◠','◝','◞','◡','◟'];
303
+
304
+ var frames = spinner.map(function(c) {
305
+ return sprintf(' \u001b[96m%s \u001b[90mwatching\u001b[0m', c);
306
+ });
297
307
 
298
308
  var watchFiles = utils.files(cwd);
299
309
 
@@ -388,7 +398,14 @@ function stop() {
388
398
  function lookupFiles(path, recursive) {
389
399
  var files = [];
390
400
 
391
- if (!exists(path)) path += '.js';
401
+ if (!exists(path)) {
402
+ if (exists(path + '.js')) {
403
+ path += '.js'
404
+ } else {
405
+ return glob.sync(path);
406
+ }
407
+ }
408
+
392
409
  var stat = fs.statSync(path);
393
410
  if (stat.isFile()) return path;
394
411
 
@@ -417,6 +434,6 @@ function play(arr, interval) {
417
434
 
418
435
  play.timer = setInterval(function(){
419
436
  var str = arr[i++ % len];
420
- process.stdout.write('\r' + str);
437
+ process.stdout.write('\u001b[0G' + str);
421
438
  }, interval);
422
439
  }
@@ -8,8 +8,10 @@
8
8
  var spawn = require('child_process').spawn
9
9
  , args = [ __dirname + '/_mocha' ];
10
10
 
11
- process.argv.slice(2).forEach(function (arg) {
12
- switch (arg) {
11
+ process.argv.slice(2).forEach(function(arg){
12
+ var flag = arg.split('=')[0];
13
+
14
+ switch (flag) {
13
15
  case '-d':
14
16
  args.unshift('--debug');
15
17
  break;
@@ -26,6 +28,8 @@ process.argv.slice(2).forEach(function (arg) {
26
28
  case '--harmony':
27
29
  case '--harmony-proxies':
28
30
  case '--harmony-collections':
31
+ case '--harmony-generators':
32
+ case '--prof':
29
33
  args.unshift(arg);
30
34
  break;
31
35
  default:
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "mocha",
3
+ "version": "1.12.0",
4
+ "repo": "visionmedia/mocha",
5
+ "description": "simple, flexible, fun test framework",
6
+ "keywords": [
7
+ "mocha",
8
+ "test",
9
+ "bdd",
10
+ "tdd",
11
+ "tap"
12
+ ],
13
+ "main": "mocha.js",
14
+ "scripts": ["mocha.js"],
15
+ "styles": ["mocha.css"]
16
+ }
@@ -1,6 +1,5 @@
1
1
 
2
2
  module.exports = function(type){
3
3
  return function(){
4
-
5
4
  }
6
- };
5
+ };
@@ -0,0 +1,287 @@
1
+ /* See license.txt for terms of usage */
2
+
3
+ /*
4
+ * Text diff implementation.
5
+ *
6
+ * This library supports the following APIS:
7
+ * JsDiff.diffChars: Character by character diff
8
+ * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
9
+ * JsDiff.diffLines: Line based diff
10
+ *
11
+ * JsDiff.diffCss: Diff targeted at CSS content
12
+ *
13
+ * These methods are based on the implementation proposed in
14
+ * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
15
+ * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
16
+ */
17
+ var JsDiff = (function() {
18
+ function clonePath(path) {
19
+ return { newPos: path.newPos, components: path.components.slice(0) };
20
+ }
21
+ function removeEmpty(array) {
22
+ var ret = [];
23
+ for (var i = 0; i < array.length; i++) {
24
+ if (array[i]) {
25
+ ret.push(array[i]);
26
+ }
27
+ }
28
+ return ret;
29
+ }
30
+ function escapeHTML(s) {
31
+ var n = s;
32
+ n = n.replace(/&/g, "&amp;");
33
+ n = n.replace(/</g, "&lt;");
34
+ n = n.replace(/>/g, "&gt;");
35
+ n = n.replace(/"/g, "&quot;");
36
+
37
+ return n;
38
+ }
39
+
40
+
41
+ var fbDiff = function(ignoreWhitespace) {
42
+ this.ignoreWhitespace = ignoreWhitespace;
43
+ };
44
+ fbDiff.prototype = {
45
+ diff: function(oldString, newString) {
46
+ // Handle the identity case (this is due to unrolling editLength == 0
47
+ if (newString == oldString) {
48
+ return [{ value: newString }];
49
+ }
50
+ if (!newString) {
51
+ return [{ value: oldString, removed: true }];
52
+ }
53
+ if (!oldString) {
54
+ return [{ value: newString, added: true }];
55
+ }
56
+
57
+ newString = this.tokenize(newString);
58
+ oldString = this.tokenize(oldString);
59
+
60
+ var newLen = newString.length, oldLen = oldString.length;
61
+ var maxEditLength = newLen + oldLen;
62
+ var bestPath = [{ newPos: -1, components: [] }];
63
+
64
+ // Seed editLength = 0
65
+ var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
66
+ if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) {
67
+ return bestPath[0].components;
68
+ }
69
+
70
+ for (var editLength = 1; editLength <= maxEditLength; editLength++) {
71
+ for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) {
72
+ var basePath;
73
+ var addPath = bestPath[diagonalPath-1],
74
+ removePath = bestPath[diagonalPath+1];
75
+ oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
76
+ if (addPath) {
77
+ // No one else is going to attempt to use this value, clear it
78
+ bestPath[diagonalPath-1] = undefined;
79
+ }
80
+
81
+ var canAdd = addPath && addPath.newPos+1 < newLen;
82
+ var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;
83
+ if (!canAdd && !canRemove) {
84
+ bestPath[diagonalPath] = undefined;
85
+ continue;
86
+ }
87
+
88
+ // Select the diagonal that we want to branch from. We select the prior
89
+ // path whose position in the new string is the farthest from the origin
90
+ // and does not pass the bounds of the diff graph
91
+ if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {
92
+ basePath = clonePath(removePath);
93
+ this.pushComponent(basePath.components, oldString[oldPos], undefined, true);
94
+ } else {
95
+ basePath = clonePath(addPath);
96
+ basePath.newPos++;
97
+ this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined);
98
+ }
99
+
100
+ var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath);
101
+
102
+ if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) {
103
+ return basePath.components;
104
+ } else {
105
+ bestPath[diagonalPath] = basePath;
106
+ }
107
+ }
108
+ }
109
+ },
110
+
111
+ pushComponent: function(components, value, added, removed) {
112
+ var last = components[components.length-1];
113
+ if (last && last.added === added && last.removed === removed) {
114
+ // We need to clone here as the component clone operation is just
115
+ // as shallow array clone
116
+ components[components.length-1] =
117
+ {value: this.join(last.value, value), added: added, removed: removed };
118
+ } else {
119
+ components.push({value: value, added: added, removed: removed });
120
+ }
121
+ },
122
+ extractCommon: function(basePath, newString, oldString, diagonalPath) {
123
+ var newLen = newString.length,
124
+ oldLen = oldString.length,
125
+ newPos = basePath.newPos,
126
+ oldPos = newPos - diagonalPath;
127
+ while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) {
128
+ newPos++;
129
+ oldPos++;
130
+
131
+ this.pushComponent(basePath.components, newString[newPos], undefined, undefined);
132
+ }
133
+ basePath.newPos = newPos;
134
+ return oldPos;
135
+ },
136
+
137
+ equals: function(left, right) {
138
+ var reWhitespace = /\S/;
139
+ if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) {
140
+ return true;
141
+ } else {
142
+ return left == right;
143
+ }
144
+ },
145
+ join: function(left, right) {
146
+ return left + right;
147
+ },
148
+ tokenize: function(value) {
149
+ return value;
150
+ }
151
+ };
152
+
153
+ var CharDiff = new fbDiff();
154
+
155
+ var WordDiff = new fbDiff(true);
156
+ WordDiff.tokenize = function(value) {
157
+ return removeEmpty(value.split(/(\s+|\b)/));
158
+ };
159
+
160
+ var CssDiff = new fbDiff(true);
161
+ CssDiff.tokenize = function(value) {
162
+ return removeEmpty(value.split(/([{}:;,]|\s+)/));
163
+ };
164
+
165
+ var LineDiff = new fbDiff();
166
+ LineDiff.tokenize = function(value) {
167
+ return value.split(/^/m);
168
+ };
169
+
170
+ return {
171
+ diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); },
172
+ diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); },
173
+ diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); },
174
+
175
+ diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); },
176
+
177
+ createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) {
178
+ var ret = [];
179
+
180
+ ret.push("Index: " + fileName);
181
+ ret.push("===================================================================");
182
+ ret.push("--- " + fileName + (typeof oldHeader === "undefined" ? "" : "\t" + oldHeader));
183
+ ret.push("+++ " + fileName + (typeof newHeader === "undefined" ? "" : "\t" + newHeader));
184
+
185
+ var diff = LineDiff.diff(oldStr, newStr);
186
+ if (!diff[diff.length-1].value) {
187
+ diff.pop(); // Remove trailing newline add
188
+ }
189
+ diff.push({value: "", lines: []}); // Append an empty value to make cleanup easier
190
+
191
+ function contextLines(lines) {
192
+ return lines.map(function(entry) { return ' ' + entry; });
193
+ }
194
+ function eofNL(curRange, i, current) {
195
+ var last = diff[diff.length-2],
196
+ isLast = i === diff.length-2,
197
+ isLastOfType = i === diff.length-3 && (current.added === !last.added || current.removed === !last.removed);
198
+
199
+ // Figure out if this is the last line for the given file and missing NL
200
+ if (!/\n$/.test(current.value) && (isLast || isLastOfType)) {
201
+ curRange.push('\');
202
+ }
203
+ }
204
+
205
+ var oldRangeStart = 0, newRangeStart = 0, curRange = [],
206
+ oldLine = 1, newLine = 1;
207
+ for (var i = 0; i < diff.length; i++) {
208
+ var current = diff[i],
209
+ lines = current.lines || current.value.replace(/\n$/, "").split("\n");
210
+ current.lines = lines;
211
+
212
+ if (current.added || current.removed) {
213
+ if (!oldRangeStart) {
214
+ var prev = diff[i-1];
215
+ oldRangeStart = oldLine;
216
+ newRangeStart = newLine;
217
+
218
+ if (prev) {
219
+ curRange = contextLines(prev.lines.slice(-4));
220
+ oldRangeStart -= curRange.length;
221
+ newRangeStart -= curRange.length;
222
+ }
223
+ }
224
+ curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?"+":"-") + entry; }));
225
+ eofNL(curRange, i, current);
226
+
227
+ if (current.added) {
228
+ newLine += lines.length;
229
+ } else {
230
+ oldLine += lines.length;
231
+ }
232
+ } else {
233
+ if (oldRangeStart) {
234
+ // Close out any changes that have been output (or join overlapping)
235
+ if (lines.length <= 8 && i < diff.length-2) {
236
+ // Overlapping
237
+ curRange.push.apply(curRange, contextLines(lines));
238
+ } else {
239
+ // end the range and output
240
+ var contextSize = Math.min(lines.length, 4);
241
+ ret.push(
242
+ "@@ -" + oldRangeStart + "," + (oldLine-oldRangeStart+contextSize)
243
+ + " +" + newRangeStart + "," + (newLine-newRangeStart+contextSize)
244
+ + " @@");
245
+ ret.push.apply(ret, curRange);
246
+ ret.push.apply(ret, contextLines(lines.slice(0, contextSize)));
247
+ if (lines.length <= 4) {
248
+ eofNL(ret, i, current);
249
+ }
250
+
251
+ oldRangeStart = 0; newRangeStart = 0; curRange = [];
252
+ }
253
+ }
254
+ oldLine += lines.length;
255
+ newLine += lines.length;
256
+ }
257
+ }
258
+
259
+ return ret.join('\n') + '\n';
260
+ },
261
+
262
+ convertChangesToXML: function(changes){
263
+ var ret = [];
264
+ for ( var i = 0; i < changes.length; i++) {
265
+ var change = changes[i];
266
+ if (change.added) {
267
+ ret.push("<ins>");
268
+ } else if (change.removed) {
269
+ ret.push("<del>");
270
+ }
271
+
272
+ ret.push(escapeHTML(change.value));
273
+
274
+ if (change.added) {
275
+ ret.push("</ins>");
276
+ } else if (change.removed) {
277
+ ret.push("</del>");
278
+ }
279
+ }
280
+ return ret.join("");
281
+ }
282
+ };
283
+ })();
284
+
285
+ if (typeof module !== "undefined") {
286
+ module.exports = JsDiff;
287
+ }
@@ -4,5 +4,10 @@ exports.isatty = function(){
4
4
  };
5
5
 
6
6
  exports.getWindowSize = function(){
7
- return [window.innerHeight, window.innerWidth];
8
- };
7
+ if ('innerHeight' in global) {
8
+ return [global.innerHeight, global.innerWidth];
9
+ } else {
10
+ // In a Web Worker, the DOM Window is not available.
11
+ return [640, 480];
12
+ }
13
+ };
@@ -47,4 +47,3 @@ Hook.prototype.error = function(err){
47
47
 
48
48
  this._error = err;
49
49
  };
50
-
@@ -8,7 +8,7 @@ var Suite = require('../suite')
8
8
 
9
9
  /**
10
10
  * BDD-style interface:
11
- *
11
+ *
12
12
  * describe('Array', function(){
13
13
  * describe('#indexOf()', function(){
14
14
  * it('should return -1 when not present', function(){
@@ -20,7 +20,7 @@ var Suite = require('../suite')
20
20
  * });
21
21
  * });
22
22
  * });
23
- *
23
+ *
24
24
  */
25
25
 
26
26
  module.exports = function(suite){
@@ -65,7 +65,7 @@ module.exports = function(suite){
65
65
  * and callback `fn` containing nested suites
66
66
  * and/or tests.
67
67
  */
68
-
68
+
69
69
  context.describe = context.context = function(title, fn){
70
70
  var suite = Suite.create(suites[0], title);
71
71
  suites.unshift(suite);
@@ -8,19 +8,19 @@ var Suite = require('../suite')
8
8
 
9
9
  /**
10
10
  * TDD-style interface:
11
- *
11
+ *
12
12
  * exports.Array = {
13
13
  * '#indexOf()': {
14
14
  * 'should return -1 when the value is not present': function(){
15
- *
15
+ *
16
16
  * },
17
17
  *
18
18
  * 'should return the correct index when the value is present': function(){
19
- *
19
+ *
20
20
  * }
21
21
  * }
22
22
  * };
23
- *
23
+ *
24
24
  */
25
25
 
26
26
  module.exports = function(suite){
@@ -57,4 +57,4 @@ module.exports = function(suite){
57
57
  }
58
58
  }
59
59
  }
60
- };
60
+ };
@@ -8,33 +8,33 @@ var Suite = require('../suite')
8
8
 
9
9
  /**
10
10
  * QUnit-style interface:
11
- *
11
+ *
12
12
  * suite('Array');
13
- *
13
+ *
14
14
  * test('#length', function(){
15
15
  * var arr = [1,2,3];
16
16
  * ok(arr.length == 3);
17
17
  * });
18
- *
18
+ *
19
19
  * test('#indexOf()', function(){
20
20
  * var arr = [1,2,3];
21
21
  * ok(arr.indexOf(1) == 0);
22
22
  * ok(arr.indexOf(2) == 1);
23
23
  * ok(arr.indexOf(3) == 2);
24
24
  * });
25
- *
25
+ *
26
26
  * suite('String');
27
- *
27
+ *
28
28
  * test('#length', function(){
29
29
  * ok('foo'.length == 3);
30
30
  * });
31
- *
31
+ *
32
32
  */
33
33
 
34
34
  module.exports = function(suite){
35
35
  var suites = [suite];
36
36
 
37
- suite.on('pre-require', function(context){
37
+ suite.on('pre-require', function(context, file, mocha){
38
38
 
39
39
  /**
40
40
  * Execute before running tests.
@@ -71,11 +71,21 @@ module.exports = function(suite){
71
71
  /**
72
72
  * Describe a "suite" with the given `title`.
73
73
  */
74
-
74
+
75
75
  context.suite = function(title){
76
76
  if (suites.length > 1) suites.shift();
77
77
  var suite = Suite.create(suites[0], title);
78
78
  suites.unshift(suite);
79
+ return suite;
80
+ };
81
+
82
+ /**
83
+ * Exclusive test-case.
84
+ */
85
+
86
+ context.suite.only = function(title, fn){
87
+ var suite = context.suite(title, fn);
88
+ mocha.grep(suite.fullTitle());
79
89
  };
80
90
 
81
91
  /**
@@ -85,7 +95,26 @@ module.exports = function(suite){
85
95
  */
86
96
 
87
97
  context.test = function(title, fn){
88
- suites[0].addTest(new Test(title, fn));
98
+ var test = new Test(title, fn);
99
+ suites[0].addTest(test);
100
+ return test;
101
+ };
102
+
103
+ /**
104
+ * Exclusive test-case.
105
+ */
106
+
107
+ context.test.only = function(title, fn){
108
+ var test = context.test(title, fn);
109
+ mocha.grep(test.fullTitle());
110
+ };
111
+
112
+ /**
113
+ * Pending test case.
114
+ */
115
+
116
+ context.test.skip = function(title){
117
+ context.test(title);
89
118
  };
90
119
  });
91
120
  };
@@ -14,7 +14,7 @@ var Suite = require('../suite')
14
14
  * suiteSetup(function(){
15
15
  *
16
16
  * });
17
- *
17
+ *
18
18
  * test('should return -1 when not present', function(){
19
19
  *
20
20
  * });
@@ -82,6 +82,17 @@ module.exports = function(suite){
82
82
  return suite;
83
83
  };
84
84
 
85
+ /**
86
+ * Pending suite.
87
+ */
88
+ context.suite.skip = function(title, fn) {
89
+ var suite = Suite.create(suites[0], title);
90
+ suite.pending = true;
91
+ suites.unshift(suite);
92
+ fn.call(suite);
93
+ suites.shift();
94
+ };
95
+
85
96
  /**
86
97
  * Exclusive test-case.
87
98
  */
@@ -98,8 +109,10 @@ module.exports = function(suite){
98
109
  */
99
110
 
100
111
  context.test = function(title, fn){
112
+ var suite = suites[0];
113
+ if (suite.pending) var fn = null;
101
114
  var test = new Test(title, fn);
102
- suites[0].addTest(test);
115
+ suite.addTest(test);
103
116
  return test;
104
117
  };
105
118