jasmine-core 2.3.2 → 2.4.1

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.
package/CONTRIBUTING.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Developing for Jasmine Core
2
2
 
3
- We welcome your contributions! Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists before starting work. What you're looking for may already have been done. If it hasn't, the community can help make your contribution better.
3
+ We welcome your contributions! Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists before starting work. What you're looking for may already have been done. If it hasn't, the community can help make your contribution better. If you want to contribute but don't know what to work on, [issues tagged ready for work](https://github.com/jasmine/jasmine/labels/ready%20for%20work) should have enough detail to get started.
4
4
 
5
5
  ## Links
6
6
 
@@ -82,11 +82,11 @@ To install the Node dependencies, you will need Node.js, Npm, and [Grunt](http:/
82
82
 
83
83
  $ npm install --local
84
84
 
85
- ...will install all of the node modules locally. If when you run
85
+ ...will install all of the node modules locally. Now run
86
86
 
87
87
  $ grunt
88
88
 
89
- ...you see that JSHint runs your system is ready.
89
+ ...if you see that JSHint runs, your system is ready.
90
90
 
91
91
  ### How to write new Jasmine code
92
92
 
@@ -105,7 +105,7 @@ Follow these tips and your pull request, patch, or suggestion is much more likel
105
105
 
106
106
  Jasmine uses the [Jasmine Ruby gem](http://github.com/jasmine/jasmine-gem) to test itself in browser.
107
107
 
108
- $ rake jasmine
108
+ $ bundle exec rake jasmine
109
109
 
110
110
  ...and then visit `http://localhost:8888` to run specs.
111
111
 
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  <a name="README">[<img src="https://rawgithub.com/jasmine/jasmine/master/images/jasmine-horizontal.svg" width="400px" />](http://jasmine.github.io)</a>
2
2
 
3
- [![Build Status](https://travis-ci.org/jasmine/jasmine.png?branch=master)](https://travis-ci.org/jasmine/jasmine) [![Code Climate](https://codeclimate.com/github/pivotal/jasmine.png)](https://codeclimate.com/github/pivotal/jasmine)
3
+ [![Build Status](https://travis-ci.org/jasmine/jasmine.svg?branch=master)](https://travis-ci.org/jasmine/jasmine)
4
+ [![Code Climate](https://codeclimate.com/github/pivotal/jasmine.svg)](https://codeclimate.com/github/pivotal/jasmine)
4
5
 
5
6
  =======
6
7
 
@@ -28,22 +29,24 @@ For the Jasmine Ruby Gem:<br>
28
29
  For the Jasmine Python Egg:<br>
29
30
  [https://github.com/jasmine/jasmine-py](https://github.com/jasmine/jasmine-py)
30
31
 
31
- To install Jasmine on your local box:
32
+ To install Jasmine standalone on your local box:
32
33
 
33
- * Clone Jasmine - `git clone https://github.com/jasmine/jasmine.git`
34
+ * Download the standalone distribution for your desired release from the [releases page](https://github.com/jasmine/jasmine/releases)
34
35
  * Create a Jasmine directory in your project - `mkdir my-project/jasmine`
35
- * Move latest dist to your project directory - `mv jasmine/dist/jasmine-standalone-2.0.0.zip my-project/jasmine`
36
+ * Move the dist to your project directory - `mv jasmine/dist/jasmine-standalone-2.0.0.zip my-project/jasmine`
36
37
  * Change directory - `cd my-project/jasmine`
37
38
  * Unzip the dist - `unzip jasmine-standalone-2.0.0.zip`
38
39
 
39
40
  Add the following to your HTML file:
40
41
 
41
- <link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-2.0.0/jasmine_favicon.png">
42
- <link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-2.0.0/jasmine.css">
42
+ ```html
43
+ <link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-2.0.0/jasmine_favicon.png">
44
+ <link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-2.0.0/jasmine.css">
43
45
 
44
- <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
45
- <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine-html.js"></script>
46
- <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/boot.js"></script>
46
+ <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
47
+ <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine-html.js"></script>
48
+ <script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/boot.js"></script>
49
+ ```
47
50
 
48
51
  ## Supported environments
49
52
 
@@ -62,6 +65,8 @@ Jasmine tests itself across many browsers (Safari, Chrome, Firefox, PhantomJS, a
62
65
  * [Davis W. Frank](mailto:dwfrank@pivotal.io), Pivotal Labs
63
66
  * [Rajan Agaskar](mailto:rajan@pivotal.io), Pivotal Labs
64
67
  * [Gregg Van Hove](mailto:gvanhove@pivotal.io), Pivotal Labs
68
+ * [Greg Cobb](mailto:gcobb@pivotal.io), Pivotal Labs
69
+ * [Chris Amavisca](mailto:camavisca@pivotal.io), Pivotal Labs
65
70
 
66
71
  ### Maintainers Emeritus
67
72
 
package/RELEASE.md CHANGED
@@ -15,7 +15,7 @@ Please attempt to keep commits to `master` small, but cohesive. If a feature is
15
15
 
16
16
  We attempt to stick to [Semantic Versioning](http://semver.org/). Most of the time, development should be against a new minor version - fixing bugs and adding new features that are backwards compatible.
17
17
 
18
- The current version lives in the file `/package.json`. This version will be the version number that is currently released. When releasing a new version, update `package.json` and `bower.json` with the new version and `grunt build:copyVersionToGem` to update the gem version number.
18
+ The current version lives in the file `/package.json`. This version will be the version number that is currently released. When releasing a new version, update `package.json` with the new version and `grunt build:copyVersionToGem` to update the gem version number.
19
19
 
20
20
  This version is used by both `jasmine.js` and the `jasmine-core` Ruby gem.
21
21
 
package/bower.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "name": "jasmine-core",
3
- "version": "2.3.2",
4
3
  "homepage": "http://jasmine.github.io",
5
4
  "authors": [
6
5
  "slackersoft <gregg@slackersoft.net>"
@@ -77,6 +77,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
77
77
  var throwingExpectationFailures = queryString.getParam("throwFailures");
78
78
  env.throwOnExpectationFailure(throwingExpectationFailures);
79
79
 
80
+ var random = queryString.getParam("random");
81
+ env.randomizeTests(random);
82
+
83
+ var seed = queryString.getParam("seed");
84
+ if (seed) {
85
+ env.seed(seed);
86
+ }
87
+
80
88
  /**
81
89
  * ## Reporters
82
90
  * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any).
@@ -85,6 +93,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
85
93
  env: env,
86
94
  onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
87
95
  onThrowExpectationsClick: function() { queryString.navigateWithNewParam("throwFailures", !env.throwingExpectationFailures()); },
96
+ onRandomClick: function() { queryString.navigateWithNewParam("random", !env.randomTests()); },
88
97
  addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
89
98
  getContainer: function() { return document.body; },
90
99
  createElement: function() { return document.createElement.apply(document, arguments); },
@@ -41,6 +41,7 @@ jasmineRequire.HtmlReporter = function(j$) {
41
41
  createTextNode = options.createTextNode,
42
42
  onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
43
43
  onThrowExpectationsClick = options.onThrowExpectationsClick || function() {},
44
+ onRandomClick = options.onRandomClick || function() {},
44
45
  addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
45
46
  timer = options.timer || noopTimer,
46
47
  results = [],
@@ -54,19 +55,17 @@ jasmineRequire.HtmlReporter = function(j$) {
54
55
  this.initialize = function() {
55
56
  clearPrior();
56
57
  htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'},
57
- createDom('div', {className: 'banner'},
58
- createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}),
59
- createDom('span', {className: 'version'}, j$.version)
58
+ createDom('div', {className: 'jasmine-banner'},
59
+ createDom('a', {className: 'jasmine-title', href: 'http://jasmine.github.io/', target: '_blank'}),
60
+ createDom('span', {className: 'jasmine-version'}, j$.version)
60
61
  ),
61
- createDom('ul', {className: 'symbol-summary'}),
62
- createDom('div', {className: 'alert'}),
63
- createDom('div', {className: 'results'},
64
- createDom('div', {className: 'failures'})
62
+ createDom('ul', {className: 'jasmine-symbol-summary'}),
63
+ createDom('div', {className: 'jasmine-alert'}),
64
+ createDom('div', {className: 'jasmine-results'},
65
+ createDom('div', {className: 'jasmine-failures'})
65
66
  )
66
67
  );
67
68
  getContainer().appendChild(htmlReporterMain);
68
-
69
- symbols = find('.symbol-summary');
70
69
  };
71
70
 
72
71
  var totalSpecsDefined;
@@ -75,7 +74,7 @@ jasmineRequire.HtmlReporter = function(j$) {
75
74
  timer.start();
76
75
  };
77
76
 
78
- var summary = createDom('div', {className: 'summary'});
77
+ var summary = createDom('div', {className: 'jasmine-summary'});
79
78
 
80
79
  var topResults = new j$.ResultsNode({}, '', null),
81
80
  currentParent = topResults;
@@ -111,8 +110,12 @@ jasmineRequire.HtmlReporter = function(j$) {
111
110
  specsExecuted++;
112
111
  }
113
112
 
113
+ if (!symbols){
114
+ symbols = find('.jasmine-symbol-summary');
115
+ }
116
+
114
117
  symbols.appendChild(createDom('li', {
115
- className: noExpectations(result) ? 'empty' : result.status,
118
+ className: noExpectations(result) ? 'jasmine-empty' : 'jasmine-' + result.status,
116
119
  id: 'spec_' + result.id,
117
120
  title: result.fullName
118
121
  }
@@ -122,18 +125,18 @@ jasmineRequire.HtmlReporter = function(j$) {
122
125
  failureCount++;
123
126
 
124
127
  var failure =
125
- createDom('div', {className: 'spec-detail failed'},
126
- createDom('div', {className: 'description'},
128
+ createDom('div', {className: 'jasmine-spec-detail jasmine-failed'},
129
+ createDom('div', {className: 'jasmine-description'},
127
130
  createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName)
128
131
  ),
129
- createDom('div', {className: 'messages'})
132
+ createDom('div', {className: 'jasmine-messages'})
130
133
  );
131
134
  var messages = failure.childNodes[1];
132
135
 
133
136
  for (var i = 0; i < result.failedExpectations.length; i++) {
134
137
  var expectation = result.failedExpectations[i];
135
- messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message));
136
- messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack));
138
+ messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message));
139
+ messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack));
137
140
  }
138
141
 
139
142
  failures.push(failure);
@@ -144,86 +147,106 @@ jasmineRequire.HtmlReporter = function(j$) {
144
147
  }
145
148
  };
146
149
 
147
- this.jasmineDone = function() {
148
- var banner = find('.banner');
149
- var alert = find('.alert');
150
- alert.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));
150
+ this.jasmineDone = function(doneResult) {
151
+ var banner = find('.jasmine-banner');
152
+ var alert = find('.jasmine-alert');
153
+ var order = doneResult && doneResult.order;
154
+ alert.appendChild(createDom('span', {className: 'jasmine-duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));
151
155
 
152
156
  banner.appendChild(
153
- createDom('div', { className: 'run-options' },
154
- createDom('span', { className: 'trigger' }, 'Options'),
155
- createDom('div', { className: 'payload' },
156
- createDom('div', { className: 'exceptions' },
157
+ createDom('div', { className: 'jasmine-run-options' },
158
+ createDom('span', { className: 'jasmine-trigger' }, 'Options'),
159
+ createDom('div', { className: 'jasmine-payload' },
160
+ createDom('div', { className: 'jasmine-exceptions' },
161
+ createDom('input', {
162
+ className: 'jasmine-raise',
163
+ id: 'jasmine-raise-exceptions',
164
+ type: 'checkbox'
165
+ }),
166
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-raise-exceptions' }, 'raise exceptions')),
167
+ createDom('div', { className: 'jasmine-throw-failures' },
157
168
  createDom('input', {
158
- className: 'raise',
159
- id: 'raise-exceptions',
169
+ className: 'jasmine-throw',
170
+ id: 'jasmine-throw-failures',
160
171
  type: 'checkbox'
161
172
  }),
162
- createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions')),
163
- createDom('div', { className: 'throw-failures' },
173
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')),
174
+ createDom('div', { className: 'jasmine-random-order' },
164
175
  createDom('input', {
165
- className: 'throw',
166
- id: 'throw-failures',
176
+ className: 'jasmine-random',
177
+ id: 'jasmine-random-order',
167
178
  type: 'checkbox'
168
179
  }),
169
- createDom('label', { className: 'label', 'for': 'throw-failures' }, 'stop spec on expectation failure'))
180
+ createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order'))
170
181
  )
171
182
  ));
172
183
 
173
- var raiseCheckbox = find('#raise-exceptions');
184
+ var raiseCheckbox = find('#jasmine-raise-exceptions');
174
185
 
175
186
  raiseCheckbox.checked = !env.catchingExceptions();
176
187
  raiseCheckbox.onclick = onRaiseExceptionsClick;
177
188
 
178
- var throwCheckbox = find('#throw-failures');
189
+ var throwCheckbox = find('#jasmine-throw-failures');
179
190
  throwCheckbox.checked = env.throwingExpectationFailures();
180
191
  throwCheckbox.onclick = onThrowExpectationsClick;
181
192
 
182
- var optionsMenu = find('.run-options'),
183
- optionsTrigger = optionsMenu.querySelector('.trigger'),
184
- optionsPayload = optionsMenu.querySelector('.payload'),
185
- isOpen = /\bopen\b/;
193
+ var randomCheckbox = find('#jasmine-random-order');
194
+ randomCheckbox.checked = env.randomTests();
195
+ randomCheckbox.onclick = onRandomClick;
196
+
197
+ var optionsMenu = find('.jasmine-run-options'),
198
+ optionsTrigger = optionsMenu.querySelector('.jasmine-trigger'),
199
+ optionsPayload = optionsMenu.querySelector('.jasmine-payload'),
200
+ isOpen = /\bjasmine-open\b/;
186
201
 
187
202
  optionsTrigger.onclick = function() {
188
203
  if (isOpen.test(optionsPayload.className)) {
189
204
  optionsPayload.className = optionsPayload.className.replace(isOpen, '');
190
205
  } else {
191
- optionsPayload.className += ' open';
206
+ optionsPayload.className += ' jasmine-open';
192
207
  }
193
208
  };
194
209
 
195
210
  if (specsExecuted < totalSpecsDefined) {
196
211
  var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
197
212
  alert.appendChild(
198
- createDom('span', {className: 'bar skipped'},
213
+ createDom('span', {className: 'jasmine-bar jasmine-skipped'},
199
214
  createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage)
200
215
  )
201
216
  );
202
217
  }
203
218
  var statusBarMessage = '';
204
- var statusBarClassName = 'bar ';
219
+ var statusBarClassName = 'jasmine-bar ';
205
220
 
206
221
  if (totalSpecsDefined > 0) {
207
222
  statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount);
208
223
  if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); }
209
- statusBarClassName += (failureCount > 0) ? 'failed' : 'passed';
224
+ statusBarClassName += (failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed';
210
225
  } else {
211
- statusBarClassName += 'skipped';
226
+ statusBarClassName += 'jasmine-skipped';
212
227
  statusBarMessage += 'No specs found';
213
228
  }
214
229
 
215
- alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage));
230
+ var seedBar;
231
+ if (order && order.random) {
232
+ seedBar = createDom('span', {className: 'jasmine-seed-bar'},
233
+ ', randomized with seed ',
234
+ createDom('a', {title: 'randomized with seed ' + order.seed, href: seedHref(order.seed)}, order.seed)
235
+ );
236
+ }
237
+
238
+ alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage, seedBar));
216
239
 
217
240
  for(i = 0; i < failedSuites.length; i++) {
218
241
  var failedSuite = failedSuites[i];
219
242
  for(var j = 0; j < failedSuite.failedExpectations.length; j++) {
220
243
  var errorBarMessage = 'AfterAll ' + failedSuite.failedExpectations[j].message;
221
- var errorBarClassName = 'bar errored';
244
+ var errorBarClassName = 'jasmine-bar jasmine-errored';
222
245
  alert.appendChild(createDom('span', {className: errorBarClassName}, errorBarMessage));
223
246
  }
224
247
  }
225
248
 
226
- var results = find('.results');
249
+ var results = find('.jasmine-results');
227
250
  results.appendChild(summary);
228
251
 
229
252
  summaryList(topResults, summary);
@@ -233,8 +256,8 @@ jasmineRequire.HtmlReporter = function(j$) {
233
256
  for (var i = 0; i < resultsTree.children.length; i++) {
234
257
  var resultNode = resultsTree.children[i];
235
258
  if (resultNode.type == 'suite') {
236
- var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id},
237
- createDom('li', {className: 'suite-detail'},
259
+ var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id},
260
+ createDom('li', {className: 'jasmine-suite-detail'},
238
261
  createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)
239
262
  )
240
263
  );
@@ -243,8 +266,8 @@ jasmineRequire.HtmlReporter = function(j$) {
243
266
  domParent.appendChild(suiteListNode);
244
267
  }
245
268
  if (resultNode.type == 'spec') {
246
- if (domParent.getAttribute('class') != 'specs') {
247
- specListNode = createDom('ul', {className: 'specs'});
269
+ if (domParent.getAttribute('class') != 'jasmine-specs') {
270
+ specListNode = createDom('ul', {className: 'jasmine-specs'});
248
271
  domParent.appendChild(specListNode);
249
272
  }
250
273
  var specDescription = resultNode.result.description;
@@ -256,7 +279,7 @@ jasmineRequire.HtmlReporter = function(j$) {
256
279
  }
257
280
  specListNode.appendChild(
258
281
  createDom('li', {
259
- className: resultNode.result.status,
282
+ className: 'jasmine-' + resultNode.result.status,
260
283
  id: 'spec-' + resultNode.result.id
261
284
  },
262
285
  createDom('a', {href: specHref(resultNode.result)}, specDescription)
@@ -268,24 +291,24 @@ jasmineRequire.HtmlReporter = function(j$) {
268
291
 
269
292
  if (failures.length) {
270
293
  alert.appendChild(
271
- createDom('span', {className: 'menu bar spec-list'},
294
+ createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-spec-list'},
272
295
  createDom('span', {}, 'Spec List | '),
273
- createDom('a', {className: 'failures-menu', href: '#'}, 'Failures')));
296
+ createDom('a', {className: 'jasmine-failures-menu', href: '#'}, 'Failures')));
274
297
  alert.appendChild(
275
- createDom('span', {className: 'menu bar failure-list'},
276
- createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'),
298
+ createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-failure-list'},
299
+ createDom('a', {className: 'jasmine-spec-list-menu', href: '#'}, 'Spec List'),
277
300
  createDom('span', {}, ' | Failures ')));
278
301
 
279
- find('.failures-menu').onclick = function() {
280
- setMenuModeTo('failure-list');
302
+ find('.jasmine-failures-menu').onclick = function() {
303
+ setMenuModeTo('jasmine-failure-list');
281
304
  };
282
- find('.spec-list-menu').onclick = function() {
283
- setMenuModeTo('spec-list');
305
+ find('.jasmine-spec-list-menu').onclick = function() {
306
+ setMenuModeTo('jasmine-spec-list');
284
307
  };
285
308
 
286
- setMenuModeTo('failure-list');
309
+ setMenuModeTo('jasmine-failure-list');
287
310
 
288
- var failureNode = find('.failures');
311
+ var failureNode = find('.jasmine-failures');
289
312
  for (var i = 0; i < failures.length; i++) {
290
313
  failureNode.appendChild(failures[i]);
291
314
  }
@@ -343,6 +366,10 @@ jasmineRequire.HtmlReporter = function(j$) {
343
366
  return addToExistingQueryString('spec', result.fullName);
344
367
  }
345
368
 
369
+ function seedHref(seed) {
370
+ return addToExistingQueryString('seed', seed);
371
+ }
372
+
346
373
  function defaultQueryString(key, value) {
347
374
  return '?' + key + '=' + value;
348
375
  }
@@ -4,62 +4,55 @@ body { overflow-y: scroll; }
4
4
  .jasmine_html-reporter a { text-decoration: none; }
5
5
  .jasmine_html-reporter a:hover { text-decoration: underline; }
6
6
  .jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; }
7
- .jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
8
- .jasmine_html-reporter .banner { position: relative; }
9
- .jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }
10
- .jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; }
7
+ .jasmine_html-reporter .jasmine-banner, .jasmine_html-reporter .jasmine-symbol-summary, .jasmine_html-reporter .jasmine-summary, .jasmine_html-reporter .jasmine-result-message, .jasmine_html-reporter .jasmine-spec .jasmine-description, .jasmine_html-reporter .jasmine-spec-detail .jasmine-description, .jasmine_html-reporter .jasmine-alert .jasmine-bar, .jasmine_html-reporter .jasmine-stack-trace { padding-left: 9px; padding-right: 9px; }
8
+ .jasmine_html-reporter .jasmine-banner { position: relative; }
9
+ .jasmine_html-reporter .jasmine-banner .jasmine-title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }
10
+ .jasmine_html-reporter .jasmine-banner .jasmine-version { margin-left: 14px; position: relative; top: 6px; }
11
11
  .jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }
12
- .jasmine_html-reporter .version { color: #aaa; }
13
- .jasmine_html-reporter .banner { margin-top: 14px; }
14
- .jasmine_html-reporter .duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; }
15
- .jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
16
- .jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
17
- .jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; }
18
- .jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; }
19
- .jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; }
20
- .jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; }
21
- .jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; }
22
- .jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
23
- .jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; }
24
- .jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
25
- .jasmine_html-reporter .symbol-summary li.empty { font-size: 14px; }
26
- .jasmine_html-reporter .symbol-summary li.empty:before { color: #ba9d37; content: "\02022"; }
27
- .jasmine_html-reporter .run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; }
28
- .jasmine_html-reporter .run-options .trigger { cursor: pointer; padding: 8px 16px; }
29
- .jasmine_html-reporter .run-options .payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; }
30
- .jasmine_html-reporter .run-options .payload.open { display: block; }
31
- .jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
32
- .jasmine_html-reporter .bar.failed { background-color: #ca3a11; }
33
- .jasmine_html-reporter .bar.passed { background-color: #007069; }
34
- .jasmine_html-reporter .bar.skipped { background-color: #bababa; }
35
- .jasmine_html-reporter .bar.errored { background-color: #ca3a11; }
36
- .jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; }
37
- .jasmine_html-reporter .bar.menu a { color: #333; }
38
- .jasmine_html-reporter .bar a { color: white; }
39
- .jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; }
40
- .jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; }
41
- .jasmine_html-reporter .running-alert { background-color: #666; }
42
- .jasmine_html-reporter .results { margin-top: 14px; }
43
- .jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
44
- .jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
45
- .jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
46
- .jasmine_html-reporter.showDetails .summary { display: none; }
47
- .jasmine_html-reporter.showDetails #details { display: block; }
48
- .jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
49
- .jasmine_html-reporter .summary { margin-top: 14px; }
50
- .jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
51
- .jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
52
- .jasmine_html-reporter .summary li.passed a { color: #007069; }
53
- .jasmine_html-reporter .summary li.failed a { color: #ca3a11; }
54
- .jasmine_html-reporter .summary li.empty a { color: #ba9d37; }
55
- .jasmine_html-reporter .summary li.pending a { color: #ba9d37; }
56
- .jasmine_html-reporter .summary li.disabled a { color: #bababa; }
57
- .jasmine_html-reporter .description + .suite { margin-top: 0; }
58
- .jasmine_html-reporter .suite { margin-top: 14px; }
59
- .jasmine_html-reporter .suite a { color: #333; }
60
- .jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; }
61
- .jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; }
62
- .jasmine_html-reporter .failures .spec-detail .description a { color: white; }
63
- .jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; }
64
- .jasmine_html-reporter .result-message span.result { display: block; }
65
- .jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; }
12
+ .jasmine_html-reporter .jasmine-version { color: #aaa; }
13
+ .jasmine_html-reporter .jasmine-banner { margin-top: 14px; }
14
+ .jasmine_html-reporter .jasmine-duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; }
15
+ .jasmine_html-reporter .jasmine-symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
16
+ .jasmine_html-reporter .jasmine-symbol-summary li { display: inline-block; height: 10px; width: 14px; font-size: 16px; }
17
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed { font-size: 14px; }
18
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed:before { color: #007069; content: "\02022"; }
19
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed { line-height: 9px; }
20
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; }
21
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled { font-size: 14px; }
22
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-disabled:before { color: #bababa; content: "\02022"; }
23
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending { line-height: 17px; }
24
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending:before { color: #ba9d37; content: "*"; }
25
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty { font-size: 14px; }
26
+ .jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty:before { color: #ba9d37; content: "\02022"; }
27
+ .jasmine_html-reporter .jasmine-run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; }
28
+ .jasmine_html-reporter .jasmine-run-options .jasmine-trigger { cursor: pointer; padding: 8px 16px; }
29
+ .jasmine_html-reporter .jasmine-run-options .jasmine-payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; }
30
+ .jasmine_html-reporter .jasmine-run-options .jasmine-payload.jasmine-open { display: block; }
31
+ .jasmine_html-reporter .jasmine-bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
32
+ .jasmine_html-reporter .jasmine-bar.jasmine-failed { background-color: #ca3a11; }
33
+ .jasmine_html-reporter .jasmine-bar.jasmine-passed { background-color: #007069; }
34
+ .jasmine_html-reporter .jasmine-bar.jasmine-skipped { background-color: #bababa; }
35
+ .jasmine_html-reporter .jasmine-bar.jasmine-errored { background-color: #ca3a11; }
36
+ .jasmine_html-reporter .jasmine-bar.jasmine-menu { background-color: #fff; color: #aaa; }
37
+ .jasmine_html-reporter .jasmine-bar.jasmine-menu a { color: #333; }
38
+ .jasmine_html-reporter .jasmine-bar a { color: white; }
39
+ .jasmine_html-reporter.jasmine-spec-list .jasmine-bar.jasmine-menu.jasmine-failure-list, .jasmine_html-reporter.jasmine-spec-list .jasmine-results .jasmine-failures { display: none; }
40
+ .jasmine_html-reporter.jasmine-failure-list .jasmine-bar.jasmine-menu.jasmine-spec-list, .jasmine_html-reporter.jasmine-failure-list .jasmine-summary { display: none; }
41
+ .jasmine_html-reporter .jasmine-results { margin-top: 14px; }
42
+ .jasmine_html-reporter .jasmine-summary { margin-top: 14px; }
43
+ .jasmine_html-reporter .jasmine-summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
44
+ .jasmine_html-reporter .jasmine-summary ul.jasmine-suite { margin-top: 7px; margin-bottom: 7px; }
45
+ .jasmine_html-reporter .jasmine-summary li.jasmine-passed a { color: #007069; }
46
+ .jasmine_html-reporter .jasmine-summary li.jasmine-failed a { color: #ca3a11; }
47
+ .jasmine_html-reporter .jasmine-summary li.jasmine-empty a { color: #ba9d37; }
48
+ .jasmine_html-reporter .jasmine-summary li.jasmine-pending a { color: #ba9d37; }
49
+ .jasmine_html-reporter .jasmine-summary li.jasmine-disabled a { color: #bababa; }
50
+ .jasmine_html-reporter .jasmine-description + .jasmine-suite { margin-top: 0; }
51
+ .jasmine_html-reporter .jasmine-suite { margin-top: 14px; }
52
+ .jasmine_html-reporter .jasmine-suite a { color: #333; }
53
+ .jasmine_html-reporter .jasmine-failures .jasmine-spec-detail { margin-bottom: 28px; }
54
+ .jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description { background-color: #ca3a11; }
55
+ .jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description a { color: white; }
56
+ .jasmine_html-reporter .jasmine-result-message { padding-top: 14px; color: #333; white-space: pre; }
57
+ .jasmine_html-reporter .jasmine-result-message span.jasmine-result { display: block; }
58
+ .jasmine_html-reporter .jasmine-stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; }
@@ -24,7 +24,11 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
24
24
  var jasmineRequire;
25
25
 
26
26
  if (typeof module !== 'undefined' && module.exports) {
27
- jasmineGlobal = global;
27
+ if (typeof global !== 'undefined') {
28
+ jasmineGlobal = global;
29
+ } else {
30
+ jasmineGlobal = {};
31
+ }
28
32
  jasmineRequire = exports;
29
33
  } else {
30
34
  if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') {
@@ -68,6 +72,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
68
72
  j$.Timer = jRequire.Timer();
69
73
  j$.TreeProcessor = jRequire.TreeProcessor();
70
74
  j$.version = jRequire.version();
75
+ j$.Order = jRequire.Order();
71
76
 
72
77
  j$.matchers = jRequire.requireMatchers(jRequire, j$);
73
78
 
@@ -93,6 +98,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
93
98
  'toEqual',
94
99
  'toHaveBeenCalled',
95
100
  'toHaveBeenCalledWith',
101
+ 'toHaveBeenCalledTimes',
96
102
  'toMatch',
97
103
  'toThrow',
98
104
  'toThrowError'
@@ -447,6 +453,53 @@ if (typeof window == void 0 && typeof exports == 'object') {
447
453
  exports.Spec = jasmineRequire.Spec;
448
454
  }
449
455
 
456
+ /*jshint bitwise: false*/
457
+
458
+ getJasmineRequireObj().Order = function() {
459
+ function Order(options) {
460
+ this.random = 'random' in options ? options.random : true;
461
+ var seed = this.seed = options.seed || generateSeed();
462
+ this.sort = this.random ? randomOrder : naturalOrder;
463
+
464
+ function naturalOrder(items) {
465
+ return items;
466
+ }
467
+
468
+ function randomOrder(items) {
469
+ var copy = items.slice();
470
+ copy.sort(function(a, b) {
471
+ return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id);
472
+ });
473
+ return copy;
474
+ }
475
+
476
+ function generateSeed() {
477
+ return String(Math.random()).slice(-5);
478
+ }
479
+
480
+ // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function
481
+ // used to get a different output when the key changes slighly.
482
+ // We use your return to sort the children randomly in a consistent way when
483
+ // used in conjunction with a seed
484
+
485
+ function jenkinsHash(key) {
486
+ var hash, i;
487
+ for(hash = i = 0; i < key.length; ++i) {
488
+ hash += key.charCodeAt(i);
489
+ hash += (hash << 10);
490
+ hash ^= (hash >> 6);
491
+ }
492
+ hash += (hash << 3);
493
+ hash ^= (hash >> 11);
494
+ hash += (hash << 15);
495
+ return hash;
496
+ }
497
+
498
+ }
499
+
500
+ return Order;
501
+ };
502
+
450
503
  getJasmineRequireObj().Env = function(j$) {
451
504
  function Env(options) {
452
505
  options = options || {};
@@ -469,6 +522,8 @@ getJasmineRequireObj().Env = function(j$) {
469
522
  var currentlyExecutingSuites = [];
470
523
  var currentDeclarationSuite = null;
471
524
  var throwOnExpectationFailure = false;
525
+ var random = false;
526
+ var seed = null;
472
527
 
473
528
  var currentSuite = function() {
474
529
  return currentlyExecutingSuites[currentlyExecutingSuites.length - 1];
@@ -618,6 +673,21 @@ getJasmineRequireObj().Env = function(j$) {
618
673
  return throwOnExpectationFailure;
619
674
  };
620
675
 
676
+ this.randomizeTests = function(value) {
677
+ random = !!value;
678
+ };
679
+
680
+ this.randomTests = function() {
681
+ return random;
682
+ };
683
+
684
+ this.seed = function(value) {
685
+ if (value) {
686
+ seed = value;
687
+ }
688
+ return seed;
689
+ };
690
+
621
691
  var queueRunnerFactory = function(options) {
622
692
  options.catchException = catchException;
623
693
  options.clearStack = options.clearStack || clearStack;
@@ -649,6 +719,12 @@ getJasmineRequireObj().Env = function(j$) {
649
719
  runnablesToRun = [topSuite.id];
650
720
  }
651
721
  }
722
+
723
+ var order = new j$.Order({
724
+ random: random,
725
+ seed: seed
726
+ });
727
+
652
728
  var processor = new j$.TreeProcessor({
653
729
  tree: topSuite,
654
730
  runnableIds: runnablesToRun,
@@ -664,6 +740,9 @@ getJasmineRequireObj().Env = function(j$) {
664
740
  }
665
741
  currentlyExecutingSuites.pop();
666
742
  reporter.suiteDone(result);
743
+ },
744
+ orderChildren: function(node) {
745
+ return order.sort(node.children);
667
746
  }
668
747
  });
669
748
 
@@ -675,7 +754,11 @@ getJasmineRequireObj().Env = function(j$) {
675
754
  totalSpecsDefined: totalSpecsDefined
676
755
  });
677
756
 
678
- processor.execute(reporter.jasmineDone);
757
+ processor.execute(function() {
758
+ reporter.jasmineDone({
759
+ order: order
760
+ });
761
+ });
679
762
  };
680
763
 
681
764
  this.addReporter = function(reporterToAdd) {
@@ -710,13 +793,20 @@ getJasmineRequireObj().Env = function(j$) {
710
793
 
711
794
  this.describe = function(description, specDefinitions) {
712
795
  var suite = suiteFactory(description);
796
+ if (specDefinitions.length > 0) {
797
+ throw new Error('describe does not expect a done parameter');
798
+ }
799
+ if (currentDeclarationSuite.markedPending) {
800
+ suite.pend();
801
+ }
713
802
  addSpecsToSuite(suite, specDefinitions);
714
803
  return suite;
715
804
  };
716
805
 
717
806
  this.xdescribe = function(description, specDefinitions) {
718
- var suite = this.describe(description, specDefinitions);
719
- suite.disable();
807
+ var suite = suiteFactory(description);
808
+ suite.pend();
809
+ addSpecsToSuite(suite, specDefinitions);
720
810
  return suite;
721
811
  };
722
812
 
@@ -822,19 +912,22 @@ getJasmineRequireObj().Env = function(j$) {
822
912
 
823
913
  this.it = function(description, fn, timeout) {
824
914
  var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
915
+ if (currentDeclarationSuite.markedPending) {
916
+ spec.pend();
917
+ }
825
918
  currentDeclarationSuite.addChild(spec);
826
919
  return spec;
827
920
  };
828
921
 
829
922
  this.xit = function() {
830
923
  var spec = this.it.apply(this, arguments);
831
- spec.pend();
924
+ spec.pend('Temporarily disabled with xit');
832
925
  return spec;
833
926
  };
834
927
 
835
- this.fit = function(){
836
- var spec = this.it.apply(this, arguments);
837
-
928
+ this.fit = function(description, fn, timeout){
929
+ var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
930
+ currentDeclarationSuite.addChild(spec);
838
931
  focusedRunnables.push(spec.id);
839
932
  unfocusAncestor();
840
933
  return spec;
@@ -918,6 +1011,7 @@ getJasmineRequireObj().JsApiReporter = function() {
918
1011
 
919
1012
  this.started = false;
920
1013
  this.finished = false;
1014
+ this.runDetails = {};
921
1015
 
922
1016
  this.jasmineStarted = function() {
923
1017
  this.started = true;
@@ -927,8 +1021,9 @@ getJasmineRequireObj().JsApiReporter = function() {
927
1021
 
928
1022
  var executionTime;
929
1023
 
930
- this.jasmineDone = function() {
1024
+ this.jasmineDone = function(runDetails) {
931
1025
  this.finished = true;
1026
+ this.runDetails = runDetails;
932
1027
  executionTime = timer.elapsed();
933
1028
  status = 'done';
934
1029
  };
@@ -1606,6 +1701,8 @@ getJasmineRequireObj().pp = function(j$) {
1606
1701
  this.emitScalar('HTMLNode');
1607
1702
  } else if (value instanceof Date) {
1608
1703
  this.emitScalar('Date(' + value + ')');
1704
+ } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) {
1705
+ this.emitScalar(value.toString());
1609
1706
  } else if (j$.util.arrayContains(this.seen, value)) {
1610
1707
  this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
1611
1708
  } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
@@ -1810,7 +1907,7 @@ getJasmineRequireObj().QueueRunner = function(j$) {
1810
1907
  if (queueableFn.timeout) {
1811
1908
  timeoutId = Function.prototype.apply.apply(self.timeout.setTimeout, [j$.getGlobal(), [function() {
1812
1909
  var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.');
1813
- onException(error, queueableFn);
1910
+ onException(error);
1814
1911
  next();
1815
1912
  }, queueableFn.timeout()]]);
1816
1913
  }
@@ -1823,12 +1920,12 @@ getJasmineRequireObj().QueueRunner = function(j$) {
1823
1920
  }
1824
1921
  }
1825
1922
 
1826
- function onException(e, queueableFn) {
1923
+ function onException(e) {
1827
1924
  self.onException(e);
1828
1925
  }
1829
1926
 
1830
1927
  function handleException(e, queueableFn) {
1831
- onException(e, queueableFn);
1928
+ onException(e);
1832
1929
  if (!self.catchException(e)) {
1833
1930
  //TODO: set a var when we catch an exception and
1834
1931
  //use a finally block to close the loop in a nice way..
@@ -1900,6 +1997,17 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
1900
1997
  throw new Error(methodName + ' has already been spied upon');
1901
1998
  }
1902
1999
 
2000
+ var descriptor;
2001
+ try {
2002
+ descriptor = Object.getOwnPropertyDescriptor(obj, methodName);
2003
+ } catch(e) {
2004
+ // IE 8 doesn't support `definePropery` on non-DOM nodes
2005
+ }
2006
+
2007
+ if (descriptor && !(descriptor.writable || descriptor.set)) {
2008
+ throw new Error(methodName + ' is not declared writable or has no setter');
2009
+ }
2010
+
1903
2011
  var spy = j$.createSpy(methodName, obj[methodName]);
1904
2012
 
1905
2013
  currentSpies().push({
@@ -2030,6 +2138,10 @@ getJasmineRequireObj().Suite = function(j$) {
2030
2138
  this.disabled = true;
2031
2139
  };
2032
2140
 
2141
+ Suite.prototype.pend = function(message) {
2142
+ this.markedPending = true;
2143
+ };
2144
+
2033
2145
  Suite.prototype.beforeEach = function(fn) {
2034
2146
  this.beforeFns.unshift(fn);
2035
2147
  };
@@ -2055,6 +2167,10 @@ getJasmineRequireObj().Suite = function(j$) {
2055
2167
  return 'disabled';
2056
2168
  }
2057
2169
 
2170
+ if (this.markedPending) {
2171
+ return 'pending';
2172
+ }
2173
+
2058
2174
  if (this.result.failedExpectations.length > 0) {
2059
2175
  return 'failed';
2060
2176
  } else {
@@ -2184,6 +2300,7 @@ getJasmineRequireObj().TreeProcessor = function() {
2184
2300
  queueRunnerFactory = attrs.queueRunnerFactory,
2185
2301
  nodeStart = attrs.nodeStart || function() {},
2186
2302
  nodeComplete = attrs.nodeComplete || function() {},
2303
+ orderChildren = attrs.orderChildren || function(node) { return node.children; },
2187
2304
  stats = { valid: true },
2188
2305
  processed = false,
2189
2306
  defaultMin = Infinity,
@@ -2208,6 +2325,7 @@ getJasmineRequireObj().TreeProcessor = function() {
2208
2325
 
2209
2326
  queueRunnerFactory({
2210
2327
  queueableFns: childFns,
2328
+ userContext: tree.sharedUserContext(),
2211
2329
  onException: function() {
2212
2330
  tree.onException.apply(tree, arguments);
2213
2331
  },
@@ -2246,8 +2364,10 @@ getJasmineRequireObj().TreeProcessor = function() {
2246
2364
  } else {
2247
2365
  var hasExecutableChild = false;
2248
2366
 
2249
- for (var i = 0; i < node.children.length; i++) {
2250
- var child = node.children[i];
2367
+ var orderedChildren = orderChildren(node);
2368
+
2369
+ for (var i = 0; i < orderedChildren.length; i++) {
2370
+ var child = orderedChildren[i];
2251
2371
 
2252
2372
  processNode(child, parentEnabled);
2253
2373
 
@@ -2264,7 +2384,7 @@ getJasmineRequireObj().TreeProcessor = function() {
2264
2384
  executable: hasExecutableChild
2265
2385
  };
2266
2386
 
2267
- segmentChildren(node, stats[node.id], executableIndex);
2387
+ segmentChildren(node, orderedChildren, stats[node.id], executableIndex);
2268
2388
 
2269
2389
  if (!node.canBeReentered() && stats[node.id].segments.length > 1) {
2270
2390
  stats = { valid: false };
@@ -2280,11 +2400,11 @@ getJasmineRequireObj().TreeProcessor = function() {
2280
2400
  return executableIndex === undefined ? defaultMax : executableIndex;
2281
2401
  }
2282
2402
 
2283
- function segmentChildren(node, nodeStats, executableIndex) {
2403
+ function segmentChildren(node, orderedChildren, nodeStats, executableIndex) {
2284
2404
  var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) },
2285
2405
  result = [currentSegment],
2286
2406
  lastMax = defaultMax,
2287
- orderedChildSegments = orderChildSegments(node.children);
2407
+ orderedChildSegments = orderChildSegments(orderedChildren);
2288
2408
 
2289
2409
  function isSegmentBoundary(minIndex) {
2290
2410
  return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1;
@@ -2310,30 +2430,29 @@ getJasmineRequireObj().TreeProcessor = function() {
2310
2430
  }
2311
2431
 
2312
2432
  function orderChildSegments(children) {
2313
- var result = [];
2433
+ var specifiedOrder = [],
2434
+ unspecifiedOrder = [];
2314
2435
 
2315
2436
  for (var i = 0; i < children.length; i++) {
2316
2437
  var child = children[i],
2317
2438
  segments = stats[child.id].segments;
2318
2439
 
2319
2440
  for (var j = 0; j < segments.length; j++) {
2320
- result.push(segments[j]);
2321
- }
2322
- }
2323
-
2324
- result.sort(function(a, b) {
2325
- if (a.min === null) {
2326
- return b.min === null ? 0 : 1;
2327
- }
2441
+ var seg = segments[j];
2328
2442
 
2329
- if (b.min === null) {
2330
- return -1;
2443
+ if (seg.min === defaultMin) {
2444
+ unspecifiedOrder.push(seg);
2445
+ } else {
2446
+ specifiedOrder.push(seg);
2447
+ }
2331
2448
  }
2449
+ }
2332
2450
 
2451
+ specifiedOrder.sort(function(a, b) {
2333
2452
  return a.min - b.min;
2334
2453
  });
2335
2454
 
2336
- return result;
2455
+ return specifiedOrder.concat(unspecifiedOrder);
2337
2456
  }
2338
2457
 
2339
2458
  function executeNode(node, segmentNumber) {
@@ -2384,6 +2503,12 @@ getJasmineRequireObj().TreeProcessor = function() {
2384
2503
  getJasmineRequireObj().Any = function(j$) {
2385
2504
 
2386
2505
  function Any(expectedObject) {
2506
+ if (typeof expectedObject === 'undefined') {
2507
+ throw new TypeError(
2508
+ 'jasmine.any() expects to be passed a constructor function. ' +
2509
+ 'Please pass one or use jasmine.anything() to match any object.'
2510
+ );
2511
+ }
2387
2512
  this.expectedObject = expectedObject;
2388
2513
  }
2389
2514
 
@@ -2976,6 +3101,37 @@ getJasmineRequireObj().toHaveBeenCalled = function(j$) {
2976
3101
  return toHaveBeenCalled;
2977
3102
  };
2978
3103
 
3104
+ getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) {
3105
+
3106
+ function toHaveBeenCalledTimes() {
3107
+ return {
3108
+ compare: function(actual, expected) {
3109
+ if (!j$.isSpy(actual)) {
3110
+ throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
3111
+ }
3112
+
3113
+ var args = Array.prototype.slice.call(arguments, 0),
3114
+ result = { pass: false };
3115
+
3116
+ if(!expected){
3117
+ throw new Error('Expected times failed is required as an argument.');
3118
+ }
3119
+
3120
+ actual = args[0];
3121
+ var calls = actual.calls.count();
3122
+ var timesMessage = expected === 1 ? 'once' : expected + ' times';
3123
+ result.pass = calls === expected;
3124
+ result.message = result.pass ?
3125
+ 'Expected spy ' + actual.and.identity() + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' :
3126
+ 'Expected spy ' + actual.and.identity() + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.';
3127
+ return result;
3128
+ }
3129
+ };
3130
+ }
3131
+
3132
+ return toHaveBeenCalledTimes;
3133
+ };
3134
+
2979
3135
  getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
2980
3136
 
2981
3137
  function toHaveBeenCalledWith(util, customEqualityTesters) {
@@ -3079,7 +3235,7 @@ getJasmineRequireObj().toThrow = function(j$) {
3079
3235
  };
3080
3236
 
3081
3237
  getJasmineRequireObj().toThrowError = function(j$) {
3082
- function toThrowError (util) {
3238
+ function toThrowError () {
3083
3239
  return {
3084
3240
  compare: function(actual) {
3085
3241
  var threw = false,
@@ -3294,5 +3450,5 @@ getJasmineRequireObj().interface = function(jasmine, env) {
3294
3450
  };
3295
3451
 
3296
3452
  getJasmineRequireObj().version = function() {
3297
- return '2.3.2';
3453
+ return '2.4.1';
3298
3454
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "jasmine-core",
3
3
  "license": "MIT",
4
- "version": "2.3.2",
4
+ "version": "2.4.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/jasmine/jasmine.git"
@@ -19,14 +19,14 @@
19
19
  "homepage": "http://jasmine.github.io",
20
20
  "main": "./lib/jasmine-core.js",
21
21
  "devDependencies": {
22
- "glob": "~3.2.9",
22
+ "glob": "~5.0.13",
23
23
  "grunt": "~0.4.1",
24
24
  "grunt-cli": "^0.1.13",
25
25
  "grunt-contrib-compass": "~0.6.0",
26
26
  "grunt-contrib-compress": "~0.5.2",
27
27
  "grunt-contrib-concat": "~0.3.0",
28
28
  "grunt-contrib-jshint": "~0.7.0",
29
- "jasmine": "https://github.com/jasmine/jasmine-npm/archive/master.tar.gz",
29
+ "jasmine": "git://github.com/jasmine/jasmine-npm.git",
30
30
  "load-grunt-tasks": "^0.4.0",
31
31
  "shelljs": "~0.1.4",
32
32
  "temp": "~0.8.1"
package/GOALS_2.0.md DELETED
@@ -1,64 +0,0 @@
1
- # (Vague) Jasmine 2.0 Goals/(Guidelines)
2
-
3
- 1. No globals!
4
- * jasmine library is entirely inside `jasmine` namespace
5
- * globals required for backwards compatibility should be added in `boot.js` (EG, var describe = jasmine.getCurrentEnv().describe lives in boot.js)
6
- 1. Don't use properties as getters. Use methods.
7
- * Properties aren't encapsulated -- can be mutated, unsafe.
8
- 1. Reporters get data objects (no methods).
9
- * easier to refactor as needed
10
- 1. More unit tests - fewer nasty integration tests
11
-
12
- ## Remaining non-story-able work:
13
- * Make a `TODO` list
14
-
15
- ### Hard
16
- * Finish killing Globals
17
- * Guidelines:
18
- * New objects can have constructors on `jasmine`
19
- * Top level functions can live on `jasmine`
20
- * Top level (i.e., any `jasmine` property) should only be referenced inside the `Env` constructor
21
- * should better allow any object to get jasmine code (Node-friendly)
22
- * review everything in base.js
23
- * Remove isA functions:
24
- * isArray_ - used in matchers and spies
25
- * isString_
26
- * isDOMNode_
27
- * isA_
28
- * unimplementedMethod_, used by PrettyPrinter
29
- * jasmine.util should be util closure inside of env or something
30
- * argsToArray is used for Spies and matching (and can be replaced)
31
- * inherit is only for PrettyPrinter now
32
- * formatException is used only inside Env/spec
33
- * htmlEscape is for messages in matchers - should this be HTML at all?
34
- * Pretty printing
35
- * move away from pretty printer and to a JSON.stringify implementation?
36
- * jasmineToString vs. custom toString ?
37
-
38
- ### Easy
39
-
40
- * unify params to ctors: options vs. attrs.
41
- * This will be a lot of the TODOs, but clean up & simplify Env.js (is this a 2.1 task?)
42
-
43
- ### DONE
44
- * Matchers improvements
45
- * unit testable DONE
46
- * better equality (from Underscore) DONE
47
- * addCustomMatchers doesn't explode stack DONE
48
- * refactor equals function so that it just loops & recurses over a list of fns (custom and built-in) - 2.1? (Tracker story)
49
- * Spies
50
- * break these out into their own tests/file DONE
51
-
52
-
53
- ## Other Topics
54
-
55
- * Docs
56
- * Docco has gone over well. Should we annotate all the sources and then have Pages be more complex, having tutorials and annotated source like Backbone? Are we small enough?
57
- * Need examples for:
58
- * How to build a Custom Matcher
59
- * How to add a custom equality tester
60
-
61
-
62
-
63
-
64
-