evergreen 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +30 -4
- data/config/routes.rb +1 -1
- data/lib/evergreen.rb +14 -50
- data/lib/evergreen/application.rb +46 -0
- data/lib/evergreen/cli.rb +2 -2
- data/lib/evergreen/rails.rb +4 -0
- data/lib/evergreen/resources/evergreen.css +3 -1
- data/lib/evergreen/resources/evergreen.js +3 -0
- data/lib/evergreen/runner.rb +124 -36
- data/lib/evergreen/server.rb +9 -18
- data/lib/evergreen/spec.rb +26 -14
- data/lib/evergreen/suite.rb +44 -0
- data/lib/evergreen/tasks.rb +6 -0
- data/lib/evergreen/template.rb +7 -10
- data/lib/evergreen/version.rb +1 -1
- data/lib/evergreen/views/layout.erb +1 -0
- data/lib/evergreen/views/list.erb +2 -2
- data/lib/evergreen/views/spec.erb +18 -10
- data/lib/jasmine/Gemfile +6 -0
- data/lib/jasmine/MIT.LICENSE +2 -2
- data/lib/jasmine/README.markdown +5 -459
- data/lib/jasmine/Rakefile +22 -16
- data/lib/jasmine/example/SpecRunner.html +1 -1
- data/lib/jasmine/jsdoc-template/allclasses.tmpl +17 -0
- data/lib/jasmine/jsdoc-template/allfiles.tmpl +56 -0
- data/lib/jasmine/jsdoc-template/class.tmpl +646 -0
- data/lib/jasmine/jsdoc-template/index.tmpl +39 -0
- data/lib/jasmine/jsdoc-template/publish.js +184 -0
- data/lib/jasmine/jsdoc-template/static/default.css +162 -0
- data/lib/jasmine/jsdoc-template/static/header.html +2 -0
- data/lib/jasmine/jsdoc-template/static/index.html +19 -0
- data/lib/jasmine/jsdoc-template/symbol.tmpl +35 -0
- data/lib/jasmine/lib/jasmine-html.js +12 -6
- data/lib/jasmine/lib/jasmine.js +122 -44
- data/lib/jasmine/spec/runner.html +0 -1
- data/lib/jasmine/spec/suites/CustomMatchersSpec.js +18 -9
- data/lib/jasmine/spec/suites/MatchersSpec.js +241 -162
- data/lib/jasmine/spec/suites/SpecRunningSpec.js +120 -62
- data/lib/jasmine/spec/suites/TrivialReporterSpec.js +3 -0
- data/lib/jasmine/spec/suites/WaitsForBlockSpec.js +9 -9
- data/lib/jasmine/src/Env.js +1 -0
- data/lib/jasmine/src/Matchers.js +35 -17
- data/lib/jasmine/src/Queue.js +6 -1
- data/lib/jasmine/src/Spec.js +34 -2
- data/lib/jasmine/src/WaitsForBlock.js +28 -13
- data/lib/jasmine/src/base.js +15 -8
- data/lib/jasmine/src/html/TrivialReporter.js +12 -6
- data/lib/jasmine/src/version.json +2 -2
- data/lib/tasks/evergreen.rake +1 -1
- data/spec/meta_spec.rb +21 -2
- data/spec/runner_spec.rb +16 -18
- data/spec/spec_helper.rb +12 -4
- data/spec/spec_spec.rb +4 -11
- data/spec/suite1/spec/javascripts/invalid_coffee_spec.coffee +1 -0
- data/spec/suite1/spec/javascripts/spec_helper.coffee +1 -1
- data/spec/suite2/config/evergreen.rb +5 -0
- data/spec/suite2/public_html/foo.js +1 -0
- data/spec/suite2/spec/awesome_spec.js +12 -0
- data/spec/suite2/spec/failing_spec.js +5 -0
- data/spec/suite2/templates/foo.html +1 -0
- data/spec/suite_spec.rb +26 -0
- data/spec/template_spec.rb +3 -9
- metadata +52 -20
- data/lib/jasmine/lib/consolex.js +0 -28
data/lib/jasmine/lib/jasmine.js
CHANGED
@@ -21,11 +21,16 @@ jasmine.unimplementedMethod_ = function() {
|
|
21
21
|
jasmine.undefined = jasmine.___undefined___;
|
22
22
|
|
23
23
|
/**
|
24
|
-
* Default interval for event loop yields. Small values here may result in slow test running. Zero means no updates until all tests have completed.
|
24
|
+
* Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
|
25
25
|
*
|
26
26
|
*/
|
27
27
|
jasmine.DEFAULT_UPDATE_INTERVAL = 250;
|
28
28
|
|
29
|
+
/**
|
30
|
+
* Default timeout interval in milliseconds for waitsFor() blocks.
|
31
|
+
*/
|
32
|
+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
|
33
|
+
|
29
34
|
jasmine.getGlobal = function() {
|
30
35
|
function getGlobal() {
|
31
36
|
return this;
|
@@ -490,22 +495,24 @@ var runs = function(func) {
|
|
490
495
|
};
|
491
496
|
|
492
497
|
/**
|
493
|
-
* Waits
|
494
|
-
*
|
498
|
+
* Waits a fixed time period before moving to the next block.
|
499
|
+
*
|
500
|
+
* @deprecated Use waitsFor() instead
|
501
|
+
* @param {Number} timeout milliseconds to wait
|
495
502
|
*/
|
496
503
|
var waits = function(timeout) {
|
497
504
|
jasmine.getEnv().currentSpec.waits(timeout);
|
498
505
|
};
|
499
506
|
|
500
507
|
/**
|
501
|
-
* Waits for the latchFunction to return true before proceeding to the next
|
508
|
+
* Waits for the latchFunction to return true before proceeding to the next block.
|
502
509
|
*
|
503
|
-
* @param {Number} timeout
|
504
510
|
* @param {Function} latchFunction
|
505
|
-
* @param {String}
|
511
|
+
* @param {String} optional_timeoutMessage
|
512
|
+
* @param {Number} optional_timeout
|
506
513
|
*/
|
507
|
-
var waitsFor = function(
|
508
|
-
jasmine.getEnv().currentSpec.waitsFor(
|
514
|
+
var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
|
515
|
+
jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
|
509
516
|
};
|
510
517
|
|
511
518
|
/**
|
@@ -660,6 +667,7 @@ jasmine.Env = function() {
|
|
660
667
|
this.reporter = new jasmine.MultiReporter();
|
661
668
|
|
662
669
|
this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
|
670
|
+
this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
|
663
671
|
this.lastUpdate = 0;
|
664
672
|
this.specFilter = function() {
|
665
673
|
return true;
|
@@ -1135,7 +1143,7 @@ jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
|
|
1135
1143
|
message: message
|
1136
1144
|
});
|
1137
1145
|
this.spec.addMatcherResult(expectationResult);
|
1138
|
-
return
|
1146
|
+
return jasmine.undefined;
|
1139
1147
|
};
|
1140
1148
|
};
|
1141
1149
|
|
@@ -1153,6 +1161,7 @@ jasmine.Matchers.prototype.toBe = function(expected) {
|
|
1153
1161
|
/**
|
1154
1162
|
* toNotBe: compares the actual to the expected using !==
|
1155
1163
|
* @param expected
|
1164
|
+
* @deprecated as of 1.0. Use not.toBe() instead.
|
1156
1165
|
*/
|
1157
1166
|
jasmine.Matchers.prototype.toNotBe = function(expected) {
|
1158
1167
|
return this.actual !== expected;
|
@@ -1170,6 +1179,7 @@ jasmine.Matchers.prototype.toEqual = function(expected) {
|
|
1170
1179
|
/**
|
1171
1180
|
* toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
|
1172
1181
|
* @param expected
|
1182
|
+
* @deprecated as of 1.0. Use not.toNotEqual() instead.
|
1173
1183
|
*/
|
1174
1184
|
jasmine.Matchers.prototype.toNotEqual = function(expected) {
|
1175
1185
|
return !this.env.equals_(this.actual, expected);
|
@@ -1188,6 +1198,7 @@ jasmine.Matchers.prototype.toMatch = function(expected) {
|
|
1188
1198
|
/**
|
1189
1199
|
* Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
|
1190
1200
|
* @param expected
|
1201
|
+
* @deprecated as of 1.0. Use not.toMatch() instead.
|
1191
1202
|
*/
|
1192
1203
|
jasmine.Matchers.prototype.toNotMatch = function(expected) {
|
1193
1204
|
return !(new RegExp(expected).test(this.actual));
|
@@ -1230,11 +1241,6 @@ jasmine.Matchers.prototype.toBeFalsy = function() {
|
|
1230
1241
|
};
|
1231
1242
|
|
1232
1243
|
|
1233
|
-
/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
|
1234
|
-
jasmine.Matchers.prototype.wasCalled = function() {
|
1235
|
-
return this.toHaveBeenCalled();
|
1236
|
-
};
|
1237
|
-
|
1238
1244
|
/**
|
1239
1245
|
* Matcher that checks to see if the actual, a Jasmine spy, was called.
|
1240
1246
|
*/
|
@@ -1248,12 +1254,18 @@ jasmine.Matchers.prototype.toHaveBeenCalled = function() {
|
|
1248
1254
|
}
|
1249
1255
|
|
1250
1256
|
this.message = function() {
|
1251
|
-
return
|
1257
|
+
return [
|
1258
|
+
"Expected spy " + this.actual.identity + " to have been called.",
|
1259
|
+
"Expected spy " + this.actual.identity + " not to have been called."
|
1260
|
+
];
|
1252
1261
|
};
|
1253
1262
|
|
1254
1263
|
return this.actual.wasCalled;
|
1255
1264
|
};
|
1256
1265
|
|
1266
|
+
/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
|
1267
|
+
jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
|
1268
|
+
|
1257
1269
|
/**
|
1258
1270
|
* Matcher that checks to see if the actual, a Jasmine spy, was not called.
|
1259
1271
|
*
|
@@ -1269,17 +1281,15 @@ jasmine.Matchers.prototype.wasNotCalled = function() {
|
|
1269
1281
|
}
|
1270
1282
|
|
1271
1283
|
this.message = function() {
|
1272
|
-
return
|
1284
|
+
return [
|
1285
|
+
"Expected spy " + this.actual.identity + " to not have been called.",
|
1286
|
+
"Expected spy " + this.actual.identity + " to have been called."
|
1287
|
+
];
|
1273
1288
|
};
|
1274
1289
|
|
1275
1290
|
return !this.actual.wasCalled;
|
1276
1291
|
};
|
1277
1292
|
|
1278
|
-
/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
|
1279
|
-
jasmine.Matchers.prototype.wasCalledWith = function() {
|
1280
|
-
return this.toHaveBeenCalledWith.apply(this, arguments);
|
1281
|
-
};
|
1282
|
-
|
1283
1293
|
/**
|
1284
1294
|
* Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
|
1285
1295
|
*
|
@@ -1293,15 +1303,25 @@ jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
|
|
1293
1303
|
}
|
1294
1304
|
this.message = function() {
|
1295
1305
|
if (this.actual.callCount == 0) {
|
1296
|
-
|
1306
|
+
// todo: what should the failure message for .not.toHaveBeenCalledWith() be? is this right? test better. [xw]
|
1307
|
+
return [
|
1308
|
+
"Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.",
|
1309
|
+
"Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was."
|
1310
|
+
];
|
1297
1311
|
} else {
|
1298
|
-
return
|
1312
|
+
return [
|
1313
|
+
"Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall),
|
1314
|
+
"Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but was called with " + jasmine.pp(this.actual.argsForCall)
|
1315
|
+
];
|
1299
1316
|
}
|
1300
1317
|
};
|
1301
1318
|
|
1302
1319
|
return this.env.contains_(this.actual.argsForCall, expectedArgs);
|
1303
1320
|
};
|
1304
1321
|
|
1322
|
+
/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
|
1323
|
+
jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
|
1324
|
+
|
1305
1325
|
/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
|
1306
1326
|
jasmine.Matchers.prototype.wasNotCalledWith = function() {
|
1307
1327
|
var expectedArgs = jasmine.util.argsToArray(arguments);
|
@@ -1310,7 +1330,10 @@ jasmine.Matchers.prototype.wasNotCalledWith = function() {
|
|
1310
1330
|
}
|
1311
1331
|
|
1312
1332
|
this.message = function() {
|
1313
|
-
return
|
1333
|
+
return [
|
1334
|
+
"Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
|
1335
|
+
"Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
|
1336
|
+
]
|
1314
1337
|
};
|
1315
1338
|
|
1316
1339
|
return !this.env.contains_(this.actual.argsForCall, expectedArgs);
|
@@ -1329,6 +1352,7 @@ jasmine.Matchers.prototype.toContain = function(expected) {
|
|
1329
1352
|
* Matcher that checks that the expected item is NOT an element in the actual Array.
|
1330
1353
|
*
|
1331
1354
|
* @param {Object} expected
|
1355
|
+
* @deprecated as of 1.0. Use not.toNotContain() instead.
|
1332
1356
|
*/
|
1333
1357
|
jasmine.Matchers.prototype.toNotContain = function(expected) {
|
1334
1358
|
return !this.env.contains_(this.actual, expected);
|
@@ -1362,9 +1386,11 @@ jasmine.Matchers.prototype.toThrow = function(expected) {
|
|
1362
1386
|
result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
|
1363
1387
|
}
|
1364
1388
|
|
1389
|
+
var not = this.isNot ? "not " : "";
|
1390
|
+
|
1365
1391
|
this.message = function() {
|
1366
1392
|
if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
|
1367
|
-
return ["Expected function to throw", expected.message || expected, ", but it threw", exception.message || exception].join(' ');
|
1393
|
+
return ["Expected function " + not + "to throw", expected ? expected.message || expected : " an exception", ", but it threw", exception.message || exception].join(' ');
|
1368
1394
|
} else {
|
1369
1395
|
return "Expected function to throw an exception.";
|
1370
1396
|
}
|
@@ -1644,6 +1670,7 @@ jasmine.Queue = function(env) {
|
|
1644
1670
|
this.running = false;
|
1645
1671
|
this.index = 0;
|
1646
1672
|
this.offset = 0;
|
1673
|
+
this.abort = false;
|
1647
1674
|
};
|
1648
1675
|
|
1649
1676
|
jasmine.Queue.prototype.addBefore = function(block) {
|
@@ -1678,7 +1705,7 @@ jasmine.Queue.prototype.next_ = function() {
|
|
1678
1705
|
while (goAgain) {
|
1679
1706
|
goAgain = false;
|
1680
1707
|
|
1681
|
-
if (self.index < self.blocks.length) {
|
1708
|
+
if (self.index < self.blocks.length && !this.abort) {
|
1682
1709
|
var calledSynchronously = true;
|
1683
1710
|
var completedSynchronously = false;
|
1684
1711
|
|
@@ -1688,6 +1715,10 @@ jasmine.Queue.prototype.next_ = function() {
|
|
1688
1715
|
return;
|
1689
1716
|
}
|
1690
1717
|
|
1718
|
+
if (self.blocks[self.index].abort) {
|
1719
|
+
self.abort = true;
|
1720
|
+
}
|
1721
|
+
|
1691
1722
|
self.offset = 0;
|
1692
1723
|
self.index++;
|
1693
1724
|
|
@@ -1884,14 +1915,46 @@ jasmine.Spec.prototype.expect = function(actual) {
|
|
1884
1915
|
return positive;
|
1885
1916
|
};
|
1886
1917
|
|
1918
|
+
/**
|
1919
|
+
* Waits a fixed time period before moving to the next block.
|
1920
|
+
*
|
1921
|
+
* @deprecated Use waitsFor() instead
|
1922
|
+
* @param {Number} timeout milliseconds to wait
|
1923
|
+
*/
|
1887
1924
|
jasmine.Spec.prototype.waits = function(timeout) {
|
1888
1925
|
var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
|
1889
1926
|
this.addToQueue(waitsFunc);
|
1890
1927
|
return this;
|
1891
1928
|
};
|
1892
1929
|
|
1893
|
-
|
1894
|
-
|
1930
|
+
/**
|
1931
|
+
* Waits for the latchFunction to return true before proceeding to the next block.
|
1932
|
+
*
|
1933
|
+
* @param {Function} latchFunction
|
1934
|
+
* @param {String} optional_timeoutMessage
|
1935
|
+
* @param {Number} optional_timeout
|
1936
|
+
*/
|
1937
|
+
jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
|
1938
|
+
var latchFunction_ = null;
|
1939
|
+
var optional_timeoutMessage_ = null;
|
1940
|
+
var optional_timeout_ = null;
|
1941
|
+
|
1942
|
+
for (var i = 0; i < arguments.length; i++) {
|
1943
|
+
var arg = arguments[i];
|
1944
|
+
switch (typeof arg) {
|
1945
|
+
case 'function':
|
1946
|
+
latchFunction_ = arg;
|
1947
|
+
break;
|
1948
|
+
case 'string':
|
1949
|
+
optional_timeoutMessage_ = arg;
|
1950
|
+
break;
|
1951
|
+
case 'number':
|
1952
|
+
optional_timeout_ = arg;
|
1953
|
+
break;
|
1954
|
+
}
|
1955
|
+
}
|
1956
|
+
|
1957
|
+
var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
|
1895
1958
|
this.addToQueue(waitsForFunc);
|
1896
1959
|
return this;
|
1897
1960
|
};
|
@@ -2114,41 +2177,56 @@ jasmine.WaitsBlock.prototype.execute = function (onComplete) {
|
|
2114
2177
|
onComplete();
|
2115
2178
|
}, this.timeout);
|
2116
2179
|
};
|
2180
|
+
/**
|
2181
|
+
* A block which waits for some condition to become true, with timeout.
|
2182
|
+
*
|
2183
|
+
* @constructor
|
2184
|
+
* @extends jasmine.Block
|
2185
|
+
* @param {jasmine.Env} env The Jasmine environment.
|
2186
|
+
* @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
|
2187
|
+
* @param {Function} latchFunction A function which returns true when the desired condition has been met.
|
2188
|
+
* @param {String} message The message to display if the desired condition hasn't been met within the given time period.
|
2189
|
+
* @param {jasmine.Spec} spec The Jasmine spec.
|
2190
|
+
*/
|
2117
2191
|
jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
|
2118
|
-
this.timeout = timeout;
|
2192
|
+
this.timeout = timeout || env.defaultTimeoutInterval;
|
2119
2193
|
this.latchFunction = latchFunction;
|
2120
2194
|
this.message = message;
|
2121
2195
|
this.totalTimeSpentWaitingForLatch = 0;
|
2122
2196
|
jasmine.Block.call(this, env, null, spec);
|
2123
2197
|
};
|
2124
|
-
|
2125
2198
|
jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
|
2126
2199
|
|
2127
|
-
jasmine.WaitsForBlock.TIMEOUT_INCREMENT =
|
2200
|
+
jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
|
2128
2201
|
|
2129
|
-
jasmine.WaitsForBlock.prototype.execute = function
|
2130
|
-
|
2131
|
-
self.env.reporter.log('>> Jasmine waiting for ' + (self.message || 'something to happen'));
|
2202
|
+
jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
|
2203
|
+
this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
|
2132
2204
|
var latchFunctionResult;
|
2133
2205
|
try {
|
2134
|
-
latchFunctionResult =
|
2206
|
+
latchFunctionResult = this.latchFunction.apply(this.spec);
|
2135
2207
|
} catch (e) {
|
2136
|
-
|
2208
|
+
this.spec.fail(e);
|
2137
2209
|
onComplete();
|
2138
2210
|
return;
|
2139
2211
|
}
|
2140
2212
|
|
2141
2213
|
if (latchFunctionResult) {
|
2142
2214
|
onComplete();
|
2143
|
-
} else if (
|
2144
|
-
var message = 'timed out after ' +
|
2145
|
-
|
2215
|
+
} else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
|
2216
|
+
var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
|
2217
|
+
this.spec.fail({
|
2146
2218
|
name: 'timeout',
|
2147
2219
|
message: message
|
2148
2220
|
});
|
2221
|
+
|
2222
|
+
this.abort = true;
|
2223
|
+
onComplete();
|
2149
2224
|
} else {
|
2150
|
-
|
2151
|
-
|
2225
|
+
this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
|
2226
|
+
var self = this;
|
2227
|
+
this.env.setTimeout(function() {
|
2228
|
+
self.execute(onComplete);
|
2229
|
+
}, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
|
2152
2230
|
}
|
2153
2231
|
};
|
2154
2232
|
// Mock setTimeout, clearTimeout
|
@@ -2336,8 +2414,8 @@ jasmine.getGlobal().clearInterval = function(timeoutKey) {
|
|
2336
2414
|
|
2337
2415
|
|
2338
2416
|
jasmine.version_= {
|
2339
|
-
"major":
|
2340
|
-
"minor":
|
2417
|
+
"major": 1,
|
2418
|
+
"minor": 0,
|
2341
2419
|
"build": 1,
|
2342
|
-
"revision":
|
2420
|
+
"revision": 1286311016
|
2343
2421
|
};
|
@@ -11,15 +11,21 @@ describe("Custom Matchers", function() {
|
|
11
11
|
var spec1, spec2, spec1Matcher, spec2Matcher;
|
12
12
|
var suite = env.describe('some suite', function() {
|
13
13
|
env.beforeEach(function() {
|
14
|
-
this.addMatchers({
|
15
|
-
|
16
|
-
|
14
|
+
this.addMatchers({
|
15
|
+
matcherForSuite: function(expected) {
|
16
|
+
this.message = "matcherForSuite: actual: " + this.actual + "; expected: " + expected;
|
17
|
+
return true;
|
18
|
+
}
|
19
|
+
});
|
17
20
|
});
|
18
21
|
|
19
22
|
spec1 = env.it('spec with an expectation').runs(function () {
|
20
|
-
this.addMatchers({
|
21
|
-
|
22
|
-
|
23
|
+
this.addMatchers({
|
24
|
+
matcherForSpec: function(expected) {
|
25
|
+
this.message = "matcherForSpec: actual: " + this.actual + "; expected: " + expected;
|
26
|
+
return true;
|
27
|
+
}
|
28
|
+
});
|
23
29
|
spec1Matcher = this.expect("xxx");
|
24
30
|
});
|
25
31
|
|
@@ -30,10 +36,13 @@ describe("Custom Matchers", function() {
|
|
30
36
|
|
31
37
|
suite.execute();
|
32
38
|
|
33
|
-
|
34
|
-
expect(spec1Matcher.
|
39
|
+
spec1Matcher.matcherForSuite("expected");
|
40
|
+
expect(spec1Matcher.message).toEqual("matcherForSuite: actual: xxx; expected: expected");
|
41
|
+
spec1Matcher.matcherForSpec("expected");
|
42
|
+
expect(spec1Matcher.message).toEqual("matcherForSpec: actual: xxx; expected: expected");
|
35
43
|
|
36
|
-
|
44
|
+
spec2Matcher.matcherForSuite("expected");
|
45
|
+
expect(spec2Matcher.message).toEqual("matcherForSuite: actual: yyy; expected: expected");
|
37
46
|
expect(spec2Matcher.matcherForSpec).toBe(jasmine.undefined);
|
38
47
|
});
|
39
48
|
|
@@ -10,6 +10,15 @@ describe("jasmine.Matchers", function() {
|
|
10
10
|
});
|
11
11
|
});
|
12
12
|
spyOn(spec, 'addMatcherResult');
|
13
|
+
|
14
|
+
this.addMatchers({
|
15
|
+
toPass: function() {
|
16
|
+
return lastResult().passed();
|
17
|
+
},
|
18
|
+
toFail: function() {
|
19
|
+
return !lastResult().passed();
|
20
|
+
}
|
21
|
+
})
|
13
22
|
});
|
14
23
|
|
15
24
|
function match(value) {
|
@@ -20,10 +29,19 @@ describe("jasmine.Matchers", function() {
|
|
20
29
|
return spec.addMatcherResult.mostRecentCall.args[0];
|
21
30
|
}
|
22
31
|
|
32
|
+
function catchException(fn) {
|
33
|
+
try {
|
34
|
+
fn.call();
|
35
|
+
} catch (e) {
|
36
|
+
return e;
|
37
|
+
}
|
38
|
+
throw new Error("expected function to throw an exception");
|
39
|
+
}
|
40
|
+
|
23
41
|
it("toEqual with primitives, objects, dates, etc.", function() {
|
24
|
-
expect(match(true).toEqual(true)).
|
42
|
+
expect(match(true).toEqual(true)).toPass();
|
25
43
|
|
26
|
-
expect(match({foo:'bar'}).toEqual(null)).
|
44
|
+
expect(match({foo:'bar'}).toEqual(null)).toFail();
|
27
45
|
|
28
46
|
var functionA = function() {
|
29
47
|
return 'hi';
|
@@ -31,39 +49,39 @@ describe("jasmine.Matchers", function() {
|
|
31
49
|
var functionB = function() {
|
32
50
|
return 'hi';
|
33
51
|
};
|
34
|
-
expect(match({foo:functionA}).toEqual({foo:functionB})).
|
35
|
-
expect(match({foo:functionA}).toEqual({foo:functionA})).
|
52
|
+
expect(match({foo:functionA}).toEqual({foo:functionB})).toFail();
|
53
|
+
expect(match({foo:functionA}).toEqual({foo:functionA})).toPass();
|
36
54
|
|
37
|
-
expect((match(false).toEqual(true))).
|
55
|
+
expect((match(false).toEqual(true))).toFail();
|
38
56
|
|
39
57
|
var circularGraph = {};
|
40
58
|
circularGraph.referenceToSelf = circularGraph;
|
41
|
-
expect((match(circularGraph).toEqual(circularGraph))).
|
59
|
+
expect((match(circularGraph).toEqual(circularGraph))).toPass();
|
42
60
|
|
43
|
-
expect((match(new Date(2008, 1, 3, 15, 17, 19, 1234)).toEqual(new Date(2009, 1, 3, 15, 17, 19, 1234)))).
|
44
|
-
expect((match(new Date(2008, 1, 3, 15, 17, 19, 1234)).toEqual(new Date(2008, 1, 3, 15, 17, 19, 1234)))).
|
61
|
+
expect((match(new Date(2008, 1, 3, 15, 17, 19, 1234)).toEqual(new Date(2009, 1, 3, 15, 17, 19, 1234)))).toFail();
|
62
|
+
expect((match(new Date(2008, 1, 3, 15, 17, 19, 1234)).toEqual(new Date(2008, 1, 3, 15, 17, 19, 1234)))).toPass();
|
45
63
|
|
46
64
|
|
47
|
-
expect(match(true).toNotEqual(false)).
|
48
|
-
expect((match(true).toNotEqual(true))).
|
65
|
+
expect(match(true).toNotEqual(false)).toPass();
|
66
|
+
expect((match(true).toNotEqual(true))).toFail();
|
49
67
|
|
50
|
-
expect((match(['a', 'b']).toEqual(['a', jasmine.undefined]))).
|
51
|
-
expect((match(['a', 'b']).toEqual(['a', 'b', jasmine.undefined]))).
|
68
|
+
expect((match(['a', 'b']).toEqual(['a', jasmine.undefined]))).toFail();
|
69
|
+
expect((match(['a', 'b']).toEqual(['a', 'b', jasmine.undefined]))).toFail();
|
52
70
|
|
53
|
-
expect((match(new String("cat")).toEqual("cat"))).
|
54
|
-
expect((match(new String("cat")).toNotEqual("cat"))).
|
71
|
+
expect((match(new String("cat")).toEqual("cat"))).toPass();
|
72
|
+
expect((match(new String("cat")).toNotEqual("cat"))).toFail();
|
55
73
|
|
56
|
-
expect((match(new Number(5)).toEqual(5))).
|
57
|
-
expect((match(new Number('5')).toEqual(5))).
|
58
|
-
expect((match(new Number(5)).toNotEqual(5))).
|
59
|
-
expect((match(new Number('5')).toNotEqual(5))).
|
74
|
+
expect((match(new Number(5)).toEqual(5))).toPass();
|
75
|
+
expect((match(new Number('5')).toEqual(5))).toPass();
|
76
|
+
expect((match(new Number(5)).toNotEqual(5))).toFail();
|
77
|
+
expect((match(new Number('5')).toNotEqual(5))).toFail();
|
60
78
|
});
|
61
79
|
|
62
80
|
it("toEqual with DOM nodes", function() {
|
63
81
|
var nodeA = document.createElement('div');
|
64
82
|
var nodeB = document.createElement('div');
|
65
|
-
expect((match(nodeA).toEqual(nodeA))).
|
66
|
-
expect((match(nodeA).toEqual(nodeB))).
|
83
|
+
expect((match(nodeA).toEqual(nodeA))).toPass();
|
84
|
+
expect((match(nodeA).toEqual(nodeB))).toFail();
|
67
85
|
});
|
68
86
|
|
69
87
|
it("toEqual to build an Expectation Result", function() {
|
@@ -75,7 +93,7 @@ describe("jasmine.Matchers", function() {
|
|
75
93
|
var result = lastResult();
|
76
94
|
|
77
95
|
expect(result.matcherName).toEqual("toEqual");
|
78
|
-
expect(result.passed()).
|
96
|
+
expect(result.passed()).toFail();
|
79
97
|
expect(result.message).toMatch(jasmine.pp(actual));
|
80
98
|
expect(result.message).toMatch(jasmine.pp(expected));
|
81
99
|
expect(result.expected).toEqual(expected);
|
@@ -90,7 +108,7 @@ describe("jasmine.Matchers", function() {
|
|
90
108
|
var result = lastResult();
|
91
109
|
|
92
110
|
expect(result.matcherName).toEqual("toNotEqual");
|
93
|
-
expect(result.passed()).
|
111
|
+
expect(result.passed()).toFail();
|
94
112
|
expect(result.message).toMatch(jasmine.pp(str));
|
95
113
|
expect(result.message).toMatch('not');
|
96
114
|
expect(result.expected).toEqual(str);
|
@@ -102,12 +120,12 @@ describe("jasmine.Matchers", function() {
|
|
102
120
|
var b = {};
|
103
121
|
//noinspection UnnecessaryLocalVariableJS
|
104
122
|
var c = a;
|
105
|
-
expect((match(a).toBe(b))).
|
106
|
-
expect((match(a).toBe(a))).
|
107
|
-
expect((match(a).toBe(c))).
|
108
|
-
expect((match(a).toNotBe(b))).
|
109
|
-
expect((match(a).toNotBe(a))).
|
110
|
-
expect((match(a).toNotBe(c))).
|
123
|
+
expect((match(a).toBe(b))).toFail();
|
124
|
+
expect((match(a).toBe(a))).toPass();
|
125
|
+
expect((match(a).toBe(c))).toPass();
|
126
|
+
expect((match(a).toNotBe(b))).toPass();
|
127
|
+
expect((match(a).toNotBe(a))).toFail();
|
128
|
+
expect((match(a).toNotBe(c))).toFail();
|
111
129
|
});
|
112
130
|
|
113
131
|
it("toBe to build an ExpectationResult", function() {
|
@@ -119,7 +137,7 @@ describe("jasmine.Matchers", function() {
|
|
119
137
|
var result = lastResult();
|
120
138
|
|
121
139
|
expect(result.matcherName).toEqual("toBe");
|
122
|
-
expect(result.passed()).
|
140
|
+
expect(result.passed()).toFail();
|
123
141
|
expect(result.message).toMatch(jasmine.pp(actual));
|
124
142
|
expect(result.message).toMatch(jasmine.pp(expected));
|
125
143
|
expect(result.expected).toEqual(expected);
|
@@ -134,24 +152,24 @@ describe("jasmine.Matchers", function() {
|
|
134
152
|
var result = lastResult();
|
135
153
|
|
136
154
|
expect(result.matcherName).toEqual("toNotBe");
|
137
|
-
expect(result.passed()).
|
155
|
+
expect(result.passed()).toFail();
|
138
156
|
expect(result.message).toMatch(str);
|
139
157
|
expect(result.expected).toEqual(str);
|
140
158
|
expect(result.actual).toEqual(str);
|
141
159
|
});
|
142
160
|
|
143
161
|
it("toMatch and #toNotMatch should perform regular expression matching on strings", function() {
|
144
|
-
expect((match('foobarbel').toMatch(/bar/))).
|
145
|
-
expect((match('foobazbel').toMatch(/bar/))).
|
162
|
+
expect((match('foobarbel').toMatch(/bar/))).toPass();
|
163
|
+
expect((match('foobazbel').toMatch(/bar/))).toFail();
|
146
164
|
|
147
|
-
expect((match('foobarbel').toMatch("bar"))).
|
148
|
-
expect((match('foobazbel').toMatch("bar"))).
|
165
|
+
expect((match('foobarbel').toMatch("bar"))).toPass();
|
166
|
+
expect((match('foobazbel').toMatch("bar"))).toFail();
|
149
167
|
|
150
|
-
expect((match('foobarbel').toNotMatch(/bar/))).
|
151
|
-
expect((match('foobazbel').toNotMatch(/bar/))).
|
168
|
+
expect((match('foobarbel').toNotMatch(/bar/))).toFail();
|
169
|
+
expect((match('foobazbel').toNotMatch(/bar/))).toPass();
|
152
170
|
|
153
|
-
expect((match('foobarbel').toNotMatch("bar"))).
|
154
|
-
expect((match('foobazbel').toNotMatch("bar"))).
|
171
|
+
expect((match('foobarbel').toNotMatch("bar"))).toFail();
|
172
|
+
expect((match('foobazbel').toNotMatch("bar"))).toPass();
|
155
173
|
});
|
156
174
|
|
157
175
|
it("toMatch w/ RegExp to build an ExpectationResult", function() {
|
@@ -163,7 +181,7 @@ describe("jasmine.Matchers", function() {
|
|
163
181
|
var result = lastResult();
|
164
182
|
|
165
183
|
expect(result.matcherName).toEqual("toMatch");
|
166
|
-
expect(result.passed()).
|
184
|
+
expect(result.passed()).toFail();
|
167
185
|
expect(result.message).toMatch(jasmine.pp(actual));
|
168
186
|
expect(result.message).toMatch(expected.toString());
|
169
187
|
expect(result.expected).toEqual(expected);
|
@@ -179,7 +197,7 @@ describe("jasmine.Matchers", function() {
|
|
179
197
|
var result = lastResult();
|
180
198
|
|
181
199
|
expect(result.matcherName).toEqual("toMatch");
|
182
|
-
expect(result.passed()).
|
200
|
+
expect(result.passed()).toFail();
|
183
201
|
expect(result.message).toEqual("Expected 'a' to match 'b'.");
|
184
202
|
expect(result.expected).toEqual(expected);
|
185
203
|
expect(result.actual).toEqual(actual);
|
@@ -194,7 +212,7 @@ describe("jasmine.Matchers", function() {
|
|
194
212
|
var result = lastResult();
|
195
213
|
|
196
214
|
expect(result.matcherName).toEqual("toNotMatch");
|
197
|
-
expect(result.passed()).
|
215
|
+
expect(result.passed()).toFail();
|
198
216
|
expect(result.message).toEqual("Expected 'a' to not match /a/.");
|
199
217
|
expect(result.expected).toEqual(expected);
|
200
218
|
expect(result.actual).toEqual(actual);
|
@@ -208,15 +226,15 @@ describe("jasmine.Matchers", function() {
|
|
208
226
|
var result = lastResult();
|
209
227
|
|
210
228
|
expect(result.matcherName).toEqual("toNotMatch");
|
211
|
-
expect(result.passed()).
|
229
|
+
expect(result.passed()).toFail();
|
212
230
|
expect(result.message).toEqual("Expected 'a' to not match 'a'.");
|
213
231
|
expect(result.expected).toEqual(str);
|
214
232
|
expect(result.actual).toEqual(str);
|
215
233
|
});
|
216
234
|
|
217
235
|
it("toBeDefined", function() {
|
218
|
-
expect(match('foo').toBeDefined()).
|
219
|
-
expect(match(jasmine.undefined).toBeDefined()).
|
236
|
+
expect(match('foo').toBeDefined()).toPass();
|
237
|
+
expect(match(jasmine.undefined).toBeDefined()).toFail();
|
220
238
|
});
|
221
239
|
|
222
240
|
it("toBeDefined to build an ExpectationResult", function() {
|
@@ -226,20 +244,20 @@ describe("jasmine.Matchers", function() {
|
|
226
244
|
var result = lastResult();
|
227
245
|
|
228
246
|
expect(result.matcherName).toEqual("toBeDefined");
|
229
|
-
expect(result.passed()).
|
247
|
+
expect(result.passed()).toFail();
|
230
248
|
expect(result.message).toEqual('Expected undefined to be defined.');
|
231
249
|
expect(result.actual).toEqual(jasmine.undefined);
|
232
250
|
});
|
233
251
|
|
234
252
|
it("toBeUndefined", function() {
|
235
|
-
expect(match('foo').toBeUndefined()).
|
236
|
-
expect(match(jasmine.undefined).toBeUndefined()).
|
253
|
+
expect(match('foo').toBeUndefined()).toFail();
|
254
|
+
expect(match(jasmine.undefined).toBeUndefined()).toPass();
|
237
255
|
});
|
238
256
|
|
239
257
|
it("toBeNull", function() {
|
240
|
-
expect(match(null).toBeNull()).
|
241
|
-
expect(match(jasmine.undefined).toBeNull()).
|
242
|
-
expect(match("foo").toBeNull()).
|
258
|
+
expect(match(null).toBeNull()).toPass();
|
259
|
+
expect(match(jasmine.undefined).toBeNull()).toFail();
|
260
|
+
expect(match("foo").toBeNull()).toFail();
|
243
261
|
});
|
244
262
|
|
245
263
|
it("toBeNull w/ String to build an ExpectationResult", function() {
|
@@ -250,7 +268,7 @@ describe("jasmine.Matchers", function() {
|
|
250
268
|
var result = lastResult();
|
251
269
|
|
252
270
|
expect(result.matcherName).toEqual("toBeNull");
|
253
|
-
expect(result.passed()).
|
271
|
+
expect(result.passed()).toFail();
|
254
272
|
expect(result.message).toMatch(jasmine.pp(actual));
|
255
273
|
expect(result.message).toMatch('null');
|
256
274
|
expect(result.actual).toEqual(actual);
|
@@ -264,18 +282,18 @@ describe("jasmine.Matchers", function() {
|
|
264
282
|
var result = lastResult();
|
265
283
|
|
266
284
|
expect(result.matcherName).toEqual("toBeNull");
|
267
|
-
expect(result.passed()).
|
285
|
+
expect(result.passed()).toFail();
|
268
286
|
expect(result.message).toMatch(jasmine.pp(actual));
|
269
287
|
expect(result.message).toMatch('null');
|
270
288
|
expect(result.actual).toEqual(actual);
|
271
289
|
});
|
272
290
|
|
273
291
|
it("toBeFalsy", function() {
|
274
|
-
expect(match(false).toBeFalsy()).
|
275
|
-
expect(match(true).toBeFalsy()).
|
276
|
-
expect(match(jasmine.undefined).toBeFalsy()).
|
277
|
-
expect(match(0).toBeFalsy()).
|
278
|
-
expect(match("").toBeFalsy()).
|
292
|
+
expect(match(false).toBeFalsy()).toPass();
|
293
|
+
expect(match(true).toBeFalsy()).toFail();
|
294
|
+
expect(match(jasmine.undefined).toBeFalsy()).toPass();
|
295
|
+
expect(match(0).toBeFalsy()).toPass();
|
296
|
+
expect(match("").toBeFalsy()).toPass();
|
279
297
|
});
|
280
298
|
|
281
299
|
it("toBeFalsy to build an ExpectationResult", function() {
|
@@ -286,21 +304,21 @@ describe("jasmine.Matchers", function() {
|
|
286
304
|
var result = lastResult();
|
287
305
|
|
288
306
|
expect(result.matcherName).toEqual("toBeFalsy");
|
289
|
-
expect(result.passed()).
|
307
|
+
expect(result.passed()).toFail();
|
290
308
|
expect(result.message).toMatch(jasmine.pp(actual));
|
291
309
|
expect(result.message).toMatch('falsy');
|
292
310
|
expect(result.actual).toEqual(actual);
|
293
311
|
});
|
294
312
|
|
295
313
|
it("toBeTruthy", function() {
|
296
|
-
expect(match(false).toBeTruthy()).
|
297
|
-
expect(match(true).toBeTruthy()).
|
298
|
-
expect(match(jasmine.undefined).toBeTruthy()).
|
299
|
-
expect(match(0).toBeTruthy()).
|
300
|
-
expect(match("").toBeTruthy()).
|
301
|
-
expect(match("hi").toBeTruthy()).
|
302
|
-
expect(match(5).toBeTruthy()).
|
303
|
-
expect(match({foo: 1}).toBeTruthy()).
|
314
|
+
expect(match(false).toBeTruthy()).toFail();
|
315
|
+
expect(match(true).toBeTruthy()).toPass();
|
316
|
+
expect(match(jasmine.undefined).toBeTruthy()).toFail();
|
317
|
+
expect(match(0).toBeTruthy()).toFail();
|
318
|
+
expect(match("").toBeTruthy()).toFail();
|
319
|
+
expect(match("hi").toBeTruthy()).toPass();
|
320
|
+
expect(match(5).toBeTruthy()).toPass();
|
321
|
+
expect(match({foo: 1}).toBeTruthy()).toPass();
|
304
322
|
});
|
305
323
|
|
306
324
|
it("toBeTruthy to build an ExpectationResult", function() {
|
@@ -310,69 +328,69 @@ describe("jasmine.Matchers", function() {
|
|
310
328
|
var result = lastResult();
|
311
329
|
|
312
330
|
expect(result.matcherName).toEqual("toBeTruthy");
|
313
|
-
expect(result.passed()).
|
331
|
+
expect(result.passed()).toFail();
|
314
332
|
expect(result.message).toEqual("Expected false to be truthy.");
|
315
|
-
expect(result.actual).
|
333
|
+
expect(result.actual).toFail();
|
316
334
|
});
|
317
335
|
|
318
336
|
it("toEqual", function() {
|
319
|
-
expect(match(jasmine.undefined).toEqual(jasmine.undefined)).
|
320
|
-
expect(match({foo:'bar'}).toEqual({foo:'bar'})).
|
321
|
-
expect(match("foo").toEqual({bar: jasmine.undefined})).
|
322
|
-
expect(match({foo: jasmine.undefined}).toEqual("goo")).
|
323
|
-
expect(match({foo: {bar :jasmine.undefined}}).toEqual("goo")).
|
337
|
+
expect(match(jasmine.undefined).toEqual(jasmine.undefined)).toPass();
|
338
|
+
expect(match({foo:'bar'}).toEqual({foo:'bar'})).toPass();
|
339
|
+
expect(match("foo").toEqual({bar: jasmine.undefined})).toFail();
|
340
|
+
expect(match({foo: jasmine.undefined}).toEqual("goo")).toFail();
|
341
|
+
expect(match({foo: {bar :jasmine.undefined}}).toEqual("goo")).toFail();
|
324
342
|
});
|
325
343
|
|
326
344
|
it("toEqual with jasmine.any()", function() {
|
327
|
-
expect(match("foo").toEqual(jasmine.any(String))).
|
328
|
-
expect(match(3).toEqual(jasmine.any(Number))).
|
329
|
-
expect(match("foo").toEqual(jasmine.any(Function))).
|
330
|
-
expect(match("foo").toEqual(jasmine.any(Object))).
|
331
|
-
expect(match({someObj:'foo'}).toEqual(jasmine.any(Object))).
|
332
|
-
expect(match({someObj:'foo'}).toEqual(jasmine.any(Function))).
|
345
|
+
expect(match("foo").toEqual(jasmine.any(String))).toPass();
|
346
|
+
expect(match(3).toEqual(jasmine.any(Number))).toPass();
|
347
|
+
expect(match("foo").toEqual(jasmine.any(Function))).toFail();
|
348
|
+
expect(match("foo").toEqual(jasmine.any(Object))).toFail();
|
349
|
+
expect(match({someObj:'foo'}).toEqual(jasmine.any(Object))).toPass();
|
350
|
+
expect(match({someObj:'foo'}).toEqual(jasmine.any(Function))).toFail();
|
333
351
|
expect(match(function() {
|
334
|
-
}).toEqual(jasmine.any(Object))).
|
335
|
-
expect(match(["foo", "goo"]).toEqual(["foo", jasmine.any(String)])).
|
352
|
+
}).toEqual(jasmine.any(Object))).toFail();
|
353
|
+
expect(match(["foo", "goo"]).toEqual(["foo", jasmine.any(String)])).toPass();
|
336
354
|
expect(match(function() {
|
337
|
-
}).toEqual(jasmine.any(Function))).
|
355
|
+
}).toEqual(jasmine.any(Function))).toPass();
|
338
356
|
expect(match(["a", function() {
|
339
|
-
}]).toEqual(["a", jasmine.any(Function)])).
|
357
|
+
}]).toEqual(["a", jasmine.any(Function)])).toPass();
|
340
358
|
});
|
341
359
|
|
342
360
|
it("toEqual handles circular objects ok", function() {
|
343
|
-
expect(match({foo: "bar", baz: jasmine.undefined}).toEqual({foo: "bar", baz: jasmine.undefined})).
|
344
|
-
expect(match({foo:['bar','baz','quux']}).toEqual({foo:['bar','baz','quux']})).
|
345
|
-
expect(match({foo: {bar:'baz'}, quux:'corge'}).toEqual({foo:{bar:'baz'}, quux:'corge'})).
|
361
|
+
expect(match({foo: "bar", baz: jasmine.undefined}).toEqual({foo: "bar", baz: jasmine.undefined})).toPass();
|
362
|
+
expect(match({foo:['bar','baz','quux']}).toEqual({foo:['bar','baz','quux']})).toPass();
|
363
|
+
expect(match({foo: {bar:'baz'}, quux:'corge'}).toEqual({foo:{bar:'baz'}, quux:'corge'})).toPass();
|
346
364
|
|
347
365
|
var circularObject = {};
|
348
366
|
var secondCircularObject = {};
|
349
367
|
circularObject.field = circularObject;
|
350
368
|
secondCircularObject.field = secondCircularObject;
|
351
|
-
expect(match(circularObject).toEqual(secondCircularObject)).
|
369
|
+
expect(match(circularObject).toEqual(secondCircularObject)).toPass();
|
352
370
|
});
|
353
371
|
|
354
372
|
it("toNotEqual as slightly surprising behavior, but is it intentional?", function() {
|
355
|
-
expect(match({x:"x", y:"y", z:"w"}).toNotEqual({x:"x", y:"y", z:"z"})).
|
356
|
-
expect(match({x:"x", y:"y", w:"z"}).toNotEqual({x:"x", y:"y", z:"z"})).
|
357
|
-
expect(match({x:"x", y:"y", z:"z"}).toNotEqual({w: "w", x:"x", y:"y", z:"z"})).
|
358
|
-
expect(match({w: "w", x:"x", y:"y", z:"z"}).toNotEqual({x:"x", y:"y", z:"z"})).
|
373
|
+
expect(match({x:"x", y:"y", z:"w"}).toNotEqual({x:"x", y:"y", z:"z"})).toPass();
|
374
|
+
expect(match({x:"x", y:"y", w:"z"}).toNotEqual({x:"x", y:"y", z:"z"})).toPass();
|
375
|
+
expect(match({x:"x", y:"y", z:"z"}).toNotEqual({w: "w", x:"x", y:"y", z:"z"})).toPass();
|
376
|
+
expect(match({w: "w", x:"x", y:"y", z:"z"}).toNotEqual({x:"x", y:"y", z:"z"})).toPass();
|
359
377
|
});
|
360
378
|
|
361
379
|
it("toEqual handles arrays", function() {
|
362
|
-
expect(match([1, "A"]).toEqual([1, "A"])).
|
380
|
+
expect(match([1, "A"]).toEqual([1, "A"])).toPass();
|
363
381
|
});
|
364
382
|
|
365
383
|
it("toContain and toNotContain", function() {
|
366
|
-
expect(match('ABC').toContain('A')).
|
367
|
-
expect(match('ABC').toContain('X')).
|
384
|
+
expect(match('ABC').toContain('A')).toPass();
|
385
|
+
expect(match('ABC').toContain('X')).toFail();
|
368
386
|
|
369
|
-
expect(match(['A', 'B', 'C']).toContain('A')).
|
370
|
-
expect(match(['A', 'B', 'C']).toContain('F')).
|
371
|
-
expect(match(['A', 'B', 'C']).toNotContain('F')).
|
372
|
-
expect(match(['A', 'B', 'C']).toNotContain('A')).
|
387
|
+
expect(match(['A', 'B', 'C']).toContain('A')).toPass();
|
388
|
+
expect(match(['A', 'B', 'C']).toContain('F')).toFail();
|
389
|
+
expect(match(['A', 'B', 'C']).toNotContain('F')).toPass();
|
390
|
+
expect(match(['A', 'B', 'C']).toNotContain('A')).toFail();
|
373
391
|
|
374
|
-
expect(match(['A', {some:'object'}, 'C']).toContain({some:'object'})).
|
375
|
-
expect(match(['A', {some:'object'}, 'C']).toContain({some:'other object'})).
|
392
|
+
expect(match(['A', {some:'object'}, 'C']).toContain({some:'object'})).toPass();
|
393
|
+
expect(match(['A', {some:'object'}, 'C']).toContain({some:'other object'})).toFail();
|
376
394
|
});
|
377
395
|
|
378
396
|
it("toContain to build an ExpectationResult", function() {
|
@@ -384,7 +402,7 @@ describe("jasmine.Matchers", function() {
|
|
384
402
|
var result = lastResult();
|
385
403
|
|
386
404
|
expect(result.matcherName).toEqual("toContain");
|
387
|
-
expect(result.passed()).
|
405
|
+
expect(result.passed()).toFail();
|
388
406
|
expect(result.message).toMatch(jasmine.pp(actual));
|
389
407
|
expect(result.message).toMatch('contain');
|
390
408
|
expect(result.message).toMatch(jasmine.pp(expected));
|
@@ -401,7 +419,7 @@ describe("jasmine.Matchers", function() {
|
|
401
419
|
var result = lastResult();
|
402
420
|
|
403
421
|
expect(result.matcherName).toEqual("toNotContain");
|
404
|
-
expect(result.passed()).
|
422
|
+
expect(result.passed()).toFail();
|
405
423
|
expect(result.message).toMatch(jasmine.pp(actual));
|
406
424
|
expect(result.message).toMatch('not contain');
|
407
425
|
expect(result.message).toMatch(jasmine.pp(expected));
|
@@ -410,9 +428,9 @@ describe("jasmine.Matchers", function() {
|
|
410
428
|
});
|
411
429
|
|
412
430
|
it("toBeLessThan should pass if actual is less than expected", function() {
|
413
|
-
expect(match(37).toBeLessThan(42)).
|
414
|
-
expect(match(37).toBeLessThan(-42)).
|
415
|
-
expect(match(37).toBeLessThan(37)).
|
431
|
+
expect(match(37).toBeLessThan(42)).toPass();
|
432
|
+
expect(match(37).toBeLessThan(-42)).toFail();
|
433
|
+
expect(match(37).toBeLessThan(37)).toFail();
|
416
434
|
});
|
417
435
|
|
418
436
|
it("toBeLessThan to build an ExpectationResult", function() {
|
@@ -424,7 +442,7 @@ describe("jasmine.Matchers", function() {
|
|
424
442
|
var result = lastResult();
|
425
443
|
|
426
444
|
expect(result.matcherName).toEqual("toBeLessThan");
|
427
|
-
expect(result.passed()).
|
445
|
+
expect(result.passed()).toFail();
|
428
446
|
expect(result.message).toMatch(jasmine.pp(actual) + ' to be less than');
|
429
447
|
expect(result.message).toMatch(jasmine.pp(expected));
|
430
448
|
expect(result.actual).toEqual(actual);
|
@@ -432,9 +450,9 @@ describe("jasmine.Matchers", function() {
|
|
432
450
|
});
|
433
451
|
|
434
452
|
it("toBeGreaterThan should pass if actual is greater than expected", function() {
|
435
|
-
expect(match(37).toBeGreaterThan(42)).
|
436
|
-
expect(match(37).toBeGreaterThan(-42)).
|
437
|
-
expect(match(37).toBeGreaterThan(37)).
|
453
|
+
expect(match(37).toBeGreaterThan(42)).toFail();
|
454
|
+
expect(match(37).toBeGreaterThan(-42)).toPass();
|
455
|
+
expect(match(37).toBeGreaterThan(37)).toFail();
|
438
456
|
});
|
439
457
|
|
440
458
|
it("toBeGreaterThan to build an ExpectationResult", function() {
|
@@ -446,54 +464,95 @@ describe("jasmine.Matchers", function() {
|
|
446
464
|
var result = lastResult();
|
447
465
|
|
448
466
|
expect(result.matcherName).toEqual("toBeGreaterThan");
|
449
|
-
expect(result.passed()).
|
467
|
+
expect(result.passed()).toFail();
|
450
468
|
expect(result.message).toMatch(jasmine.pp(actual) + ' to be greater than');
|
451
469
|
expect(result.message).toMatch(jasmine.pp(expected));
|
452
470
|
expect(result.actual).toEqual(actual);
|
453
471
|
expect(result.expected).toEqual(expected);
|
454
472
|
});
|
455
473
|
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
});
|
460
|
-
expect(expected.toThrow()).toEqual(true);
|
461
|
-
expect(expected.toThrow("Fake Error")).toEqual(true);
|
462
|
-
expect(expected.toThrow(new Error("Fake Error"))).toEqual(true);
|
474
|
+
describe("toThrow", function() {
|
475
|
+
describe("when code block throws an exception", function() {
|
476
|
+
var throwingFn;
|
463
477
|
|
464
|
-
|
465
|
-
|
466
|
-
|
478
|
+
beforeEach(function() {
|
479
|
+
throwingFn = function() {
|
480
|
+
throw new Error("Fake Error");
|
481
|
+
};
|
482
|
+
});
|
467
483
|
|
468
|
-
|
469
|
-
|
470
|
-
|
484
|
+
it("should match any exception", function() {
|
485
|
+
expect(match(throwingFn).toThrow()).toPass();
|
486
|
+
});
|
471
487
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
})
|
477
|
-
} catch (e) {
|
478
|
-
exception = e;
|
479
|
-
}
|
488
|
+
it("should match exceptions specified by message", function() {
|
489
|
+
expect(match(throwingFn).toThrow("Fake Error")).toPass();
|
490
|
+
expect(match(throwingFn).toThrow("Other Error")).toFail();
|
491
|
+
expect(lastResult().message).toMatch("Other Error");
|
492
|
+
});
|
480
493
|
|
481
|
-
|
482
|
-
|
494
|
+
it("should match exceptions specified by Error", function() {
|
495
|
+
expect(match(throwingFn).toThrow(new Error("Fake Error"))).toPass();
|
496
|
+
expect(match(throwingFn).toThrow(new Error("Other Error"))).toFail();
|
497
|
+
expect(lastResult().message).toMatch("Other Error");
|
498
|
+
});
|
483
499
|
|
500
|
+
describe("and matcher is inverted with .not", function() {
|
501
|
+
it("should match any exception", function() {
|
502
|
+
expect(match(throwingFn).not.toThrow()).toFail();
|
503
|
+
expect(lastResult().message).toMatch(/Expected function not to throw an exception/);
|
504
|
+
});
|
484
505
|
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
506
|
+
it("should match exceptions specified by message", function() {
|
507
|
+
expect(match(throwingFn).not.toThrow("Fake Error")).toFail();
|
508
|
+
// expect(lastResult().message).toMatch(/Expected function not to throw Fake Error./);
|
509
|
+
expect(match(throwingFn).not.toThrow("Other Error")).toPass();
|
510
|
+
});
|
511
|
+
|
512
|
+
it("should match exceptions specified by Error", function() {
|
513
|
+
expect(match(throwingFn).not.toThrow(new Error("Fake Error"))).toFail();
|
514
|
+
// expect(lastResult().message).toMatch("Other Error");
|
515
|
+
expect(match(throwingFn).not.toThrow(new Error("Other Error"))).toPass();
|
516
|
+
});
|
517
|
+
});
|
518
|
+
});
|
519
|
+
|
520
|
+
describe("when actual is not a function", function() {
|
521
|
+
it("should fail with an exception", function() {
|
522
|
+
var exception = catchException(function() {
|
523
|
+
match('not-a-function').toThrow();
|
524
|
+
});
|
525
|
+
expect(exception).toBeDefined();
|
526
|
+
expect(exception.message).toEqual('Actual is not a function');
|
527
|
+
});
|
528
|
+
|
529
|
+
describe("and matcher is inverted with .not", function() {
|
530
|
+
it("should fail with an exception", function() {
|
531
|
+
var exception = catchException(function() {
|
532
|
+
match('not-a-function').not.toThrow();
|
533
|
+
});
|
534
|
+
expect(exception).toBeDefined();
|
535
|
+
expect(exception.message).toEqual('Actual is not a function');
|
536
|
+
});
|
537
|
+
});
|
538
|
+
});
|
539
|
+
|
540
|
+
|
541
|
+
describe("when code block does not throw an exception", function() {
|
542
|
+
it("should fail (or pass when inverted with .not)", function() {
|
543
|
+
expect(match(function() {
|
544
|
+
}).toThrow()).toFail();
|
545
|
+
expect(lastResult().message).toEqual('Expected function to throw an exception.');
|
546
|
+
});
|
547
|
+
});
|
489
548
|
});
|
490
549
|
|
491
550
|
describe(".not.matcher", function() {
|
492
551
|
it("should invert the sense of any matcher", function() {
|
493
|
-
expect(match(37).not.toBeGreaterThan(42)).
|
494
|
-
expect(match(42).not.toBeGreaterThan(37)).
|
495
|
-
expect(match("abc").not.toEqual("def")).
|
496
|
-
expect(match("abc").not.toEqual("abc")).
|
552
|
+
expect(match(37).not.toBeGreaterThan(42)).toPass();
|
553
|
+
expect(match(42).not.toBeGreaterThan(37)).toFail();
|
554
|
+
expect(match("abc").not.toEqual("def")).toPass();
|
555
|
+
expect(match("abc").not.toEqual("abc")).toFail();
|
497
556
|
});
|
498
557
|
|
499
558
|
it("should provide an inverted default message", function() {
|
@@ -557,10 +616,10 @@ describe("jasmine.Matchers", function() {
|
|
557
616
|
|
558
617
|
describe("toHaveBeenCalled", function() {
|
559
618
|
it("should pass if the spy was called", function() {
|
560
|
-
expect(match(TestClass.spyFunction).toHaveBeenCalled()).
|
619
|
+
expect(match(TestClass.spyFunction).toHaveBeenCalled()).toFail();
|
561
620
|
|
562
621
|
TestClass.spyFunction();
|
563
|
-
expect(match(TestClass.spyFunction).toHaveBeenCalled()).
|
622
|
+
expect(match(TestClass.spyFunction).toHaveBeenCalled()).toPass();
|
564
623
|
});
|
565
624
|
|
566
625
|
it("should throw an exception when invoked with any arguments", function() {
|
@@ -585,10 +644,10 @@ describe("jasmine.Matchers", function() {
|
|
585
644
|
|
586
645
|
describe("wasNotCalled", function() {
|
587
646
|
it("should pass iff the spy was not called", function() {
|
588
|
-
expect(match(TestClass.spyFunction).wasNotCalled()).
|
647
|
+
expect(match(TestClass.spyFunction).wasNotCalled()).toPass();
|
589
648
|
|
590
649
|
TestClass.spyFunction();
|
591
|
-
expect(match(TestClass.spyFunction).wasNotCalled()).
|
650
|
+
expect(match(TestClass.spyFunction).wasNotCalled()).toFail();
|
592
651
|
});
|
593
652
|
|
594
653
|
it("should throw an exception when invoked with any arguments", function() {
|
@@ -603,15 +662,15 @@ describe("jasmine.Matchers", function() {
|
|
603
662
|
describe("toHaveBeenCalledWith", function() {
|
604
663
|
it('toHaveBeenCalledWith should return true if it was called with the expected args', function() {
|
605
664
|
TestClass.spyFunction('a', 'b', 'c');
|
606
|
-
expect(match(TestClass.spyFunction).toHaveBeenCalledWith('a', 'b', 'c')).
|
665
|
+
expect(match(TestClass.spyFunction).toHaveBeenCalledWith('a', 'b', 'c')).toPass();
|
607
666
|
});
|
608
667
|
|
609
668
|
it('should return false if it was not called with the expected args', function() {
|
610
669
|
TestClass.spyFunction('a', 'b', 'c');
|
611
670
|
var expected = match(TestClass.spyFunction);
|
612
|
-
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).
|
671
|
+
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail();
|
613
672
|
var result = lastResult();
|
614
|
-
expect(result.passed()).
|
673
|
+
expect(result.passed()).toFail();
|
615
674
|
expect(result.expected).toEqual(['c', 'b', 'a']);
|
616
675
|
expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']);
|
617
676
|
expect(result.message).toContain(jasmine.pp(result.expected));
|
@@ -620,21 +679,37 @@ describe("jasmine.Matchers", function() {
|
|
620
679
|
|
621
680
|
it('should return false if it was not called', function() {
|
622
681
|
var expected = match(TestClass.spyFunction);
|
623
|
-
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).
|
682
|
+
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail();
|
624
683
|
var result = lastResult();
|
625
|
-
expect(result.passed()).
|
684
|
+
expect(result.passed()).toFail();
|
626
685
|
expect(result.expected).toEqual(['c', 'b', 'a']);
|
627
686
|
expect(result.actual.argsForCall).toEqual([]);
|
628
687
|
expect(result.message).toContain(jasmine.pp(result.expected));
|
629
688
|
});
|
630
689
|
|
631
690
|
it('should allow matches across multiple calls', function() {
|
691
|
+
TestClass.spyFunction('a', 'b', 'c');
|
692
|
+
TestClass.spyFunction('d', 'e', 'f');
|
632
693
|
var expected = match(TestClass.spyFunction);
|
694
|
+
expect(expected.toHaveBeenCalledWith('a', 'b', 'c')).toPass();
|
695
|
+
expect(expected.toHaveBeenCalledWith('d', 'e', 'f')).toPass();
|
696
|
+
expect(expected.toHaveBeenCalledWith('x', 'y', 'z')).toFail();
|
697
|
+
});
|
698
|
+
|
699
|
+
it("should return a decent message", function() {
|
633
700
|
TestClass.spyFunction('a', 'b', 'c');
|
634
701
|
TestClass.spyFunction('d', 'e', 'f');
|
635
|
-
|
636
|
-
expect(expected.toHaveBeenCalledWith('
|
637
|
-
expect(
|
702
|
+
var expected = match(TestClass.spyFunction);
|
703
|
+
expect(expected.toHaveBeenCalledWith('a', 'b')).toFail();
|
704
|
+
expect(lastResult().message).toEqual("Expected spy to have been called with [ 'a', 'b' ] but was called with [ [ 'a', 'b', 'c' ], [ 'd', 'e', 'f' ] ]");
|
705
|
+
});
|
706
|
+
|
707
|
+
it("should return a decent message when inverted", function() {
|
708
|
+
TestClass.spyFunction('a', 'b', 'c');
|
709
|
+
TestClass.spyFunction('d', 'e', 'f');
|
710
|
+
var expected = match(TestClass.spyFunction);
|
711
|
+
expect(expected.not.toHaveBeenCalledWith('a', 'b', 'c')).toFail();
|
712
|
+
expect(lastResult().message).toEqual("Expected spy not to have been called with [ 'a', 'b', 'c' ] but was called with [ [ 'a', 'b', 'c' ], [ 'd', 'e', 'f' ] ]");
|
638
713
|
});
|
639
714
|
|
640
715
|
it('should throw an exception when invoked on a non-spy', shouldThrowAnExceptionWhenInvokedOnANonSpy('toHaveBeenCalledWith'));
|
@@ -658,7 +733,7 @@ describe("jasmine.Matchers", function() {
|
|
658
733
|
|
659
734
|
var result = lastResult();
|
660
735
|
expect(result.matcherName).toEqual("toHaveBeenCalledWith");
|
661
|
-
expect(result.passed()).
|
736
|
+
expect(result.passed()).toFail();
|
662
737
|
expect(result.message).toContain(jasmine.pp(['a', 'b']));
|
663
738
|
expect(result.message).toContain(jasmine.pp(['a', 'c']));
|
664
739
|
expect(result.actual).toEqual(TestClass.someFunction);
|
@@ -680,15 +755,15 @@ describe("jasmine.Matchers", function() {
|
|
680
755
|
describe("wasNotCalledWith", function() {
|
681
756
|
it('should return true if the spy was NOT called with the expected args', function() {
|
682
757
|
TestClass.spyFunction('a', 'b', 'c');
|
683
|
-
expect(match(TestClass.spyFunction).wasNotCalledWith('c', 'b', 'a')).
|
758
|
+
expect(match(TestClass.spyFunction).wasNotCalledWith('c', 'b', 'a')).toPass();
|
684
759
|
});
|
685
760
|
|
686
761
|
it('should return false if it WAS called with the expected args', function() {
|
687
762
|
TestClass.spyFunction('a', 'b', 'c');
|
688
763
|
var expected = match(TestClass.spyFunction);
|
689
|
-
expect(expected.wasNotCalledWith('a', 'b', 'c')).
|
764
|
+
expect(expected.wasNotCalledWith('a', 'b', 'c')).toFail();
|
690
765
|
var result = lastResult();
|
691
|
-
expect(result.passed()).
|
766
|
+
expect(result.passed()).toFail();
|
692
767
|
expect(result.expected).toEqual(['a', 'b', 'c']);
|
693
768
|
expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']);
|
694
769
|
expect(result.message).toContain(jasmine.pp(result.expected));
|
@@ -696,21 +771,25 @@ describe("jasmine.Matchers", function() {
|
|
696
771
|
|
697
772
|
it('should return true if it was not called', function() {
|
698
773
|
var expected = match(TestClass.spyFunction);
|
699
|
-
expect(expected.wasNotCalledWith('c', 'b', 'a')).
|
774
|
+
expect(expected.wasNotCalledWith('c', 'b', 'a')).toPass();
|
700
775
|
});
|
701
776
|
|
702
777
|
it('should allow matches across multiple calls', function() {
|
703
778
|
var expected = match(TestClass.spyFunction);
|
704
779
|
TestClass.spyFunction('a', 'b', 'c');
|
705
780
|
TestClass.spyFunction('d', 'e', 'f');
|
706
|
-
expect(expected.wasNotCalledWith('a', 'b', 'c')).
|
707
|
-
expect(expected.wasNotCalledWith('d', 'e', 'f')).
|
708
|
-
expect(expected.wasNotCalledWith('x', 'y', 'z')).
|
781
|
+
expect(expected.wasNotCalledWith('a', 'b', 'c')).toFail();
|
782
|
+
expect(expected.wasNotCalledWith('d', 'e', 'f')).toFail();
|
783
|
+
expect(expected.wasNotCalledWith('x', 'y', 'z')).toPass();
|
709
784
|
});
|
710
785
|
|
711
786
|
it('should throw an exception when invoked on a non-spy', shouldThrowAnExceptionWhenInvokedOnANonSpy('wasNotCalledWith'));
|
712
|
-
|
713
787
|
});
|
788
|
+
});
|
714
789
|
|
790
|
+
describe("all matchers", function() {
|
791
|
+
it("should return null, for future-proofing, since we might eventually allow matcher chaining", function() {
|
792
|
+
expect(match(true).toBe(true)).toBeUndefined();
|
793
|
+
});
|
715
794
|
});
|
716
795
|
});
|