jasmine-core 2.8.0 → 2.9.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 +1 -1
- data/lib/jasmine-core/jasmine-html.js +53 -30
- data/lib/jasmine-core/jasmine.js +258 -101
- data/lib/jasmine-core/node_boot.js +1 -1
- data/lib/jasmine-core/spec/core/ClockSpec.js +85 -13
- data/lib/jasmine-core/spec/core/DelayedFunctionSchedulerSpec.js +10 -8
- data/lib/jasmine-core/spec/core/PrettyPrintSpec.js +63 -15
- data/lib/jasmine-core/spec/core/QueueRunnerSpec.js +8 -5
- data/lib/jasmine-core/spec/core/SpyRegistrySpec.js +18 -0
- data/lib/jasmine-core/spec/core/SpyStrategySpec.js +23 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/AnySpec.js +32 -0
- data/lib/jasmine-core/spec/core/asymmetric_equality/AnythingSpec.js +32 -0
- data/lib/jasmine-core/spec/core/integration/EnvSpec.js +101 -0
- data/lib/jasmine-core/spec/core/matchers/matchersUtilSpec.js +130 -44
- data/lib/jasmine-core/spec/core/matchers/toEqualSpec.js +124 -39
- data/lib/jasmine-core/spec/helpers/checkForMap.js +19 -4
- data/lib/jasmine-core/spec/helpers/checkForSet.js +23 -3
- data/lib/jasmine-core/spec/helpers/checkForSymbol.js +28 -0
- data/lib/jasmine-core/spec/html/HtmlReporterSpec.js +2 -2
- data/lib/jasmine-core/spec/html/SpyRegistryHtmlSpec.js +34 -0
- data/lib/jasmine-core/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52b633d51b123d4eb0ad4d72b0930a4731a51785
|
4
|
+
data.tar.gz: c88fb95def076fca0154fe95fb3ad4228387b045
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1db908358f4e995855d55c4c58f53829e8eaf7404b00210df81df8fecf8633e7249bbdd9a2a95da87b29b530ef32a828cbcc347f8aaedb9f055b9b85ce2a98d5
|
7
|
+
data.tar.gz: 65c2fe06a9921ce67d5eb03f27f48992868fa375e480e5c6a96f8570f3f34c867986f71bab477f5e0e52dbbddd453aba11ad7506af066c99131ca3baaf271fc0
|
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-2018 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
|
@@ -34,6 +34,46 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
34
34
|
elapsed: function() { return 0; }
|
35
35
|
};
|
36
36
|
|
37
|
+
function ResultsStateBuilder() {
|
38
|
+
this.topResults = new j$.ResultsNode({}, '', null);
|
39
|
+
this.currentParent = this.topResults;
|
40
|
+
this.specsExecuted = 0;
|
41
|
+
this.failureCount = 0;
|
42
|
+
this.pendingSpecCount = 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
ResultsStateBuilder.prototype.suiteStarted = function(result) {
|
46
|
+
this.currentParent.addChild(result, 'suite');
|
47
|
+
this.currentParent = this.currentParent.last();
|
48
|
+
};
|
49
|
+
|
50
|
+
ResultsStateBuilder.prototype.suiteDone = function(result) {
|
51
|
+
if (this.currentParent !== this.topResults) {
|
52
|
+
this.currentParent = this.currentParent.parent;
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
ResultsStateBuilder.prototype.specStarted = function(result) {
|
57
|
+
};
|
58
|
+
|
59
|
+
ResultsStateBuilder.prototype.specDone = function(result) {
|
60
|
+
this.currentParent.addChild(result, 'spec');
|
61
|
+
|
62
|
+
if (result.status !== 'disabled') {
|
63
|
+
this.specsExecuted++;
|
64
|
+
}
|
65
|
+
|
66
|
+
if (result.status === 'failed') {
|
67
|
+
this.failureCount++;
|
68
|
+
}
|
69
|
+
|
70
|
+
if (result.status == 'pending') {
|
71
|
+
this.pendingSpecCount++;
|
72
|
+
}
|
73
|
+
};
|
74
|
+
|
75
|
+
|
76
|
+
|
37
77
|
function HtmlReporter(options) {
|
38
78
|
var env = options.env || {},
|
39
79
|
getContainer = options.getContainer,
|
@@ -46,9 +86,6 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
46
86
|
filterSpecs = options.filterSpecs,
|
47
87
|
timer = options.timer || noopTimer,
|
48
88
|
results = [],
|
49
|
-
specsExecuted = 0,
|
50
|
-
failureCount = 0,
|
51
|
-
pendingSpecCount = 0,
|
52
89
|
htmlReporterMain,
|
53
90
|
symbols,
|
54
91
|
failedSuites = [];
|
@@ -77,12 +114,10 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
77
114
|
|
78
115
|
var summary = createDom('div', {className: 'jasmine-summary'});
|
79
116
|
|
80
|
-
var
|
81
|
-
currentParent = topResults;
|
117
|
+
var stateBuilder = new ResultsStateBuilder();
|
82
118
|
|
83
119
|
this.suiteStarted = function(result) {
|
84
|
-
|
85
|
-
currentParent = currentParent.last();
|
120
|
+
stateBuilder.suiteStarted(result);
|
86
121
|
};
|
87
122
|
|
88
123
|
this.suiteDone = function(result) {
|
@@ -90,27 +125,21 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
90
125
|
failedSuites.push(result);
|
91
126
|
}
|
92
127
|
|
93
|
-
|
94
|
-
return;
|
95
|
-
}
|
96
|
-
|
97
|
-
currentParent = currentParent.parent;
|
128
|
+
stateBuilder.suiteDone(result);
|
98
129
|
};
|
99
130
|
|
100
131
|
this.specStarted = function(result) {
|
101
|
-
|
132
|
+
stateBuilder.specStarted(result);
|
102
133
|
};
|
103
134
|
|
104
135
|
var failures = [];
|
105
136
|
this.specDone = function(result) {
|
137
|
+
stateBuilder.specDone(result);
|
138
|
+
|
106
139
|
if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') {
|
107
140
|
console.error('Spec \'' + result.fullName + '\' has no expectations.');
|
108
141
|
}
|
109
142
|
|
110
|
-
if (result.status != 'disabled') {
|
111
|
-
specsExecuted++;
|
112
|
-
}
|
113
|
-
|
114
143
|
if (!symbols){
|
115
144
|
symbols = find('.jasmine-symbol-summary');
|
116
145
|
}
|
@@ -123,8 +152,6 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
123
152
|
));
|
124
153
|
|
125
154
|
if (result.status == 'failed') {
|
126
|
-
failureCount++;
|
127
|
-
|
128
155
|
var failure =
|
129
156
|
createDom('div', {className: 'jasmine-spec-detail jasmine-failed'},
|
130
157
|
createDom('div', {className: 'jasmine-description'},
|
@@ -142,10 +169,6 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
142
169
|
|
143
170
|
failures.push(failure);
|
144
171
|
}
|
145
|
-
|
146
|
-
if (result.status == 'pending') {
|
147
|
-
pendingSpecCount++;
|
148
|
-
}
|
149
172
|
};
|
150
173
|
|
151
174
|
this.jasmineDone = function(doneResult) {
|
@@ -208,8 +231,8 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
208
231
|
}
|
209
232
|
};
|
210
233
|
|
211
|
-
if (specsExecuted < totalSpecsDefined) {
|
212
|
-
var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
|
234
|
+
if (stateBuilder.specsExecuted < totalSpecsDefined) {
|
235
|
+
var skippedMessage = 'Ran ' + stateBuilder.specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';
|
213
236
|
var skippedLink = addToExistingQueryString('spec', '');
|
214
237
|
alert.appendChild(
|
215
238
|
createDom('span', {className: 'jasmine-bar jasmine-skipped'},
|
@@ -221,9 +244,9 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
221
244
|
var statusBarClassName = 'jasmine-bar ';
|
222
245
|
|
223
246
|
if (totalSpecsDefined > 0) {
|
224
|
-
statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount);
|
225
|
-
if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); }
|
226
|
-
statusBarClassName += (failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed';
|
247
|
+
statusBarMessage += pluralize('spec', stateBuilder.specsExecuted) + ', ' + pluralize('failure', stateBuilder.failureCount);
|
248
|
+
if (stateBuilder.pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', stateBuilder.pendingSpecCount); }
|
249
|
+
statusBarClassName += (stateBuilder.failureCount > 0) ? 'jasmine-failed' : 'jasmine-passed';
|
227
250
|
} else {
|
228
251
|
statusBarClassName += 'jasmine-skipped';
|
229
252
|
statusBarMessage += 'No specs found';
|
@@ -258,7 +281,7 @@ jasmineRequire.HtmlReporter = function(j$) {
|
|
258
281
|
var results = find('.jasmine-results');
|
259
282
|
results.appendChild(summary);
|
260
283
|
|
261
|
-
summaryList(topResults, summary);
|
284
|
+
summaryList(stateBuilder.topResults, summary);
|
262
285
|
|
263
286
|
function summaryList(resultsTree, domParent) {
|
264
287
|
var specListNode;
|
data/lib/jasmine-core/jasmine.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
Copyright (c) 2008-
|
2
|
+
Copyright (c) 2008-2018 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
|
@@ -34,7 +34,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|
34
34
|
if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') {
|
35
35
|
jasmineGlobal = window;
|
36
36
|
}
|
37
|
-
jasmineRequire = jasmineGlobal.jasmineRequire =
|
37
|
+
jasmineRequire = jasmineGlobal.jasmineRequire = {};
|
38
38
|
}
|
39
39
|
|
40
40
|
function getJasmineRequire() {
|
@@ -45,7 +45,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|
45
45
|
var j$ = {};
|
46
46
|
|
47
47
|
jRequire.base(j$, jasmineGlobal);
|
48
|
-
j$.util = jRequire.util();
|
48
|
+
j$.util = jRequire.util(j$);
|
49
49
|
j$.errors = jRequire.errors();
|
50
50
|
j$.formatErrorMsg = jRequire.formatErrorMsg();
|
51
51
|
j$.Any = jRequire.Any(j$);
|
@@ -54,7 +54,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|
54
54
|
j$.MockDate = jRequire.MockDate();
|
55
55
|
j$.getClearStack = jRequire.clearStack(j$);
|
56
56
|
j$.Clock = jRequire.Clock();
|
57
|
-
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
|
57
|
+
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
58
58
|
j$.Env = jRequire.Env(j$);
|
59
59
|
j$.ExceptionFormatter = jRequire.ExceptionFormatter();
|
60
60
|
j$.Expectation = jRequire.Expectation();
|
@@ -66,7 +66,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|
66
66
|
j$.ArrayWithExactContents = jRequire.ArrayWithExactContents(j$);
|
67
67
|
j$.pp = jRequire.pp(j$);
|
68
68
|
j$.QueueRunner = jRequire.QueueRunner(j$);
|
69
|
-
j$.ReportDispatcher = jRequire.ReportDispatcher();
|
69
|
+
j$.ReportDispatcher = jRequire.ReportDispatcher(j$);
|
70
70
|
j$.Spec = jRequire.Spec(j$);
|
71
71
|
j$.Spy = jRequire.Spy(j$);
|
72
72
|
j$.SpyRegistry = jRequire.SpyRegistry(j$);
|
@@ -138,14 +138,20 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
|
|
138
138
|
* Set this to a lower value to speed up pretty printing if you have large objects.
|
139
139
|
* @name jasmine.MAX_PRETTY_PRINT_DEPTH
|
140
140
|
*/
|
141
|
-
j$.MAX_PRETTY_PRINT_DEPTH =
|
141
|
+
j$.MAX_PRETTY_PRINT_DEPTH = 8;
|
142
142
|
/**
|
143
143
|
* Maximum number of array elements to display when pretty printing objects.
|
144
144
|
* This will also limit the number of keys and values displayed for an object.
|
145
145
|
* Elements past this number will be ellipised.
|
146
146
|
* @name jasmine.MAX_PRETTY_PRINT_ARRAY_LENGTH
|
147
147
|
*/
|
148
|
-
j$.MAX_PRETTY_PRINT_ARRAY_LENGTH =
|
148
|
+
j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 50;
|
149
|
+
/**
|
150
|
+
* Maximum number of charasters to display when pretty printing objects.
|
151
|
+
* Characters past this number will be ellipised.
|
152
|
+
* @name jasmine.MAX_PRETTY_PRINT_CHARS
|
153
|
+
*/
|
154
|
+
j$.MAX_PRETTY_PRINT_CHARS = 1000;
|
149
155
|
/**
|
150
156
|
* Default number of milliseconds Jasmine will wait for an asynchronous spec to complete.
|
151
157
|
* @name jasmine.DEFAULT_TIMEOUT_INTERVAL
|
@@ -217,6 +223,18 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
|
|
217
223
|
return obj.nodeType > 0;
|
218
224
|
};
|
219
225
|
|
226
|
+
j$.isMap = function(obj) {
|
227
|
+
return typeof jasmineGlobal.Map !== 'undefined' && obj.constructor === jasmineGlobal.Map;
|
228
|
+
};
|
229
|
+
|
230
|
+
j$.isSet = function(obj) {
|
231
|
+
return typeof jasmineGlobal.Set !== 'undefined' && obj.constructor === jasmineGlobal.Set;
|
232
|
+
};
|
233
|
+
|
234
|
+
j$.isPromise = function(obj) {
|
235
|
+
return typeof jasmineGlobal.Promise !== 'undefined' && obj.constructor === jasmineGlobal.Promise;
|
236
|
+
};
|
237
|
+
|
220
238
|
j$.fnNameFor = function(func) {
|
221
239
|
if (func.name) {
|
222
240
|
return func.name;
|
@@ -355,7 +373,7 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) {
|
|
355
373
|
};
|
356
374
|
};
|
357
375
|
|
358
|
-
getJasmineRequireObj().util = function() {
|
376
|
+
getJasmineRequireObj().util = function(j$) {
|
359
377
|
|
360
378
|
var util = {};
|
361
379
|
|
@@ -412,6 +430,23 @@ getJasmineRequireObj().util = function() {
|
|
412
430
|
return cloned;
|
413
431
|
};
|
414
432
|
|
433
|
+
util.cloneArgs = function(args) {
|
434
|
+
var clonedArgs = [];
|
435
|
+
var argsAsArray = j$.util.argsToArray(args);
|
436
|
+
for(var i = 0; i < argsAsArray.length; i++) {
|
437
|
+
var str = Object.prototype.toString.apply(argsAsArray[i]),
|
438
|
+
primitives = /^\[object (Boolean|String|RegExp|Number)/;
|
439
|
+
|
440
|
+
// All falsey values are either primitives, `null`, or `undefined.
|
441
|
+
if (!argsAsArray[i] || str.match(primitives)) {
|
442
|
+
clonedArgs.push(argsAsArray[i]);
|
443
|
+
} else {
|
444
|
+
clonedArgs.push(j$.util.clone(argsAsArray[i]));
|
445
|
+
}
|
446
|
+
}
|
447
|
+
return clonedArgs;
|
448
|
+
};
|
449
|
+
|
415
450
|
util.getPropertyDescriptor = function(obj, methodName) {
|
416
451
|
var descriptor,
|
417
452
|
proto = obj;
|
@@ -1048,6 +1083,13 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1048
1083
|
}
|
1049
1084
|
};
|
1050
1085
|
|
1086
|
+
function ensureIsNotNested(method) {
|
1087
|
+
var runnable = currentRunnable();
|
1088
|
+
if (runnable !== null && runnable !== undefined) {
|
1089
|
+
throw new Error('\'' + method + '\' should only be used in \'describe\' function');
|
1090
|
+
}
|
1091
|
+
}
|
1092
|
+
|
1051
1093
|
var suiteFactory = function(description) {
|
1052
1094
|
var suite = new j$.Suite({
|
1053
1095
|
env: self,
|
@@ -1063,6 +1105,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1063
1105
|
};
|
1064
1106
|
|
1065
1107
|
this.describe = function(description, specDefinitions) {
|
1108
|
+
ensureIsNotNested('describe');
|
1066
1109
|
ensureIsFunction(specDefinitions, 'describe');
|
1067
1110
|
var suite = suiteFactory(description);
|
1068
1111
|
if (specDefinitions.length > 0) {
|
@@ -1076,6 +1119,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1076
1119
|
};
|
1077
1120
|
|
1078
1121
|
this.xdescribe = function(description, specDefinitions) {
|
1122
|
+
ensureIsNotNested('xdescribe');
|
1079
1123
|
ensureIsFunction(specDefinitions, 'xdescribe');
|
1080
1124
|
var suite = suiteFactory(description);
|
1081
1125
|
suite.pend();
|
@@ -1086,6 +1130,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1086
1130
|
var focusedRunnables = [];
|
1087
1131
|
|
1088
1132
|
this.fdescribe = function(description, specDefinitions) {
|
1133
|
+
ensureIsNotNested('fdescribe');
|
1089
1134
|
ensureIsFunction(specDefinitions, 'fdescribe');
|
1090
1135
|
var suite = suiteFactory(description);
|
1091
1136
|
suite.isFocused = true;
|
@@ -1183,6 +1228,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1183
1228
|
};
|
1184
1229
|
|
1185
1230
|
this.it = function(description, fn, timeout) {
|
1231
|
+
ensureIsNotNested('it');
|
1186
1232
|
// it() sometimes doesn't have a fn argument, so only check the type if
|
1187
1233
|
// it's given.
|
1188
1234
|
if (arguments.length > 1 && typeof fn !== 'undefined') {
|
@@ -1197,6 +1243,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1197
1243
|
};
|
1198
1244
|
|
1199
1245
|
this.xit = function(description, fn, timeout) {
|
1246
|
+
ensureIsNotNested('xit');
|
1200
1247
|
// xit(), like it(), doesn't always have a fn argument, so only check the
|
1201
1248
|
// type when needed.
|
1202
1249
|
if (arguments.length > 1 && typeof fn !== 'undefined') {
|
@@ -1208,6 +1255,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1208
1255
|
};
|
1209
1256
|
|
1210
1257
|
this.fit = function(description, fn, timeout){
|
1258
|
+
ensureIsNotNested('fit');
|
1211
1259
|
ensureIsFunctionOrAsync(fn, 'fit');
|
1212
1260
|
var spec = specFactory(description, fn, currentDeclarationSuite, timeout);
|
1213
1261
|
currentDeclarationSuite.addChild(spec);
|
@@ -1225,6 +1273,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1225
1273
|
};
|
1226
1274
|
|
1227
1275
|
this.beforeEach = function(beforeEachFunction, timeout) {
|
1276
|
+
ensureIsNotNested('beforeEach');
|
1228
1277
|
ensureIsFunctionOrAsync(beforeEachFunction, 'beforeEach');
|
1229
1278
|
currentDeclarationSuite.beforeEach({
|
1230
1279
|
fn: beforeEachFunction,
|
@@ -1233,6 +1282,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1233
1282
|
};
|
1234
1283
|
|
1235
1284
|
this.beforeAll = function(beforeAllFunction, timeout) {
|
1285
|
+
ensureIsNotNested('beforeAll');
|
1236
1286
|
ensureIsFunctionOrAsync(beforeAllFunction, 'beforeAll');
|
1237
1287
|
currentDeclarationSuite.beforeAll({
|
1238
1288
|
fn: beforeAllFunction,
|
@@ -1241,6 +1291,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1241
1291
|
};
|
1242
1292
|
|
1243
1293
|
this.afterEach = function(afterEachFunction, timeout) {
|
1294
|
+
ensureIsNotNested('afterEach');
|
1244
1295
|
ensureIsFunctionOrAsync(afterEachFunction, 'afterEach');
|
1245
1296
|
afterEachFunction.isCleanup = true;
|
1246
1297
|
currentDeclarationSuite.afterEach({
|
@@ -1250,6 +1301,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|
1250
1301
|
};
|
1251
1302
|
|
1252
1303
|
this.afterAll = function(afterAllFunction, timeout) {
|
1304
|
+
ensureIsNotNested('afterAll');
|
1253
1305
|
ensureIsFunctionOrAsync(afterAllFunction, 'afterAll');
|
1254
1306
|
currentDeclarationSuite.afterAll({
|
1255
1307
|
fn: afterAllFunction,
|
@@ -1465,6 +1517,12 @@ getJasmineRequireObj().Any = function(j$) {
|
|
1465
1517
|
return typeof other == 'boolean';
|
1466
1518
|
}
|
1467
1519
|
|
1520
|
+
/* jshint -W122 */
|
1521
|
+
if (typeof Symbol != 'undefined' && this.expectedObject == Symbol) {
|
1522
|
+
return typeof other == 'symbol';
|
1523
|
+
}
|
1524
|
+
/* jshint +W122 */
|
1525
|
+
|
1468
1526
|
return other instanceof this.expectedObject;
|
1469
1527
|
};
|
1470
1528
|
|
@@ -1629,25 +1687,9 @@ getJasmineRequireObj().CallTracker = function(j$) {
|
|
1629
1687
|
var calls = [];
|
1630
1688
|
var opts = {};
|
1631
1689
|
|
1632
|
-
function argCloner(context) {
|
1633
|
-
var clonedArgs = [];
|
1634
|
-
var argsAsArray = j$.util.argsToArray(context.args);
|
1635
|
-
for(var i = 0; i < argsAsArray.length; i++) {
|
1636
|
-
var str = Object.prototype.toString.apply(argsAsArray[i]),
|
1637
|
-
primitives = /^\[object (Boolean|String|RegExp|Number)/;
|
1638
|
-
|
1639
|
-
if (argsAsArray[i] == null || str.match(primitives)) {
|
1640
|
-
clonedArgs.push(argsAsArray[i]);
|
1641
|
-
} else {
|
1642
|
-
clonedArgs.push(j$.util.clone(argsAsArray[i]));
|
1643
|
-
}
|
1644
|
-
}
|
1645
|
-
context.args = clonedArgs;
|
1646
|
-
}
|
1647
|
-
|
1648
1690
|
this.track = function(context) {
|
1649
1691
|
if(opts.cloneArgs) {
|
1650
|
-
|
1692
|
+
context.args = j$.util.cloneArgs(context.args);
|
1651
1693
|
}
|
1652
1694
|
calls.push(context);
|
1653
1695
|
};
|
@@ -1823,6 +1865,9 @@ getJasmineRequireObj().clearStack = function(j$) {
|
|
1823
1865
|
};
|
1824
1866
|
|
1825
1867
|
getJasmineRequireObj().Clock = function() {
|
1868
|
+
|
1869
|
+
var NODE_JS = typeof process !== 'undefined' && process.versions && typeof process.versions.node === 'string';
|
1870
|
+
|
1826
1871
|
/**
|
1827
1872
|
* _Note:_ Do not construct this directly, Jasmine will make one during booting. You can get the current clock with {@link jasmine.clock}.
|
1828
1873
|
* @class Clock
|
@@ -1846,6 +1891,7 @@ getJasmineRequireObj().Clock = function() {
|
|
1846
1891
|
delayedFunctionScheduler,
|
1847
1892
|
timer;
|
1848
1893
|
|
1894
|
+
self.FakeTimeout = FakeTimeout;
|
1849
1895
|
|
1850
1896
|
/**
|
1851
1897
|
* Install the mock clock over the built-in methods.
|
@@ -1969,7 +2015,15 @@ getJasmineRequireObj().Clock = function() {
|
|
1969
2015
|
}
|
1970
2016
|
|
1971
2017
|
function setTimeout(fn, delay) {
|
1972
|
-
|
2018
|
+
if (!NODE_JS) {
|
2019
|
+
return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));
|
2020
|
+
}
|
2021
|
+
|
2022
|
+
var timeout = new FakeTimeout();
|
2023
|
+
|
2024
|
+
delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2), false, timeout);
|
2025
|
+
|
2026
|
+
return timeout;
|
1973
2027
|
}
|
1974
2028
|
|
1975
2029
|
function clearTimeout(id) {
|
@@ -1977,7 +2031,15 @@ getJasmineRequireObj().Clock = function() {
|
|
1977
2031
|
}
|
1978
2032
|
|
1979
2033
|
function setInterval(fn, interval) {
|
1980
|
-
|
2034
|
+
if (!NODE_JS) {
|
2035
|
+
return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);
|
2036
|
+
}
|
2037
|
+
|
2038
|
+
var timeout = new FakeTimeout();
|
2039
|
+
|
2040
|
+
delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true, timeout);
|
2041
|
+
|
2042
|
+
return timeout;
|
1981
2043
|
}
|
1982
2044
|
|
1983
2045
|
function clearInterval(id) {
|
@@ -1989,16 +2051,30 @@ getJasmineRequireObj().Clock = function() {
|
|
1989
2051
|
}
|
1990
2052
|
}
|
1991
2053
|
|
2054
|
+
/**
|
2055
|
+
* Mocks Node.js Timeout class
|
2056
|
+
*/
|
2057
|
+
function FakeTimeout() {}
|
2058
|
+
|
2059
|
+
FakeTimeout.prototype.ref = function () {
|
2060
|
+
return this;
|
2061
|
+
};
|
2062
|
+
|
2063
|
+
FakeTimeout.prototype.unref = function () {
|
2064
|
+
return this;
|
2065
|
+
};
|
2066
|
+
|
1992
2067
|
return Clock;
|
1993
2068
|
};
|
1994
2069
|
|
1995
|
-
getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
2070
|
+
getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
1996
2071
|
function DelayedFunctionScheduler() {
|
1997
2072
|
var self = this;
|
1998
2073
|
var scheduledLookup = [];
|
1999
2074
|
var scheduledFunctions = {};
|
2000
2075
|
var currentTime = 0;
|
2001
2076
|
var delayedFnCount = 0;
|
2077
|
+
var deletedKeys = [];
|
2002
2078
|
|
2003
2079
|
self.tick = function(millis, tickDate) {
|
2004
2080
|
millis = millis || 0;
|
@@ -2045,6 +2121,8 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
|
2045
2121
|
};
|
2046
2122
|
|
2047
2123
|
self.removeFunctionWithId = function(timeoutKey) {
|
2124
|
+
deletedKeys.push(timeoutKey);
|
2125
|
+
|
2048
2126
|
for (var runAtMillis in scheduledFunctions) {
|
2049
2127
|
var funcs = scheduledFunctions[runAtMillis];
|
2050
2128
|
var i = indexOfFirstToPass(funcs, function (func) {
|
@@ -2121,6 +2199,7 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
|
2121
2199
|
currentTime = newCurrentTime;
|
2122
2200
|
|
2123
2201
|
var funcsToRun = scheduledFunctions[currentTime];
|
2202
|
+
|
2124
2203
|
delete scheduledFunctions[currentTime];
|
2125
2204
|
|
2126
2205
|
forEachFunction(funcsToRun, function(funcToRun) {
|
@@ -2130,8 +2209,13 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() {
|
|
2130
2209
|
});
|
2131
2210
|
|
2132
2211
|
forEachFunction(funcsToRun, function(funcToRun) {
|
2212
|
+
if (j$.util.arrayContains(deletedKeys, funcToRun.timeoutKey)) {
|
2213
|
+
// skip a timeoutKey deleted whilst we were running
|
2214
|
+
return;
|
2215
|
+
}
|
2133
2216
|
funcToRun.funcToCall.apply(null, funcToRun.params || []);
|
2134
2217
|
});
|
2218
|
+
deletedKeys = [];
|
2135
2219
|
} while (scheduledLookup.length > 0 &&
|
2136
2220
|
// checking first if we're out of time prevents setTimeout(0)
|
2137
2221
|
// scheduled in a funcToRun from forcing an extra iteration
|
@@ -2660,6 +2744,12 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2660
2744
|
return false;
|
2661
2745
|
}
|
2662
2746
|
|
2747
|
+
var aIsPromise = j$.isPromise(a);
|
2748
|
+
var bIsPromise = j$.isPromise(b);
|
2749
|
+
if (aIsPromise && bIsPromise) {
|
2750
|
+
return a === b;
|
2751
|
+
}
|
2752
|
+
|
2663
2753
|
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
2664
2754
|
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
2665
2755
|
var length = aStack.length;
|
@@ -2693,22 +2783,46 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2693
2783
|
if (!result) {
|
2694
2784
|
return false;
|
2695
2785
|
}
|
2696
|
-
} else if (
|
2786
|
+
} else if (j$.isMap(a) && j$.isMap(b)) {
|
2697
2787
|
if (a.size != b.size) {
|
2698
2788
|
diffBuilder.record(a, b);
|
2699
2789
|
return false;
|
2700
2790
|
}
|
2701
2791
|
|
2702
|
-
|
2703
|
-
var
|
2704
|
-
|
2792
|
+
var keysA = [];
|
2793
|
+
var keysB = [];
|
2794
|
+
a.forEach( function( valueA, keyA ) {
|
2795
|
+
keysA.push( keyA );
|
2796
|
+
});
|
2797
|
+
b.forEach( function( valueB, keyB ) {
|
2798
|
+
keysB.push( keyB );
|
2799
|
+
});
|
2800
|
+
|
2801
|
+
// For both sets of keys, check they map to equal values in both maps.
|
2802
|
+
// Keep track of corresponding keys (in insertion order) in order to handle asymmetric obj keys.
|
2803
|
+
var mapKeys = [keysA, keysB];
|
2804
|
+
var cmpKeys = [keysB, keysA];
|
2805
|
+
var mapIter, mapKey, mapValueA, mapValueB;
|
2806
|
+
var cmpIter, cmpKey;
|
2705
2807
|
for (i = 0; result && i < mapKeys.length; i++) {
|
2706
2808
|
mapIter = mapKeys[i];
|
2707
|
-
|
2708
|
-
|
2709
|
-
|
2710
|
-
|
2711
|
-
|
2809
|
+
cmpIter = cmpKeys[i];
|
2810
|
+
|
2811
|
+
for (var j = 0; result && j < mapIter.length; j++) {
|
2812
|
+
mapKey = mapIter[j];
|
2813
|
+
cmpKey = cmpIter[j];
|
2814
|
+
mapValueA = a.get(mapKey);
|
2815
|
+
|
2816
|
+
// Only use the cmpKey when one of the keys is asymmetric and the corresponding key matches,
|
2817
|
+
// otherwise explicitly look up the mapKey in the other Map since we want keys with unique
|
2818
|
+
// obj identity (that are otherwise equal) to not match.
|
2819
|
+
if (isAsymmetric(mapKey) || isAsymmetric(cmpKey) &&
|
2820
|
+
eq(mapKey, cmpKey, aStack, bStack, customTesters, j$.NullDiffBuilder())) {
|
2821
|
+
mapValueB = b.get(cmpKey);
|
2822
|
+
} else {
|
2823
|
+
mapValueB = b.get(mapKey);
|
2824
|
+
}
|
2825
|
+
result = eq(mapValueA, mapValueB, aStack, bStack, customTesters, j$.NullDiffBuilder());
|
2712
2826
|
}
|
2713
2827
|
}
|
2714
2828
|
|
@@ -2716,36 +2830,49 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|
2716
2830
|
diffBuilder.record(a, b);
|
2717
2831
|
return false;
|
2718
2832
|
}
|
2719
|
-
} else if (
|
2833
|
+
} else if (j$.isSet(a) && j$.isSet(b)) {
|
2720
2834
|
if (a.size != b.size) {
|
2721
2835
|
diffBuilder.record(a, b);
|
2722
2836
|
return false;
|
2723
2837
|
}
|
2724
2838
|
|
2839
|
+
var valuesA = [];
|
2840
|
+
a.forEach( function( valueA ) {
|
2841
|
+
valuesA.push( valueA );
|
2842
|
+
});
|
2843
|
+
var valuesB = [];
|
2844
|
+
b.forEach( function( valueB ) {
|
2845
|
+
valuesB.push( valueB );
|
2846
|
+
});
|
2847
|
+
|
2725
2848
|
// For both sets, check they are all contained in the other set
|
2726
|
-
var setPairs = [[
|
2727
|
-
var
|
2728
|
-
var
|
2849
|
+
var setPairs = [[valuesA, valuesB], [valuesB, valuesA]];
|
2850
|
+
var stackPairs = [[aStack, bStack], [bStack, aStack]];
|
2851
|
+
var baseValues, baseValue, baseStack;
|
2852
|
+
var otherValues, otherValue, otherStack;
|
2853
|
+
var found;
|
2854
|
+
var prevStackSize;
|
2729
2855
|
for (i = 0; result && i < setPairs.length; i++) {
|
2730
|
-
|
2731
|
-
|
2856
|
+
baseValues = setPairs[i][0];
|
2857
|
+
otherValues = setPairs[i][1];
|
2858
|
+
baseStack = stackPairs[i][0];
|
2859
|
+
otherStack = stackPairs[i][1];
|
2732
2860
|
// For each value in the base set...
|
2733
|
-
|
2734
|
-
|
2735
|
-
|
2861
|
+
for (var k = 0; result && k < baseValues.length; k++) {
|
2862
|
+
baseValue = baseValues[k];
|
2863
|
+
found = false;
|
2736
2864
|
// ... test that it is present in the other set
|
2737
|
-
|
2738
|
-
|
2739
|
-
|
2740
|
-
|
2741
|
-
|
2742
|
-
|
2743
|
-
|
2744
|
-
|
2745
|
-
|
2865
|
+
for (var l = 0; !found && l < otherValues.length; l++) {
|
2866
|
+
otherValue = otherValues[l];
|
2867
|
+
prevStackSize = baseStack.length;
|
2868
|
+
// compare by value equality
|
2869
|
+
found = eq(baseValue, otherValue, baseStack, otherStack, customTesters, j$.NullDiffBuilder());
|
2870
|
+
if (!found && prevStackSize !== baseStack.length) {
|
2871
|
+
baseStack.splice(prevStackSize);
|
2872
|
+
otherStack.splice(prevStackSize);
|
2873
|
+
}
|
2746
2874
|
}
|
2747
2875
|
result = result && found;
|
2748
|
-
baseValueIt = baseIter.next();
|
2749
2876
|
}
|
2750
2877
|
}
|
2751
2878
|
|
@@ -3891,6 +4018,8 @@ getJasmineRequireObj().pp = function(j$) {
|
|
3891
4018
|
function PrettyPrinter() {
|
3892
4019
|
this.ppNestLevel_ = 0;
|
3893
4020
|
this.seen = [];
|
4021
|
+
this.length = 0;
|
4022
|
+
this.stringParts = [];
|
3894
4023
|
}
|
3895
4024
|
|
3896
4025
|
function hasCustomToString(value) {
|
@@ -3924,9 +4053,9 @@ getJasmineRequireObj().pp = function(j$) {
|
|
3924
4053
|
this.emitScalar('HTMLNode');
|
3925
4054
|
} else if (value instanceof Date) {
|
3926
4055
|
this.emitScalar('Date(' + value + ')');
|
3927
|
-
} else if (j$.
|
4056
|
+
} else if (j$.isSet(value)) {
|
3928
4057
|
this.emitSet(value);
|
3929
|
-
} else if (j$.
|
4058
|
+
} else if (j$.isMap(value)) {
|
3930
4059
|
this.emitMap(value);
|
3931
4060
|
} else if (j$.isTypedArray_(value)) {
|
3932
4061
|
this.emitTypedArray(value);
|
@@ -3945,6 +4074,10 @@ getJasmineRequireObj().pp = function(j$) {
|
|
3945
4074
|
} else {
|
3946
4075
|
this.emitScalar(value.toString());
|
3947
4076
|
}
|
4077
|
+
} catch (e) {
|
4078
|
+
if (this.ppNestLevel_ > 1 || !(e instanceof MaxCharsReachedError)) {
|
4079
|
+
throw e;
|
4080
|
+
}
|
3948
4081
|
} finally {
|
3949
4082
|
this.ppNestLevel_--;
|
3950
4083
|
}
|
@@ -3970,30 +4103,15 @@ getJasmineRequireObj().pp = function(j$) {
|
|
3970
4103
|
return objKeys.length > length;
|
3971
4104
|
};
|
3972
4105
|
|
3973
|
-
PrettyPrinter.prototype.
|
3974
|
-
PrettyPrinter.prototype.emitSet = j$.unimplementedMethod_;
|
3975
|
-
PrettyPrinter.prototype.emitMap = j$.unimplementedMethod_;
|
3976
|
-
PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_;
|
3977
|
-
PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_;
|
3978
|
-
PrettyPrinter.prototype.emitString = j$.unimplementedMethod_;
|
3979
|
-
|
3980
|
-
function StringPrettyPrinter() {
|
3981
|
-
PrettyPrinter.call(this);
|
3982
|
-
|
3983
|
-
this.stringParts = [];
|
3984
|
-
}
|
3985
|
-
|
3986
|
-
j$.util.inherit(StringPrettyPrinter, PrettyPrinter);
|
3987
|
-
|
3988
|
-
StringPrettyPrinter.prototype.emitScalar = function(value) {
|
4106
|
+
PrettyPrinter.prototype.emitScalar = function(value) {
|
3989
4107
|
this.append(value);
|
3990
4108
|
};
|
3991
4109
|
|
3992
|
-
|
4110
|
+
PrettyPrinter.prototype.emitString = function(value) {
|
3993
4111
|
this.append('\'' + value + '\'');
|
3994
4112
|
};
|
3995
4113
|
|
3996
|
-
|
4114
|
+
PrettyPrinter.prototype.emitArray = function(array) {
|
3997
4115
|
if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
|
3998
4116
|
this.append('Array');
|
3999
4117
|
return;
|
@@ -4027,47 +4145,57 @@ getJasmineRequireObj().pp = function(j$) {
|
|
4027
4145
|
this.append(' ]');
|
4028
4146
|
};
|
4029
4147
|
|
4030
|
-
|
4148
|
+
PrettyPrinter.prototype.emitSet = function(set) {
|
4031
4149
|
if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
|
4032
4150
|
this.append('Set');
|
4033
4151
|
return;
|
4034
4152
|
}
|
4035
4153
|
this.append('Set( ');
|
4036
4154
|
var size = Math.min(set.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);
|
4037
|
-
var
|
4038
|
-
|
4155
|
+
var i = 0;
|
4156
|
+
set.forEach( function( value, key ) {
|
4157
|
+
if (i >= size) {
|
4158
|
+
return;
|
4159
|
+
}
|
4039
4160
|
if (i > 0) {
|
4040
4161
|
this.append(', ');
|
4041
4162
|
}
|
4042
|
-
this.format(
|
4043
|
-
|
4163
|
+
this.format(value);
|
4164
|
+
|
4165
|
+
i++;
|
4166
|
+
}, this );
|
4044
4167
|
if (set.size > size){
|
4045
4168
|
this.append(', ...');
|
4046
4169
|
}
|
4047
4170
|
this.append(' )');
|
4048
4171
|
};
|
4049
4172
|
|
4050
|
-
|
4173
|
+
PrettyPrinter.prototype.emitMap = function(map) {
|
4051
4174
|
if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
|
4052
4175
|
this.append('Map');
|
4053
4176
|
return;
|
4054
4177
|
}
|
4055
4178
|
this.append('Map( ');
|
4056
4179
|
var size = Math.min(map.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);
|
4057
|
-
var
|
4058
|
-
|
4180
|
+
var i = 0;
|
4181
|
+
map.forEach( function( value, key ) {
|
4182
|
+
if (i >= size) {
|
4183
|
+
return;
|
4184
|
+
}
|
4059
4185
|
if (i > 0) {
|
4060
4186
|
this.append(', ');
|
4061
4187
|
}
|
4062
|
-
this.format(
|
4063
|
-
|
4188
|
+
this.format([key,value]);
|
4189
|
+
|
4190
|
+
i++;
|
4191
|
+
}, this );
|
4064
4192
|
if (map.size > size){
|
4065
4193
|
this.append(', ...');
|
4066
4194
|
}
|
4067
4195
|
this.append(' )');
|
4068
4196
|
};
|
4069
4197
|
|
4070
|
-
|
4198
|
+
PrettyPrinter.prototype.emitObject = function(obj) {
|
4071
4199
|
var ctor = obj.constructor,
|
4072
4200
|
constructorName;
|
4073
4201
|
|
@@ -4100,7 +4228,7 @@ getJasmineRequireObj().pp = function(j$) {
|
|
4100
4228
|
this.append(' })');
|
4101
4229
|
};
|
4102
4230
|
|
4103
|
-
|
4231
|
+
PrettyPrinter.prototype.emitTypedArray = function(arr) {
|
4104
4232
|
var constructorName = j$.fnNameFor(arr.constructor),
|
4105
4233
|
limitedArray = Array.prototype.slice.call(arr, 0, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH),
|
4106
4234
|
itemsString = Array.prototype.join.call(limitedArray, ', ');
|
@@ -4112,7 +4240,7 @@ getJasmineRequireObj().pp = function(j$) {
|
|
4112
4240
|
this.append(constructorName + ' [ ' + itemsString + ' ]');
|
4113
4241
|
};
|
4114
4242
|
|
4115
|
-
|
4243
|
+
PrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) {
|
4116
4244
|
this.append(property);
|
4117
4245
|
this.append(': ');
|
4118
4246
|
if (isGetter) {
|
@@ -4122,10 +4250,33 @@ getJasmineRequireObj().pp = function(j$) {
|
|
4122
4250
|
}
|
4123
4251
|
};
|
4124
4252
|
|
4125
|
-
|
4126
|
-
this.
|
4253
|
+
PrettyPrinter.prototype.append = function(value) {
|
4254
|
+
var result = truncate(value, j$.MAX_PRETTY_PRINT_CHARS - this.length);
|
4255
|
+
this.length += result.value.length;
|
4256
|
+
this.stringParts.push(result.value);
|
4257
|
+
|
4258
|
+
if (result.truncated) {
|
4259
|
+
throw new MaxCharsReachedError();
|
4260
|
+
}
|
4127
4261
|
};
|
4128
4262
|
|
4263
|
+
|
4264
|
+
function truncate(s, maxlen) {
|
4265
|
+
if (s.length <= maxlen) {
|
4266
|
+
return { value: s, truncated: false };
|
4267
|
+
}
|
4268
|
+
|
4269
|
+
s = s.substring(0, maxlen - 4) + ' ...';
|
4270
|
+
return { value: s, truncated: true };
|
4271
|
+
}
|
4272
|
+
|
4273
|
+
function MaxCharsReachedError() {
|
4274
|
+
this.message = 'Exceeded ' + j$.MAX_PRETTY_PRINT_CHARS +
|
4275
|
+
' characters while pretty-printing a value';
|
4276
|
+
}
|
4277
|
+
|
4278
|
+
MaxCharsReachedError.prototype = new Error();
|
4279
|
+
|
4129
4280
|
function keys(obj, isArray) {
|
4130
4281
|
var allKeys = Object.keys ? Object.keys(obj) :
|
4131
4282
|
(function(o) {
|
@@ -4156,9 +4307,9 @@ getJasmineRequireObj().pp = function(j$) {
|
|
4156
4307
|
return extraKeys;
|
4157
4308
|
}
|
4158
4309
|
return function(value) {
|
4159
|
-
var
|
4160
|
-
|
4161
|
-
return
|
4310
|
+
var prettyPrinter = new PrettyPrinter();
|
4311
|
+
prettyPrinter.format(value);
|
4312
|
+
return prettyPrinter.stringParts.join('');
|
4162
4313
|
};
|
4163
4314
|
};
|
4164
4315
|
|
@@ -4289,7 +4440,7 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|
4289
4440
|
var maybeThenable = queueableFn.fn.call(self.userContext);
|
4290
4441
|
|
4291
4442
|
if (maybeThenable && j$.isFunction_(maybeThenable.then)) {
|
4292
|
-
maybeThenable.then(next,
|
4443
|
+
maybeThenable.then(next, onPromiseRejection);
|
4293
4444
|
completedSynchronously = false;
|
4294
4445
|
return { completedSynchronously: false };
|
4295
4446
|
}
|
@@ -4311,6 +4462,11 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|
4311
4462
|
errored = true;
|
4312
4463
|
}
|
4313
4464
|
|
4465
|
+
function onPromiseRejection(e) {
|
4466
|
+
onException(e);
|
4467
|
+
next();
|
4468
|
+
}
|
4469
|
+
|
4314
4470
|
function handleException(e, queueableFn) {
|
4315
4471
|
onException(e);
|
4316
4472
|
if (!self.catchException(e)) {
|
@@ -4325,7 +4481,7 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|
4325
4481
|
return QueueRunner;
|
4326
4482
|
};
|
4327
4483
|
|
4328
|
-
getJasmineRequireObj().ReportDispatcher = function() {
|
4484
|
+
getJasmineRequireObj().ReportDispatcher = function(j$) {
|
4329
4485
|
function ReportDispatcher(methods) {
|
4330
4486
|
|
4331
4487
|
var dispatchedMethods = methods || [];
|
@@ -4363,7 +4519,7 @@ getJasmineRequireObj().ReportDispatcher = function() {
|
|
4363
4519
|
for (var i = 0; i < reporters.length; i++) {
|
4364
4520
|
var reporter = reporters[i];
|
4365
4521
|
if (reporter[method]) {
|
4366
|
-
reporter[method].apply(reporter, args);
|
4522
|
+
reporter[method].apply(reporter, j$.util.cloneArgs(args));
|
4367
4523
|
}
|
4368
4524
|
}
|
4369
4525
|
}
|
@@ -4572,7 +4728,7 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|
4572
4728
|
},
|
4573
4729
|
|
4574
4730
|
/**
|
4575
|
-
* Install a spy on a property onto an existing object.
|
4731
|
+
* Install a spy on a property installed with `Object.defineProperty` onto an existing object.
|
4576
4732
|
* @name spyOnProperty
|
4577
4733
|
* @function
|
4578
4734
|
* @global
|
@@ -4720,6 +4876,7 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
|
|
4720
4876
|
|
4721
4877
|
function SpyRegistry(options) {
|
4722
4878
|
options = options || {};
|
4879
|
+
var global = options.global || j$.getGlobal();
|
4723
4880
|
var currentSpies = options.currentSpies || function() { return []; };
|
4724
4881
|
|
4725
4882
|
this.allowRespy = function(allow){
|
@@ -4763,7 +4920,7 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
|
|
4763
4920
|
spiedMethod = j$.createSpy(methodName, originalMethod),
|
4764
4921
|
restoreStrategy;
|
4765
4922
|
|
4766
|
-
if (Object.prototype.hasOwnProperty.call(obj, methodName)) {
|
4923
|
+
if (Object.prototype.hasOwnProperty.call(obj, methodName) || (obj === global && methodName === 'onerror')) {
|
4767
4924
|
restoreStrategy = function() {
|
4768
4925
|
obj[methodName] = originalMethod;
|
4769
4926
|
};
|
@@ -4946,7 +5103,7 @@ getJasmineRequireObj().SpyStrategy = function(j$) {
|
|
4946
5103
|
* @param {Function} fn The function to invoke with the passed parameters.
|
4947
5104
|
*/
|
4948
5105
|
this.callFake = function(fn) {
|
4949
|
-
if(!j$.isFunction_(fn)) {
|
5106
|
+
if(!(j$.isFunction_(fn) || j$.isAsyncFunction_(fn))) {
|
4950
5107
|
throw new Error('Argument passed to callFake should be a function, got ' + fn);
|
4951
5108
|
}
|
4952
5109
|
plan = fn;
|
@@ -5381,5 +5538,5 @@ getJasmineRequireObj().UserContext = function(j$) {
|
|
5381
5538
|
};
|
5382
5539
|
|
5383
5540
|
getJasmineRequireObj().version = function() {
|
5384
|
-
return '2.
|
5541
|
+
return '2.9.0';
|
5385
5542
|
};
|