neft
Version:
Universal Platform
142 lines (114 loc) • 3.49 kB
text/coffeescript
'use strict'
{utils} = Neft
stack = require './stack'
logger = require './logger'
ASYNC_TEST_TIMEOUT = 8000
class Scope
constructor: ->
= null
= ''
= []
= []
= []
= false
Object.seal @
run: do ->
forEachCallback = (child, i, arr, callback) ->
stack.currentScope = @
child.run callback
(callback) ->
Object.freeze @
logger.onScopeStart @
utils.async.forEach , forEachCallback, ->
logger.onScopeEnd @
callback()
, @
return
class Test
= null
constructor: ->
= null
= false
= {}
= null
= true
= ''
= utils.NOP
= null
= utils.bindFunctionContext , @
= false
= false
Object.seal @
onEnd: (err) ->
if
return
if
return
= true
if err
logger.onTestError @, err
stack.fail err
stack.testsAmount += 1
logger.onTestEnd @
# call after functions
for afterFunc in stack.currentScope.afterFunctions
stack.callFunction afterFunc,
return
run: (callback) ->
if not and stack.onlyTests + stack.onlyScopes > 0
shouldRun = false
if stack.onlyScopes > 0
scope =
while scope
if scope.isOnly
shouldRun = true
break
scope = scope.parent
unless shouldRun
return callback null
stack.currentTest = @
= callback
logger.onTestStart @
Test.currentTest = @
# call before functions
for beforeFunc in stack.currentScope.beforeFunctions
stack.callFunction beforeFunc,
# call test function
if .length is 0
stack.callFunction ,
else
setTimeout =>
new Error "timeout of #{ASYNC_TEST_TIMEOUT}ms exceeded"
, ASYNC_TEST_TIMEOUT
stack.callFunction , , []
return
getFullMessage: ->
str =
scope = @
while scope = scope.parent
if message = scope.message
str = "#{message} #{str}"
str
class Listener
constructor: ->
= null
= null
= null
= 1000
= Date.now()
Object.seal @
test: ->
if not utils.isEqual(, , 1)
unless stack.callFunction()
stack.currentTest.onEnd()
return true
if > 0 and Date.now() - >
stack.fail new Error 'unit.whenChange waits too long'
stack.currentTest.onEnd()
return true
false
exports.Scope = Scope
exports.Test = Test
exports.Listener = Listener