1
0
mirror of https://github.com/musix-org/musix-oss synced 2024-12-23 16:13:18 +00:00
musix-oss/node_modules/stubs/index.js

36 lines
725 B
JavaScript
Raw Normal View History

2020-03-03 20:30:50 +00:00
'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
}
}