/*______________
| ______ | U I Z E J A V A S C R I P T F R A M E W O R K
| / / | ---------------------------------------------------
| / O / | MODULE : Uize.Test.Class.mSpy Class
| / / / |
| / / / /| | ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2014-2016 UIZE
| /___ | LICENSE : Available under MIT License or GNU General Public License
|_______________| http://uize.com/license.html
*/
/* Module Meta Data
type: Class
importance: 4
codeCompleteness: 0
docCompleteness: 5
*/
/*?
Introduction
The =Uize.Test.Class.mSpy= module provides spying convenience methods for writing test cases against =Uize.Class= subclass modules.
*DEVELOPERS:* `Ben Ilegbodu`, original code contributed by `Zazzle Inc.`
*/
Uize.module ({
name:'Uize.Test.Class.mSpy',
required:[
'Uize.Util.Spy',
'Uize.Data.Compare',
'Uize.Json'
],
builder:function () {
'use strict';
var
_Uize = Uize
;
return function (_class) {
_class.declare({
instanceMethods:{
expectToHaveBeenCalled:function(_spyObject) {
var
_methodName = _spyObject.get('methodName'),
_called = _methodName + ' method called'
;
return this.expect(
_called,
_spyObject.get('hasBeenCalled')
? _called
: _methodName + ' method NOT called'
);
},
expectToHaveBeenCalledWith:function(_spyObject, _expectedArgs) {
var
_methodName = _spyObject.get('methodName'),
_expectedArgsLength = _expectedArgs.length,
_expectedArgsSerialized = _Uize.Json.to(_expectedArgs, 'mini'),
_matchingCalls = _Uize.map(
_spyObject.get('calls'),
function(_call) {
return _Uize.Data.Compare.identical(
_expectedArgs,
_call.args.slice(0, _expectedArgsLength)
);
}
),
_called = _methodName + ' method was called with expected args: ' + _expectedArgsSerialized
;
return this.expect( // compare with subset of args
_called,
_Uize.isIn(_matchingCalls, true)
? _called
: _methodName + ' method was NOT called with expected args: ' + _expectedArgsSerialized
);
},
expectToNotHaveBeenCalled:function(_spyObject) {
var
_methodName = _spyObject.get('methodName'),
_notCalled = _methodName + ' method not called'
;
return this.expect(
_notCalled,
!_spyObject.get('hasBeenCalled')
? _notCalled
: _methodName + ' method WAS called'
);
},
expectToNotHaveBeenCalledWith:function(_spyObject, _expectedArgs) {
var
_methodName = _spyObject.get('methodName'),
_expectedArgsLength = _expectedArgs.length,
_expectedArgsSerialized = _Uize.Json.to(_expectedArgs, 'mini'),
_matchingCalls = _Uize.map(
_spyObject.get('calls'),
function(_call) {
return _Uize.Data.Compare.identical(
_expectedArgs,
_call.args.slice(0, _expectedArgsLength)
);
}
),
_notCalled = _methodName + ' method was NOT called with expected args: ' + _expectedArgsSerialized
;
return this.expect( // compare with subset of args
_notCalled,
!_Uize.isIn(_matchingCalls, true)
? _notCalled
: _methodName + ' method was called with expected args: ' + _expectedArgsSerialized
);
},
spyOn:function() {
var
_arguments = arguments,
_argumentsLength = _arguments.length,
_spyObject = _Uize.Util.Spy(
_argumentsLength == 2
? {object:_arguments[0], methodName:_arguments[1]}
: _arguments[0]
)
;
return _spyObject;
}
}
});
};
}
});