jasmine-core 2.99.2 → 3.0.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jasmine-core/boot.js +7 -6
  3. data/lib/jasmine-core/boot/boot.js +7 -6
  4. data/lib/jasmine-core/boot/node_boot.js +0 -3
  5. data/lib/jasmine-core/jasmine-html.js +228 -137
  6. data/lib/jasmine-core/jasmine.css +11 -5
  7. data/lib/jasmine-core/jasmine.js +1046 -608
  8. data/lib/jasmine-core/node_boot.js +0 -3
  9. data/lib/jasmine-core/spec/core/CallTrackerSpec.js +130 -0
  10. data/lib/jasmine-core/spec/core/ClearStackSpec.js +137 -0
  11. data/lib/jasmine-core/spec/core/ClockSpec.js +710 -0
  12. data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +286 -0
  13. data/lib/jasmine-core/spec/core/EnvSpec.js +200 -0
  14. data/lib/jasmine-core/spec/core/ExceptionFormatterSpec.js +120 -0
  15. data/lib/jasmine-core/spec/core/ExceptionsSpec.js +46 -0
  16. data/lib/jasmine-core/spec/core/ExpectationResultSpec.js +61 -0
  17. data/lib/jasmine-core/spec/core/ExpectationSpec.js +434 -0
  18. data/lib/jasmine-core/spec/core/GlobalErrorsSpec.js +110 -0
  19. data/lib/jasmine-core/spec/core/JsApiReporterSpec.js +259 -0
  20. data/lib/jasmine-core/spec/core/MockDateSpec.js +200 -0
  21. data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +332 -0
  22. data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +670 -0
  23. data/lib/jasmine-core/spec/core/ReportDispatcherSpec.js +140 -0
  24. data/lib/jasmine-core/spec/core/SpecSpec.js +407 -0
  25. data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +364 -0
  26. data/lib/jasmine-core/spec/core/SpySpec.js +177 -0
  27. data/lib/jasmine-core/spec/core/SpyStrategySpec.js +202 -0
  28. data/lib/jasmine-core/spec/core/StackTraceSpec.js +166 -0
  29. data/lib/jasmine-core/spec/core/SuiteSpec.js +123 -0
  30. data/lib/jasmine-core/spec/core/TimerSpec.js +31 -0
  31. data/lib/jasmine-core/spec/core/TreeProcessorSpec.js +794 -0
  32. data/lib/jasmine-core/spec/core/UserContextSpec.js +54 -0
  33. data/lib/jasmine-core/spec/core/UtilSpec.js +105 -0
  34. data/lib/jasmine-core/spec/core/asymmetric_equality/AnySpec.js +91 -0
  35. data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +76 -0
  36. data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js +52 -0
  37. data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayWithExactContentsSpec.js +47 -0
  38. data/lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js +99 -0
  39. data/lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js +27 -0
  40. data/lib/jasmine-core/spec/core/formatErrorMsgSpec.js +13 -0
  41. data/lib/jasmine-core/spec/core/integration/CustomMatchersSpec.js +200 -0
  42. data/lib/jasmine-core/spec/core/integration/CustomSpyStrategiesSpec.js +138 -0
  43. data/lib/jasmine-core/spec/core/integration/EnvSpec.js +2344 -0
  44. data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +976 -0
  45. data/lib/jasmine-core/spec/core/matchers/DiffBuilderSpec.js +47 -0
  46. data/lib/jasmine-core/spec/core/matchers/NullDiffBuilderSpec.js +13 -0
  47. data/lib/jasmine-core/spec/core/matchers/ObjectPathSpec.js +43 -0
  48. data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +645 -0
  49. data/lib/jasmine-core/spec/core/matchers/nothingSpec.js +8 -0
  50. data/lib/jasmine-core/spec/core/matchers/toBeCloseToSpec.js +93 -0
  51. data/lib/jasmine-core/spec/core/matchers/toBeDefinedSpec.js +18 -0
  52. data/lib/jasmine-core/spec/core/matchers/toBeFalsySpec.js +38 -0
  53. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanOrEqualSpec.js +29 -0
  54. data/lib/jasmine-core/spec/core/matchers/toBeGreaterThanSpec.js +20 -0
  55. data/lib/jasmine-core/spec/core/matchers/toBeLessThanOrEqualSpec.js +29 -0
  56. data/lib/jasmine-core/spec/core/matchers/toBeLessThanSpec.js +20 -0
  57. data/lib/jasmine-core/spec/core/matchers/toBeNaNSpec.js +37 -0
  58. data/lib/jasmine-core/spec/core/matchers/toBeNegativeInfinitySpec.js +31 -0
  59. data/lib/jasmine-core/spec/core/matchers/toBeNullSpec.js +17 -0
  60. data/lib/jasmine-core/spec/core/matchers/toBePositiveInfinitySpec.js +31 -0
  61. data/lib/jasmine-core/spec/core/matchers/toBeSpec.js +17 -0
  62. data/lib/jasmine-core/spec/core/matchers/toBeTruthySpec.js +38 -0
  63. data/lib/jasmine-core/spec/core/matchers/toBeUndefinedSpec.js +18 -0
  64. data/lib/jasmine-core/spec/core/matchers/toContainSpec.js +26 -0
  65. data/lib/jasmine-core/spec/core/matchers/toEqualSpec.js +785 -0
  66. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledBeforeSpec.js +99 -0
  67. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledSpec.js +47 -0
  68. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledTimesSpec.js +86 -0
  69. data/lib/jasmine-core/spec/core/matchers/toHaveBeenCalledWithSpec.js +67 -0
  70. data/lib/jasmine-core/spec/core/matchers/toMatchSpec.js +43 -0
  71. data/lib/jasmine-core/spec/core/matchers/toThrowErrorSpec.js +315 -0
  72. data/lib/jasmine-core/spec/core/matchers/toThrowMatchingSpec.js +73 -0
  73. data/lib/jasmine-core/spec/core/matchers/toThrowSpec.js +100 -0
  74. data/lib/jasmine-core/spec/helpers/BrowserFlags.js +15 -0
  75. data/lib/jasmine-core/spec/helpers/asyncAwait.js +27 -0
  76. data/lib/jasmine-core/spec/helpers/checkForMap.js +37 -0
  77. data/lib/jasmine-core/spec/helpers/checkForSet.js +41 -0
  78. data/lib/jasmine-core/spec/helpers/checkForSymbol.js +28 -0
  79. data/lib/jasmine-core/spec/helpers/checkForTypedArrays.js +20 -0
  80. data/lib/jasmine-core/spec/helpers/defineJasmineUnderTest.js +6 -0
  81. data/lib/jasmine-core/spec/helpers/integrationMatchers.js +43 -0
  82. data/lib/jasmine-core/spec/helpers/nodeDefineJasmineUnderTest.js +30 -0
  83. data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +1261 -0
  84. data/lib/jasmine-core/spec/html/HtmlSpecFilterSpec.js +18 -0
  85. data/lib/jasmine-core/spec/html/MatchersHtmlSpec.js +37 -0
  86. data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +27 -0
  87. data/lib/jasmine-core/spec/html/QueryStringSpec.js +72 -0
  88. data/lib/jasmine-core/spec/html/ResultsNodeSpec.js +62 -0
  89. data/lib/jasmine-core/spec/html/SpyRegistryHtmlSpec.js +39 -0
  90. data/lib/jasmine-core/spec/html/matchers/toHaveClassSpec.js +48 -0
  91. data/lib/jasmine-core/spec/npmPackage/npmPackageSpec.js +101 -0
  92. data/lib/jasmine-core/spec/performance/large_object_test.js +36 -0
  93. data/lib/jasmine-core/spec/performance/performance_test.js +10 -0
  94. data/lib/jasmine-core/version.rb +1 -1
  95. metadata +88 -4
  96. data/lib/console/console.js +0 -190
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c49e107a0140926c343613207940446f285e816a
4
- data.tar.gz: d239460f82af876a16dbe9d3b6d7d05d9374e7c0
3
+ metadata.gz: 7e5647f35a2c17871621df2d1822a77c638e2a84
4
+ data.tar.gz: 0d30ae54baae843527b0e057715e55766df4b01d
5
5
  SHA512:
