evergreen 0.1 → 0.2.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 (104) hide show
  1. data/README.rdoc +101 -3
  2. data/bin/evergreen +2 -2
  3. data/lib/evergreen.rb +14 -2
  4. data/lib/evergreen/evergreen.js +23 -0
  5. data/lib/evergreen/rails.rb +8 -0
  6. data/lib/evergreen/runner.rb +21 -14
  7. data/lib/evergreen/spec.rb +12 -33
  8. data/lib/evergreen/version.rb +1 -1
  9. data/lib/evergreen/views/list.erb +1 -1
  10. data/lib/evergreen/views/spec.erb +9 -22
  11. data/lib/jasmine/README.markdown +21 -28
  12. data/lib/jasmine/Rakefile +98 -68
  13. data/lib/jasmine/example/SpecRunner.html +27 -0
  14. data/lib/jasmine/example/spec/PlayerSpec.js +58 -0
  15. data/lib/jasmine/example/spec/SpecHelper.js +9 -0
  16. data/lib/jasmine/example/src/Player.js +22 -0
  17. data/lib/jasmine/example/src/Song.js +7 -0
  18. data/lib/jasmine/lib/jasmine-html.js +182 -0
  19. data/lib/jasmine/lib/{jasmine-0.10.4.js → jasmine.js} +127 -155
  20. data/lib/jasmine/spec/runner.html +4 -3
  21. data/lib/jasmine/spec/suites/BaseSpec.js +27 -0
  22. data/lib/jasmine/spec/suites/CustomMatchersSpec.js +0 -24
  23. data/lib/jasmine/spec/suites/EnvSpec.js +1 -1
  24. data/lib/jasmine/spec/suites/JsApiReporterSpec.js +16 -9
  25. data/lib/jasmine/spec/suites/MatchersSpec.js +49 -42
  26. data/lib/jasmine/spec/suites/MockClockSpec.js +4 -0
  27. data/lib/jasmine/spec/suites/MultiReporterSpec.js +23 -8
  28. data/lib/jasmine/spec/suites/PrettyPrintSpec.js +2 -2
  29. data/lib/jasmine/spec/suites/ReporterSpec.js +10 -14
  30. data/lib/jasmine/spec/suites/RunnerSpec.js +6 -6
  31. data/lib/jasmine/spec/suites/SpecRunningSpec.js +1 -1
  32. data/lib/jasmine/spec/suites/SpecSpec.js +15 -1
  33. data/lib/jasmine/spec/suites/SpySpec.js +3 -3
  34. data/lib/jasmine/spec/suites/TrivialReporterSpec.js +91 -14
  35. data/lib/jasmine/spec/suites/WaitsForBlockSpec.js +5 -6
  36. data/lib/jasmine/src/JsApiReporter.js +4 -6
  37. data/lib/jasmine/src/Matchers.js +19 -19
  38. data/lib/jasmine/src/MultiReporter.js +8 -1
  39. data/lib/jasmine/src/NestedResults.js +5 -5
  40. data/lib/jasmine/src/PrettyPrinter.js +2 -2
  41. data/lib/jasmine/src/Reporter.js +4 -0
  42. data/lib/jasmine/src/Spec.js +12 -8
  43. data/lib/jasmine/src/base.js +40 -44
  44. data/lib/jasmine/{lib → src/html}/TrivialReporter.js +17 -6
  45. data/lib/jasmine/src/html/jasmine.css +166 -0
  46. data/lib/jasmine/src/mock-timeout.js +22 -16
  47. data/lib/jasmine/src/version.json +2 -2
  48. data/lib/tasks/evergreen.rake +7 -0
  49. data/spec/evergreen_spec.rb +18 -0
  50. data/spec/fixtures/public/jquery.js +152 -0
  51. data/spec/fixtures/spec/javascripts/bar_spec.js +0 -0
  52. data/spec/fixtures/spec/javascripts/failing_spec.js +12 -0
  53. data/spec/fixtures/spec/javascripts/foo_spec.js +0 -0
  54. data/spec/fixtures/spec/javascripts/templates_spec.html +1 -0
  55. data/spec/fixtures/spec/javascripts/templates_spec.js +23 -0
  56. data/spec/fixtures/spec/javascripts/testing_spec.js +11 -0
  57. data/spec/fixtures/spec/javascripts/transactions_spec.js +14 -0
  58. data/spec/meta_spec.rb +17 -0
  59. data/spec/runner_spec.rb +35 -0
  60. data/spec/spec_helper.rb +33 -0
  61. data/spec/spec_spec.rb +30 -0
  62. metadata +64 -48
  63. data/lib/jasmine/doc/files.html +0 -460
  64. data/lib/jasmine/doc/index.html +0 -322
  65. data/lib/jasmine/doc/symbols/_global_.html +0 -918
  66. data/lib/jasmine/doc/symbols/jasmine.Block.html +0 -417
  67. data/lib/jasmine/doc/symbols/jasmine.Clock.html +0 -678
  68. data/lib/jasmine/doc/symbols/jasmine.Env.html +0 -1169
  69. data/lib/jasmine/doc/symbols/jasmine.JsApiReporter.html +0 -822
  70. data/lib/jasmine/doc/symbols/jasmine.Matchers.html +0 -1474
  71. data/lib/jasmine/doc/symbols/jasmine.MultiReporter.html +0 -394
  72. data/lib/jasmine/doc/symbols/jasmine.NestedResults.html +0 -710
  73. data/lib/jasmine/doc/symbols/jasmine.Reporter.html +0 -574
  74. data/lib/jasmine/doc/symbols/jasmine.Runner.html +0 -710
  75. data/lib/jasmine/doc/symbols/jasmine.Spec.html +0 -1253
  76. data/lib/jasmine/doc/symbols/jasmine.Spy.html +0 -855
  77. data/lib/jasmine/doc/symbols/jasmine.Suite.html +0 -705
  78. data/lib/jasmine/doc/symbols/jasmine.html +0 -1345
  79. data/lib/jasmine/doc/symbols/jasmine.util.html +0 -535
  80. data/lib/jasmine/doc/symbols/src/lib_TrivialReporter.js.html +0 -124
  81. data/lib/jasmine/doc/symbols/src/src_Block.js.html +0 -29
  82. data/lib/jasmine/doc/symbols/src/src_Env.js.html +0 -248
  83. data/lib/jasmine/doc/symbols/src/src_JsApiReporter.js.html +0 -111
  84. data/lib/jasmine/doc/symbols/src/src_Matchers.js.html +0 -344
  85. data/lib/jasmine/doc/symbols/src/src_MultiReporter.js.html +0 -36
  86. data/lib/jasmine/doc/symbols/src/src_NestedResults.js.html +0 -88
  87. data/lib/jasmine/doc/symbols/src/src_PrettyPrinter.js.html +0 -130
  88. data/lib/jasmine/doc/symbols/src/src_Queue.js.html +0 -102
  89. data/lib/jasmine/doc/symbols/src/src_Reporter.js.html +0 -35
  90. data/lib/jasmine/doc/symbols/src/src_Reporters.js.html +0 -51
  91. data/lib/jasmine/doc/symbols/src/src_Runner.js.html +0 -75
  92. data/lib/jasmine/doc/symbols/src/src_Spec.js.html +0 -214
  93. data/lib/jasmine/doc/symbols/src/src_Suite.js.html +0 -77
  94. data/lib/jasmine/doc/symbols/src/src_WaitsBlock.js.html +0 -21
  95. data/lib/jasmine/doc/symbols/src/src_WaitsForBlock.js.html +0 -45
  96. data/lib/jasmine/doc/symbols/src/src_base.js.html +0 -585
  97. data/lib/jasmine/doc/symbols/src/src_mock-timeout.js.html +0 -185
  98. data/lib/jasmine/doc/symbols/src/src_util.js.html +0 -75
  99. data/lib/jasmine/example/example_runner.html +0 -22
  100. data/lib/jasmine/example/spec/example_suite.js +0 -11
  101. data/lib/jasmine/spec/jasmine_helper.rb +0 -44
  102. data/lib/jasmine/spec/jasmine_spec.rb +0 -31
  103. data/lib/jasmine/spec/saucelabs.yml +0 -24
  104. data/lib/jasmine/src/Reporters.js +0 -43
