1
0
mirror of https://github.com/musix-org/musix-oss synced 2024-09-20 07:41:56 +00:00
musix-oss/node_modules/stubs/index.js
2020-03-03 22:30:50 +02:00

36 lines
725 B
JavaScript

'use strict'
module.exports = function stubs(obj, method, cfg, stub) {
if (!obj || !method || !obj[method])
throw new Error('You must provide an object and a key for an existing method')
if (!stub) {
stub = cfg
cfg = {}
}
stub = stub || function() {}
cfg.callthrough = cfg.callthrough || false
cfg.calls = cfg.calls || 0
var norevert = cfg.calls === 0
var cached = obj[method].bind(obj)
obj[method] = function() {
var args = [].slice.call(arguments)
var returnVal
if (cfg.callthrough)
returnVal = cached.apply(obj, args)
returnVal = stub.apply(obj, args) || returnVal
if (!norevert && --cfg.calls === 0)
obj[method] = cached
return returnVal
}
}