runner.coffee 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. urls = require('system').args.slice(1)
  2. page = require('webpage').create()
  3. timeout = 3000
  4. qunitHooks = ->
  5. window.document.addEventListener 'DOMContentLoaded', ->
  6. for callback in ['log', 'testDone', 'done']
  7. do (callback) ->
  8. QUnit[callback] (result) ->
  9. window.callPhantom
  10. name: "QUnit.#{callback}"
  11. data: result
  12. page.onInitialized = -> page.evaluate qunitHooks
  13. page.onConsoleMessage = (msg) -> console.log msg
  14. page.onCallback = (event) ->
  15. if event.name is 'QUnit.log'
  16. details = event.data
  17. if details.result is false
  18. console.log "✘ #{details.module}: #{details.name}"
  19. if details.message and details.message isnt "failed"
  20. console.log " #{details.message}"
  21. if "actual" of details
  22. console.log " expected: #{details.expected}"
  23. console.log " actual: #{details.actual}"
  24. else if event.name is 'QUnit.testDone'
  25. result = event.data
  26. unless result.failed
  27. console.log "✔︎ #{result.module}: #{result.name}"
  28. else if event.name is 'QUnit.done'
  29. res = event.data
  30. console.log "#{res.total} tests, #{res.failed} failed. Done in #{res.runtime} ms"
  31. phantom.exit if !res.total or res.failed then 1 else 0
  32. for url in urls
  33. page.open url, (status) ->
  34. if status isnt 'success'
  35. console.error "failed opening #{url}: #{status}"
  36. phantom.exit 1
  37. else
  38. setTimeout ->
  39. console.error "ERROR: Test execution has timed out"
  40. phantom.exit 1
  41. , timeout