@@ -26,6 +26,14 @@ jasmine.undefined = jasmine.___undefined___;
26
26
  */
27
27
  jasmine.DEFAULT_UPDATE_INTERVAL = 250;
28
28
 
29
+ jasmine.getGlobal = function() {
30
+ function getGlobal() {
31
+ return this;
32
+ }
33
+
34
+ return getGlobal();
35
+ };
36
+
29
37
  /**
30
38
  * Allows for bound functions to be compared. Internal use only.
31
39
  *
@@ -42,35 +50,41 @@ jasmine.bindOriginal_ = function(base, name) {
42
50
  };
43
51
  } else {
44
52
  // IE support
45
- return window[name];
53
+ return jasmine.getGlobal()[name];
46
54
  }
47
55
  };
48
56
 
49
- jasmine.setTimeout = jasmine.bindOriginal_(window, 'setTimeout');
50
- jasmine.clearTimeout = jasmine.bindOriginal_(window, 'clearTimeout');
51
- jasmine.setInterval = jasmine.bindOriginal_(window, 'setInterval');
52
- jasmine.clearInterval = jasmine.bindOriginal_(window, 'clearInterval');
57
+ jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
58
+ jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
59
+ jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
60
+ jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
53
61
 
54
- jasmine.MessageResult = function(text) {
55
- this.type = 'MessageResult';
56
- this.text = text;
62
+ jasmine.MessageResult = function(values) {
63
+ this.type = 'log';
64
+ this.values = values;
57
65
  this.trace = new Error(); // todo: test better
58
66
  };
59
67
 
60
68
  jasmine.MessageResult.prototype.toString = function() {
61
- return this.text;
69
+ var text = "";
70
+ for(var i = 0; i < this.values.length; i++) {
71
+ if (i > 0) text += " ";
72
+ if (jasmine.isString_(this.values[i])) {
73
+ text += this.values[i];
74
+ } else {
75
+ text += jasmine.pp(this.values[i]);
76
+ }
77
+ }
78
+ return text;
62
79
  };
63
80
 
64
81
  jasmine.ExpectationResult = function(params) {
65
- this.type = 'ExpectationResult';
82
+ this.type = 'expect';
66
83
  this.matcherName = params.matcherName;
67
84
  this.passed_ = params.passed;
68
85
  this.expected = params.expected;
69
86
  this.actual = params.actual;
70
87
 
71
- /** @deprecated */
72
- this.details = params.details;
73
-
74
88
  this.message = this.passed_ ? 'Passed.' : params.message;