6
- metadata.gz: 067bf31fbd4f588ac838644cd072e59c1ff5a772da8ec74db8a4849a58499c889c62524d519465c98c88ad5f813950b085c8562a82c50b2d1e2383e386302a34
7
- data.tar.gz: '014690c428593e0e697fece07e82908469dfb84a2844e91f107a3cc2fd411dbf9e363fb5b6f5bc9a535056debc14cc4ae632b2bf40c13a17455611beb9fdf2a7'
6
+ metadata.gz: 366cce7b5d79ec3defff32ac37246dd92df9418e81c2b9f575f92d58de658337c2b7fab46d5c4f83902ae8165a66f1628e80cdc171394107e851cd93c6742219
7
+ data.tar.gz: b0b62b54f3d7c85d5289227fa5f40417a6e59c481848972e50425ce1215e97f1cccbe3dc737ea30f016ad2695d591e0e5ad48b6a5546d15b1a292e49e7f5b503
@@ -73,14 +73,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
73
73
 
74
74
  var filterSpecs = !!queryString.getParam("spec");
75
75
 
76
- var catchingExceptions = queryString.getParam("catch");
77
- env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
76
+ var stoppingOnSpecFailure = queryString.getParam("failFast");
77
+ env.stopOnSpecFailure(stoppingOnSpecFailure);
78
78
 
