var tape = require('tape')
var Lock = require('../')

tape('multiple locks', function (t) {

  var lock = Lock(), released = 0

  lock(['a', 'b', 'c'], function (release) {
    t.equal(lock.isLocked('a'), true)
    t.equal(lock.isLocked('b'), true)
    t.equal(lock.isLocked('c'), true)

    release(function () {
      released = 1
      console.log('RELEASED')
      t.equal(lock.isLocked('b'), false)
      t.equal(lock.isLocked('c'), false)
    })()
  })

  lock('a', function (release) {
    t.equal(lock.isLocked('a'), true)
    t.equal(lock.isLocked('b'), false)
    t.equal(lock.isLocked('c'), false)
    t.equal(released, 1)
    release(function () {
      t.equal(lock.isLocked('a'), false)
      t.end()
    })()
  })
})

tape('wait for a single lock', function (t) {

  var lock = Lock(), released = 0

  lock('a', function (release) {
    t.equal(lock.isLocked('a'), true)
    t.equal(lock.isLocked('b'), false)
    t.equal(lock.isLocked('c'), false)
    release(function () {
      released = 1
      t.equal(lock.isLocked('a'), false)
      t.end()
    })()
  })

  lock(['a', 'b', 'c'], function (release) {
    t.equal(released, 1)
    t.equal(lock.isLocked('a'), true)
    t.equal(lock.isLocked('b'), true)
    t.equal(lock.isLocked('c'), true)

    release(function () {
      console.log('RELEASED')
      t.equal(lock.isLocked('b'), false)
      t.equal(lock.isLocked('c'), false)
    })()
  })
})