teabag 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 || {}));
|