79
79
  var throwingExpectationFailures = queryString.getParam("throwFailures");
80
80
  env.throwOnExpectationFailure(throwingExpectationFailures);
81
81
 
82
82
  var random = queryString.getParam("random");
83
- env.randomizeTests(random);
83
+
84
+ if (random !== undefined && random !== "") {
85
+ env.randomizeTests(random);
86
+ }
84
87
 
85
88
  var seed = queryString.getParam("seed");
86
89
  if (seed) {
@@ -93,9 +96,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
93
96
  */
94
97
  var htmlReporter = new jasmine.HtmlReporter({
95
98
  env: env,
96
- onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
97
- onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); },
98
- onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); },
99
+ navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); },
99
100
  addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
100
101
  getContainer: function() { return document.body; },
101
102
  createElement: function() { return document.createElement.apply(document, arguments); },
@@ -51,14 +51,17 @@
51
51
 
52
52
  var filterSpecs = !!queryString.getParam("spec");
53
53
 
54
- var catchingExceptions = queryString.getParam("catch");
55
- env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
54
+ var stoppingOnSpecFailure = queryString.getParam("failFast");
55
+ env.stopOnSpecFailure(stoppingOnSpecFailure);
56
56
 
57
57
  var throwingExpectationFailures = queryString.getParam("throwFailures");
58
58
  env.throwOnExpectationFailure(throwingExpectationFailures);
59
59
 
60
60
  var random = queryString.getParam("random");
61
- env.randomizeTests(random);
61
+
62
+ if (random !== undefined && random !== "") {
63
+ env.randomizeTests(random);
64
+ }
62
65
 
63
66
  var seed = queryString.getParam("seed");
64
67
  if (seed) {
@@ -71,9 +74,7 @@
71
74
  */
72
75
  var htmlReporter = new jasmine.HtmlReporter({
73
76
  env: env,
74
- onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
75
- onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); },
76
- onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); },
77
+ navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); },
77
78
  addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
78
79
  getContainer: function() { return document.body; },
79
80
  createElement: function() { return document.createElement.apply(document, arguments); },
