stylus-source 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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