jasmine-core 2.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/console/console.js +1 -1
- data/lib/jasmine-core/boot.js +3 -2
- data/lib/jasmine-core/boot/boot.js +2 -1
- data/lib/jasmine-core/example/node_example/{src → lib/jasmine_examples}/Player.js +0 -0
- data/lib/jasmine-core/example/node_example/{src → lib/jasmine_examples}/Song.js +0 -0
- data/lib/jasmine-core/example/node_example/spec/{SpecHelper.js → helpers/jasmine_examples/SpecHelper.js} +0 -0
- data/lib/jasmine-core/example/node_example/spec/{PlayerSpec.js → jasmine_examples/PlayerSpec.js} +2 -2
- data/lib/jasmine-core/jasmine-html.js +17 -5
- data/lib/jasmine-core/jasmine.css +10 -10
- data/lib/jasmine-core/jasmine.js +295 -155
- data/lib/jasmine-core/node_boot.js +1 -1
- data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +37 -0
- data/lib/jasmine-core/spec/core/EnvSpec.js +6 -0
- data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +14 -14
- data/lib/jasmine-core/spec/core/SpecSpec.js +24 -1
- data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +9 -0
- data/lib/jasmine-core/spec/core/SpySpec.js +9 -1
- data/lib/jasmine-core/spec/core/SuiteSpec.js +26 -0
- data/lib/jasmine-core/spec/core/{AnySpec.js → asymmetric_equality/AnySpec.js} +6 -6
- data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +44 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/ArrayContainingSpec.js +39 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/ObjectContainingSpec.js +58 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/StringMatchingSpec.js +27 -0
- data/lib/jasmine-core/spec/core/integration/EnvSpec.js +79 -3
- data/lib/jasmine-core/spec/core/integration/SpecRunningSpec.js +26 -2
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +112 -2
- data/lib/jasmine-core/spec/core/matchers/toMatchSpec.js +8 -0
- data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +19 -8
- data/lib/jasmine-core/spec/html/PrettyPrintHtmlSpec.js +1 -1
- data/lib/jasmine-core/spec/html/QueryStringSpec.js +32 -3
- data/lib/jasmine-core/version.rb +1 -1
- metadata +96 -93
- data/lib/jasmine-core/spec/core/ObjectContainingSpec.js +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a0184015b60b7028b11f2d2b46199c10b900341
|
4
|
+
data.tar.gz: aabb66631039d23d531cf7e50d6214f9465df18a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d62b564c1c0873c2acda50c126b37104da40495bf69d7af14a661e9c2194397bf1b59c5b8076e00603fe5dfe1454b3493543ebdfa5413d6d9af27cec7f96e3c
|
7
|
+
data.tar.gz: e91aad664b12546dd0e9809d5e7749446ee375c421c723b35ca19c0457356f8be5fbd3680fba65f41cfed4536acfd602e4604b64a2ae4770ef2fc166904d86aa
|
data/lib/console/console.js
CHANGED
data/lib/jasmine-core/boot.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
Copyright (c) 2008-
|
2
|
+
Copyright (c) 2008-2015 Pivotal Labs
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
a copy of this software and associated documentation files (the
|
@@ -84,7 +84,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
84
84
|
*/
|
85
85
|
var htmlReporter = new jasmine.HtmlReporter({
|
86
86
|
env: env,
|
87
|
-
onRaiseExceptionsClick: function() { queryString.
|
87
|
+
onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
|
88
|
+
addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
|
88
89
|
getContainer: function() { return document.body; },
|
89
90
|
createElement: function() { return document.createElement.apply(document, arguments); },
|
90
91
|
createTextNode: function() { return document.createTextNode.apply(document, arguments); },
|
@@ -62,7 +62,8 @@
|
|
62
62
|
*/
|
63
63
|
var htmlReporter = new jasmine.HtmlReporter({
|
64
64
|
env: env,
|
65
|
-
onRaiseExceptionsClick: function() { queryString.
|
65
|
+
onRaiseExceptionsClick: function() { queryString.navigateWithNewParam("catch", !env.catchingExceptions()); },
|
66
|
+
addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },
|
66
67
|
getContainer: function() { return document.body; },
|
67
68
|
createElement: function() { return document.createElement.apply(document, arguments); },
|
68
69
|
createTextNode: function() { return document.createTextNode.apply(document, arguments); },
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
Copyright (c) 2008-
|
2
|
+
Copyright (c) 2008-2015 Pivotal Labs
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
a copy of this software and associated documentation files (the
|
@@ -40,6 +40,7 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
40
40
|
createElement = options.createElement,
|
41
41
|
createTextNode = options.createTextNode,
|
42
42
|
onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
|
43
|
+
addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,
|
43
44
|
timer = options.timer || noopTimer,
|
44
45
|
results = [],
|
45
46
|
specsExecuted = 0,
|
@@ -220,6 +221,9 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
220
221
|
if(noExpectations(resultNode.result)) {
|
221
222
|
specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;
|
222
223
|
}
|
224
|
+
if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') {
|
225
|
+
specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason;
|
226
|
+
}
|
223
227
|
specListNode.appendChild(
|
224
228
|
createDom('li', {
|
225
229
|
className: resultNode.result.status,
|
@@ -267,7 +271,7 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
267
271
|
function clearPrior() {
|
268
272
|
// return the reporter
|
269
273
|
var oldReporter = find('');
|
270
|
-
|
274
|
+
|
271
275
|
if(oldReporter) {
|
272
276
|
getContainer().removeChild(oldReporter);
|
273
277
|
}
|
@@ -306,7 +310,11 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
306
310
|
}
|
307
311
|
|
308
312
|
function specHref(result) {
|
309
|
-
return '
|
313
|
+
return addToExistingQueryString('spec', result.fullName);
|
314
|
+
}
|
315
|
+
|
316
|
+
function defaultQueryString(key, value) {
|
317
|
+
return '?' + key + '=' + value;
|
310
318
|
}
|
311
319
|
|
312
320
|
function setMenuModeTo(mode) {
|
@@ -358,10 +366,14 @@ jasmineRequire.ResultsNode = function() {
|
|
358
366
|
jasmineRequire.QueryString = function() {
|
359
367
|
function QueryString(options) {
|
360
368
|
|
361
|
-
this.
|
369
|
+
this.navigateWithNewParam = function(key, value) {
|
370
|
+
options.getWindowLocation().search = this.fullStringWithNewParam(key, value);
|
371
|
+
};
|
372
|
+
|
373
|
+
this.fullStringWithNewParam = function(key, value) {
|
362
374
|
var paramMap = queryStringToParamMap();
|
363
375
|
paramMap[key] = value;
|
364
|
-
|
376
|
+
return toQueryString(paramMap);
|
365
377
|
};
|
366
378
|
|
367
379
|
this.getParam = function(key) {
|
@@ -1,18 +1,18 @@
|
|
1
1
|
body { overflow-y: scroll; }
|
2
2
|
|
3
|
-
.jasmine_html-reporter { background-color: #
|
3
|
+
.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333; }
|
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
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
8
|
.jasmine_html-reporter .banner { position: relative; }
|
9
|
-
.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,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') 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; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }
|
9
|
+
.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,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') 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
10
|
.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; }
|
11
11
|
.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; }
|
12
12
|
.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }
|
13
|
-
.jasmine_html-reporter .version { color: #
|
13
|
+
.jasmine_html-reporter .version { color: #aaa; }
|
14
14
|
.jasmine_html-reporter .banner { margin-top: 14px; }
|
15
|
-
.jasmine_html-reporter .duration { color: #
|
15
|
+
.jasmine_html-reporter .duration { color: #aaa; float: right; }
|
16
16
|
.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
|
17
17
|
.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
|
18
18
|
.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; }
|
@@ -31,12 +31,12 @@ body { overflow-y: scroll; }
|
|
31
31
|
.jasmine_html-reporter .bar.passed { background-color: #007069; }
|
32
32
|
.jasmine_html-reporter .bar.skipped { background-color: #bababa; }
|
33
33
|
.jasmine_html-reporter .bar.errored { background-color: #ca3a11; }
|
34
|
-
.jasmine_html-reporter .bar.menu { background-color: #fff; color: #
|
35
|
-
.jasmine_html-reporter .bar.menu a { color: #
|
34
|
+
.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaa; }
|
35
|
+
.jasmine_html-reporter .bar.menu a { color: #333; }
|
36
36
|
.jasmine_html-reporter .bar a { color: white; }
|
37
37
|
.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; }
|
38
38
|
.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; }
|
39
|
-
.jasmine_html-reporter .running-alert { background-color: #
|
39
|
+
.jasmine_html-reporter .running-alert { background-color: #666; }
|
40
40
|
.jasmine_html-reporter .results { margin-top: 14px; }
|
41
41
|
.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
|
42
42
|
.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
|
@@ -53,10 +53,10 @@ body { overflow-y: scroll; }
|
|
53
53
|
.jasmine_html-reporter .summary li.pending a { color: #ba9d37; }
|
54
54
|
.jasmine_html-reporter .description + .suite { margin-top: 0; }
|
55
55
|
.jasmine_html-reporter .suite { margin-top: 14px; }
|
56
|
-
.jasmine_html-reporter .suite a { color: #
|
56
|
+
.jasmine_html-reporter .suite a { color: #333; }
|
57
57
|
.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; }
|
58
58
|
.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; }
|
59
59
|
.jasmine_html-reporter .failures .spec-detail .description a { color: white; }
|
60
|
-
.jasmine_html-reporter .result-message { padding-top: 14px; color: #
|
60
|
+
.jasmine_html-reporter .result-message { padding-top: 14px; color: #333; white-space: pre; }
|
61
61
|
.jasmine_html-reporter .result-message span.result { display: block; }
|
62
|
-
.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #
|
62
|
+
.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; }
|
data/lib/jasmine-core/jasmine.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
Copyright (c) 2008-
|
2
|
+
Copyright (c) 2008-2015 Pivotal Labs
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
a copy of this software and associated documentation files (the
|
@@ -20,13 +20,16 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
20
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
*/
|
23
|
-
getJasmineRequireObj = (function (jasmineGlobal) {
|
23
|
+
var getJasmineRequireObj = (function (jasmineGlobal) {
|
24
24
|
var jasmineRequire;
|
25
25
|
|
26
26
|
if (typeof module !== 'undefined' && module.exports) {
|
27
27
|
jasmineGlobal = global;
|
28
28
|
jasmineRequire = exports;
|
29
29
|
} else {
|
30
|
+
if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') {
|
31
|
+
jasmineGlobal = window;
|
32
|
+
}
|
30
33
|
jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {};
|
31
34
|
}
|
32
35
|
|
@@ -40,6 +43,7 @@ getJasmineRequireObj = (function (jasmineGlobal) {
|
|
40
43
|
jRequire.base(j$, jasmineGlobal);
|
41
44
|
j$.util = jRequire.util();
|
42
45
|
j$.Any = jRequire.Any();
|
46
|
+
j$.Anything = jRequire.Anything(j$);
|
43
47
|
j$.CallTracker = jRequire.CallTracker();
|
44
48
|
j$.MockDate = jRequire.MockDate();
|
45
49
|
j$.Clock = jRequire.Clock();
|
@@ -51,12 +55,14 @@ getJasmineRequireObj = (function (jasmineGlobal) {
|
|
51
55
|
j$.JsApiReporter = jRequire.JsApiReporter();
|
52
56
|
j$.matchersUtil = jRequire.matchersUtil(j$);
|
53
57
|
j$.ObjectContaining = jRequire.ObjectContaining(j$);
|
58
|
+
j$.ArrayContaining = jRequire.ArrayContaining(j$);
|
54
59
|
j$.pp = jRequire.pp(j$);
|
55
60
|
j$.QueueRunner = jRequire.QueueRunner(j$);
|
56
61
|
j$.ReportDispatcher = jRequire.ReportDispatcher();
|
57
62
|
j$.Spec = jRequire.Spec(j$);
|
58
63
|
j$.SpyRegistry = jRequire.SpyRegistry(j$);
|
59
64
|
j$.SpyStrategy = jRequire.SpyStrategy();
|
65
|
+
j$.StringMatching = jRequire.StringMatching(j$);
|
60
66
|
j$.Suite = jRequire.Suite();
|
61
67
|
j$.Timer = jRequire.Timer();
|
62
68
|
j$.version = jRequire.version();
|
@@ -138,14 +144,30 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
|
|
138
144
|
return obj.nodeType > 0;
|
139
145
|
};
|
140
146
|
|
147
|
+
j$.fnNameFor = function(func) {
|
148
|
+
return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
|
149
|
+
};
|
150
|
+
|
141
151
|
j$.any = function(clazz) {
|
142
152
|
return new j$.Any(clazz);
|
143
153
|
};
|
144
154
|
|
155
|
+
j$.anything = function() {
|
156
|
+
return new j$.Anything();
|
157
|
+
};
|
158
|
+
|
145
159
|
j$.objectContaining = function(sample) {
|
146
160
|
return new j$.ObjectContaining(sample);
|
147
161
|
};
|
148
162
|
|
163
|
+
j$.stringMatching = function(expected) {
|
164
|
+
return new j$.StringMatching(expected);
|
165
|
+
};
|
166
|
+
|
167
|
+
j$.arrayContaining = function(sample) {
|
168
|
+
return new j$.ArrayContaining(sample);
|
169
|
+
};
|
170
|
+
|
149
171
|
j$.createSpy = function(name, originalFn) {
|
150
172
|
|
151
173
|
var spyStrategy = new j$.SpyStrategy({
|
@@ -190,6 +212,11 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
|
|
190
212
|
};
|
191
213
|
|
192
214
|
j$.createSpyObj = function(baseName, methodNames) {
|
215
|
+
if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) {
|
216
|
+
methodNames = baseName;
|
217
|
+
baseName = 'unknown';
|
218
|
+
}
|
219
|
+
|
193
220
|
if (!j$.isArray_(methodNames) || methodNames.length === 0) {
|
194
221
|
throw 'createSpyObj requires a non-empty array of method names to create spies for';
|
195
222
|
}
|
@@ -285,7 +312,8 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
285
312
|
description: this.description,
|
286
313
|
fullName: this.getFullName(),
|
287
314
|
failedExpectations: [],
|
288
|
-
passedExpectations: []
|
315
|
+
passedExpectations: [],
|
316
|
+
pendingReason: ''
|
289
317
|
};
|
290
318
|
}
|
291
319
|
|
@@ -334,7 +362,7 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
334
362
|
|
335
363
|
Spec.prototype.onException = function onException(e) {
|
336
364
|
if (Spec.isPendingSpecException(e)) {
|
337
|
-
this.pend();
|
365
|
+
this.pend(extractCustomPendingMessage(e));
|
338
366
|
return;
|
339
367
|
}
|
340
368
|
|
@@ -351,8 +379,11 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
351
379
|
this.disabled = true;
|
352
380
|
};
|
353
381
|
|
354
|
-
Spec.prototype.pend = function() {
|
382
|
+
Spec.prototype.pend = function(message) {
|
355
383
|
this.markedPending = true;
|
384
|
+
if (message) {
|
385
|
+
this.result.pendingReason = message;
|
386
|
+
}
|
356
387
|
};
|
357
388
|
|
358
389
|
Spec.prototype.status = function() {
|
@@ -379,6 +410,14 @@ getJasmineRequireObj().Spec = function(j$) {
|
|
379
410
|
return this.getSpecName(this);
|
380
411
|
};
|
381
412
|
|
413
|
+
var extractCustomPendingMessage = function(e) {
|
414
|
+
var fullMessage = e.toString(),
|
415
|
+
boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage),
|
416
|
+
boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length;
|
417
|
+
|
418
|
+
return fullMessage.substr(boilerplateEnd);
|
419
|
+
};
|
420
|
+
|
382
421
|
Spec.pendingSpecExceptionMessage = '=> marked Pending';
|
383
422
|
|
384
423
|
Spec.isPendingSpecException = function(e) {
|
@@ -631,11 +670,12 @@ getJasmineRequireObj().Env = function(j$) {
|
|
631
670
|
onStart: suiteStarted,
|
632
671
|
expectationFactory: expectationFactory,
|
633
672
|
expectationResultFactory: expectationResultFactory,
|
673
|
+
runnablesExplictlySetGetter: runnablesExplictlySetGetter,
|
634
674
|
resultCallback: function(attrs) {
|
635
675
|
if (!suite.disabled) {
|
636
676
|
clearResourcesForRunnable(suite.id);
|
637
|
-
currentlyExecutingSuites.pop();
|
638
677
|
}
|
678
|
+
currentlyExecutingSuites.pop();
|
639
679
|
reporter.suiteDone(attrs);
|
640
680
|
}
|
641
681
|
});
|
@@ -823,8 +863,12 @@ getJasmineRequireObj().Env = function(j$) {
|
|
823
863
|
});
|
824
864
|
};
|
825
865
|
|
826
|
-
this.pending = function() {
|
827
|
-
|
866
|
+
this.pending = function(message) {
|
867
|
+
var fullMessage = j$.Spec.pendingSpecExceptionMessage;
|
868
|
+
if(message) {
|
869
|
+
fullMessage += message;
|
870
|
+
}
|
871
|
+
throw fullMessage;
|
828
872
|
};
|
829
873
|
|
830
874
|
this.fail = function(error) {
|
@@ -839,7 +883,8 @@ getJasmineRequireObj().Env = function(j$) {
|
|
839
883
|
passed: false,
|
840
884
|
expected: '',
|
841
885
|
actual: '',
|
842
|
-
message: message
|
886
|
+
message: message,
|
887
|
+
error: error && error.message ? error : null
|
843
888
|
});
|
844
889
|
};
|
845
890
|
}
|
@@ -926,43 +971,6 @@ getJasmineRequireObj().JsApiReporter = function() {
|
|
926
971
|
return JsApiReporter;
|
927
972
|
};
|
928
973
|
|
929
|
-
getJasmineRequireObj().Any = function() {
|
930
|
-
|
931
|
-
function Any(expectedObject) {
|
932
|
-
this.expectedObject = expectedObject;
|
933
|
-
}
|
934
|
-
|
935
|
-
Any.prototype.jasmineMatches = function(other) {
|
936
|
-
if (this.expectedObject == String) {
|
937
|
-
return typeof other == 'string' || other instanceof String;
|
938
|
-
}
|
939
|
-
|
940
|
-
if (this.expectedObject == Number) {
|
941
|
-
return typeof other == 'number' || other instanceof Number;
|
942
|
-
}
|
943
|
-
|
944
|
-
if (this.expectedObject == Function) {
|
945
|
-
return typeof other == 'function' || other instanceof Function;
|
946
|
-
}
|
947
|
-
|
948
|
-
if (this.expectedObject == Object) {
|
949
|
-
return typeof other == 'object';
|
950
|
-
}
|
951
|
-
|
952
|
-
if (this.expectedObject == Boolean) {
|
953
|
-
return typeof other == 'boolean';
|
954
|
-
}
|
955
|
-
|
956
|
-
return other instanceof this.expectedObject;
|
957
|
-
};
|
958
|
-
|
959
|
-
Any.prototype.jasmineToString = function() {
|
960
|
-
return '<jasmine.any(' + this.expectedObject + ')>';
|
961
|
-
};
|
962
|
-
|
963
|
-
return Any;
|
964
|
-
};
|
965
|
-
|
966
974
|
getJasmineRequireObj().CallTracker = function() {
|
967
975
|
|
968
976
|
function CallTracker() {
|
@@ -1244,6 +1252,12 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
|
1244
1252
|
scheduledFn.runAtMillis + scheduledFn.millis);
|
1245
1253
|
}
|
1246
1254
|
|
1255
|
+
function forEachFunction(funcsToRun, callback) {
|
1256
|
+
for (var i = 0; i < funcsToRun.length; ++i) {
|
1257
|
+
callback(funcsToRun[i]);
|
1258
|
+
}
|
1259
|
+
}
|
1260
|
+
|
1247
1261
|
function runScheduledFunctions(endTime) {
|
1248
1262
|
if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) {
|
1249
1263
|
return;
|
@@ -1255,15 +1269,15 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
|
1255
1269
|
var funcsToRun = scheduledFunctions[currentTime];
|
1256
1270
|
delete scheduledFunctions[currentTime];
|
1257
1271
|
|
1258
|
-
|
1259
|
-
var funcToRun = funcsToRun[i];
|
1260
|
-
|
1272
|
+
forEachFunction(funcsToRun, function(funcToRun) {
|
1261
1273
|
if (funcToRun.recurring) {
|
1262
1274
|
reschedule(funcToRun);
|
1263
1275
|
}
|
1276
|
+
});
|
1264
1277
|
|
1278
|
+
forEachFunction(funcsToRun, function(funcToRun) {
|
1265
1279
|
funcToRun.funcToCall.apply(null, funcToRun.params || []);
|
1266
|
-
}
|
1280
|
+
});
|
1267
1281
|
} while (scheduledLookup.length > 0 &&
|
1268
1282
|
// checking first if we're out of time prevents setTimeout(0)
|
1269
1283
|
// scheduled in a funcToRun from forcing an extra iteration
|
@@ -1506,7 +1520,7 @@ getJasmineRequireObj().MockDate = function() {
|
|
1506
1520
|
case 6:
|
1507
1521
|
return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],
|
1508
1522
|
arguments[4], arguments[5]);
|
1509
|
-
|
1523
|
+
default:
|
1510
1524
|
return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],
|
1511
1525
|
arguments[4], arguments[5], arguments[6]);
|
1512
1526
|
}
|
@@ -1533,41 +1547,6 @@ getJasmineRequireObj().MockDate = function() {
|
|
1533
1547
|
return MockDate;
|
1534
1548
|
};
|
1535
1549
|
|
1536
|
-
getJasmineRequireObj().ObjectContaining = function(j$) {
|
1537
|
-
|
1538
|
-
function ObjectContaining(sample) {
|
1539
|
-
this.sample = sample;
|
1540
|
-
}
|
1541
|
-
|
1542
|
-
ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
|
1543
|
-
if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); }
|
1544
|
-
|
1545
|
-
mismatchKeys = mismatchKeys || [];
|
1546
|
-
mismatchValues = mismatchValues || [];
|
1547
|
-
|
1548
|
-
var hasKey = function(obj, keyName) {
|
1549
|
-
return obj !== null && !j$.util.isUndefined(obj[keyName]);
|
1550
|
-
};
|
1551
|
-
|
1552
|
-
for (var property in this.sample) {
|
1553
|
-
if (!hasKey(other, property) && hasKey(this.sample, property)) {
|
1554
|
-
mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.');
|
1555
|
-
}
|
1556
|
-
else if (!j$.matchersUtil.equals(other[property], this.sample[property])) {
|
1557
|
-
mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.');
|
1558
|
-
}
|
1559
|
-
}
|
1560
|
-
|
1561
|
-
return (mismatchKeys.length === 0 && mismatchValues.length === 0);
|
1562
|
-
};
|
1563
|
-
|
1564
|
-
ObjectContaining.prototype.jasmineToString = function() {
|
1565
|
-
return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';
|
1566
|
-
};
|
1567
|
-
|
1568
|
-
return ObjectContaining;
|
1569
|
-
};
|
1570
|
-
|
1571
1550
|
getJasmineRequireObj().pp = function(j$) {
|
1572
1551
|
|
1573
1552
|
function PrettyPrinter() {
|
@@ -1667,13 +1646,15 @@ getJasmineRequireObj().pp = function(j$) {
|
|
1667
1646
|
};
|
1668
1647
|
|
1669
1648
|
StringPrettyPrinter.prototype.emitObject = function(obj) {
|
1649
|
+
var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null';
|
1650
|
+
this.append(constructorName);
|
1651
|
+
|
1670
1652
|
if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
|
1671
|
-
this.append('Object');
|
1672
1653
|
return;
|
1673
1654
|
}
|
1674
1655
|
|
1675
1656
|
var self = this;
|
1676
|
-
this.append('{ ');
|
1657
|
+
this.append('({ ');
|
1677
1658
|
var first = true;
|
1678
1659
|
|
1679
1660
|
this.iterateObject(obj, function(property, isGetter) {
|
@@ -1692,7 +1673,7 @@ getJasmineRequireObj().pp = function(j$) {
|
|
1692
1673
|
}
|
1693
1674
|
});
|
1694
1675
|
|
1695
|
-
this.append(' }');
|
1676
|
+
this.append(' })');
|
1696
1677
|
};
|
1697
1678
|
|
1698
1679
|
StringPrettyPrinter.prototype.append = function(value) {
|
@@ -1742,7 +1723,8 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|
1742
1723
|
for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {
|
1743
1724
|
var queueableFn = queueableFns[iterativeIndex];
|
1744
1725
|
if (queueableFn.fn.length > 0) {
|
1745
|
-
|
1726
|
+
attemptAsync(queueableFn);
|
1727
|
+
return;
|
1746
1728
|
} else {
|
1747
1729
|
attemptSync(queueableFn);
|
1748
1730
|
}
|
@@ -1857,6 +1839,10 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
|
|
1857
1839
|
throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()');
|
1858
1840
|
}
|
1859
1841
|
|
1842
|
+
if (j$.util.isUndefined(methodName)) {
|
1843
|
+
throw new Error('No method name supplied');
|
1844
|
+
}
|
1845
|
+
|
1860
1846
|
if (j$.util.isUndefined(obj[methodName])) {
|
1861
1847
|
throw new Error(methodName + '() method does not exist');
|
1862
1848
|
}
|
@@ -1963,6 +1949,7 @@ getJasmineRequireObj().Suite = function() {
|
|
1963
1949
|
this.clearStack = attrs.clearStack || function(fn) {fn();};
|
1964
1950
|
this.expectationFactory = attrs.expectationFactory;
|
1965
1951
|
this.expectationResultFactory = attrs.expectationResultFactory;
|
1952
|
+
this.runnablesExplictlySetGetter = attrs.runnablesExplictlySetGetter || function() {};
|
1966
1953
|
|
1967
1954
|
this.beforeFns = [];
|
1968
1955
|
this.afterFns = [];
|
@@ -2074,14 +2061,8 @@ getJasmineRequireObj().Suite = function() {
|
|
2074
2061
|
};
|
2075
2062
|
|
2076
2063
|
Suite.prototype.isExecutable = function() {
|
2077
|
-
var
|
2078
|
-
|
2079
|
-
if(this.children[i].isExecutable()) {
|
2080
|
-
foundActive = true;
|
2081
|
-
break;
|
2082
|
-
}
|
2083
|
-
}
|
2084
|
-
return foundActive;
|
2064
|
+
var runnablesExplicitlySet = this.runnablesExplictlySetGetter();
|
2065
|
+
return !runnablesExplicitlySet && hasExecutableChild(this.children);
|
2085
2066
|
};
|
2086
2067
|
|
2087
2068
|
Suite.prototype.sharedUserContext = function() {
|
@@ -2134,6 +2115,17 @@ getJasmineRequireObj().Suite = function() {
|
|
2134
2115
|
return !args[0];
|
2135
2116
|
}
|
2136
2117
|
|
2118
|
+
function hasExecutableChild(children) {
|
2119
|
+
var foundActive = false;
|
2120
|
+
for (var i = 0; i < children.length; i++) {
|
2121
|
+
if (children[i].isExecutable()) {
|
2122
|
+
foundActive = true;
|
2123
|
+
break;
|
2124
|
+
}
|
2125
|
+
}
|
2126
|
+
return foundActive;
|
2127
|
+
}
|
2128
|
+
|
2137
2129
|
function clone(obj) {
|
2138
2130
|
var clonedObj = {};
|
2139
2131
|
for (var prop in obj) {
|
@@ -2175,6 +2167,131 @@ getJasmineRequireObj().Timer = function() {
|
|
2175
2167
|
return Timer;
|
2176
2168
|
};
|
2177
2169
|
|
2170
|
+
getJasmineRequireObj().Any = function() {
|
2171
|
+
|
2172
|
+
function Any(expectedObject) {
|
2173
|
+
this.expectedObject = expectedObject;
|
2174
|
+
}
|
2175
|
+
|
2176
|
+
Any.prototype.asymmetricMatch = function(other) {
|
2177
|
+
if (this.expectedObject == String) {
|
2178
|
+
return typeof other == 'string' || other instanceof String;
|
2179
|
+
}
|
2180
|
+
|
2181
|
+
if (this.expectedObject == Number) {
|
2182
|
+
return typeof other == 'number' || other instanceof Number;
|
2183
|
+
}
|
2184
|
+
|
2185
|
+
if (this.expectedObject == Function) {
|
2186
|
+
return typeof other == 'function' || other instanceof Function;
|
2187
|
+
}
|
2188
|
+
|
2189
|
+
if (this.expectedObject == Object) {
|
2190
|
+
return typeof other == 'object';
|
2191
|
+
}
|
2192
|
+
|
2193
|
+
if (this.expectedObject == Boolean) {
|
2194
|
+
return typeof other == 'boolean';
|
2195
|
+
}
|
2196
|
+
|
2197
|
+
return other instanceof this.expectedObject;
|
2198
|
+
};
|
2199
|
+
|
2200
|
+
Any.prototype.jasmineToString = function() {
|
2201
|
+
return '<jasmine.any(' + this.expectedObject + ')>';
|
2202
|
+
};
|
2203
|
+
|
2204
|
+
return Any;
|
2205
|
+
};
|
2206
|
+
|
2207
|
+
getJasmineRequireObj().Anything = function(j$) {
|
2208
|
+
|
2209
|
+
function Anything() {}
|
2210
|
+
|
2211
|
+
Anything.prototype.asymmetricMatch = function(other) {
|
2212
|
+
return !j$.util.isUndefined(other) && other !== null;
|
2213
|
+
};
|
2214
|
+
|
2215
|
+
Anything.prototype.jasmineToString = function() {
|
2216
|
+
return '<jasmine.anything>';
|
2217
|
+
};
|
2218
|
+
|
2219
|
+
return Anything;
|
2220
|
+
};
|
2221
|
+
|
2222
|
+
getJasmineRequireObj().ArrayContaining = function(j$) {
|
2223
|
+
function ArrayContaining(sample) {
|
2224
|
+
this.sample = sample;
|
2225
|
+
}
|
2226
|
+
|
2227
|
+
ArrayContaining.prototype.asymmetricMatch = function(other) {
|
2228
|
+
var className = Object.prototype.toString.call(this.sample);
|
2229
|
+
if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); }
|
2230
|
+
|
2231
|
+
for (var i = 0; i < this.sample.length; i++) {
|
2232
|
+
var item = this.sample[i];
|
2233
|
+
if (!j$.matchersUtil.contains(other, item)) {
|
2234
|
+
return false;
|
2235
|
+
}
|
2236
|
+
}
|
2237
|
+
|
2238
|
+
return true;
|
2239
|
+
};
|
2240
|
+
|
2241
|
+
ArrayContaining.prototype.jasmineToString = function () {
|
2242
|
+
return '<jasmine.arrayContaining(' + jasmine.pp(this.sample) +')>';
|
2243
|
+
};
|
2244
|
+
|
2245
|
+
return ArrayContaining;
|
2246
|
+
};
|
2247
|
+
|
2248
|
+
getJasmineRequireObj().ObjectContaining = function(j$) {
|
2249
|
+
|
2250
|
+
function ObjectContaining(sample) {
|
2251
|
+
this.sample = sample;
|
2252
|
+
}
|
2253
|
+
|
2254
|
+
ObjectContaining.prototype.asymmetricMatch = function(other) {
|
2255
|
+
if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); }
|
2256
|
+
|
2257
|
+
for (var property in this.sample) {
|
2258
|
+
if (!Object.prototype.hasOwnProperty.call(other, property) ||
|
2259
|
+
!j$.matchersUtil.equals(this.sample[property], other[property])) {
|
2260
|
+
return false;
|
2261
|
+
}
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
return true;
|
2265
|
+
};
|
2266
|
+
|
2267
|
+
ObjectContaining.prototype.jasmineToString = function() {
|
2268
|
+
return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';
|
2269
|
+
};
|
2270
|
+
|
2271
|
+
return ObjectContaining;
|
2272
|
+
};
|
2273
|
+
|
2274
|
+
getJasmineRequireObj().StringMatching = function(j$) {
|
2275
|
+
|
2276
|
+
function StringMatching(expected) {
|
2277
|
+
if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {
|
2278
|
+
throw new Error('Expected is not a String or a RegExp');
|
2279
|
+
}
|
2280
|
+
|
2281
|
+
this.regexp = new RegExp(expected);
|
2282
|
+
}
|
2283
|
+
|
2284
|
+
StringMatching.prototype.asymmetricMatch = function(other) {
|
2285
|
+
return this.regexp.test(other);
|
2286
|
+
};
|
2287
|
+
|
2288
|
+
StringMatching.prototype.jasmineToString = function() {
|
2289
|
+
return '<jasmine.stringMatching(' + this.regexp + ')>';
|
2290
|
+
};
|
2291
|
+
|
2292
|
+
return StringMatching;
|
2293
|
+
};
|
2294
|
+
|
2178
2295
|
getJasmineRequireObj().matchersUtil = function(j$) {
|
2179
2296
|
// TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?
|
2180
2297
|
|
@@ -2228,11 +2345,37 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2228
2345
|
}
|
2229
2346
|
};
|
2230
2347
|
|
2348
|
+
function isAsymmetric(obj) {
|
2349
|
+
return obj && j$.isA_('Function', obj.asymmetricMatch);
|
2350
|
+
}
|
2351
|
+
|
2352
|
+
function asymmetricMatch(a, b) {
|
2353
|
+
var asymmetricA = isAsymmetric(a),
|
2354
|
+
asymmetricB = isAsymmetric(b);
|
2355
|
+
|
2356
|
+
if (asymmetricA && asymmetricB) {
|
2357
|
+
return undefined;
|
2358
|
+
}
|
2359
|
+
|
2360
|
+
if (asymmetricA) {
|
2361
|
+
return a.asymmetricMatch(b);
|
2362
|
+
}
|
2363
|
+
|
2364
|
+
if (asymmetricB) {
|
2365
|
+
return b.asymmetricMatch(a);
|
2366
|
+
}
|
2367
|
+
}
|
2368
|
+
|
2231
2369
|
// Equality function lovingly adapted from isEqual in
|
2232
2370
|
// [Underscore](http://underscorejs.org)
|
2233
2371
|
function eq(a, b, aStack, bStack, customTesters) {
|
2234
2372
|
var result = true;
|
2235
2373
|
|
2374
|
+
var asymmetricResult = asymmetricMatch(a, b);
|
2375
|
+
if (!j$.util.isUndefined(asymmetricResult)) {
|
2376
|
+
return asymmetricResult;
|
2377
|
+
}
|
2378
|
+
|
2236
2379
|
for (var i = 0; i < customTesters.length; i++) {
|
2237
2380
|
var customTesterResult = customTesters[i](a, b);
|
2238
2381
|
if (!j$.util.isUndefined(customTesterResult)) {
|
@@ -2240,27 +2383,6 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2240
2383
|
}
|
2241
2384
|
}
|
2242
2385
|
|
2243
|
-
if (a instanceof j$.Any) {
|
2244
|
-
result = a.jasmineMatches(b);
|
2245
|
-
if (result) {
|
2246
|
-
return true;
|
2247
|
-
}
|
2248
|
-
}
|
2249
|
-
|
2250
|
-
if (b instanceof j$.Any) {
|
2251
|
-
result = b.jasmineMatches(a);
|
2252
|
-
if (result) {
|
2253
|
-
return true;
|
2254
|
-
}
|
2255
|
-
}
|
2256
|
-
|
2257
|
-
if (b instanceof j$.ObjectContaining) {
|
2258
|
-
result = b.jasmineMatches(a);
|
2259
|
-
if (result) {
|
2260
|
-
return true;
|
2261
|
-
}
|
2262
|
-
}
|
2263
|
-
|
2264
2386
|
if (a instanceof Error && b instanceof Error) {
|
2265
2387
|
return a.message == b.message;
|
2266
2388
|
}
|
@@ -2296,6 +2418,29 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2296
2418
|
a.ignoreCase == b.ignoreCase;
|
2297
2419
|
}
|
2298
2420
|
if (typeof a != 'object' || typeof b != 'object') { return false; }
|
2421
|
+
|
2422
|
+
var aIsDomNode = j$.isDomNode(a);
|
2423
|
+
var bIsDomNode = j$.isDomNode(b);
|
2424
|
+
if (aIsDomNode && bIsDomNode) {
|
2425
|
+
// At first try to use DOM3 method isEqualNode
|
2426
|
+
if (a.isEqualNode) {
|
2427
|
+
return a.isEqualNode(b);
|
2428
|
+
}
|
2429
|
+
// IE8 doesn't support isEqualNode, try to use outerHTML && innerText
|
2430
|
+
var aIsElement = a instanceof Element;
|
2431
|
+
var bIsElement = b instanceof Element;
|
2432
|
+
if (aIsElement && bIsElement) {
|
2433
|
+
return a.outerHTML == b.outerHTML;
|
2434
|
+
}
|
2435
|
+
if (aIsElement || bIsElement) {
|
2436
|
+
return false;
|
2437
|
+
}
|
2438
|
+
return a.innerText == b.innerText && a.textContent == b.textContent;
|
2439
|
+
}
|
2440
|
+
if (aIsDomNode || bIsDomNode) {
|
2441
|
+
return false;
|
2442
|
+
}
|
2443
|
+
|
2299
2444
|
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
2300
2445
|
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
2301
2446
|
var length = aStack.length;
|
@@ -2309,17 +2454,12 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2309
2454
|
bStack.push(b);
|
2310
2455
|
var size = 0;
|
2311
2456
|
// Recursively compare objects and arrays.
|
2312
|
-
if
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
while (size--) {
|
2319
|
-
if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; }
|
2320
|
-
}
|
2321
|
-
}
|
2322
|
-
} else {
|
2457
|
+
// Compare array lengths to determine if a deep comparison is necessary.
|
2458
|
+
if (className == '[object Array]' && a.length !== b.length) {
|
2459
|
+
result = false;
|
2460
|
+
}
|
2461
|
+
|
2462
|
+
if (result) {
|
2323
2463
|
// Objects with different constructors are not equivalent, but `Object`s
|
2324
2464
|
// from different frames are.
|
2325
2465
|
var aCtor = a.constructor, bCtor = b.constructor;
|
@@ -2351,7 +2491,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2351
2491
|
return result;
|
2352
2492
|
|
2353
2493
|
function has(obj, key) {
|
2354
|
-
return
|
2494
|
+
return Object.prototype.hasOwnProperty.call(obj, key);
|
2355
2495
|
}
|
2356
2496
|
|
2357
2497
|
function isFunction(obj) {
|
@@ -2620,11 +2760,15 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
|
|
2620
2760
|
return toHaveBeenCalledWith;
|
2621
2761
|
};
|
2622
2762
|
|
2623
|
-
getJasmineRequireObj().toMatch = function() {
|
2763
|
+
getJasmineRequireObj().toMatch = function(j$) {
|
2624
2764
|
|
2625
2765
|
function toMatch() {
|
2626
2766
|
return {
|
2627
2767
|
compare: function(actual, expected) {
|
2768
|
+
if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {
|
2769
|
+
throw new Error('Expected is not a String or a RegExp');
|
2770
|
+
}
|
2771
|
+
|
2628
2772
|
var regexp = new RegExp(expected);
|
2629
2773
|
|
2630
2774
|
return {
|
@@ -2717,7 +2861,7 @@ getJasmineRequireObj().toThrowError = function(j$) {
|
|
2717
2861
|
}
|
2718
2862
|
|
2719
2863
|
if (errorMatcher.hasNoSpecifics()) {
|
2720
|
-
pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.';
|
2864
|
+
pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.';
|
2721
2865
|
return pass;
|
2722
2866
|
}
|
2723
2867
|
|
@@ -2771,9 +2915,9 @@ getJasmineRequireObj().toThrowError = function(j$) {
|
|
2771
2915
|
}
|
2772
2916
|
|
2773
2917
|
return {
|
2774
|
-
errorTypeDescription: errorType ? fnNameFor(errorType) : 'an exception',
|
2918
|
+
errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception',
|
2775
2919
|
thrownDescription: function(thrown) {
|
2776
|
-
var thrownName = errorType ? fnNameFor(thrown.constructor) : 'an exception',
|
2920
|
+
var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception',
|
2777
2921
|
thrownMessage = '';
|
2778
2922
|
|
2779
2923
|
if (expected) {
|
@@ -2801,10 +2945,6 @@ getJasmineRequireObj().toThrowError = function(j$) {
|
|
2801
2945
|
};
|
2802
2946
|
}
|
2803
2947
|
|
2804
|
-
function fnNameFor(func) {
|
2805
|
-
return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
|
2806
|
-
}
|
2807
|
-
|
2808
2948
|
function isStringOrRegExp(potential) {
|
2809
2949
|
return potential instanceof RegExp || (typeof potential == 'string');
|
2810
2950
|
}
|
@@ -2837,32 +2977,32 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|
2837
2977
|
return env.fdescribe(description, specDefinitions);
|
2838
2978
|
},
|
2839
2979
|
|
2840
|
-
it: function(
|
2841
|
-
return env.it(
|
2980
|
+
it: function() {
|
2981
|
+
return env.it.apply(env, arguments);
|
2842
2982
|
},
|
2843
2983
|
|
2844
|
-
xit: function(
|
2845
|
-
return env.xit(
|
2984
|
+
xit: function() {
|
2985
|
+
return env.xit.apply(env, arguments);
|
2846
2986
|
},
|
2847
2987
|
|
2848
|
-
fit: function(
|
2849
|
-
return env.fit(
|
2988
|
+
fit: function() {
|
2989
|
+
return env.fit.apply(env, arguments);
|
2850
2990
|
},
|
2851
2991
|
|
2852
|
-
beforeEach: function(
|
2853
|
-
return env.beforeEach(
|
2992
|
+
beforeEach: function() {
|
2993
|
+
return env.beforeEach.apply(env, arguments);
|
2854
2994
|
},
|
2855
2995
|
|
2856
|
-
afterEach: function(
|
2857
|
-
return env.afterEach(
|
2996
|
+
afterEach: function() {
|
2997
|
+
return env.afterEach.apply(env, arguments);
|
2858
2998
|
},
|
2859
2999
|
|
2860
|
-
beforeAll: function(
|
2861
|
-
return env.beforeAll(
|
3000
|
+
beforeAll: function() {
|
3001
|
+
return env.beforeAll.apply(env, arguments);
|
2862
3002
|
},
|
2863
3003
|
|
2864
|
-
afterAll: function(
|
2865
|
-
return env.afterAll(
|
3004
|
+
afterAll: function() {
|
3005
|
+
return env.afterAll.apply(env, arguments);
|
2866
3006
|
},
|
2867
3007
|
|
2868
3008
|
expect: function(actual) {
|
@@ -2870,7 +3010,7 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|
2870
3010
|
},
|
2871
3011
|
|
2872
3012
|
pending: function() {
|
2873
|
-
return env.pending();
|
3013
|
+
return env.pending.apply(env, arguments);
|
2874
3014
|
},
|
2875
3015
|
|
2876
3016
|
fail: function() {
|
@@ -2904,5 +3044,5 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|
2904
3044
|
};
|
2905
3045
|
|
2906
3046
|
getJasmineRequireObj().version = function() {
|
2907
|
-
return '2.
|
3047
|
+
return '2.2.0';
|
2908
3048
|
};
|