@@ -1,9 +1,6 @@
1
1
  module.exports = function(jasmineRequire) {
2
2
  var jasmine = jasmineRequire.core(jasmineRequire);
3
3
 
4
- var consoleFns = require('../console/console.js');
5
- consoleFns.console(consoleFns, jasmine);
6
-
7
4
  var env = jasmine.getEnv();
8
5
 
9
6
  var jasmineInterface = jasmineRequire.interface(jasmine, env);
@@ -25,6 +25,7 @@ jasmineRequire.html = function(j$) {
25
25
  j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
26
26
  j$.QueryString = jasmineRequire.QueryString();
27
27
  j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
28
+ j$.matchers.toHaveClass = jasmineRequire.toHaveClass(j$);
28
29
  };
29
30
 
30
31
  jasmineRequire.HtmlReporter = function(j$) {
@@ -48,9 +49,14 @@ jasmineRequire.HtmlReporter = function(j$) {
48
49
  };
49
50
 
50
51
  ResultsStateBuilder.prototype.suiteDone = function(result) {
52
+ this.currentParent.updateResult(result);
51
53
  if (this.currentParent !== this.topResults) {
52
54
  this.currentParent = this.currentParent.parent;
53
55
  }
56
+
57
+ if (result.status === 'failed') {
58
+ this.failureCount++;
59
+ }
54
60
  };
55
61
 
56
62
  ResultsStateBuilder.prototype.specStarted = function(result) {
@@ -59,7 +65,7 @@ jasmineRequire.HtmlReporter = function(j$) {
59
65
  ResultsStateBuilder.prototype.specDone = function(result) {
60
66
  this.currentParent.addChild(result, 'spec');
61
67
 
62
- if (result.status !== 'disabled') {
68
+ if (result.status !== 'excluded') {
63
69
  this.specsExecuted++;
64
70
  }
65
71
 
@@ -79,16 +85,12 @@ jasmineRequire.HtmlReporter = function(j$) {
79
85
  getContainer = options.getContainer,
80
86
  createElement = options.createElement,
81
87
  createTextNode = options.createTextNode,
82
- onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
83
- onThrowExpectationsClick = options.onThrowExpectationsClick || function() {},
84
- onRandomClick = options.onRandomClick || function() {},
88
+ navigateWithNewParam = options.navigateWithNewParam || function() {},
85
89
  addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
86
90
  filterSpecs = options.filterSpecs,
87
91
  timer = options.timer || noopTimer,
88
- results = [],
89
92
  htmlReporterMain,
90
93
  symbols,
91
- failedSuites = [],
92
94
  deprecationWarnings = [];
93
95
 
94
96
  this.initialize = function() {
@@ -122,11 +124,11 @@ jasmineRequire.HtmlReporter = function(j$) {
122
124
  };
123
125
 
124
126
  this.suiteDone = function(result) {
125
- if (result.status == 'failed') {
126
- failedSuites.push(result);
127
- }
128
-
129
127
  stateBuilder.suiteDone(result);
128
+
129
+ if (result.status === 'failed') {
130
+ failures.push(failureDom(result));
131
+ }
130
132
  addDeprecationWarnings(result);
131
133
  };
132
134
 
@@ -153,23 +155,8 @@ jasmineRequire.HtmlReporter = function(j$) {
153
155
  }
154
156
  ));
155
157
 
156
- if (result.status == 'failed') {
157
- var failure =
158
- createDom('div', {className: 'jasmine-spec-detail jasmine-failed'},
159
- createDom('div', {className: 'jasmine-description'},
160
- createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName)
161
- ),
162
- createDom('div', {className: 'jasmine-messages'})
163
- );
164
- var messages = failure.childNodes[1];
165
-
166
- for (var i = 0; i < result.failedExpectations.length; i++) {
167
- var expectation = result.failedExpectations[i];
168
- messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message));
169
- messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack));
170
- }
171
-
172
- failures.push(failure);
158
+ if (result.status === 'failed') {
159
+ failures.push(failureDom(result));
173
160
  }
174
161
 
175
162
  addDeprecationWarnings(result);
@@ -181,59 +168,7 @@ jasmineRequire.HtmlReporter = function(j$) {
181
168
  var order = doneResult && doneResult.order;
182
169
  alert.appendChild(createDom('span', {className: 'jasmine-duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));
183
170
 
184
- banner.appendChild(
185
- createDom('div', { className: 'jasmine-run-options' },
186
- createDom('span', { className: 'jasmine-trigger' }, 'Options'),
187
- createDom('div', { className: 'jasmine-payload' },
188
- createDom('div', { className: 'jasmine-exceptions' },
189
- createDom('input', {
190
- className: 'jasmine-raise',
191
- id: 'jasmine-raise-exceptions',
192
- type: 'checkbox'
193
- }),
194
- createDom('label', { className: 'jasmine-label', 'for': 'jasmine-raise-exceptions' }, 'raise exceptions')),
195
- createDom('div', { className: 'jasmine-throw-failures' },
196
- createDom('input', {
197
- className: 'jasmine-throw',
198
- id: 'jasmine-throw-failures',
199
- type: 'checkbox'
200
- }),
201
- createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')),
202
- createDom('div', { className: 'jasmine-random-order' },
203
- createDom('input', {
204
- className: 'jasmine-random',
205
- id: 'jasmine-random-order',
206
- type: 'checkbox'
207
- }),
208
- createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order'))
209
- )
210
- ));
211
-
212
- var raiseCheckbox = find('#jasmine-raise-exceptions');
213
-
214
- raiseCheckbox.checked = !env.catchingExceptions();
215
- raiseCheckbox.onclick = onRaiseExceptionsClick;
216
-
217
- var throwCheckbox = find('#jasmine-throw-failures');
218
- throwCheckbox.checked = env.throwingExpectationFailures();
219
- throwCheckbox.onclick = onThrowExpectationsClick;
220
-
221
- var randomCheckbox = find('#jasmine-random-order');
222
- randomCheckbox.checked = env.randomTests();
223
- randomCheckbox.onclick = onRandomClick;
224
-
225
- var optionsMenu = find('.jasmine-run-options'),
226
- optionsTrigger = optionsMenu.querySelector('.jasmine-trigger'),
227
- optionsPayload = optionsMenu.querySelector('.jasmine-payload'),
228
- isOpen = /\bjasmine-open\b/;
229
-
230
- optionsTrigger.onclick = function() {
231
- if (isOpen.test(optionsPayload.className)) {
232
- optionsPayload.className = optionsPayload.className.replace(isOpen, '');
233
- } else {
234
- optionsPayload.className += ' jasmine-open';
235
- }
236
- };
171
+ banner.appendChild(optionsMenu(env));
237
172
 
238
173
  if (stateBuilder.specsExecuted < totalSpecsDefined) {
239
174
  var skippedMessage = 'Ran ' + stateBuilder.specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
@@ -245,15 +180,22 @@ jasmineRequire.HtmlReporter = function(j$) {
245
180
  );
246
181
  }
247
182
  var statusBarMessage = '';
248
- var statusBarClassName = 'jasmine-bar ';
183
+ var statusBarClassName = 'jasmine-overall-result jasmine-bar ';
184
+ var globalFailures = (doneResult && doneResult.failedExpectations) || [];
185
+ var failed = stateBuilder.failureCount + globalFailures.length > 0;
249
186
 
250
- if (totalSpecsDefined > 0) {
187
+ if (totalSpecsDefined > 0 || failed) {
251
188
  statusBarMessage += pluralize('spec', stateBuilder.specsExecuted) + ', ' + pluralize('failure', stateBuilder.failureCount);
252
189
  if (stateBuilder.pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', stateBuilder.pendingSpecCount); }
253
- statusBarClassName += (stateBuilder.failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed';
190
+ }
191
+
192
+ if (doneResult.overallStatus === 'passed') {
193
+ statusBarClassName += ' jasmine-passed ';
194
+ } else if (doneResult.overallStatus === 'incomplete') {
195
+ statusBarClassName += ' jasmine-incomplete ';
196
+ statusBarMessage = 'Incomplete: ' + doneResult.incompleteReason + ', ' + statusBarMessage;
254
197
  } else {
255
- statusBarClassName += 'jasmine-skipped';
256
- statusBarMessage += 'No specs found';
198
+ statusBarClassName += ' jasmine-failed ';
257
199
  }
258
200
 
259
201
  var seedBar;
@@ -267,19 +209,24 @@ jasmineRequire.HtmlReporter = function(j$) {
267
209
  alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage, seedBar));
268
210
 
269
211
  var errorBarClassName = 'jasmine-bar jasmine-errored';
270
- var errorBarMessagePrefix = 'AfterAll ';
212
+ var afterAllMessagePrefix = 'AfterAll ';
271
213
 
272
- for(var i = 0; i < failedSuites.length; i++) {
273
- var failedSuite = failedSuites[i];
274
- for(var j = 0; j < failedSuite.failedExpectations.length; j++) {
275
- alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessagePrefix + failedSuite.failedExpectations[j].message));
276
- }
214
+ for(i = 0; i < globalFailures.length; i++) {
215
+ alert.appendChild(createDom('span', {className: errorBarClassName}, globalFailureMessage(globalFailures[i])));
277
216
  }
278
217
 
279
- var globalFailures = (doneResult && doneResult.failedExpectations) || [];
280
- for(i = 0; i < globalFailures.length; i++) {
281
- var failure = globalFailures[i];
282
- alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessagePrefix + failure.message));
218
+ function globalFailureMessage(failure) {
219
+ if (failure.globalErrorType === 'load') {
220
+ var prefix = 'Error during loading: ' + failure.message;
221
+
222
+ if (failure.filename) {
223
+ return prefix + ' in ' + failure.filename + ' line ' + failure.lineno;
224
+ } else {
225
+ return prefix;
226
+ }
227
+ } else {
228
+ return afterAllMessagePrefix + failure.message;
229
+ }
283
230
  }
284
231
 
285
232
  addDeprecationWarnings(doneResult);
@@ -295,47 +242,6 @@ jasmineRequire.HtmlReporter = function(j$) {
295
242
 
296
243
  summaryList(stateBuilder.topResults, summary);
297
244
 
298
- function summaryList(resultsTree, domParent) {
299
- var specListNode;
300
- for (var i = 0; i < resultsTree.children.length; i++) {
301
- var resultNode = resultsTree.children[i];
302
- if (filterSpecs && !hasActiveSpec(resultNode)) {
303
- continue;
304
- }
305
- if (resultNode.type == 'suite') {
306
- var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id},
307
- createDom('li', {className: 'jasmine-suite-detail'},
308
- createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)
309
- )
310
- );
311
-
312
- summaryList(resultNode, suiteListNode);
313
- domParent.appendChild(suiteListNode);
314
- }
315
- if (resultNode.type == 'spec') {
316
- if (domParent.getAttribute('class') != 'jasmine-specs') {
317
- specListNode = createDom('ul', {className: 'jasmine-specs'});
318
- domParent.appendChild(specListNode);
319
- }
320
- var specDescription = resultNode.result.description;
321
- if(noExpectations(resultNode.result)) {
322
- specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;
323
- }
324
- if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') {
325
- specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason;
326
- }
327
- specListNode.appendChild(
328
- createDom('li', {
329
- className: 'jasmine-' + resultNode.result.status,
330
- id: 'spec-' + resultNode.result.id
331
- },
332
- createDom('a', {href: specHref(resultNode.result)}, specDescription)
333
- )
334
- );
335
- }
336
- }
337
- }
338
-
339
245
  if (failures.length) {
340
246
  alert.appendChild(
341
247
  createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-spec-list'},
@@ -364,6 +270,153 @@ jasmineRequire.HtmlReporter = function(j$) {
364
270
 
365
271
  return this;
366
272
 
273
+ function failureDom(result) {
274
+ var failure =
275
+ createDom('div', {className: 'jasmine-spec-detail jasmine-failed'},
276
+ failureDescription(result, stateBuilder.currentParent),
277
+ createDom('div', {className: 'jasmine-messages'})
278
+ );
279
+ var messages = failure.childNodes[1];
280
+
281
+ for (var i = 0; i < result.failedExpectations.length; i++) {
282
+ var expectation = result.failedExpectations[i];
283
+ messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message));
284
+ messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack));
285
+ }
286
+
287
+ return failure;
288
+ }
289
+
290
+ function summaryList(resultsTree, domParent) {
291
+ var specListNode;
292
+ for (var i = 0; i < resultsTree.children.length; i++) {
293
+ var resultNode = resultsTree.children[i];
294
+ if (filterSpecs && !hasActiveSpec(resultNode)) {
295
+ continue;
296
+ }
297
+ if (resultNode.type === 'suite') {
298
+ var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id},
299
+ createDom('li', {className: 'jasmine-suite-detail jasmine-' + resultNode.result.status},
300
+ createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)
301
+ )
302
+ );
303
+
304
+ summaryList(resultNode, suiteListNode);
305
+ domParent.appendChild(suiteListNode);
306
+ }
307
+ if (resultNode.type === 'spec') {
308
+ if (domParent.getAttribute('class') !== 'jasmine-specs') {
309
+ specListNode = createDom('ul', {className: 'jasmine-specs'});
310
+ domParent.appendChild(specListNode);
311
+ }
312
+ var specDescription = resultNode.result.description;
313
+ if(noExpectations(resultNode.result)) {
314
+ specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;
315
+ }
316
+ if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') {
317
+ specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason;
318
+ }
319
+ specListNode.appendChild(
320
+ createDom('li', {
321
+ className: 'jasmine-' + resultNode.result.status,
322
+ id: 'spec-' + resultNode.result.id
323
+ },
324
+ createDom('a', {href: specHref(resultNode.result)}, specDescription)
325
+ )
326
+ );
327
+ }
328
+ }
329
+ }
330
+
331
+ function optionsMenu(env) {
332
+ var optionsMenuDom = createDom('div', { className: 'jasmine-run-options' },
333
+ createDom('span', { className: 'jasmine-trigger' }, 'Options'),
334
+ createDom('div', { className: 'jasmine-payload' },
335
+ createDom('div', { className: 'jasmine-stop-on-failure' },
336
+ createDom('input', {
337
+ className: 'jasmine-fail-fast',
338
+ id: 'jasmine-fail-fast',
339
+ type: 'checkbox'
340
+ }),
341
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-fail-fast' }, 'stop execution on spec failure')),
342
+ createDom('div', { className: 'jasmine-throw-failures' },
343
+ createDom('input', {
344
+ className: 'jasmine-throw',
345
+ id: 'jasmine-throw-failures',
346
+ type: 'checkbox'
347
+ }),
348
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')),
349
+ createDom('div', { className: 'jasmine-random-order' },
350
+ createDom('input', {
351
+ className: 'jasmine-random',
352
+ id: 'jasmine-random-order',
353
+ type: 'checkbox'
354
+ }),
355
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order'))
356
+ )
357
+ );
358
+
359
+ var failFastCheckbox = optionsMenuDom.querySelector('#jasmine-fail-fast');
360
+ failFastCheckbox.checked = env.stoppingOnSpecFailure();
361
+ failFastCheckbox.onclick = function() {
362
+ navigateWithNewParam('failFast', !env.stoppingOnSpecFailure());
363
+ };
364
+
365
+ var throwCheckbox = optionsMenuDom.querySelector('#jasmine-throw-failures');
366
+ throwCheckbox.checked = env.throwingExpectationFailures();
367
+ throwCheckbox.onclick = function() {
368
+ navigateWithNewParam('throwFailures', !env.throwingExpectationFailures());
369
+ };
370
+
371
+ var randomCheckbox = optionsMenuDom.querySelector('#jasmine-random-order');
372
+ randomCheckbox.checked = env.randomTests();
373
+ randomCheckbox.onclick = function() {
374
+ navigateWithNewParam('random', !env.randomTests());
375
+ };
376
+
377
+ var optionsTrigger = optionsMenuDom.querySelector('.jasmine-trigger'),
378
+ optionsPayload = optionsMenuDom.querySelector('.jasmine-payload'),
379
+ isOpen = /\bjasmine-open\b/;
380
+
381
+ optionsTrigger.onclick = function() {
382
+ if (isOpen.test(optionsPayload.className)) {
383
+ optionsPayload.className = optionsPayload.className.replace(isOpen, '');
384
+ } else {
385
+ optionsPayload.className += ' jasmine-open';
386
+ }
387
+ };
388
+
389
+ return optionsMenuDom;
390
+ }
391
+
392
+ function failureDescription(result, suite) {
393
+ var wrapper = createDom('div', {className: 'jasmine-description'},
394
+ createDom('a', {title: result.description, href: specHref(result)}, result.description)
395
+ );
396
+ var suiteLink;
397
+
398
+ while (suite && suite.parent) {
399
+ wrapper.insertBefore(createTextNode(' > '), wrapper.firstChild);
400
+ suiteLink = createDom('a', {href: suiteHref(suite)}, suite.result.description);
401
+ wrapper.insertBefore(suiteLink, wrapper.firstChild);
402
+
403
+ suite = suite.parent;
404
+ }
405
+
406
+ return wrapper;
407
+ }
408
+
409
+ function suiteHref(suite) {
410
+ var els = [];
411
+
412
+ while (suite && suite.parent) {
413
+ els.unshift(suite.result.description);
414
+ suite = suite.parent;
415
+ }
416
+
417
+ return addToExistingQueryString('spec', els.join(' '));
418
+ }
419
+
367
420
  function addDeprecationWarnings(result) {
368
421
  if (result && result.deprecationWarnings) {
369
422
  for(var i = 0; i < result.deprecationWarnings.length; i++) {
@@ -442,7 +495,7 @@ jasmineRequire.HtmlReporter = function(j$) {
442
495
  }
443
496
 
444
497
  function hasActiveSpec(resultNode) {
445
- if (resultNode.type == 'spec' && resultNode.result.status != 'disabled') {
498
+ if (resultNode.type == 'spec' && resultNode.result.status != 'excluded') {
446
499
  return true;
447
500
  }
448
501
 
@@ -487,6 +540,10 @@ jasmineRequire.ResultsNode = function() {
487
540
  this.last = function() {
488
541
  return this.children[this.children.length - 1];
489
542
  };
543
+
544
+ this.updateResult = function(result) {
545
+ this.result = result;
546
+ };
490
547
  }
491
548
 
492
549
  return ResultsNode;
@@ -543,3 +600,37 @@ jasmineRequire.QueryString = function() {
543
600
 
544
601
  return QueryString;
545
602
  };
603
+
604
+ jasmineRequire.toHaveClass = function(j$) {
605
+ /**
606
+ * {@link expect} the actual value to be a DOM element that has the expected class
607
+ * @function
608
+ * @name matchers#toHaveClass
609
+ * @param {Object} expected - The class name to test for
610
+ * @example
611
+ * var el = document.createElement('div');
612
+ * el.className = 'foo bar baz';
613
+ * expect(el).toHaveClass('bar');
614
+ */
615
+ function toHaveClass(util, customEqualityTesters) {
616
+ return {
617
+ compare: function(actual, expected) {
618
+ if (!isElement(actual)) {
619
+ throw new Error(j$.pp(actual) + ' is not a DOM element');
620
+ }
621
+
622
+ return {
623
+ pass: actual.classList.contains(expected)
624
+ };
625
+ }
626
+ };
627
+ }
628
+
629
+ function isElement(maybeEl) {
630
+ return maybeEl &&
631
+ maybeEl.classList &&
632
+ j$.isFunction_(maybeEl.classList.contains);
633
+ }
634
+
635
+ return toHaveClass;
636
+ };