Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
jio
Commits
fb4891d1
Commit
fb4891d1
authored
Sep 19, 2013
by
Tristan Cavelier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sinon.js updated
parent
fd8a8709
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
519 additions
and
452 deletions
+519
-452
lib/sinon/sinon.js
lib/sinon/sinon.js
+519
-452
No files found.
lib/sinon/sinon.js
View file @
fb4891d1
/**
* Sinon.JS 1.
6.0, 2013/02/18
* Sinon.JS 1.
7.3, 2013/06/20
*
* @author Christian Johansen (christian@cjohansen.no)
* @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
...
...
@@ -33,9 +33,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
var
sinon
=
(
function
()
{
"
use strict
"
;
this
.
sinon
=
(
function
()
{
var
buster
=
(
function
(
setTimeout
,
B
)
{
var
isNode
=
typeof
require
==
"
function
"
&&
typeof
module
==
"
object
"
;
var
div
=
typeof
document
!=
"
undefined
"
&&
document
.
createElement
(
"
div
"
);
...
...
@@ -505,6 +503,10 @@ var sinon = (function (buster) {
}
}
function
isRestorable
(
obj
)
{
return
typeof
obj
===
"
function
"
&&
typeof
obj
.
restore
===
"
function
"
&&
obj
.
restore
.
sinon
;
}
var
sinon
=
{
wrapMethod
:
function
wrapMethod
(
object
,
property
,
method
)
{
if
(
!
object
)
{
...
...
@@ -617,6 +619,10 @@ var sinon = (function (buster) {
return
true
;
}
if
(
aString
==
"
[object Date]
"
)
{
return
a
.
valueOf
()
===
b
.
valueOf
();
}
var
prop
,
aLength
=
0
,
bLength
=
0
;
for
(
prop
in
a
)
{
...
...
@@ -631,11 +637,7 @@ var sinon = (function (buster) {
bLength
+=
1
;
}
if
(
aLength
!=
bLength
)
{
return
false
;
}
return
true
;
return
aLength
==
bLength
;
},
functionName
:
function
functionName
(
func
)
{
...
...
@@ -755,6 +757,19 @@ var sinon = (function (buster) {
throw
new
TypeError
(
"
The constructor should be a function.
"
);
}
return
sinon
.
stub
(
sinon
.
create
(
constructor
.
prototype
));
},
restore
:
function
(
object
)
{
if
(
object
!==
null
&&
typeof
object
===
"
object
"
)
{
for
(
var
prop
in
object
)
{
if
(
isRestorable
(
object
[
prop
]))
{
object
[
prop
].
restore
();
}
}
}
else
if
(
isRestorable
(
object
))
{
object
.
restore
();
}
}
};
...
...
@@ -1044,70 +1059,225 @@ var sinon = (function (buster) {
/*jslint eqeqeq: false, onevar: false, plusplus: false*/
/*global module, require, sinon*/
/**
* Spy
function
s
* Spy
call
s
*
* @author Christian Johansen (christian@cjohansen.no)
* @author Maximilian Antoni (mail@maxantoni.de)
* @license BSD
*
* Copyright (c) 2010-2013 Christian Johansen
* Copyright (c) 2013 Maximilian Antoni
*/
var
commonJSModule
=
typeof
module
==
"
object
"
&&
typeof
require
==
"
function
"
;
if
(
!
this
.
sinon
&&
commonJSModule
)
{
var
sinon
=
require
(
"
../sinon
"
);
}
(
function
(
sinon
)
{
var
commonJSModule
=
typeof
module
==
"
object
"
&&
typeof
require
==
"
function
"
;
var
spyCall
;
var
callId
=
0
;
var
push
=
[].
push
;
function
throwYieldError
(
proxy
,
text
,
args
)
{
var
msg
=
sinon
.
functionName
(
proxy
)
+
text
;
if
(
args
.
length
)
{
msg
+=
"
Received [
"
+
slice
.
call
(
args
).
join
(
"
,
"
)
+
"
]
"
;
}
throw
new
Error
(
msg
);
}
var
slice
=
Array
.
prototype
.
slice
;
if
(
!
sinon
&&
commonJSModule
)
{
sinon
=
require
(
"
../sinon
"
);
var
callProto
=
{
calledOn
:
function
calledOn
(
thisValue
)
{
if
(
sinon
.
match
&&
sinon
.
match
.
isMatcher
(
thisValue
))
{
return
thisValue
.
test
(
this
.
thisValue
);
}
return
this
.
thisValue
===
thisValue
;
},
if
(
!
sinon
)
{
return
;
calledWith
:
function
calledWith
()
{
for
(
var
i
=
0
,
l
=
arguments
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
!
sinon
.
deepEqual
(
arguments
[
i
],
this
.
args
[
i
]))
{
return
false
;
}
}
function
spy
(
object
,
property
)
{
if
(
!
property
&&
typeof
object
==
"
function
"
)
{
return
spy
.
create
(
object
);
return
true
;
},
calledWithMatch
:
function
calledWithMatch
()
{
for
(
var
i
=
0
,
l
=
arguments
.
length
;
i
<
l
;
i
+=
1
)
{
var
actual
=
this
.
args
[
i
];
var
expectation
=
arguments
[
i
];
if
(
!
sinon
.
match
||
!
sinon
.
match
(
expectation
).
test
(
actual
))
{
return
false
;
}
}
return
true
;
},
if
(
!
object
&&
!
property
)
{
return
spy
.
create
(
function
()
{
});
calledWithExactly
:
function
calledWithExactly
()
{
return
arguments
.
length
==
this
.
args
.
length
&&
this
.
calledWith
.
apply
(
this
,
arguments
);
},
notCalledWith
:
function
notCalledWith
()
{
return
!
this
.
calledWith
.
apply
(
this
,
arguments
);
},
notCalledWithMatch
:
function
notCalledWithMatch
()
{
return
!
this
.
calledWithMatch
.
apply
(
this
,
arguments
);
},
returned
:
function
returned
(
value
)
{
return
sinon
.
deepEqual
(
value
,
this
.
returnValue
);
},
threw
:
function
threw
(
error
)
{
if
(
typeof
error
===
"
undefined
"
||
!
this
.
exception
)
{
return
!!
this
.
exception
;
}
var
method
=
object
[
property
];
return
sinon
.
wrapMethod
(
object
,
property
,
spy
.
create
(
method
));
return
this
.
exception
===
error
||
this
.
exception
.
name
===
error
;
},
calledWithNew
:
function
calledWithNew
(
thisValue
)
{
return
this
.
thisValue
instanceof
this
.
proxy
;
},
calledBefore
:
function
(
other
)
{
return
this
.
callId
<
other
.
callId
;
},
calledAfter
:
function
(
other
)
{
return
this
.
callId
>
other
.
callId
;
},
callArg
:
function
(
pos
)
{
this
.
args
[
pos
]();
},
callArgOn
:
function
(
pos
,
thisValue
)
{
this
.
args
[
pos
].
apply
(
thisValue
);
},
callArgWith
:
function
(
pos
)
{
this
.
callArgOnWith
.
apply
(
this
,
[
pos
,
null
].
concat
(
slice
.
call
(
arguments
,
1
)));
},
callArgOnWith
:
function
(
pos
,
thisValue
)
{
var
args
=
slice
.
call
(
arguments
,
2
);
this
.
args
[
pos
].
apply
(
thisValue
,
args
);
},
"
yield
"
:
function
()
{
this
.
yieldOn
.
apply
(
this
,
[
null
].
concat
(
slice
.
call
(
arguments
,
0
)));
},
yieldOn
:
function
(
thisValue
)
{
var
args
=
this
.
args
;
for
(
var
i
=
0
,
l
=
args
.
length
;
i
<
l
;
++
i
)
{
if
(
typeof
args
[
i
]
===
"
function
"
)
{
args
[
i
].
apply
(
thisValue
,
slice
.
call
(
arguments
,
1
));
return
;
}
}
throwYieldError
(
this
.
proxy
,
"
cannot yield since no callback was passed.
"
,
args
);
},
sinon
.
extend
(
spy
,
(
function
()
{
yieldTo
:
function
(
prop
)
{
this
.
yieldToOn
.
apply
(
this
,
[
prop
,
null
].
concat
(
slice
.
call
(
arguments
,
1
)));
},
function
delegateToCalls
(
api
,
method
,
matchAny
,
actual
,
notCalled
)
{
api
[
method
]
=
function
()
{
if
(
!
this
.
called
)
{
if
(
notCalled
)
{
return
notCalled
.
apply
(
this
,
arguments
);
yieldToOn
:
function
(
prop
,
thisValue
)
{
var
args
=
this
.
args
;
for
(
var
i
=
0
,
l
=
args
.
length
;
i
<
l
;
++
i
)
{
if
(
args
[
i
]
&&
typeof
args
[
i
][
prop
]
===
"
function
"
)
{
args
[
i
][
prop
].
apply
(
thisValue
,
slice
.
call
(
arguments
,
2
));
return
;
}
return
false
;
}
throwYieldError
(
this
.
proxy
,
"
cannot yield to '
"
+
prop
+
"
' since no callback was passed.
"
,
args
);
},
var
currentCall
;
var
matches
=
0
;
toString
:
function
()
{
var
callStr
=
this
.
proxy
.
toString
()
+
"
(
"
;
var
args
=
[];
for
(
var
i
=
0
,
l
=
this
.
callCount
;
i
<
l
;
i
+=
1
)
{
currentCall
=
this
.
getCall
(
i
);
for
(
var
i
=
0
,
l
=
this
.
args
.
length
;
i
<
l
;
++
i
)
{
args
.
push
(
sinon
.
format
(
this
.
args
[
i
]));
}
if
(
currentCall
[
actual
||
method
].
apply
(
currentCall
,
arguments
))
{
matches
+=
1
;
callStr
=
callStr
+
args
.
join
(
"
,
"
)
+
"
)
"
;
if
(
matchAny
)
{
return
true
;
if
(
typeof
this
.
returnValue
!=
"
undefined
"
)
{
callStr
+=
"
=>
"
+
sinon
.
format
(
this
.
returnValue
)
;
}
if
(
this
.
exception
)
{
callStr
+=
"
!
"
+
this
.
exception
.
name
;
if
(
this
.
exception
.
message
)
{
callStr
+=
"
(
"
+
this
.
exception
.
message
+
"
)
"
;
}
}
return
matches
===
this
.
callCount
;
return
callStr
;
}
};
callProto
.
invokeCallback
=
callProto
.
yield
;
function
createSpyCall
(
spy
,
thisValue
,
args
,
returnValue
,
exception
,
id
)
{
if
(
typeof
id
!==
"
number
"
)
{
throw
new
TypeError
(
"
Call id is not a number
"
);
}
var
proxyCall
=
sinon
.
create
(
callProto
);
proxyCall
.
proxy
=
spy
;
proxyCall
.
thisValue
=
thisValue
;
proxyCall
.
args
=
args
;
proxyCall
.
returnValue
=
returnValue
;
proxyCall
.
exception
=
exception
;
proxyCall
.
callId
=
id
;
return
proxyCall
;
};
createSpyCall
.
toString
=
callProto
.
toString
;
// used by mocks
sinon
.
spyCall
=
createSpyCall
;
}(
typeof
sinon
==
"
object
"
&&
sinon
||
null
));
/**
* @depend ../sinon.js
*/
/*jslint eqeqeq: false, onevar: false, plusplus: false*/
/*global module, require, sinon*/
/**
* Spy functions
*
* @author Christian Johansen (christian@cjohansen.no)
* @license BSD
*
* Copyright (c) 2010-2013 Christian Johansen
*/
(
function
(
sinon
)
{
var
commonJSModule
=
typeof
module
==
"
object
"
&&
typeof
require
==
"
function
"
;
var
push
=
Array
.
prototype
.
push
;
var
slice
=
Array
.
prototype
.
slice
;
var
callId
=
0
;
function
spy
(
object
,
property
)
{
if
(
!
property
&&
typeof
object
==
"
function
"
)
{
return
spy
.
create
(
object
);
}
if
(
!
object
&&
!
property
)
{
return
spy
.
create
(
function
()
{
});
}
var
method
=
object
[
property
];
return
sinon
.
wrapMethod
(
object
,
property
,
spy
.
create
(
method
));
}
function
matchingFake
(
fakes
,
args
,
strict
)
{
...
...
@@ -1243,7 +1413,7 @@ var sinon = (function (buster) {
return
null
;
}
return
spyCall
.
create
(
this
,
this
.
thisValues
[
i
],
this
.
args
[
i
],
return
sinon
.
spyCall
(
this
,
this
.
thisValues
[
i
],
this
.
args
[
i
],
this
.
returnValues
[
i
],
this
.
exceptions
[
i
],
this
.
callIds
[
i
]);
},
...
...
@@ -1333,45 +1503,73 @@ var sinon = (function (buster) {
}
};
delegateToCalls
(
spyApi
,
"
calledOn
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysCalledOn
"
,
false
,
"
calledOn
"
);
delegateToCalls
(
spyApi
,
"
calledWith
"
,
true
);
delegateToCalls
(
spyApi
,
"
calledWithMatch
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysCalledWith
"
,
false
,
"
calledWith
"
);
delegateToCalls
(
spyApi
,
"
alwaysCalledWithMatch
"
,
false
,
"
calledWithMatch
"
);
delegateToCalls
(
spyApi
,
"
calledWithExactly
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysCalledWithExactly
"
,
false
,
"
calledWithExactly
"
);
delegateToCalls
(
spyApi
,
"
neverCalledWith
"
,
false
,
"
notCalledWith
"
,
function
delegateToCalls
(
method
,
matchAny
,
actual
,
notCalled
)
{
spyApi
[
method
]
=
function
()
{
if
(
!
this
.
called
)
{
if
(
notCalled
)
{
return
notCalled
.
apply
(
this
,
arguments
);
}
return
false
;
}
var
currentCall
;
var
matches
=
0
;
for
(
var
i
=
0
,
l
=
this
.
callCount
;
i
<
l
;
i
+=
1
)
{
currentCall
=
this
.
getCall
(
i
);
if
(
currentCall
[
actual
||
method
].
apply
(
currentCall
,
arguments
))
{
matches
+=
1
;
if
(
matchAny
)
{
return
true
;
}
}
}
return
matches
===
this
.
callCount
;
};
}
delegateToCalls
(
"
calledOn
"
,
true
);
delegateToCalls
(
"
alwaysCalledOn
"
,
false
,
"
calledOn
"
);
delegateToCalls
(
"
calledWith
"
,
true
);
delegateToCalls
(
"
calledWithMatch
"
,
true
);
delegateToCalls
(
"
alwaysCalledWith
"
,
false
,
"
calledWith
"
);
delegateToCalls
(
"
alwaysCalledWithMatch
"
,
false
,
"
calledWithMatch
"
);
delegateToCalls
(
"
calledWithExactly
"
,
true
);
delegateToCalls
(
"
alwaysCalledWithExactly
"
,
false
,
"
calledWithExactly
"
);
delegateToCalls
(
"
neverCalledWith
"
,
false
,
"
notCalledWith
"
,
function
()
{
return
true
;
});
delegateToCalls
(
spyApi
,
"
neverCalledWithMatch
"
,
false
,
"
notCalledWithMatch
"
,
delegateToCalls
(
"
neverCalledWithMatch
"
,
false
,
"
notCalledWithMatch
"
,
function
()
{
return
true
;
});
delegateToCalls
(
spyApi
,
"
threw
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysThrew
"
,
false
,
"
threw
"
);
delegateToCalls
(
spyApi
,
"
returned
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysReturned
"
,
false
,
"
returned
"
);
delegateToCalls
(
spyApi
,
"
calledWithNew
"
,
true
);
delegateToCalls
(
spyApi
,
"
alwaysCalledWithNew
"
,
false
,
"
calledWithNew
"
);
delegateToCalls
(
spyApi
,
"
callArg
"
,
false
,
"
callArgWith
"
,
function
()
{
delegateToCalls
(
"
threw
"
,
true
);
delegateToCalls
(
"
alwaysThrew
"
,
false
,
"
threw
"
);
delegateToCalls
(
"
returned
"
,
true
);
delegateToCalls
(
"
alwaysReturned
"
,
false
,
"
returned
"
);
delegateToCalls
(
"
calledWithNew
"
,
true
);
delegateToCalls
(
"
alwaysCalledWithNew
"
,
false
,
"
calledWithNew
"
);
delegateToCalls
(
"
callArg
"
,
false
,
"
callArgWith
"
,
function
()
{
throw
new
Error
(
this
.
toString
()
+
"
cannot call arg since it was not yet invoked.
"
);
});
spyApi
.
callArgWith
=
spyApi
.
callArg
;
delegateToCalls
(
spyApi
,
"
callArgOn
"
,
false
,
"
callArgOnWith
"
,
function
()
{
delegateToCalls
(
"
callArgOn
"
,
false
,
"
callArgOnWith
"
,
function
()
{
throw
new
Error
(
this
.
toString
()
+
"
cannot call arg since it was not yet invoked.
"
);
});
spyApi
.
callArgOnWith
=
spyApi
.
callArgOn
;
delegateToCalls
(
spyApi
,
"
yield
"
,
false
,
"
yield
"
,
function
()
{
delegateToCalls
(
"
yield
"
,
false
,
"
yield
"
,
function
()
{
throw
new
Error
(
this
.
toString
()
+
"
cannot yield since it was not yet invoked.
"
);
});
// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
spyApi
.
invokeCallback
=
spyApi
.
yield
;
delegateToCalls
(
spyApi
,
"
yieldOn
"
,
false
,
"
yieldOn
"
,
function
()
{
delegateToCalls
(
"
yieldOn
"
,
false
,
"
yieldOn
"
,
function
()
{
throw
new
Error
(
this
.
toString
()
+
"
cannot yield since it was not yet invoked.
"
);
});
delegateToCalls
(
spyApi
,
"
yieldTo
"
,
false
,
"
yieldTo
"
,
function
(
property
)
{
delegateToCalls
(
"
yieldTo
"
,
false
,
"
yieldTo
"
,
function
(
property
)
{
throw
new
Error
(
this
.
toString
()
+
"
cannot yield to '
"
+
property
+
"
' since it was not yet invoked.
"
);
});
delegateToCalls
(
spyApi
,
"
yieldToOn
"
,
false
,
"
yieldToOn
"
,
function
(
property
)
{
delegateToCalls
(
"
yieldToOn
"
,
false
,
"
yieldToOn
"
,
function
(
property
)
{
throw
new
Error
(
this
.
toString
()
+
"
cannot yield to '
"
+
property
+
"
' since it was not yet invoked.
"
);
});
...
...
@@ -1420,183 +1618,9 @@ var sinon = (function (buster) {
}
};
return
spyApi
;
}()));
spyCall
=
(
function
()
{
function
throwYieldError
(
proxy
,
text
,
args
)
{
var
msg
=
sinon
.
functionName
(
proxy
)
+
text
;
if
(
args
.
length
)
{
msg
+=
"
Received [
"
+
slice
.
call
(
args
).
join
(
"
,
"
)
+
"
]
"
;
}
throw
new
Error
(
msg
);
}
var
callApi
=
{
create
:
function
create
(
spy
,
thisValue
,
args
,
returnValue
,
exception
,
id
)
{
var
proxyCall
=
sinon
.
create
(
spyCall
);
delete
proxyCall
.
create
;
proxyCall
.
proxy
=
spy
;
proxyCall
.
thisValue
=
thisValue
;
proxyCall
.
args
=
args
;
proxyCall
.
returnValue
=
returnValue
;
proxyCall
.
exception
=
exception
;
proxyCall
.
callId
=
typeof
id
==
"
number
"
&&
id
||
callId
++
;
sinon
.
extend
(
spy
,
spyApi
);
return
proxyCall
;
},
calledOn
:
function
calledOn
(
thisValue
)
{
if
(
sinon
.
match
&&
sinon
.
match
.
isMatcher
(
thisValue
))
{
return
thisValue
.
test
(
this
.
thisValue
);
}
return
this
.
thisValue
===
thisValue
;
},
calledWith
:
function
calledWith
()
{
for
(
var
i
=
0
,
l
=
arguments
.
length
;
i
<
l
;
i
+=
1
)
{
if
(
!
sinon
.
deepEqual
(
arguments
[
i
],
this
.
args
[
i
]))
{
return
false
;
}
}
return
true
;
},
calledWithMatch
:
function
calledWithMatch
()
{
for
(
var
i
=
0
,
l
=
arguments
.
length
;
i
<
l
;
i
+=
1
)
{
var
actual
=
this
.
args
[
i
];
var
expectation
=
arguments
[
i
];
if
(
!
sinon
.
match
||
!
sinon
.
match
(
expectation
).
test
(
actual
))
{
return
false
;
}
}
return
true
;
},
calledWithExactly
:
function
calledWithExactly
()
{
return
arguments
.
length
==
this
.
args
.
length
&&
this
.
calledWith
.
apply
(
this
,
arguments
);
},
notCalledWith
:
function
notCalledWith
()
{
return
!
this
.
calledWith
.
apply
(
this
,
arguments
);
},
notCalledWithMatch
:
function
notCalledWithMatch
()
{
return
!
this
.
calledWithMatch
.
apply
(
this
,
arguments
);
},
returned
:
function
returned
(
value
)
{
return
sinon
.
deepEqual
(
value
,
this
.
returnValue
);
},
threw
:
function
threw
(
error
)
{
if
(
typeof
error
==
"
undefined
"
||
!
this
.
exception
)
{
return
!!
this
.
exception
;
}
if
(
typeof
error
==
"
string
"
)
{
return
this
.
exception
.
name
==
error
;
}
return
this
.
exception
===
error
;
},
calledWithNew
:
function
calledWithNew
(
thisValue
)
{
return
this
.
thisValue
instanceof
this
.
proxy
;
},
calledBefore
:
function
(
other
)
{
return
this
.
callId
<
other
.
callId
;
},
calledAfter
:
function
(
other
)
{
return
this
.
callId
>
other
.
callId
;
},
callArg
:
function
(
pos
)
{
this
.
args
[
pos
]();
},
callArgOn
:
function
(
pos
,
thisValue
)
{
this
.
args
[
pos
].
apply
(
thisValue
);
},
callArgWith
:
function
(
pos
)
{
this
.
callArgOnWith
.
apply
(
this
,
[
pos
,
null
].
concat
(
slice
.
call
(
arguments
,
1
)));
},
callArgOnWith
:
function
(
pos
,
thisValue
)
{
var
args
=
slice
.
call
(
arguments
,
2
);
this
.
args
[
pos
].
apply
(
thisValue
,
args
);
},
"
yield
"
:
function
()
{
this
.
yieldOn
.
apply
(
this
,
[
null
].
concat
(
slice
.
call
(
arguments
,
0
)));
},
yieldOn
:
function
(
thisValue
)
{
var
args
=
this
.
args
;
for
(
var
i
=
0
,
l
=
args
.
length
;
i
<
l
;
++
i
)
{
if
(
typeof
args
[
i
]
===
"
function
"
)
{
args
[
i
].
apply
(
thisValue
,
slice
.
call
(
arguments
,
1
));
return
;
}
}
throwYieldError
(
this
.
proxy
,
"
cannot yield since no callback was passed.
"
,
args
);
},
yieldTo
:
function
(
prop
)
{
this
.
yieldToOn
.
apply
(
this
,
[
prop
,
null
].
concat
(
slice
.
call
(
arguments
,
1
)));
},
yieldToOn
:
function
(
prop
,
thisValue
)
{
var
args
=
this
.
args
;
for
(
var
i
=
0
,
l
=
args
.
length
;
i
<
l
;
++
i
)
{
if
(
args
[
i
]
&&
typeof
args
[
i
][
prop
]
===
"
function
"
)
{
args
[
i
][
prop
].
apply
(
thisValue
,
slice
.
call
(
arguments
,
2
));
return
;
}
}
throwYieldError
(
this
.
proxy
,
"
cannot yield to '
"
+
prop
+
"
' since no callback was passed.
"
,
args
);
},
toString
:
function
()
{
var
callStr
=
this
.
proxy
.
toString
()
+
"
(
"
;
var
args
=
[];
for
(
var
i
=
0
,
l
=
this
.
args
.
length
;
i
<
l
;
++
i
)
{
push
.
call
(
args
,
sinon
.
format
(
this
.
args
[
i
]));
}
callStr
=
callStr
+
args
.
join
(
"
,
"
)
+
"
)
"
;
if
(
typeof
this
.
returnValue
!=
"
undefined
"
)
{
callStr
+=
"
=>
"
+
sinon
.
format
(
this
.
returnValue
);
}
if
(
this
.
exception
)
{
callStr
+=
"
!
"
+
this
.
exception
.
name
;
if
(
this
.
exception
.
message
)
{
callStr
+=
"
(
"
+
this
.
exception
.
message
+
"
)
"
;
}
}
return
callStr
;
}
};
callApi
.
invokeCallback
=
callApi
.
yield
;
return
callApi
;
}());
spy
.
spyCall
=
spyCall
;
// This steps outside the module sandbox and will be removed
sinon
.
spyCall
=
spyCall
;
spy
.
spyCall
=
sinon
.
spyCall
;
if
(
commonJSModule
)
{
module
.
exports
=
spy
;
...
...
@@ -2926,15 +2950,16 @@ if (typeof sinon == "undefined") {
(
function
()
{
var
push
=
[].
push
;
sinon
.
Event
=
function
Event
(
type
,
bubbles
,
cancelable
)
{
this
.
initEvent
(
type
,
bubbles
,
cancelable
);
sinon
.
Event
=
function
Event
(
type
,
bubbles
,
cancelable
,
target
)
{
this
.
initEvent
(
type
,
bubbles
,
cancelable
,
target
);
};
sinon
.
Event
.
prototype
=
{
initEvent
:
function
(
type
,
bubbles
,
cancelable
)
{
initEvent
:
function
(
type
,
bubbles
,
cancelable
,
target
)
{
this
.
type
=
type
;
this
.
bubbles
=
bubbles
;
this
.
cancelable
=
cancelable
;
this
.
target
=
target
;
},
stopPropagation
:
function
()
{},
...
...
@@ -3038,6 +3063,23 @@ sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
this
.
status
=
0
;
this
.
statusText
=
""
;
var
xhr
=
this
;
var
events
=
[
"
loadstart
"
,
"
load
"
,
"
abort
"
,
"
loadend
"
];
function
addEventListener
(
eventName
)
{
xhr
.
addEventListener
(
eventName
,
function
(
event
)
{
var
listener
=
xhr
[
"
on
"
+
eventName
];
if
(
listener
&&
typeof
listener
==
"
function
"
)
{
listener
(
event
);
}
});
}
for
(
var
i
=
events
.
length
-
1
;
i
>=
0
;
i
--
)
{
addEventListener
(
events
[
i
]);
}
if
(
typeof
FakeXMLHttpRequest
.
onCreate
==
"
function
"
)
{
FakeXMLHttpRequest
.
onCreate
(
this
);
}
...
...
@@ -3191,6 +3233,13 @@ sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
}
this
.
dispatchEvent
(
new
sinon
.
Event
(
"
readystatechange
"
));
switch
(
this
.
readyState
)
{
case
FakeXMLHttpRequest
.
DONE
:
this
.
dispatchEvent
(
new
sinon
.
Event
(
"
load
"
,
false
,
false
,
this
));
this
.
dispatchEvent
(
new
sinon
.
Event
(
"
loadend
"
,
false
,
false
,
this
));
break
;
}
},
setRequestHeader
:
function
setRequestHeader
(
header
,
value
)
{
...
...
@@ -3246,6 +3295,8 @@ sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
if
(
typeof
this
.
onSend
==
"
function
"
)
{
this
.
onSend
(
this
);
}
this
.
dispatchEvent
(
new
sinon
.
Event
(
"
loadstart
"
,
false
,
false
,
this
));
},
abort
:
function
abort
()
{
...
...
@@ -3260,6 +3311,11 @@ sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
}
this
.
readyState
=
sinon
.
FakeXMLHttpRequest
.
UNSENT
;
this
.
dispatchEvent
(
new
sinon
.
Event
(
"
abort
"
,
false
,
false
,
this
));
if
(
typeof
this
.
onerror
===
"
function
"
)
{
this
.
onerror
();
}
},
getResponseHeader
:
function
getResponseHeader
(
header
)
{
...
...
@@ -3340,6 +3396,10 @@ sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest };
this
.
status
=
typeof
status
==
"
number
"
?
status
:
200
;
this
.
statusText
=
FakeXMLHttpRequest
.
statusCodes
[
this
.
status
];
this
.
setResponseBody
(
body
||
""
);
if
(
typeof
this
.
onload
===
"
function
"
){
this
.
onload
();
}
}
});
...
...
@@ -4149,7 +4209,14 @@ if (typeof module == "object" && typeof require == "function") {
if
(
!
sinon
.
calledInOrder
(
arguments
))
{
try
{
expected
=
[].
join
.
call
(
arguments
,
"
,
"
);
actual
=
sinon
.
orderByFirstCall
(
slice
.
call
(
arguments
)).
join
(
"
,
"
);
var
calls
=
slice
.
call
(
arguments
);
var
i
=
calls
.
length
;
while
(
i
)
{
if
(
!
calls
[
--
i
].
called
)
{
calls
.
splice
(
i
,
1
);
}
}
actual
=
sinon
.
orderByFirstCall
(
calls
).
join
(
"
,
"
);
}
catch
(
e
)
{
// If this fails, we'll just fall back to the blank string
}
...
...
@@ -4218,6 +4285,6 @@ if (typeof module == "object" && typeof require == "function") {
}
else
{
sinon
.
assert
=
assert
;
}
}(
typeof
sinon
==
"
object
"
&&
sinon
||
null
,
typeof
window
!=
"
undefined
"
?
window
:
global
));
}(
typeof
sinon
==
"
object
"
&&
sinon
||
null
,
typeof
window
!=
"
undefined
"
?
window
:
(
typeof
self
!=
"
undefined
"
)
?
self
:
global
));
return
sinon
;}.
call
(
typeof
window
!=
'
undefined
'
&&
window
||
{}));
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment