howl.VC

after_each -> VC.unregister name for name in pairs VC.available

.available is a table of all available vcs

handler = find: -> nil
VC.register 'foo', handler
assert.same VC.available, foo: handler

.register(name, handler)

raises an error if name is missing

assert.raises 'name', -> VC.register nil

raises an error if handler is missing or incomplete

assert.raises 'handler', -> VC.register 'foo', nil
assert.raises '.find', -> VC.register 'foo', {}

.unregister(name)

raises an error if name is missing

assert.raises 'name', -> VC.unregister nil

removes the specified vc from .available

VC.register 'foo', find: -> nil
VC.unregister 'foo'
assert.is_nil VC.available.foo

for_file(file)

returns the first non-nil find()-result from handlers

vc = root: '', files: -> {}
VC.register 'foo', find: -> nil
VC.register 'no', find: -> nil
VC.register 'yes', find: -> vc
assert.equal VC.for_file('file'), vc

returns nil if no handler returns non-nil

assert.is_nil VC.for_file('file')
VC.register 'foo', find: -> nil
assert.is_nil VC.for_file('file')

(validating the loaded vc)

vc = nil
before_each ->
  vc = {}
  VC.register 'vc', find: -> vc

raises an error if vc.files() is missing

assert.raises 'files', -> VC.for_file 'file'

raises an error if vc.root is missing

vc.files = -> {}
assert.raises 'root', -> VC.for_file 'file'