var test = require('tap').test var wrappy = require('../wrappy.js') test('basic', function (t) { function onceifier (cb) { var called = false return function () { if (called) return called = true return cb.apply(this, arguments) } } onceifier.iAmOnce = {} var once = wrappy(onceifier) t.equal(once.iAmOnce, onceifier.iAmOnce) var called = 0 function boo () { t.equal(called, 0) called++ } // has some rando property boo.iAmBoo = true var onlyPrintOnce = once(boo) onlyPrintOnce() // prints 'boo' onlyPrintOnce() // does nothing t.equal(called, 1) // random property is retained! t.equal(onlyPrintOnce.iAmBoo, true) var logs = [] var logwrap = wrappy(function (msg, cb) { logs.push(msg + ' wrapping cb') return function () { logs.push(msg + ' before cb') var ret = cb.apply(this, arguments) logs.push(msg + ' after cb') } }) var c = logwrap('foo', function () { t.same(logs, [ 'foo wrapping cb', 'foo before cb' ]) }) c() t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ]) t.end() })