teabag 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/teabag-mocha.js +154 -123
- data/app/assets/javascripts/teabag-qunit.js +401 -195
- data/app/assets/javascripts/teabag-teabag.js +3 -4
- data/app/assets/javascripts/teabag/mocha.coffee +1 -1
- data/app/assets/javascripts/teabag/mocha/reporters/html.coffee +1 -1
- data/app/assets/javascripts/teabag/qunit.coffee +1 -1
- data/app/assets/javascripts/teabag/qunit/reporters/html.coffee +1 -1
- data/app/assets/javascripts/teabag/teabag.coffee +1 -0
- data/lib/teabag/version.rb +1 -1
- data/spec/dummy/log/development.log +18711 -0
- data/spec/dummy/log/test.log +632 -0
- data/spec/dummy/tmp/cache/assets/C35/A30/sprockets%2F29906bf540f7d2e081088494b2554989 +0 -0
- data/spec/dummy/tmp/cache/assets/C4E/9B0/sprockets%2Fa807397434c9262c3d62da3e91152184 +0 -0
- data/spec/dummy/tmp/cache/assets/C5B/D00/sprockets%2F01f43815683089878e371a5d078d3e2c +0 -0
- data/spec/dummy/tmp/cache/assets/C72/150/sprockets%2F4194031b4b51b6422c14ac697e3455e5 +0 -0
- data/spec/dummy/tmp/cache/assets/C75/D50/sprockets%2F5302968a40e08d2c011aa38666d273f6 +0 -0
- data/spec/dummy/tmp/cache/assets/C78/F80/sprockets%2F9161622ddd251097a4ab816b8220984c +0 -0
- data/spec/dummy/tmp/cache/assets/C7C/AC0/sprockets%2F29124be1160817c61bb4878894b2ba55 +0 -0
- data/spec/dummy/tmp/cache/assets/C7D/8F0/sprockets%2Ff13d01b85f2449a4f0638ff260425906 +0 -0
- data/spec/dummy/tmp/cache/assets/C7E/E80/sprockets%2F38544f84f61bb3942d24104e39e108c4 +0 -0
- data/spec/dummy/tmp/cache/assets/C85/6E0/sprockets%2F9e583044ba9762ac39f15431ed504495 +0 -0
- data/spec/dummy/tmp/cache/assets/C8A/460/sprockets%2F77bffd9959420103906722b404ae8d59 +0 -0
- data/spec/dummy/tmp/cache/assets/C91/FA0/sprockets%2F2eb81283f5789ae91a69344552db3856 +0 -0
- data/spec/dummy/tmp/cache/assets/C97/430/sprockets%2Fc049582fd1c9178ff983323f75326f64 +0 -0
- data/spec/dummy/tmp/cache/assets/C9D/E90/sprockets%2F3045c9533f179d3e1c805d163ed002a0 +0 -0
- data/spec/dummy/tmp/cache/assets/CA3/C80/sprockets%2F00916393d1e2e947ddafa91701411a73 +0 -0
- data/spec/dummy/tmp/cache/assets/CA6/DF0/sprockets%2F7da83747ce56e49393b6b8726587f846 +0 -0
- data/spec/dummy/tmp/cache/assets/CA9/C40/sprockets%2F932b7e2cd1e067289ab51190800814df +0 -0
- data/spec/dummy/tmp/cache/assets/CAD/410/sprockets%2F651414e5c7e86f05c5108dc71626b25c +0 -0
- data/spec/dummy/tmp/cache/assets/CAF/0F0/sprockets%2F6000e67cf3f2377f860c24da7c819701 +0 -0
- data/spec/dummy/tmp/cache/assets/CB0/700/sprockets%2F006af6bf0f6b55777b03c4615c853881 +0 -0
- data/spec/dummy/tmp/cache/assets/CB1/B50/sprockets%2F44b5b96ee7652d66a217a1756431c4a8 +0 -0
- data/spec/dummy/tmp/cache/assets/CB6/120/sprockets%2F2df706e820de0f82332a613c49f47867 +0 -0
- data/spec/dummy/tmp/cache/assets/CBB/FA0/sprockets%2F74922109263bdc965b2e9567eec6d154 +0 -0
- data/spec/dummy/tmp/cache/assets/CBD/AF0/sprockets%2Fd687ec33822256e9444e8cd04f1b4873 +0 -0
- data/spec/dummy/tmp/cache/assets/CBF/630/sprockets%2F707d2db81468088470d476abff35388d +0 -0
- data/spec/dummy/tmp/cache/assets/CC2/EC0/sprockets%2F76bf80cb571ca530357f78db78167866 +0 -0
- data/spec/dummy/tmp/cache/assets/CCB/3B0/sprockets%2F9535146026add9cffa012ee220204a66 +0 -0
- data/spec/dummy/tmp/cache/assets/CCC/DB0/sprockets%2F3998958d61cda73452466f5652ed81ef +0 -0
- data/spec/dummy/tmp/cache/assets/CCE/C50/sprockets%2Fe12774c2fea852112414bb379a71f31a +0 -0
- data/spec/dummy/tmp/cache/assets/CD3/460/sprockets%2F7f3f6802b0b309ed142d0b671c9640c4 +0 -0
- data/spec/dummy/tmp/cache/assets/CD6/DD0/sprockets%2F301bd3b0e19eb866905681d03a891be3 +0 -0
- data/spec/dummy/tmp/cache/assets/CE0/090/sprockets%2F48d5d35ae87d0723318b8bc257fa2237 +0 -0
- data/spec/dummy/tmp/cache/assets/CE3/1F0/sprockets%2Fe69a515d3a9d14c669be8871012a7d07 +0 -0
- data/spec/dummy/tmp/cache/assets/CE4/190/sprockets%2F36c9ee4181433e33e07eb9748d218ae2 +0 -0
- data/spec/dummy/tmp/cache/assets/CE6/270/sprockets%2F2c98152560d18470fec8cf4c6829b4d0 +0 -0
- data/spec/dummy/tmp/cache/assets/CE6/7C0/sprockets%2Fa03a2c86ce6724be8542295e1cf24798 +0 -0
- data/spec/dummy/tmp/cache/assets/CE7/A60/sprockets%2Ff58eee249aa167d23f8220087bb46684 +0 -0
- data/spec/dummy/tmp/cache/assets/CE9/9E0/sprockets%2F135480d497ed7e4884462dc0ef0b80d7 +0 -0
- data/spec/dummy/tmp/cache/assets/CEB/680/sprockets%2F67f0794ef8c0576d5c7da34f4437305a +0 -0
- data/spec/dummy/tmp/cache/assets/CEB/B40/sprockets%2F1150bf8d912aa100a132251eefaf6045 +0 -0
- data/spec/dummy/tmp/cache/assets/CEC/360/sprockets%2F264b79dde726b36d63fee272a0609469 +0 -0
- data/spec/dummy/tmp/cache/assets/CEE/930/sprockets%2Fe196521e15fd8d33e3261d5538fe8f92 +0 -0
- data/spec/dummy/tmp/cache/assets/CEF/650/sprockets%2Fe859309c630f7637a53d381b327df8fd +0 -0
- data/spec/dummy/tmp/cache/assets/CEF/840/sprockets%2F16c7d195fa548e8343c6a4d2256ed778 +0 -0
- data/spec/dummy/tmp/cache/assets/CF1/C50/sprockets%2F57bd9ac92067ea01882feef075582758 +0 -0
- data/spec/dummy/tmp/cache/assets/CF3/3A0/sprockets%2F6571249b82eb52e7c7e035c692df9b69 +0 -0
- data/spec/dummy/tmp/cache/assets/CF3/C50/sprockets%2F892b968b622f37b988a1de81e09bf631 +0 -0
- data/spec/dummy/tmp/cache/assets/CF8/780/sprockets%2F8845b81ff27cdb57c835836c9f91a265 +0 -0
- data/spec/dummy/tmp/cache/assets/CFA/D20/sprockets%2Fb26796b39b3c5d6ed70be7989637a493 +0 -0
- data/spec/dummy/tmp/cache/assets/CFB/210/sprockets%2F9104695bfbf9a9d4b94382e6e90487a9 +0 -0
- data/spec/dummy/tmp/cache/assets/CFC/380/sprockets%2Fa7443cbd671446a589867dd5f4a4f989 +0 -0
- data/spec/dummy/tmp/cache/assets/D00/110/sprockets%2F6a6353b7723a8b21708e0fbfe04bd422 +0 -0
- data/spec/dummy/tmp/cache/assets/D00/F60/sprockets%2F42e279b52511c47d26c0adb125fd04e8 +0 -0
- data/spec/dummy/tmp/cache/assets/D02/570/sprockets%2F51fa8dc514e6256ae0836d5eb24e0312 +0 -0
- data/spec/dummy/tmp/cache/assets/D03/630/sprockets%2F5d8da32dba6a7be70426a1d554773701 +0 -0
- data/spec/dummy/tmp/cache/assets/D04/170/sprockets%2F76ab1dc02e6c7618852708a1e05a2df3 +0 -0
- data/spec/dummy/tmp/cache/assets/D04/480/sprockets%2F8bd8f10500b21d2f9d94e4cd1401c936 +0 -0
- data/spec/dummy/tmp/cache/assets/D05/8D0/sprockets%2F319f8f235f452343f1ebf03cb262d23d +0 -0
- data/spec/dummy/tmp/cache/assets/D09/BF0/sprockets%2F9e6bca5d26f50d9484385d51ba04312c +0 -0
- data/spec/dummy/tmp/cache/assets/D0B/210/sprockets%2Fb95ce127097fba0e4019f633e91b730d +0 -0
- data/spec/dummy/tmp/cache/assets/D0E/570/sprockets%2F90fe371bf8091e88a712124d9cdae260 +0 -0
- data/spec/dummy/tmp/cache/assets/D11/080/sprockets%2Fe202468befa786e2a3e7c6d5980b2333 +0 -0
- data/spec/dummy/tmp/cache/assets/D15/750/sprockets%2F8effdd3e668a4036260a3e370f3b6657 +0 -0
- data/spec/dummy/tmp/cache/assets/D17/710/sprockets%2Ffa49fb6823d466e79a195e0cd71340c5 +0 -0
- data/spec/dummy/tmp/cache/assets/D1D/560/sprockets%2F1ca784ee7ba1922465147e7f8963eae5 +0 -0
- data/spec/dummy/tmp/cache/assets/D1E/AA0/sprockets%2F5c8741a556bc955cd36e61c88582b6dc +0 -0
- data/spec/dummy/tmp/cache/assets/D22/4D0/sprockets%2Fe94f07f16b94d5cf185c48023f98f1b7 +0 -0
- data/spec/dummy/tmp/cache/assets/D2D/060/sprockets%2F545ec7a363badb5e7106e5112b53b26d +0 -0
- data/spec/dummy/tmp/cache/assets/D30/740/sprockets%2F4ac342b2e0244e90d08bac61f54f4f82 +0 -0
- data/spec/dummy/tmp/cache/assets/D31/9C0/sprockets%2Fbd102a4f5a4985c3519dd6ab0295a1c6 +0 -0
- data/spec/dummy/tmp/cache/assets/D35/7C0/sprockets%2Ff536a2606eaf7d542c0985104cb62baf +0 -0
- data/spec/dummy/tmp/cache/assets/D37/FF0/sprockets%2F96841ca4cfae32c515077f3f5fc303b2 +0 -0
- data/spec/dummy/tmp/cache/assets/D3C/840/sprockets%2Fc6202ec91d567a85bd3d46dc43ea9108 +0 -0
- data/spec/dummy/tmp/cache/assets/D44/0F0/sprockets%2Fc4d293b967c2e290deed3f3bd2271828 +0 -0
- data/spec/dummy/tmp/cache/assets/D44/E90/sprockets%2F05cfc0bf7c9938963d1d1c63248db80d +0 -0
- data/spec/dummy/tmp/cache/assets/D45/C30/sprockets%2Fcc744877558178a3adb77c441cadce70 +0 -0
- data/spec/dummy/tmp/cache/assets/D48/BA0/sprockets%2F30a5bfc94bac88df67501fc509b84694 +0 -0
- data/spec/dummy/tmp/cache/assets/D49/A10/sprockets%2Fc4656bd995a6f297c26d19b13aadb963 +0 -0
- data/spec/dummy/tmp/cache/assets/D4A/580/sprockets%2F19b8d8a9a57850de79b6c099fb2d010e +0 -0
- data/spec/dummy/tmp/cache/assets/D50/D70/sprockets%2Fe2a3e6c95b11e0801a4eebae3a026026 +0 -0
- data/spec/dummy/tmp/cache/assets/D51/400/sprockets%2Ff5e433d8a31e80985b75ce598de236be +0 -0
- data/spec/dummy/tmp/cache/assets/D54/D80/sprockets%2F631327e25ec20edc723046cdec3bb1c0 +0 -0
- data/spec/dummy/tmp/cache/assets/D5C/710/sprockets%2F9427d05cee2caa721241a25a9af1d08f +0 -0
- data/spec/dummy/tmp/cache/assets/D5C/CC0/sprockets%2Faa8bf6de211f2765b0a26f112b971f0c +0 -0
- data/spec/dummy/tmp/cache/assets/D61/1F0/sprockets%2F0c7a6176d2fc4db00bb9a74d36380fe1 +0 -0
- data/spec/dummy/tmp/cache/assets/D63/050/sprockets%2Fae26cd0ae2c0da97e49f6043b91008d5 +0 -0
- data/spec/dummy/tmp/cache/assets/D67/BC0/sprockets%2F35d2c2b45981ade5a2db2a9c7f37a615 +0 -0
- data/spec/dummy/tmp/cache/assets/D67/C20/sprockets%2F0d30bf27e5f74bbd85f313cb8d3c4623 +0 -0
- data/spec/dummy/tmp/cache/assets/D69/F90/sprockets%2F6a0795b7b38bd7e6142cd1b88211dade +0 -0
- data/spec/dummy/tmp/cache/assets/D6D/530/sprockets%2F8d52dee91bff01a8a2306d8a7c9152a9 +0 -0
- data/spec/dummy/tmp/cache/assets/D6D/DA0/sprockets%2Fac936bf40b42227a2bf9d474ae9ec149 +0 -0
- data/spec/dummy/tmp/cache/assets/D77/B30/sprockets%2F946cf2f17c7eb41037f9ee08ad67ec40 +0 -0
- data/spec/dummy/tmp/cache/assets/D78/2F0/sprockets%2F3c61f8915b8f717b1de788e6ecad122c +0 -0
- data/spec/dummy/tmp/cache/assets/D80/390/sprockets%2Fe44158f578d9ffade083a07f54eab729 +0 -0
- data/spec/dummy/tmp/cache/assets/D8C/520/sprockets%2F221cd58a042baac534d27e4cfedc1188 +0 -0
- data/spec/dummy/tmp/cache/assets/D93/BD0/sprockets%2Ff5e1b60201e08e3ddf8d3de5211f3d5e +0 -0
- data/spec/dummy/tmp/cache/assets/D9B/C20/sprockets%2F0e01606ddd95e451bc7d39ce0eeb664d +0 -0
- data/spec/dummy/tmp/cache/assets/DA0/330/sprockets%2Fcbbb4de706387d50f48a72ee6c9c1b80 +0 -0
- data/spec/dummy/tmp/cache/assets/DA5/0A0/sprockets%2F7a4b5928cec69ab65afff309a04d6b47 +0 -0
- data/spec/dummy/tmp/cache/assets/DAE/6C0/sprockets%2F77c7a8676aeefa73156c55dfcf51cc46 +0 -0
- data/spec/dummy/tmp/cache/assets/DAF/7C0/sprockets%2F8942514d59e7bffbfb33cde6fa9735c2 +0 -0
- data/spec/dummy/tmp/cache/assets/DB3/5D0/sprockets%2Fce1d4d75832c9bdeafd869f6f7b61725 +0 -0
- data/spec/dummy/tmp/cache/assets/DB3/D70/sprockets%2Fcc2f5e1f6eeb99c33881848cb1cde758 +0 -0
- data/spec/dummy/tmp/cache/assets/DB5/040/sprockets%2F9a9da5df88713663b9fbc945facca891 +0 -0
- data/spec/dummy/tmp/cache/assets/DC3/230/sprockets%2Fdf52e72eb73be91eccc60182191aed0b +0 -0
- data/spec/dummy/tmp/cache/assets/DC7/A10/sprockets%2F84a8af0fcbf401864e1ae5bf092cba94 +0 -0
- data/spec/dummy/tmp/cache/assets/DCD/EB0/sprockets%2F4f77f509126ecbced7ea2a5ab290c8d4 +0 -0
- data/spec/dummy/tmp/cache/assets/DD8/C10/sprockets%2Ffb91282efc9f16ebaf7e98e312ce0b73 +0 -0
- data/spec/dummy/tmp/cache/assets/DDB/EF0/sprockets%2Fe790bb18b64df8aa0a9fe94642a9edd8 +0 -0
- data/spec/dummy/tmp/cache/assets/DDD/A60/sprockets%2Fff948b6ffe44a3cc3d2d109a39f548fd +0 -0
- data/spec/dummy/tmp/cache/assets/DEB/110/sprockets%2F2dbdab0ce5babca645cdb5780004f875 +0 -0
- data/spec/dummy/tmp/cache/assets/DF6/0E0/sprockets%2F85b10db6e1afe643aba6d396abdd77f0 +0 -0
- data/spec/dummy/tmp/cache/assets/DF7/E10/sprockets%2F25e4253aba9a9adcefb72552fb1ff0c8 +0 -0
- data/spec/dummy/tmp/cache/assets/DF9/AD0/sprockets%2Fc700afd7cee3fe9d7ff8352b213b2c4a +0 -0
- data/spec/dummy/tmp/cache/assets/DFC/C20/sprockets%2Fd9178ad7e3b401c9fceafd64ea2b50d6 +0 -0
- data/spec/dummy/tmp/cache/assets/DFC/C30/sprockets%2Fb50a07cb30b0bd0eec8e98e5de79d65d +0 -0
- data/spec/dummy/tmp/cache/assets/E02/6E0/sprockets%2F63d6a5cdb8cefa64ef76b5c6e0fd3720 +0 -0
- data/spec/dummy/tmp/cache/assets/E08/BB0/sprockets%2Fefac99af1af28543aef6fb607faa4973 +0 -0
- data/spec/dummy/tmp/cache/assets/E0D/070/sprockets%2F0e7ef9a5978dcc6b1abce678ef836c0a +0 -0
- data/spec/dummy/tmp/cache/assets/E17/EF0/sprockets%2Fa291ad64a26afd055dfadabbdf03f154 +0 -0
- data/spec/dummy/tmp/cache/assets/E2F/790/sprockets%2F7fac280deaa7ef20a77d5c9b5b9cfc34 +0 -0
- data/spec/dummy/tmp/cache/assets/E37/9B0/sprockets%2F4defba98cf7befff81450e2b24e90b6d +0 -0
- data/spec/dummy/tmp/cache/assets/E41/250/sprockets%2F97cf8fe3d7ffaff076f655aefb36da03 +0 -0
- data/spec/dummy/tmp/cache/assets/E58/840/sprockets%2Fab7a15f76acfee8c320dd3cfc2a8c6d5 +0 -0
- data/spec/dummy/tmp/cache/assets/E64/1E0/sprockets%2F81ab4c863fbbdec8dd66afc97ebf034d +0 -0
- data/spec/dummy/tmp/cache/assets/E6E/260/sprockets%2Fd9f8ab8b91ef582cc6c99a3ba0dedfe6 +0 -0
- data/spec/dummy/tmp/cache/assets/E89/4C0/sprockets%2F68b2eedb3cde6fc01d50fead7caf8a18 +0 -0
- data/spec/dummy/tmp/cache/assets/F79/360/sprockets%2F0ce035fefee5ebdabc8efabfbdbd6ee4 +0 -0
- data/spec/javascripts/teabag/mocha/reporters/html_mspec.coffee +1 -1
- data/vendor/assets/javascripts/{mocha-1.8.1.MIT.LICENSE → mocha-1.9.1.MIT.LICENSE} +0 -0
- data/vendor/assets/javascripts/{mocha-1.8.1.js → mocha-1.9.1.js} +79 -81
- data/vendor/assets/javascripts/{qunit-1.10.0.MIT.LICENSE → qunit-1.11.0.MIT.LICENSE} +0 -0
- data/vendor/assets/javascripts/{qunit-1.10.0.js → qunit-1.11.0.js} +319 -144
- data/vendor/assets/javascripts/support/chai.js +721 -279
- data/vendor/assets/javascripts/support/jasmine-jquery.js +28 -2
- data/vendor/assets/javascripts/support/sinon.js +581 -435
- metadata +26 -8
@@ -1,5 +1,31 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
/*!
|
2
|
+
Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
|
3
|
+
|
4
|
+
Version 1.5.0
|
5
|
+
|
6
|
+
https://github.com/velesin/jasmine-jquery
|
7
|
+
|
8
|
+
Copyright (c) 2010-2013 Wojciech Zawistowski, Travis Jeffery
|
9
|
+
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
11
|
+
a copy of this software and associated documentation files (the
|
12
|
+
"Software"), to deal in the Software without restriction, including
|
13
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
14
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
15
|
+
permit persons to whom the Software is furnished to do so, subject to
|
16
|
+
the following conditions:
|
17
|
+
|
18
|
+
The above copyright notice and this permission notice shall be
|
19
|
+
included in all copies or substantial portions of the Software.
|
20
|
+
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
22
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
23
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
24
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
25
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
26
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
27
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
28
|
+
*/
|
3
29
|
var readFixtures = function() {
|
4
30
|
return jasmine.getFixtures().proxyCallTo_('read', arguments)
|
5
31
|
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
/**
|
2
|
-
* Sinon.JS 1.
|
2
|
+
* Sinon.JS 1.7.1, 2013/05/07
|
3
3
|
*
|
4
4
|
* @author Christian Johansen (christian@cjohansen.no)
|
5
5
|
* @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
|
6
6
|
*
|
7
7
|
* (The BSD License)
|
8
8
|
*
|
9
|
-
* Copyright (c) 2010-
|
9
|
+
* Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no
|
10
10
|
* All rights reserved.
|
11
11
|
*
|
12
12
|
* Redistribution and use in source and binary forms, with or without modification,
|
@@ -33,9 +33,7 @@
|
|
33
33
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
34
|
*/
|
35
35
|
|
36
|
-
|
37
|
-
"use strict";
|
38
|
-
|
36
|
+
this.sinon = (function () {
|
39
37
|
var buster = (function (setTimeout, B) {
|
40
38
|
var isNode = typeof require == "function" && typeof module == "object";
|
41
39
|
var div = typeof document != "undefined" && document.createElement("div");
|
@@ -463,7 +461,7 @@ var sinon = (function () {
|
|
463
461
|
* @author Christian Johansen (christian@cjohansen.no)
|
464
462
|
* @license BSD
|
465
463
|
*
|
466
|
-
* Copyright (c) 2010-
|
464
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
467
465
|
*/
|
468
466
|
|
469
467
|
var sinon = (function (buster) {
|
@@ -505,6 +503,10 @@ var sinon = (function () {
|
|
505
503
|
}
|
506
504
|
}
|
507
505
|
|
506
|
+
function isRestorable (obj) {
|
507
|
+
return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
|
508
|
+
}
|
509
|
+
|
508
510
|
var sinon = {
|
509
511
|
wrapMethod: function wrapMethod(object, property, method) {
|
510
512
|
if (!object) {
|
@@ -631,11 +633,7 @@ var sinon = (function () {
|
|
631
633
|
bLength += 1;
|
632
634
|
}
|
633
635
|
|
634
|
-
|
635
|
-
return false;
|
636
|
-
}
|
637
|
-
|
638
|
-
return true;
|
636
|
+
return aLength == bLength;
|
639
637
|
},
|
640
638
|
|
641
639
|
functionName: function functionName(func) {
|
@@ -706,7 +704,7 @@ var sinon = (function () {
|
|
706
704
|
|
707
705
|
calledInOrder: function (spies) {
|
708
706
|
for (var i = 1, l = spies.length; i < l; i++) {
|
709
|
-
if (!spies[i - 1].calledBefore(spies[i])) {
|
707
|
+
if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
|
710
708
|
return false;
|
711
709
|
}
|
712
710
|
}
|
@@ -748,6 +746,26 @@ var sinon = (function () {
|
|
748
746
|
}
|
749
747
|
var string = Object.prototype.toString.call(value);
|
750
748
|
return string.substring(8, string.length - 1).toLowerCase();
|
749
|
+
},
|
750
|
+
|
751
|
+
createStubInstance: function (constructor) {
|
752
|
+
if (typeof constructor !== "function") {
|
753
|
+
throw new TypeError("The constructor should be a function.");
|
754
|
+
}
|
755
|
+
return sinon.stub(sinon.create(constructor.prototype));
|
756
|
+
},
|
757
|
+
|
758
|
+
restore: function (object) {
|
759
|
+
if (object !== null && typeof object === "object") {
|
760
|
+
for (var prop in object) {
|
761
|
+
if (isRestorable(object[prop])) {
|
762
|
+
object[prop].restore();
|
763
|
+
}
|
764
|
+
}
|
765
|
+
}
|
766
|
+
else if (isRestorable(object)) {
|
767
|
+
object.restore();
|
768
|
+
}
|
751
769
|
}
|
752
770
|
};
|
753
771
|
|
@@ -759,6 +777,7 @@ var sinon = (function () {
|
|
759
777
|
} catch (e) {}
|
760
778
|
module.exports = sinon;
|
761
779
|
module.exports.spy = require("./sinon/spy");
|
780
|
+
module.exports.spyCall = require("./sinon/call");
|
762
781
|
module.exports.stub = require("./sinon/stub");
|
763
782
|
module.exports.mock = require("./sinon/mock");
|
764
783
|
module.exports.collection = require("./sinon/collection");
|
@@ -1037,21 +1056,18 @@ var sinon = (function () {
|
|
1037
1056
|
/*jslint eqeqeq: false, onevar: false, plusplus: false*/
|
1038
1057
|
/*global module, require, sinon*/
|
1039
1058
|
/**
|
1040
|
-
* Spy
|
1059
|
+
* Spy calls
|
1041
1060
|
*
|
1042
1061
|
* @author Christian Johansen (christian@cjohansen.no)
|
1062
|
+
* @author Maximilian Antoni (mail@maxantoni.de)
|
1043
1063
|
* @license BSD
|
1044
1064
|
*
|
1045
|
-
* Copyright (c) 2010-
|
1065
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
1066
|
+
* Copyright (c) 2013 Maximilian Antoni
|
1046
1067
|
*/
|
1047
1068
|
|
1048
1069
|
(function (sinon) {
|
1049
1070
|
var commonJSModule = typeof module == "object" && typeof require == "function";
|
1050
|
-
var spyCall;
|
1051
|
-
var callId = 0;
|
1052
|
-
var push = [].push;
|
1053
|
-
var slice = Array.prototype.slice;
|
1054
|
-
|
1055
1071
|
if (!sinon && commonJSModule) {
|
1056
1072
|
sinon = require("../sinon");
|
1057
1073
|
}
|
@@ -1060,505 +1076,565 @@ var sinon = (function () {
|
|
1060
1076
|
return;
|
1061
1077
|
}
|
1062
1078
|
|
1063
|
-
function
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
if (!object && !property) {
|
1069
|
-
return spy.create(function () {});
|
1079
|
+
function throwYieldError(proxy, text, args) {
|
1080
|
+
var msg = sinon.functionName(proxy) + text;
|
1081
|
+
if (args.length) {
|
1082
|
+
msg += " Received [" + slice.call(args).join(", ") + "]";
|
1070
1083
|
}
|
1071
|
-
|
1072
|
-
var method = object[property];
|
1073
|
-
return sinon.wrapMethod(object, property, spy.create(method));
|
1084
|
+
throw new Error(msg);
|
1074
1085
|
}
|
1075
1086
|
|
1076
|
-
|
1087
|
+
var slice = Array.prototype.slice;
|
1077
1088
|
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1089
|
+
var callProto = {
|
1090
|
+
calledOn: function calledOn(thisValue) {
|
1091
|
+
if (sinon.match && sinon.match.isMatcher(thisValue)) {
|
1092
|
+
return thisValue.test(this.thisValue);
|
1093
|
+
}
|
1094
|
+
return this.thisValue === thisValue;
|
1095
|
+
},
|
1096
|
+
|
1097
|
+
calledWith: function calledWith() {
|
1098
|
+
for (var i = 0, l = arguments.length; i < l; i += 1) {
|
1099
|
+
if (!sinon.deepEqual(arguments[i], this.args[i])) {
|
1084
1100
|
return false;
|
1085
1101
|
}
|
1102
|
+
}
|
1103
|
+
|
1104
|
+
return true;
|
1105
|
+
},
|
1086
1106
|
|
1087
|
-
|
1088
|
-
|
1107
|
+
calledWithMatch: function calledWithMatch() {
|
1108
|
+
for (var i = 0, l = arguments.length; i < l; i += 1) {
|
1109
|
+
var actual = this.args[i];
|
1110
|
+
var expectation = arguments[i];
|
1111
|
+
if (!sinon.match || !sinon.match(expectation).test(actual)) {
|
1112
|
+
return false;
|
1113
|
+
}
|
1114
|
+
}
|
1115
|
+
return true;
|
1116
|
+
},
|
1089
1117
|
|
1090
|
-
|
1091
|
-
|
1118
|
+
calledWithExactly: function calledWithExactly() {
|
1119
|
+
return arguments.length == this.args.length &&
|
1120
|
+
this.calledWith.apply(this, arguments);
|
1121
|
+
},
|
1092
1122
|
|
1093
|
-
|
1094
|
-
|
1123
|
+
notCalledWith: function notCalledWith() {
|
1124
|
+
return !this.calledWith.apply(this, arguments);
|
1125
|
+
},
|
1095
1126
|
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
}
|
1100
|
-
}
|
1127
|
+
notCalledWithMatch: function notCalledWithMatch() {
|
1128
|
+
return !this.calledWithMatch.apply(this, arguments);
|
1129
|
+
},
|
1101
1130
|
|
1102
|
-
|
1103
|
-
|
1104
|
-
}
|
1131
|
+
returned: function returned(value) {
|
1132
|
+
return sinon.deepEqual(value, this.returnValue);
|
1133
|
+
},
|
1105
1134
|
|
1106
|
-
function
|
1107
|
-
if (!
|
1108
|
-
return;
|
1135
|
+
threw: function threw(error) {
|
1136
|
+
if (typeof error === "undefined" || !this.exception) {
|
1137
|
+
return !!this.exception;
|
1109
1138
|
}
|
1110
1139
|
|
1111
|
-
|
1140
|
+
return this.exception === error || this.exception.name === error;
|
1141
|
+
},
|
1112
1142
|
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
}
|
1117
|
-
}
|
1118
|
-
}
|
1143
|
+
calledWithNew: function calledWithNew(thisValue) {
|
1144
|
+
return this.thisValue instanceof this.proxy;
|
1145
|
+
},
|
1119
1146
|
|
1120
|
-
function
|
1121
|
-
this.
|
1122
|
-
|
1123
|
-
this.notCalled = false;
|
1124
|
-
this.calledOnce = this.callCount == 1;
|
1125
|
-
this.calledTwice = this.callCount == 2;
|
1126
|
-
this.calledThrice = this.callCount == 3;
|
1127
|
-
}
|
1147
|
+
calledBefore: function (other) {
|
1148
|
+
return this.callId < other.callId;
|
1149
|
+
},
|
1128
1150
|
|
1129
|
-
function
|
1130
|
-
this.
|
1131
|
-
|
1132
|
-
this.thirdCall = this.getCall(2);
|
1133
|
-
this.lastCall = this.getCall(this.callCount - 1);
|
1134
|
-
}
|
1151
|
+
calledAfter: function (other) {
|
1152
|
+
return this.callId > other.callId;
|
1153
|
+
},
|
1135
1154
|
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
var p;
|
1140
|
-
if (func.length) {
|
1141
|
-
eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
|
1142
|
-
") { return p.invoke(func, this, slice.call(arguments)); });");
|
1143
|
-
}
|
1144
|
-
else {
|
1145
|
-
p = function proxy() {
|
1146
|
-
return p.invoke(func, this, slice.call(arguments));
|
1147
|
-
};
|
1148
|
-
}
|
1149
|
-
return p;
|
1150
|
-
}
|
1155
|
+
callArg: function (pos) {
|
1156
|
+
this.args[pos]();
|
1157
|
+
},
|
1151
1158
|
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
var spyApi = {
|
1156
|
-
reset: function () {
|
1157
|
-
this.called = false;
|
1158
|
-
this.notCalled = true;
|
1159
|
-
this.calledOnce = false;
|
1160
|
-
this.calledTwice = false;
|
1161
|
-
this.calledThrice = false;
|
1162
|
-
this.callCount = 0;
|
1163
|
-
this.firstCall = null;
|
1164
|
-
this.secondCall = null;
|
1165
|
-
this.thirdCall = null;
|
1166
|
-
this.lastCall = null;
|
1167
|
-
this.args = [];
|
1168
|
-
this.returnValues = [];
|
1169
|
-
this.thisValues = [];
|
1170
|
-
this.exceptions = [];
|
1171
|
-
this.callIds = [];
|
1172
|
-
if (this.fakes) {
|
1173
|
-
for (var i = 0; i < this.fakes.length; i++) {
|
1174
|
-
this.fakes[i].reset();
|
1175
|
-
}
|
1176
|
-
}
|
1177
|
-
},
|
1159
|
+
callArgOn: function (pos, thisValue) {
|
1160
|
+
this.args[pos].apply(thisValue);
|
1161
|
+
},
|
1178
1162
|
|
1179
|
-
|
1180
|
-
|
1163
|
+
callArgWith: function (pos) {
|
1164
|
+
this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
|
1165
|
+
},
|
1181
1166
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1167
|
+
callArgOnWith: function (pos, thisValue) {
|
1168
|
+
var args = slice.call(arguments, 2);
|
1169
|
+
this.args[pos].apply(thisValue, args);
|
1170
|
+
},
|
1171
|
+
|
1172
|
+
"yield": function () {
|
1173
|
+
this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
|
1174
|
+
},
|
1175
|
+
|
1176
|
+
yieldOn: function (thisValue) {
|
1177
|
+
var args = this.args;
|
1178
|
+
for (var i = 0, l = args.length; i < l; ++i) {
|
1179
|
+
if (typeof args[i] === "function") {
|
1180
|
+
args[i].apply(thisValue, slice.call(arguments, 1));
|
1181
|
+
return;
|
1186
1182
|
}
|
1183
|
+
}
|
1184
|
+
throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
|
1185
|
+
},
|
1187
1186
|
|
1188
|
-
|
1187
|
+
yieldTo: function (prop) {
|
1188
|
+
this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
|
1189
|
+
},
|
1189
1190
|
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1191
|
+
yieldToOn: function (prop, thisValue) {
|
1192
|
+
var args = this.args;
|
1193
|
+
for (var i = 0, l = args.length; i < l; ++i) {
|
1194
|
+
if (args[i] && typeof args[i][prop] === "function") {
|
1195
|
+
args[i][prop].apply(thisValue, slice.call(arguments, 2));
|
1196
|
+
return;
|
1197
|
+
}
|
1198
|
+
}
|
1199
|
+
throwYieldError(this.proxy, " cannot yield to '" + prop +
|
1200
|
+
"' since no callback was passed.", args);
|
1201
|
+
},
|
1193
1202
|
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
proxy.toString = sinon.functionToString;
|
1198
|
-
proxy._create = sinon.spy.create;
|
1199
|
-
proxy.id = "spy#" + uuid++;
|
1203
|
+
toString: function () {
|
1204
|
+
var callStr = this.proxy.toString() + "(";
|
1205
|
+
var args = [];
|
1200
1206
|
|
1201
|
-
|
1202
|
-
|
1207
|
+
for (var i = 0, l = this.args.length; i < l; ++i) {
|
1208
|
+
args.push(sinon.format(this.args[i]));
|
1209
|
+
}
|
1203
1210
|
|
1204
|
-
|
1205
|
-
var matching = matchingFake(this.fakes, args);
|
1206
|
-
var exception, returnValue;
|
1211
|
+
callStr = callStr + args.join(", ") + ")";
|
1207
1212
|
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
push.call(this.callIds, callId++);
|
1213
|
+
if (typeof this.returnValue != "undefined") {
|
1214
|
+
callStr += " => " + sinon.format(this.returnValue);
|
1215
|
+
}
|
1212
1216
|
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
}
|
1219
|
-
} catch (e) {
|
1220
|
-
push.call(this.returnValues, undefined);
|
1221
|
-
exception = e;
|
1222
|
-
throw e;
|
1223
|
-
} finally {
|
1224
|
-
push.call(this.exceptions, exception);
|
1217
|
+
if (this.exception) {
|
1218
|
+
callStr += " !" + this.exception.name;
|
1219
|
+
|
1220
|
+
if (this.exception.message) {
|
1221
|
+
callStr += "(" + this.exception.message + ")";
|
1225
1222
|
}
|
1223
|
+
}
|
1226
1224
|
|
1227
|
-
|
1225
|
+
return callStr;
|
1226
|
+
}
|
1227
|
+
};
|
1228
1228
|
|
1229
|
-
|
1229
|
+
callProto.invokeCallback = callProto.yield;
|
1230
1230
|
|
1231
|
-
|
1232
|
-
|
1231
|
+
function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
|
1232
|
+
if (typeof id !== "number") {
|
1233
|
+
throw new TypeError("Call id is not a number");
|
1234
|
+
}
|
1235
|
+
var proxyCall = sinon.create(callProto);
|
1236
|
+
proxyCall.proxy = spy;
|
1237
|
+
proxyCall.thisValue = thisValue;
|
1238
|
+
proxyCall.args = args;
|
1239
|
+
proxyCall.returnValue = returnValue;
|
1240
|
+
proxyCall.exception = exception;
|
1241
|
+
proxyCall.callId = id;
|
1242
|
+
|
1243
|
+
return proxyCall;
|
1244
|
+
};
|
1245
|
+
createSpyCall.toString = callProto.toString; // used by mocks
|
1233
1246
|
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1247
|
+
if (commonJSModule) {
|
1248
|
+
module.exports = createSpyCall;
|
1249
|
+
} else {
|
1250
|
+
sinon.spyCall = createSpyCall;
|
1251
|
+
}
|
1252
|
+
}(typeof sinon == "object" && sinon || null));
|
1238
1253
|
|
1239
|
-
return spyCall.create(this, this.thisValues[i], this.args[i],
|
1240
|
-
this.returnValues[i], this.exceptions[i],
|
1241
|
-
this.callIds[i]);
|
1242
|
-
},
|
1243
1254
|
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1255
|
+
/**
|
1256
|
+
* @depend ../sinon.js
|
1257
|
+
* @depend call.js
|
1258
|
+
*/
|
1259
|
+
/*jslint eqeqeq: false, onevar: false, plusplus: false*/
|
1260
|
+
/*global module, require, sinon*/
|
1261
|
+
/**
|
1262
|
+
* Spy functions
|
1263
|
+
*
|
1264
|
+
* @author Christian Johansen (christian@cjohansen.no)
|
1265
|
+
* @license BSD
|
1266
|
+
*
|
1267
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
1268
|
+
*/
|
1248
1269
|
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1270
|
+
(function (sinon) {
|
1271
|
+
var commonJSModule = typeof module == "object" && typeof require == "function";
|
1272
|
+
var push = Array.prototype.push;
|
1273
|
+
var slice = Array.prototype.slice;
|
1274
|
+
var callId = 0;
|
1252
1275
|
|
1253
|
-
|
1254
|
-
|
1276
|
+
if (!sinon && commonJSModule) {
|
1277
|
+
sinon = require("../sinon");
|
1278
|
+
}
|
1255
1279
|
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
}
|
1280
|
+
if (!sinon) {
|
1281
|
+
return;
|
1282
|
+
}
|
1260
1283
|
|
1261
|
-
|
1262
|
-
|
1284
|
+
function spy(object, property) {
|
1285
|
+
if (!property && typeof object == "function") {
|
1286
|
+
return spy.create(object);
|
1287
|
+
}
|
1263
1288
|
|
1264
|
-
|
1265
|
-
|
1289
|
+
if (!object && !property) {
|
1290
|
+
return spy.create(function () { });
|
1291
|
+
}
|
1266
1292
|
|
1267
|
-
|
1268
|
-
|
1293
|
+
var method = object[property];
|
1294
|
+
return sinon.wrapMethod(object, property, spy.create(method));
|
1295
|
+
}
|
1269
1296
|
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
this.fakes = [];
|
1275
|
-
}
|
1297
|
+
function matchingFake(fakes, args, strict) {
|
1298
|
+
if (!fakes) {
|
1299
|
+
return;
|
1300
|
+
}
|
1276
1301
|
|
1277
|
-
|
1278
|
-
var fake = this._create();
|
1279
|
-
fake.matchingAguments = args;
|
1280
|
-
push.call(this.fakes, fake);
|
1302
|
+
var alen = args.length;
|
1281
1303
|
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1304
|
+
for (var i = 0, l = fakes.length; i < l; i++) {
|
1305
|
+
if (fakes[i].matches(args, strict)) {
|
1306
|
+
return fakes[i];
|
1307
|
+
}
|
1308
|
+
}
|
1309
|
+
}
|
1285
1310
|
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
}
|
1295
|
-
}
|
1296
|
-
createCallProperties.call(fake);
|
1311
|
+
function incrementCallCount() {
|
1312
|
+
this.called = true;
|
1313
|
+
this.callCount += 1;
|
1314
|
+
this.notCalled = false;
|
1315
|
+
this.calledOnce = this.callCount == 1;
|
1316
|
+
this.calledTwice = this.callCount == 2;
|
1317
|
+
this.calledThrice = this.callCount == 3;
|
1318
|
+
}
|
1297
1319
|
|
1298
|
-
|
1299
|
-
|
1320
|
+
function createCallProperties() {
|
1321
|
+
this.firstCall = this.getCall(0);
|
1322
|
+
this.secondCall = this.getCall(1);
|
1323
|
+
this.thirdCall = this.getCall(2);
|
1324
|
+
this.lastCall = this.getCall(this.callCount - 1);
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
|
1328
|
+
function createProxy(func) {
|
1329
|
+
// Retain the function length:
|
1330
|
+
var p;
|
1331
|
+
if (func.length) {
|
1332
|
+
eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
|
1333
|
+
") { return p.invoke(func, this, slice.call(arguments)); });");
|
1334
|
+
}
|
1335
|
+
else {
|
1336
|
+
p = function proxy() {
|
1337
|
+
return p.invoke(func, this, slice.call(arguments));
|
1338
|
+
};
|
1339
|
+
}
|
1340
|
+
return p;
|
1341
|
+
}
|
1300
1342
|
|
1301
|
-
|
1302
|
-
var margs = this.matchingAguments;
|
1343
|
+
var uuid = 0;
|
1303
1344
|
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1345
|
+
// Public API
|
1346
|
+
var spyApi = {
|
1347
|
+
reset: function () {
|
1348
|
+
this.called = false;
|
1349
|
+
this.notCalled = true;
|
1350
|
+
this.calledOnce = false;
|
1351
|
+
this.calledTwice = false;
|
1352
|
+
this.calledThrice = false;
|
1353
|
+
this.callCount = 0;
|
1354
|
+
this.firstCall = null;
|
1355
|
+
this.secondCall = null;
|
1356
|
+
this.thirdCall = null;
|
1357
|
+
this.lastCall = null;
|
1358
|
+
this.args = [];
|
1359
|
+
this.returnValues = [];
|
1360
|
+
this.thisValues = [];
|
1361
|
+
this.exceptions = [];
|
1362
|
+
this.callIds = [];
|
1363
|
+
if (this.fakes) {
|
1364
|
+
for (var i = 0; i < this.fakes.length; i++) {
|
1365
|
+
this.fakes[i].reset();
|
1307
1366
|
}
|
1308
|
-
}
|
1367
|
+
}
|
1368
|
+
},
|
1309
1369
|
|
1310
|
-
|
1311
|
-
|
1312
|
-
var args = slice.call(arguments, 1);
|
1313
|
-
var formatter;
|
1370
|
+
create: function create(func) {
|
1371
|
+
var name;
|
1314
1372
|
|
1315
|
-
|
1316
|
-
|
1373
|
+
if (typeof func != "function") {
|
1374
|
+
func = function () { };
|
1375
|
+
} else {
|
1376
|
+
name = sinon.functionName(func);
|
1377
|
+
}
|
1317
1378
|
|
1318
|
-
|
1319
|
-
return formatter.call(null, spy, args);
|
1320
|
-
} else if (!isNaN(parseInt(specifyer), 10)) {
|
1321
|
-
return sinon.format(args[specifyer - 1]);
|
1322
|
-
}
|
1379
|
+
var proxy = createProxy(func);
|
1323
1380
|
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
};
|
1381
|
+
sinon.extend(proxy, spy);
|
1382
|
+
delete proxy.create;
|
1383
|
+
sinon.extend(proxy, func);
|
1328
1384
|
|
1329
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
delegateToCalls(spyApi, "calledWithExactly", true);
|
1336
|
-
delegateToCalls(spyApi, "alwaysCalledWithExactly", false, "calledWithExactly");
|
1337
|
-
delegateToCalls(spyApi, "neverCalledWith", false, "notCalledWith",
|
1338
|
-
function () { return true; });
|
1339
|
-
delegateToCalls(spyApi, "neverCalledWithMatch", false, "notCalledWithMatch",
|
1340
|
-
function () { return true; });
|
1341
|
-
delegateToCalls(spyApi, "threw", true);
|
1342
|
-
delegateToCalls(spyApi, "alwaysThrew", false, "threw");
|
1343
|
-
delegateToCalls(spyApi, "returned", true);
|
1344
|
-
delegateToCalls(spyApi, "alwaysReturned", false, "returned");
|
1345
|
-
delegateToCalls(spyApi, "calledWithNew", true);
|
1346
|
-
delegateToCalls(spyApi, "alwaysCalledWithNew", false, "calledWithNew");
|
1347
|
-
delegateToCalls(spyApi, "callArg", false, "callArgWith", function () {
|
1348
|
-
throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
|
1349
|
-
});
|
1350
|
-
spyApi.callArgWith = spyApi.callArg;
|
1351
|
-
delegateToCalls(spyApi, "yield", false, "yield", function () {
|
1352
|
-
throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
|
1353
|
-
});
|
1354
|
-
// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
|
1355
|
-
spyApi.invokeCallback = spyApi.yield;
|
1356
|
-
delegateToCalls(spyApi, "yieldTo", false, "yieldTo", function (property) {
|
1357
|
-
throw new Error(this.toString() + " cannot yield to '" + property +
|
1358
|
-
"' since it was not yet invoked.");
|
1359
|
-
});
|
1385
|
+
proxy.reset();
|
1386
|
+
proxy.prototype = func.prototype;
|
1387
|
+
proxy.displayName = name || "spy";
|
1388
|
+
proxy.toString = sinon.functionToString;
|
1389
|
+
proxy._create = sinon.spy.create;
|
1390
|
+
proxy.id = "spy#" + uuid++;
|
1360
1391
|
|
1361
|
-
|
1362
|
-
|
1363
|
-
return sinon.timesInWords(spy.callCount);
|
1364
|
-
},
|
1392
|
+
return proxy;
|
1393
|
+
},
|
1365
1394
|
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1395
|
+
invoke: function invoke(func, thisValue, args) {
|
1396
|
+
var matching = matchingFake(this.fakes, args);
|
1397
|
+
var exception, returnValue;
|
1369
1398
|
|
1370
|
-
|
1371
|
-
|
1399
|
+
incrementCallCount.call(this);
|
1400
|
+
push.call(this.thisValues, thisValue);
|
1401
|
+
push.call(this.args, args);
|
1402
|
+
push.call(this.callIds, callId++);
|
1372
1403
|
|
1373
|
-
|
1374
|
-
|
1404
|
+
try {
|
1405
|
+
if (matching) {
|
1406
|
+
returnValue = matching.invoke(func, thisValue, args);
|
1407
|
+
} else {
|
1408
|
+
returnValue = (this.func || func).apply(thisValue, args);
|
1375
1409
|
}
|
1410
|
+
} catch (e) {
|
1411
|
+
push.call(this.returnValues, undefined);
|
1412
|
+
exception = e;
|
1413
|
+
throw e;
|
1414
|
+
} finally {
|
1415
|
+
push.call(this.exceptions, exception);
|
1416
|
+
}
|
1376
1417
|
|
1377
|
-
|
1378
|
-
},
|
1379
|
-
|
1380
|
-
"t": function (spy) {
|
1381
|
-
var objects = [];
|
1418
|
+
push.call(this.returnValues, returnValue);
|
1382
1419
|
|
1383
|
-
|
1384
|
-
push.call(objects, sinon.format(spy.thisValues[i]));
|
1385
|
-
}
|
1420
|
+
createCallProperties.call(this);
|
1386
1421
|
|
1387
|
-
|
1388
|
-
|
1422
|
+
return returnValue;
|
1423
|
+
},
|
1389
1424
|
|
1390
|
-
|
1391
|
-
|
1425
|
+
getCall: function getCall(i) {
|
1426
|
+
if (i < 0 || i >= this.callCount) {
|
1427
|
+
return null;
|
1428
|
+
}
|
1392
1429
|
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1430
|
+
return sinon.spyCall(this, this.thisValues[i], this.args[i],
|
1431
|
+
this.returnValues[i], this.exceptions[i],
|
1432
|
+
this.callIds[i]);
|
1433
|
+
},
|
1396
1434
|
|
1397
|
-
|
1435
|
+
calledBefore: function calledBefore(spyFn) {
|
1436
|
+
if (!this.called) {
|
1437
|
+
return false;
|
1398
1438
|
}
|
1399
|
-
};
|
1400
1439
|
|
1401
|
-
|
1402
|
-
|
1440
|
+
if (!spyFn.called) {
|
1441
|
+
return true;
|
1442
|
+
}
|
1403
1443
|
|
1404
|
-
|
1444
|
+
return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
|
1445
|
+
},
|
1405
1446
|
|
1406
|
-
function
|
1407
|
-
|
1408
|
-
|
1409
|
-
msg += " Received [" + slice.call(args).join(", ") + "]";
|
1447
|
+
calledAfter: function calledAfter(spyFn) {
|
1448
|
+
if (!this.called || !spyFn.called) {
|
1449
|
+
return false;
|
1410
1450
|
}
|
1411
|
-
throw new Error(msg);
|
1412
|
-
}
|
1413
1451
|
|
1414
|
-
|
1415
|
-
|
1416
|
-
var proxyCall = sinon.create(spyCall);
|
1417
|
-
delete proxyCall.create;
|
1418
|
-
proxyCall.proxy = spy;
|
1419
|
-
proxyCall.thisValue = thisValue;
|
1420
|
-
proxyCall.args = args;
|
1421
|
-
proxyCall.returnValue = returnValue;
|
1422
|
-
proxyCall.exception = exception;
|
1423
|
-
proxyCall.callId = typeof id == "number" && id || callId++;
|
1424
|
-
|
1425
|
-
return proxyCall;
|
1426
|
-
},
|
1452
|
+
return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
|
1453
|
+
},
|
1427
1454
|
|
1428
|
-
|
1429
|
-
|
1430
|
-
return thisValue.test(this.thisValue);
|
1431
|
-
}
|
1432
|
-
return this.thisValue === thisValue;
|
1433
|
-
},
|
1455
|
+
withArgs: function () {
|
1456
|
+
var args = slice.call(arguments);
|
1434
1457
|
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1458
|
+
if (this.fakes) {
|
1459
|
+
var match = matchingFake(this.fakes, args, true);
|
1460
|
+
|
1461
|
+
if (match) {
|
1462
|
+
return match;
|
1440
1463
|
}
|
1464
|
+
} else {
|
1465
|
+
this.fakes = [];
|
1466
|
+
}
|
1441
1467
|
|
1442
|
-
|
1443
|
-
|
1468
|
+
var original = this;
|
1469
|
+
var fake = this._create();
|
1470
|
+
fake.matchingAguments = args;
|
1471
|
+
push.call(this.fakes, fake);
|
1444
1472
|
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1473
|
+
fake.withArgs = function () {
|
1474
|
+
return original.withArgs.apply(original, arguments);
|
1475
|
+
};
|
1476
|
+
|
1477
|
+
for (var i = 0; i < this.args.length; i++) {
|
1478
|
+
if (fake.matches(this.args[i])) {
|
1479
|
+
incrementCallCount.call(fake);
|
1480
|
+
push.call(fake.thisValues, this.thisValues[i]);
|
1481
|
+
push.call(fake.args, this.args[i]);
|
1482
|
+
push.call(fake.returnValues, this.returnValues[i]);
|
1483
|
+
push.call(fake.exceptions, this.exceptions[i]);
|
1484
|
+
push.call(fake.callIds, this.callIds[i]);
|
1452
1485
|
}
|
1453
|
-
|
1454
|
-
|
1486
|
+
}
|
1487
|
+
createCallProperties.call(fake);
|
1455
1488
|
|
1456
|
-
|
1457
|
-
|
1458
|
-
this.calledWith.apply(this, arguments);
|
1459
|
-
},
|
1489
|
+
return fake;
|
1490
|
+
},
|
1460
1491
|
|
1461
|
-
|
1462
|
-
|
1463
|
-
},
|
1492
|
+
matches: function (args, strict) {
|
1493
|
+
var margs = this.matchingAguments;
|
1464
1494
|
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1495
|
+
if (margs.length <= args.length &&
|
1496
|
+
sinon.deepEqual(margs, args.slice(0, margs.length))) {
|
1497
|
+
return !strict || margs.length == args.length;
|
1498
|
+
}
|
1499
|
+
},
|
1468
1500
|
|
1469
|
-
|
1470
|
-
|
1471
|
-
|
1501
|
+
printf: function (format) {
|
1502
|
+
var spy = this;
|
1503
|
+
var args = slice.call(arguments, 1);
|
1504
|
+
var formatter;
|
1472
1505
|
|
1473
|
-
|
1474
|
-
|
1475
|
-
return !!this.exception;
|
1476
|
-
}
|
1506
|
+
return (format || "").replace(/%(.)/g, function (match, specifyer) {
|
1507
|
+
formatter = spyApi.formatters[specifyer];
|
1477
1508
|
|
1478
|
-
if (typeof
|
1479
|
-
return
|
1509
|
+
if (typeof formatter == "function") {
|
1510
|
+
return formatter.call(null, spy, args);
|
1511
|
+
} else if (!isNaN(parseInt(specifyer), 10)) {
|
1512
|
+
return sinon.format(args[specifyer - 1]);
|
1480
1513
|
}
|
1481
1514
|
|
1482
|
-
return
|
1483
|
-
}
|
1484
|
-
|
1485
|
-
|
1486
|
-
return this.thisValue instanceof this.proxy;
|
1487
|
-
},
|
1515
|
+
return "%" + specifyer;
|
1516
|
+
});
|
1517
|
+
}
|
1518
|
+
};
|
1488
1519
|
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1520
|
+
function delegateToCalls(method, matchAny, actual, notCalled) {
|
1521
|
+
spyApi[method] = function () {
|
1522
|
+
if (!this.called) {
|
1523
|
+
if (notCalled) {
|
1524
|
+
return notCalled.apply(this, arguments);
|
1525
|
+
}
|
1526
|
+
return false;
|
1527
|
+
}
|
1492
1528
|
|
1493
|
-
|
1494
|
-
|
1495
|
-
},
|
1529
|
+
var currentCall;
|
1530
|
+
var matches = 0;
|
1496
1531
|
|
1497
|
-
|
1498
|
-
this.
|
1499
|
-
},
|
1532
|
+
for (var i = 0, l = this.callCount; i < l; i += 1) {
|
1533
|
+
currentCall = this.getCall(i);
|
1500
1534
|
|
1501
|
-
|
1502
|
-
|
1503
|
-
this.args[pos].apply(null, args);
|
1504
|
-
},
|
1535
|
+
if (currentCall[actual || method].apply(currentCall, arguments)) {
|
1536
|
+
matches += 1;
|
1505
1537
|
|
1506
|
-
|
1507
|
-
|
1508
|
-
for (var i = 0, l = args.length; i < l; ++i) {
|
1509
|
-
if (typeof args[i] === "function") {
|
1510
|
-
args[i].apply(null, slice.call(arguments));
|
1511
|
-
return;
|
1538
|
+
if (matchAny) {
|
1539
|
+
return true;
|
1512
1540
|
}
|
1513
1541
|
}
|
1514
|
-
|
1515
|
-
},
|
1542
|
+
}
|
1516
1543
|
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
if (args[i] && typeof args[i][prop] === "function") {
|
1521
|
-
args[i][prop].apply(null, slice.call(arguments, 1));
|
1522
|
-
return;
|
1523
|
-
}
|
1524
|
-
}
|
1525
|
-
throwYieldError(this.proxy, " cannot yield to '" + prop +
|
1526
|
-
"' since no callback was passed.", args);
|
1527
|
-
},
|
1544
|
+
return matches === this.callCount;
|
1545
|
+
};
|
1546
|
+
}
|
1528
1547
|
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1548
|
+
delegateToCalls("calledOn", true);
|
1549
|
+
delegateToCalls("alwaysCalledOn", false, "calledOn");
|
1550
|
+
delegateToCalls("calledWith", true);
|
1551
|
+
delegateToCalls("calledWithMatch", true);
|
1552
|
+
delegateToCalls("alwaysCalledWith", false, "calledWith");
|
1553
|
+
delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
|
1554
|
+
delegateToCalls("calledWithExactly", true);
|
1555
|
+
delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
|
1556
|
+
delegateToCalls("neverCalledWith", false, "notCalledWith",
|
1557
|
+
function () { return true; });
|
1558
|
+
delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
|
1559
|
+
function () { return true; });
|
1560
|
+
delegateToCalls("threw", true);
|
1561
|
+
delegateToCalls("alwaysThrew", false, "threw");
|
1562
|
+
delegateToCalls("returned", true);
|
1563
|
+
delegateToCalls("alwaysReturned", false, "returned");
|
1564
|
+
delegateToCalls("calledWithNew", true);
|
1565
|
+
delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
|
1566
|
+
delegateToCalls("callArg", false, "callArgWith", function () {
|
1567
|
+
throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
|
1568
|
+
});
|
1569
|
+
spyApi.callArgWith = spyApi.callArg;
|
1570
|
+
delegateToCalls("callArgOn", false, "callArgOnWith", function () {
|
1571
|
+
throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
|
1572
|
+
});
|
1573
|
+
spyApi.callArgOnWith = spyApi.callArgOn;
|
1574
|
+
delegateToCalls("yield", false, "yield", function () {
|
1575
|
+
throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
|
1576
|
+
});
|
1577
|
+
// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
|
1578
|
+
spyApi.invokeCallback = spyApi.yield;
|
1579
|
+
delegateToCalls("yieldOn", false, "yieldOn", function () {
|
1580
|
+
throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
|
1581
|
+
});
|
1582
|
+
delegateToCalls("yieldTo", false, "yieldTo", function (property) {
|
1583
|
+
throw new Error(this.toString() + " cannot yield to '" + property +
|
1584
|
+
"' since it was not yet invoked.");
|
1585
|
+
});
|
1586
|
+
delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
|
1587
|
+
throw new Error(this.toString() + " cannot yield to '" + property +
|
1588
|
+
"' since it was not yet invoked.");
|
1589
|
+
});
|
1532
1590
|
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1591
|
+
spyApi.formatters = {
|
1592
|
+
"c": function (spy) {
|
1593
|
+
return sinon.timesInWords(spy.callCount);
|
1594
|
+
},
|
1536
1595
|
|
1537
|
-
|
1596
|
+
"n": function (spy) {
|
1597
|
+
return spy.toString();
|
1598
|
+
},
|
1599
|
+
|
1600
|
+
"C": function (spy) {
|
1601
|
+
var calls = [];
|
1538
1602
|
|
1539
|
-
|
1540
|
-
|
1603
|
+
for (var i = 0, l = spy.callCount; i < l; ++i) {
|
1604
|
+
var stringifiedCall = " " + spy.getCall(i).toString();
|
1605
|
+
if (/\n/.test(calls[i - 1])) {
|
1606
|
+
stringifiedCall = "\n" + stringifiedCall;
|
1541
1607
|
}
|
1608
|
+
push.call(calls, stringifiedCall);
|
1609
|
+
}
|
1542
1610
|
|
1543
|
-
|
1544
|
-
|
1611
|
+
return calls.length > 0 ? "\n" + calls.join("\n") : "";
|
1612
|
+
},
|
1545
1613
|
|
1546
|
-
|
1547
|
-
|
1548
|
-
}
|
1549
|
-
}
|
1614
|
+
"t": function (spy) {
|
1615
|
+
var objects = [];
|
1550
1616
|
|
1551
|
-
|
1617
|
+
for (var i = 0, l = spy.callCount; i < l; ++i) {
|
1618
|
+
push.call(objects, sinon.format(spy.thisValues[i]));
|
1552
1619
|
}
|
1553
|
-
};
|
1554
|
-
callApi.invokeCallback = callApi.yield;
|
1555
|
-
return callApi;
|
1556
|
-
}());
|
1557
1620
|
|
1558
|
-
|
1621
|
+
return objects.join(", ");
|
1622
|
+
},
|
1559
1623
|
|
1560
|
-
|
1561
|
-
|
1624
|
+
"*": function (spy, args) {
|
1625
|
+
var formatted = [];
|
1626
|
+
|
1627
|
+
for (var i = 0, l = args.length; i < l; ++i) {
|
1628
|
+
push.call(formatted, sinon.format(args[i]));
|
1629
|
+
}
|
1630
|
+
|
1631
|
+
return formatted.join(", ");
|
1632
|
+
}
|
1633
|
+
};
|
1634
|
+
|
1635
|
+
sinon.extend(spy, spyApi);
|
1636
|
+
|
1637
|
+
spy.spyCall = sinon.spyCall;
|
1562
1638
|
|
1563
1639
|
if (commonJSModule) {
|
1564
1640
|
module.exports = spy;
|
@@ -1579,7 +1655,7 @@ var sinon = (function () {
|
|
1579
1655
|
* @author Christian Johansen (christian@cjohansen.no)
|
1580
1656
|
* @license BSD
|
1581
1657
|
*
|
1582
|
-
* Copyright (c) 2010-
|
1658
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
1583
1659
|
*/
|
1584
1660
|
|
1585
1661
|
(function (sinon) {
|
@@ -1625,7 +1701,8 @@ var sinon = (function () {
|
|
1625
1701
|
|
1626
1702
|
function getChangingValue(stub, property) {
|
1627
1703
|
var index = stub.callCount - 1;
|
1628
|
-
var
|
1704
|
+
var values = stub[property];
|
1705
|
+
var prop = index in values ? values[index] : values[values.length - 1];
|
1629
1706
|
stub[property + "Last"] = prop;
|
1630
1707
|
|
1631
1708
|
return prop;
|
@@ -1682,8 +1759,6 @@ var sinon = (function () {
|
|
1682
1759
|
var nextTick = (function () {
|
1683
1760
|
if (typeof process === "object" && typeof process.nextTick === "function") {
|
1684
1761
|
return process.nextTick;
|
1685
|
-
} else if (typeof msSetImmediate === "function") {
|
1686
|
-
return msSetImmediate.bind(window);
|
1687
1762
|
} else if (typeof setImmediate === "function") {
|
1688
1763
|
return setImmediate;
|
1689
1764
|
} else {
|
@@ -1701,8 +1776,6 @@ var sinon = (function () {
|
|
1701
1776
|
throw new TypeError(getCallbackError(stub, func, args));
|
1702
1777
|
}
|
1703
1778
|
|
1704
|
-
var index = stub.callCount - 1;
|
1705
|
-
|
1706
1779
|
var callbackArguments = getChangingValue(stub, "callbackArguments");
|
1707
1780
|
var callbackContext = getChangingValue(stub, "callbackContexts");
|
1708
1781
|
|
@@ -1768,6 +1841,25 @@ var sinon = (function () {
|
|
1768
1841
|
return functionStub;
|
1769
1842
|
},
|
1770
1843
|
|
1844
|
+
resetBehavior: function () {
|
1845
|
+
var i;
|
1846
|
+
|
1847
|
+
this.callArgAts = [];
|
1848
|
+
this.callbackArguments = [];
|
1849
|
+
this.callbackContexts = [];
|
1850
|
+
this.callArgProps = [];
|
1851
|
+
|
1852
|
+
delete this.returnValue;
|
1853
|
+
delete this.returnArgAt;
|
1854
|
+
this.returnThis = false;
|
1855
|
+
|
1856
|
+
if (this.fakes) {
|
1857
|
+
for (i = 0; i < this.fakes.length; i++) {
|
1858
|
+
this.fakes[i].resetBehavior();
|
1859
|
+
}
|
1860
|
+
}
|
1861
|
+
},
|
1862
|
+
|
1771
1863
|
returns: function returns(value) {
|
1772
1864
|
this.returnValue = value;
|
1773
1865
|
|
@@ -1934,7 +2026,7 @@ var sinon = (function () {
|
|
1934
2026
|
* @author Christian Johansen (christian@cjohansen.no)
|
1935
2027
|
* @license BSD
|
1936
2028
|
*
|
1937
|
-
* Copyright (c) 2010-
|
2029
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
1938
2030
|
*/
|
1939
2031
|
|
1940
2032
|
(function (sinon) {
|
@@ -2302,7 +2394,8 @@ var sinon = (function () {
|
|
2302
2394
|
}
|
2303
2395
|
|
2304
2396
|
var callStr = sinon.spyCall.toString.call({
|
2305
|
-
proxy: this.method
|
2397
|
+
proxy: this.method || "anonymous mock expectation",
|
2398
|
+
args: args
|
2306
2399
|
});
|
2307
2400
|
|
2308
2401
|
var message = callStr.replace(", [...", "[, ...") + " " +
|
@@ -2358,7 +2451,7 @@ var sinon = (function () {
|
|
2358
2451
|
* @author Christian Johansen (christian@cjohansen.no)
|
2359
2452
|
* @license BSD
|
2360
2453
|
*
|
2361
|
-
* Copyright (c) 2010-
|
2454
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
2362
2455
|
*/
|
2363
2456
|
|
2364
2457
|
(function (sinon) {
|
@@ -2515,7 +2608,7 @@ var sinon = (function () {
|
|
2515
2608
|
* @author Christian Johansen (christian@cjohansen.no)
|
2516
2609
|
* @license BSD
|
2517
2610
|
*
|
2518
|
-
* Copyright (c) 2010-
|
2611
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
2519
2612
|
*/
|
2520
2613
|
|
2521
2614
|
if (typeof sinon == "undefined") {
|
@@ -2656,6 +2749,8 @@ var sinon = (function () {
|
|
2656
2749
|
if (firstException) {
|
2657
2750
|
throw firstException;
|
2658
2751
|
}
|
2752
|
+
|
2753
|
+
return this.now;
|
2659
2754
|
},
|
2660
2755
|
|
2661
2756
|
firstTimerInRange: function (from, to) {
|
@@ -2869,15 +2964,16 @@ var sinon = (function () {
|
|
2869
2964
|
(function () {
|
2870
2965
|
var push = [].push;
|
2871
2966
|
|
2872
|
-
sinon.Event = function Event(type, bubbles, cancelable) {
|
2873
|
-
this.initEvent(type, bubbles, cancelable);
|
2967
|
+
sinon.Event = function Event(type, bubbles, cancelable, target) {
|
2968
|
+
this.initEvent(type, bubbles, cancelable, target);
|
2874
2969
|
};
|
2875
2970
|
|
2876
2971
|
sinon.Event.prototype = {
|
2877
|
-
initEvent: function(type, bubbles, cancelable) {
|
2972
|
+
initEvent: function(type, bubbles, cancelable, target) {
|
2878
2973
|
this.type = type;
|
2879
2974
|
this.bubbles = bubbles;
|
2880
2975
|
this.cancelable = cancelable;
|
2976
|
+
this.target = target;
|
2881
2977
|
},
|
2882
2978
|
|
2883
2979
|
stopPropagation: function () {},
|
@@ -2933,7 +3029,7 @@ var sinon = (function () {
|
|
2933
3029
|
* @author Christian Johansen (christian@cjohansen.no)
|
2934
3030
|
* @license BSD
|
2935
3031
|
*
|
2936
|
-
* Copyright (c) 2010-
|
3032
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
2937
3033
|
*/
|
2938
3034
|
|
2939
3035
|
if (typeof sinon == "undefined") {
|
@@ -2981,6 +3077,18 @@ var sinon = (function () {
|
|
2981
3077
|
this.status = 0;
|
2982
3078
|
this.statusText = "";
|
2983
3079
|
|
3080
|
+
var xhr = this;
|
3081
|
+
|
3082
|
+
["loadstart", "load", "abort", "loadend"].forEach(function (eventName) {
|
3083
|
+
xhr.addEventListener(eventName, function (event) {
|
3084
|
+
var listener = xhr["on" + eventName];
|
3085
|
+
|
3086
|
+
if (listener && typeof listener == "function") {
|
3087
|
+
listener(event);
|
3088
|
+
}
|
3089
|
+
});
|
3090
|
+
});
|
3091
|
+
|
2984
3092
|
if (typeof FakeXMLHttpRequest.onCreate == "function") {
|
2985
3093
|
FakeXMLHttpRequest.onCreate(this);
|
2986
3094
|
}
|
@@ -3134,6 +3242,13 @@ var sinon = (function () {
|
|
3134
3242
|
}
|
3135
3243
|
|
3136
3244
|
this.dispatchEvent(new sinon.Event("readystatechange"));
|
3245
|
+
|
3246
|
+
switch (this.readyState) {
|
3247
|
+
case FakeXMLHttpRequest.DONE:
|
3248
|
+
this.dispatchEvent(new sinon.Event("load", false, false, this));
|
3249
|
+
this.dispatchEvent(new sinon.Event("loadend", false, false, this));
|
3250
|
+
break;
|
3251
|
+
}
|
3137
3252
|
},
|
3138
3253
|
|
3139
3254
|
setRequestHeader: function setRequestHeader(header, value) {
|
@@ -3162,6 +3277,8 @@ var sinon = (function () {
|
|
3162
3277
|
|
3163
3278
|
if (this.async) {
|
3164
3279
|
this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
|
3280
|
+
} else {
|
3281
|
+
this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
|
3165
3282
|
}
|
3166
3283
|
},
|
3167
3284
|
|
@@ -3187,6 +3304,8 @@ var sinon = (function () {
|
|
3187
3304
|
if (typeof this.onSend == "function") {
|
3188
3305
|
this.onSend(this);
|
3189
3306
|
}
|
3307
|
+
|
3308
|
+
this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
|
3190
3309
|
},
|
3191
3310
|
|
3192
3311
|
abort: function abort() {
|
@@ -3201,6 +3320,11 @@ var sinon = (function () {
|
|
3201
3320
|
}
|
3202
3321
|
|
3203
3322
|
this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
|
3323
|
+
|
3324
|
+
this.dispatchEvent(new sinon.Event("abort", false, false, this));
|
3325
|
+
if (typeof this.onerror === "function") {
|
3326
|
+
this.onerror();
|
3327
|
+
}
|
3204
3328
|
},
|
3205
3329
|
|
3206
3330
|
getResponseHeader: function getResponseHeader(header) {
|
@@ -3281,6 +3405,10 @@ var sinon = (function () {
|
|
3281
3405
|
this.status = typeof status == "number" ? status : 200;
|
3282
3406
|
this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
|
3283
3407
|
this.setResponseBody(body || "");
|
3408
|
+
if (typeof this.onload === "function"){
|
3409
|
+
this.onload();
|
3410
|
+
}
|
3411
|
+
|
3284
3412
|
}
|
3285
3413
|
});
|
3286
3414
|
|
@@ -3407,7 +3535,7 @@ var sinon = (function () {
|
|
3407
3535
|
* @author Christian Johansen (christian@cjohansen.no)
|
3408
3536
|
* @license BSD
|
3409
3537
|
*
|
3410
|
-
* Copyright (c) 2010-
|
3538
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3411
3539
|
*/
|
3412
3540
|
|
3413
3541
|
if (typeof sinon == "undefined") {
|
@@ -3471,6 +3599,15 @@ var sinon = (function () {
|
|
3471
3599
|
return false;
|
3472
3600
|
}
|
3473
3601
|
|
3602
|
+
function log(response, request) {
|
3603
|
+
var str;
|
3604
|
+
|
3605
|
+
str = "Request:\n" + sinon.format(request) + "\n\n";
|
3606
|
+
str += "Response:\n" + sinon.format(response) + "\n\n";
|
3607
|
+
|
3608
|
+
sinon.log(str);
|
3609
|
+
}
|
3610
|
+
|
3474
3611
|
return {
|
3475
3612
|
create: function () {
|
3476
3613
|
var server = create(this);
|
@@ -3577,6 +3714,8 @@ var sinon = (function () {
|
|
3577
3714
|
}
|
3578
3715
|
|
3579
3716
|
if (request.readyState != 4) {
|
3717
|
+
log(response, request);
|
3718
|
+
|
3580
3719
|
request.respond(response[0], response[1], response[2]);
|
3581
3720
|
}
|
3582
3721
|
} catch (e) {
|
@@ -3612,7 +3751,7 @@ var sinon = (function () {
|
|
3612
3751
|
* @author Christian Johansen (christian@cjohansen.no)
|
3613
3752
|
* @license BSD
|
3614
3753
|
*
|
3615
|
-
* Copyright (c) 2010-
|
3754
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3616
3755
|
*/
|
3617
3756
|
|
3618
3757
|
(function () {
|
@@ -3692,7 +3831,7 @@ var sinon = (function () {
|
|
3692
3831
|
* @author Christian Johansen (christian@cjohansen.no)
|
3693
3832
|
* @license BSD
|
3694
3833
|
*
|
3695
|
-
* Copyright (c) 2010-
|
3834
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3696
3835
|
*/
|
3697
3836
|
|
3698
3837
|
if (typeof module == "object" && typeof require == "function") {
|
@@ -3816,7 +3955,7 @@ var sinon = (function () {
|
|
3816
3955
|
* @author Christian Johansen (christian@cjohansen.no)
|
3817
3956
|
* @license BSD
|
3818
3957
|
*
|
3819
|
-
* Copyright (c) 2010-
|
3958
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3820
3959
|
*/
|
3821
3960
|
|
3822
3961
|
(function (sinon) {
|
@@ -3889,7 +4028,7 @@ var sinon = (function () {
|
|
3889
4028
|
* @author Christian Johansen (christian@cjohansen.no)
|
3890
4029
|
* @license BSD
|
3891
4030
|
*
|
3892
|
-
* Copyright (c) 2010-
|
4031
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3893
4032
|
*/
|
3894
4033
|
|
3895
4034
|
(function (sinon) {
|
@@ -3986,7 +4125,7 @@ var sinon = (function () {
|
|
3986
4125
|
* @author Christian Johansen (christian@cjohansen.no)
|
3987
4126
|
* @license BSD
|
3988
4127
|
*
|
3989
|
-
* Copyright (c) 2010-
|
4128
|
+
* Copyright (c) 2010-2013 Christian Johansen
|
3990
4129
|
*/
|
3991
4130
|
|
3992
4131
|
(function (sinon, global) {
|
@@ -4079,7 +4218,14 @@ var sinon = (function () {
|
|
4079
4218
|
if (!sinon.calledInOrder(arguments)) {
|
4080
4219
|
try {
|
4081
4220
|
expected = [].join.call(arguments, ", ");
|
4082
|
-
|
4221
|
+
var calls = slice.call(arguments);
|
4222
|
+
var i = calls.length;
|
4223
|
+
while (i) {
|
4224
|
+
if (!calls[--i].called) {
|
4225
|
+
calls.splice(i, 1);
|
4226
|
+
}
|
4227
|
+
}
|
4228
|
+
actual = sinon.orderByFirstCall(calls).join(", ");
|
4083
4229
|
} catch (e) {
|
4084
4230
|
// If this fails, we'll just fall back to the blank string
|
4085
4231
|
}
|
@@ -4148,6 +4294,6 @@ var sinon = (function () {
|
|
4148
4294
|
} else {
|
4149
4295
|
sinon.assert = assert;
|
4150
4296
|
}
|
4151
|
-
}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : global));
|
4297
|
+
}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
|
4152
4298
|
|
4153
4299
|
return sinon;}.call(typeof window != 'undefined' && window || {}));
|