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()

})