75
89
  this.trace = this.passed_ ? '' : new Error(this.message);
76
90
  };
@@ -158,7 +172,7 @@ jasmine.isDomNode = function(obj) {
158
172
  *
159
173
  * @example
160
174
  * // don't care about which function is passed in, as long as it's a function
161
- * expect(mySpy).wasCalledWith(jasmine.any(Function));
175
+ * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
162
176
  *
163
177
  * @param {Class} clazz
164
178
  * @returns matchable object of the type clazz
@@ -173,7 +187,8 @@ jasmine.any = function(clazz) {
173
187
  * Spies should be created in test setup, before expectations. They can then be checked, using the standard Jasmine
174
188
  * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
175
189
  *
176
- * A Spy has the following mehtod: wasCalled, callCount, mostRecentCall, and argsForCall (see docs)
190
+ * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
191
+ *
177
192
  * Spies are torn down at the end of every spec.
178
193
  *
179
194
  * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
@@ -203,8 +218,8 @@ jasmine.any = function(clazz) {
203
218
  *
204
219
  * // mock example
205
220
  * foo.not(7 == 7);
206
- * expect(foo.not).wasCalled();
207
- * expect(foo.not).wasCalledWith(true);
221
+ * expect(foo.not).toHaveBeenCalled();
222
+ * expect(foo.not).toHaveBeenCalledWith(true);
208
223
  *
209
224
  * @constructor
210
225
  * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
@@ -395,8 +410,14 @@ jasmine.createSpyObj = function(baseName, methodNames) {
395
410
  return obj;
396
411
  };
397
412
 
398
- jasmine.log = function(message) {
399
- jasmine.getEnv().currentSpec.log(message);
413
+ /**
414
+ * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
415
+ *
416
+ * Be careful not to leave calls to <code>jasmine.log</code> in production code.
417
+ */
418
+ jasmine.log = function() {
419
+ var spec = jasmine.getEnv().currentSpec;
420
+ spec.log.apply(spec, arguments);
400
421
  };
401
422
 
402
423
  /**
@@ -559,31 +580,6 @@ jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
559
580
  }
560
581
  throw new Error("This browser does not support XMLHttpRequest.");
561
582
  } : XMLHttpRequest;
562
-
563
- /**
564
- * Adds suite files to an HTML document so that they are executed, thus adding them to the current
565
- * Jasmine environment.
566
- *
567
- * @param {String} url path to the file to include
568
- * @param {Boolean} opt_global
569
- * @deprecated We suggest you use a different method of including JS source files. <code>jasmine.include</code> will be removed soon.
570
- */
571
- jasmine.include = function(url, opt_global) {
572
- if (opt_global) {
573
- document.write('<script type="text/javascript" src="' + url + '"></' + 'script>');
574
- } else {
575
- var xhr;
576
- try {
577
- xhr = new jasmine.XmlHttpRequest();
578
- xhr.open("GET", url, false);
579
- xhr.send(null);
580
- } catch(e) {
581
- throw new Error("couldn't fetch " + url + ": " + e);
582
- }
583
-
584
- return eval(xhr.responseText);
585
- }
586
- };
587
583
  /**
588
584
  * @namespace
589
585
  */
@@ -933,6 +929,10 @@ jasmine.Reporter.prototype.reportRunnerResults = function(runner) {
933
929
  jasmine.Reporter.prototype.reportSuiteResults = function(suite) {
934
930
  };
935
931
 
932
+ //noinspection JSUnusedLocalSymbols
933
+ jasmine.Reporter.prototype.reportSpecStarting = function(spec) {
934
+ };
935
+
936
936
  //noinspection JSUnusedLocalSymbols
937
937
  jasmine.Reporter.prototype.reportSpecResults = function(spec) {
938
938
  };
@@ -1045,11 +1045,11 @@ jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){
1045
1045
 
1046
1046
  jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
1047
1047
  var summaryMessages = [];
1048
- var messagesLength = result.messages.length
1048
+ var messagesLength = result.messages.length;
1049
1049
  for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
1050
1050
  var resultMessage = result.messages[messageIndex];
1051
1051
  summaryMessages.push({
1052
- text: resultMessage.text,
1052
+ text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
1053
1053
  passed: resultMessage.passed ? resultMessage.passed() : true,
1054
1054
  type: resultMessage.type,
1055
1055
  message: resultMessage.message,
@@ -1057,14 +1057,12 @@ jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
1057
1057
  stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
1058
1058
  }
1059
1059
  });
1060
- };
1060
+ }
1061
1061
 
1062
- var summaryResult = {
1062
+ return {
1063
1063
  result : result.result,
1064
1064
  messages : summaryMessages
1065
1065
  };
1066
-
1067
- return summaryResult;
1068
1066
  };
1069
1067
 
1070
1068
  /**
@@ -1084,25 +1082,11 @@ jasmine.Matchers = function(env, actual, spec, opt_isNot) {
1084
1082
  // todo: @deprecated as of Jasmine 0.11, remove soon [xw]
1085
1083
  jasmine.Matchers.pp = function(str) {
1086
1084
  throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
1087
- this.report();
1088
1085
  };
1089
1086
 
1090
- /** @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. */
1087
+ // todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
1091
1088
  jasmine.Matchers.prototype.report = function(result, failing_message, details) {
1092
- // todo: report a deprecation warning [xw]
1093
-
1094
- if (this.isNot) {
1095
- throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
1096
- }
1097
-
1098
- this.reportWasCalled_ = true;
1099
- var expectationResult = new jasmine.ExpectationResult({
1100
- passed: result,
1101
- message: failing_message,
1102
- details: details
1103
- });
1104
- this.spec.addMatcherResult(expectationResult);
1105
- return result;
1089
+ throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
1106
1090
  };
1107
1091
 
1108
1092
  jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
@@ -1245,12 +1229,18 @@ jasmine.Matchers.prototype.toBeFalsy = function() {
1245
1229
  return !this.actual;
1246
1230
  };
1247
1231
 
1232
+
1233
+ /** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
1234
+ jasmine.Matchers.prototype.wasCalled = function() {
1235
+ return this.toHaveBeenCalled();
1236
+ };
1237
+
1248
1238
  /**
1249
1239
  * Matcher that checks to see if the actual, a Jasmine spy, was called.
1250
1240
  */
1251
- jasmine.Matchers.prototype.wasCalled = function() {
1241
+ jasmine.Matchers.prototype.toHaveBeenCalled = function() {
1252
1242
  if (arguments.length > 0) {
1253
- throw new Error('wasCalled does not take arguments, use wasCalledWith');
1243
+ throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
1254
1244
  }
1255
1245
 
1256
1246
  if (!jasmine.isSpy(this.actual)) {
@@ -1266,6 +1256,8 @@ jasmine.Matchers.prototype.wasCalled = function() {
1266
1256
 
1267
1257
  /**
1268
1258
  * Matcher that checks to see if the actual, a Jasmine spy, was not called.
1259
+ *
1260
+ * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
1269
1261
  */
1270
1262
  jasmine.Matchers.prototype.wasNotCalled = function() {
1271
1263
  if (arguments.length > 0) {
@@ -1283,13 +1275,18 @@ jasmine.Matchers.prototype.wasNotCalled = function() {
1283
1275
  return !this.actual.wasCalled;
1284
1276
  };
1285
1277
 
1278
+ /** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
1279
+ jasmine.Matchers.prototype.wasCalledWith = function() {
1280
+ return this.toHaveBeenCalledWith.apply(this, arguments);
1281
+ };
1282
+
1286
1283
  /**
1287
1284
  * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
1288
1285
  *
1289
1286
  * @example
1290
1287
  *
1291
1288
  */
1292
- jasmine.Matchers.prototype.wasCalledWith = function() {
1289
+ jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
1293
1290
  var expectedArgs = jasmine.util.argsToArray(arguments);
1294
1291
  if (!jasmine.isSpy(this.actual)) {
1295
1292
  throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
@@ -1305,6 +1302,7 @@ jasmine.Matchers.prototype.wasCalledWith = function() {
1305
1302
  return this.env.contains_(this.actual.argsForCall, expectedArgs);
1306
1303
  };
1307
1304
 
1305
+ /** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
1308
1306
  jasmine.Matchers.prototype.wasNotCalledWith = function() {
1309
1307
  var expectedArgs = jasmine.util.argsToArray(arguments);
1310
1308
  if (!jasmine.isSpy(this.actual)) {
@@ -1416,7 +1414,14 @@ jasmine.MultiReporter.prototype.addReporter = function(reporter) {
1416
1414
  };
1417
1415
 
1418
1416
  (function() {
1419
- var functionNames = ["reportRunnerStarting", "reportRunnerResults", "reportSuiteResults", "reportSpecResults", "log"];
1417
+ var functionNames = [
1418
+ "reportRunnerStarting",
1419
+ "reportRunnerResults",
1420
+ "reportSuiteResults",
1421
+ "reportSpecStarting",
1422
+ "reportSpecResults",
1423
+ "log"
1424
+ ];
1420
1425
  for (var i = 0; i < functionNames.length; i++) {
1421
1426
  var functionName = functionNames[i];
1422
1427
  jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
@@ -1471,11 +1476,11 @@ jasmine.NestedResults.prototype.rollupCounts = function(result) {
1471
1476
  };
1472
1477
 
1473
1478
  /**
1474
- * Tracks a result's message.
1475
- * @param message
1479
+ * Adds a log message.
1480
+ * @param values Array of message parts which will be concatenated later.
1476
1481
  */
1477
- jasmine.NestedResults.prototype.log = function(message) {
1478
- this.items_.push(new jasmine.MessageResult(message));
1482
+ jasmine.NestedResults.prototype.log = function(values) {
1483
+ this.items_.push(new jasmine.MessageResult(values));
1479
1484
  };
1480
1485
 
1481
1486
  /**
@@ -1490,7 +1495,7 @@ jasmine.NestedResults.prototype.getItems = function() {
1490
1495
  * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
1491
1496
  */
1492
1497
  jasmine.NestedResults.prototype.addResult = function(result) {
1493
- if (result.type != 'MessageResult') {
1498
+ if (result.type != 'log') {
1494
1499
  if (result.items_) {
1495
1500
  this.rollupCounts(result);
1496
1501
  } else {
@@ -1534,8 +1539,8 @@ jasmine.PrettyPrinter.prototype.format = function(value) {
1534
1539
  this.emitScalar('undefined');
1535
1540
  } else if (value === null) {
1536
1541
  this.emitScalar('null');
1537
- } else if (value.navigator && value.frames && value.setTimeout) {
1538
- this.emitScalar('<window>');
1542
+ } else if (value === jasmine.getGlobal()) {
1543
+ this.emitScalar('<global>');
1539
1544
  } else if (value instanceof jasmine.Matchers.Any) {
1540
1545
  this.emitScalar(value.toString());
1541
1546
  } else if (typeof value === 'string') {
@@ -1727,49 +1732,6 @@ jasmine.Queue.prototype.results = function() {
1727
1732
  };
1728
1733
 
1729
1734
 
1730
- /** JasmineReporters.reporter
1731
- * Base object that will get called whenever a Spec, Suite, or Runner is done. It is up to
1732
- * descendants of this object to do something with the results (see json_reporter.js)
1733
- *
1734
- * @deprecated
1735
- */
1736
- jasmine.Reporters = {};
1737
-
1738
- /**
1739
- * @deprecated
1740
- * @param callbacks
1741
- */
1742
- jasmine.Reporters.reporter = function(callbacks) {
1743
- /**
1744
- * @deprecated
1745
- * @param callbacks
1746
- */
1747
- var that = {
1748
- callbacks: callbacks || {},
1749
-
1750
- doCallback: function(callback, results) {
1751
- if (callback) {
1752
- callback(results);
1753
- }
1754
- },
1755
-
1756
- reportRunnerResults: function(runner) {
1757
- that.doCallback(that.callbacks.runnerCallback, runner);
1758
- },
1759
- reportSuiteResults: function(suite) {
1760
- that.doCallback(that.callbacks.suiteCallback, suite);
1761
- },
1762
- reportSpecResults: function(spec) {
1763
- that.doCallback(that.callbacks.specCallback, spec);
1764
- },
1765
- log: function (str) {
1766
- if (console && console.log) console.log(str);
1767
- }
1768
- };
1769
-
1770
- return that;
1771
- };
1772
-
1773
1735
  /**
1774
1736
  * Runner
1775
1737
  *
@@ -1886,13 +1848,13 @@ jasmine.Spec.prototype.results = function() {
1886
1848
  return this.results_;
1887
1849
  };
1888
1850
 
1889
- jasmine.Spec.prototype.log = function(message) {
1890
- return this.results_.log(message);
1891
- };
1892
-
1893
- /** @deprecated */
1894
- jasmine.Spec.prototype.getResults = function() {
1895
- return this.results_;
1851
+ /**
1852
+ * All parameters are pretty-printed and concatenated together, then written to the spec's output.
1853
+ *
1854
+ * Be careful not to leave calls to <code>jasmine.log</code> in production code.
1855
+ */
1856
+ jasmine.Spec.prototype.log = function() {
1857
+ return this.results_.log(arguments);
1896
1858
  };
1897
1859
 
1898
1860
  jasmine.Spec.prototype.runs = function (func) {
@@ -1909,6 +1871,9 @@ jasmine.Spec.prototype.addToQueue = function (block) {
1909
1871
  }
1910
1872
  };
1911
1873
 
1874
+ /**
1875
+ * @param {jasmine.ExpectationResult} result
1876
+ */
1912
1877
  jasmine.Spec.prototype.addMatcherResult = function(result) {
1913
1878
  this.results_.addResult(result);
1914
1879
  };
@@ -1980,7 +1945,8 @@ jasmine.Spec.prototype.execute = function(onComplete) {
1980
1945
  spec.finish(onComplete);
1981
1946
  return;
1982
1947
  }
1983
- this.env.reporter.log('>> Jasmine Running ' + this.suite.description + ' ' + this.description + '...');
1948
+
1949
+ this.env.reporter.reportSpecStarting(this);
1984
1950
 
1985
1951
  spec.env.currentSpec = spec;
1986
1952
 
@@ -2106,15 +2072,15 @@ jasmine.Suite.prototype.results = function() {
2106
2072
  return this.queue.results();
2107
2073
  };
2108
2074
 
2109
- jasmine.Suite.prototype.add = function(block) {
2110
- this.children_.push(block);
2111
- if (block instanceof jasmine.Suite) {
2112
- this.suites_.push(block);
2113
- this.env.currentRunner().addSuite(block);
2075
+ jasmine.Suite.prototype.add = function(suiteOrSpec) {
2076
+ this.children_.push(suiteOrSpec);
2077
+ if (suiteOrSpec instanceof jasmine.Suite) {
2078
+ this.suites_.push(suiteOrSpec);
2079
+ this.env.currentRunner().addSuite(suiteOrSpec);
2114
2080
  } else {
2115
- this.specs_.push(block);
2081
+ this.specs_.push(suiteOrSpec);
2116
2082
  }
2117
- this.queue.add(block);
2083
+ this.queue.add(suiteOrSpec);
2118
2084
  };
2119
2085
 
2120
2086
  jasmine.Suite.prototype.specs = function() {
@@ -2251,9 +2217,9 @@ jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMil
2251
2217
  funcToRun.funcToCall();
2252
2218
  if (funcToRun.recurring) {
2253
2219
  this.scheduleFunction(funcToRun.timeoutKey,
2254
- funcToRun.funcToCall,
2255
- funcToRun.millis,
2256
- true);
2220
+ funcToRun.funcToCall,
2221
+ funcToRun.millis,
2222
+ true);
2257
2223
  }
2258
2224
  } catch(e) {
2259
2225
  }
@@ -2297,10 +2263,12 @@ jasmine.Clock = {
2297
2263
  },
2298
2264
 
2299
2265
  useMock: function() {
2300
- var spec = jasmine.getEnv().currentSpec;
2301
- spec.after(jasmine.Clock.uninstallMock);
2266
+ if (!jasmine.Clock.isInstalled()) {
2267
+ var spec = jasmine.getEnv().currentSpec;
2268
+ spec.after(jasmine.Clock.uninstallMock);
2302
2269
 
2303
- jasmine.Clock.installMock();
2270
+ jasmine.Clock.installMock();
2271
+ }
2304
2272
  },
2305
2273
 
2306
2274
  installMock: function() {
@@ -2313,24 +2281,28 @@ jasmine.Clock = {
2313
2281
  },
2314
2282
 
2315
2283
  real: {
2316
- setTimeout: window.setTimeout,
2317
- clearTimeout: window.clearTimeout,
2318
- setInterval: window.setInterval,
2319
- clearInterval: window.clearInterval
2284
+ setTimeout: jasmine.getGlobal().setTimeout,
2285
+ clearTimeout: jasmine.getGlobal().clearTimeout,
2286
+ setInterval: jasmine.getGlobal().setInterval,
2287
+ clearInterval: jasmine.getGlobal().clearInterval
2320
2288
  },
2321
2289
 
2322
2290
  assertInstalled: function() {
2323
- if (jasmine.Clock.installed != jasmine.Clock.defaultFakeTimer) {
2291
+ if (!jasmine.Clock.isInstalled()) {
2324
2292
  throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
2325
2293
  }
2326
2294
  },
2327
2295
 
2296
+ isInstalled: function() {
2297
+ return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
2298
+ },
2299
+
2328
2300
  installed: null
2329
2301
  };
2330
2302
  jasmine.Clock.installed = jasmine.Clock.real;
2331
2303
 
2332
2304
  //else for IE support
2333
- window.setTimeout = function(funcToCall, millis) {
2305
+ jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
2334
2306
  if (jasmine.Clock.installed.setTimeout.apply) {
2335
2307
  return jasmine.Clock.installed.setTimeout.apply(this, arguments);
2336
2308
  } else {
@@ -2338,7 +2310,7 @@ window.setTimeout = function(funcToCall, millis) {
2338
2310
  }
2339
2311
  };
2340
2312
 
2341
- window.setInterval = function(funcToCall, millis) {
2313
+ jasmine.getGlobal().setInterval = function(funcToCall, millis) {
2342
2314
  if (jasmine.Clock.installed.setInterval.apply) {
2343
2315
  return jasmine.Clock.installed.setInterval.apply(this, arguments);
2344
2316
  } else {
@@ -2346,7 +2318,7 @@ window.setInterval = function(funcToCall, millis) {
2346
2318
  }
2347
2319
  };
2348
2320
 
2349
- window.clearTimeout = function(timeoutKey) {
2321
+ jasmine.getGlobal().clearTimeout = function(timeoutKey) {
2350
2322
  if (jasmine.Clock.installed.clearTimeout.apply) {
2351
2323
  return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
2352
2324
  } else {
@@ -2354,18 +2326,18 @@ window.clearTimeout = function(timeoutKey) {
2354
2326
  }
2355
2327
  };
2356
2328
 
2357
- window.clearInterval = function(timeoutKey) {
2329
+ jasmine.getGlobal().clearInterval = function(timeoutKey) {
2358
2330
  if (jasmine.Clock.installed.clearTimeout.apply) {
2359
2331
  return jasmine.Clock.installed.clearInterval.apply(this, arguments);
2360
2332
  } else {
2361
- return jasmine.Clock.installed.clearInterval(timeoutKey);
2333
+ return jasmine.Clock.installed.clearInterval(timeoutKey);
2362
2334
  }
2363
2335
  };
2364
2336
 
2365
2337
 
2366
2338
  jasmine.version_= {
2367
2339
  "major": 0,
2368
- "minor": 10,
2369
- "build": 4,
2370
- "revision": 1277227072
2371
- };
2340
+ "minor": 11,
2341
+ "build": 1,
2342
+ "revision": 1277514571
2343
+ };