Initial commit of test dependencies, as brought over from prototype, to continue establishing build. WTD-519.
54 lines
1.4 KiB
CoffeeScript
54 lines
1.4 KiB
CoffeeScript
#!/usr/local/bin/phantomjs
|
|
|
|
# Runs a Jasmine Suite from an html page
|
|
# @page is a PhantomJs page object
|
|
# @exit_func is the function to call in order to exit the script
|
|
|
|
class PhantomJasmineRunner
|
|
constructor: (@page, @exit_func = phantom.exit) ->
|
|
@tries = 0
|
|
@max_tries = 10
|
|
|
|
get_status: -> @page.evaluate(-> console_reporter.status)
|
|
|
|
terminate: ->
|
|
switch @get_status()
|
|
when "success" then @exit_func 0
|
|
when "fail" then @exit_func 1
|
|
else @exit_func 2
|
|
|
|
# Script Begin
|
|
if phantom.args.length == 0
|
|
console.log "Need a url as the argument"
|
|
phantom.exit 1
|
|
|
|
page = new WebPage()
|
|
|
|
runner = new PhantomJasmineRunner(page)
|
|
|
|
# Don't supress console output
|
|
page.onConsoleMessage = (msg) ->
|
|
console.log msg
|
|
|
|
# Terminate when the reporter singals that testing is over.
|
|
# We cannot use a callback function for this (because page.evaluate is sandboxed),
|
|
# so we have to *observe* the website.
|
|
if msg == "ConsoleReporter finished"
|
|
if phantom.args.length > 1
|
|
filename = phantom.args[1]
|
|
fs = require('fs');
|
|
try
|
|
fs.write(filename, page.content)
|
|
catch e
|
|
console.log "Failed to write test page content."
|
|
runner.terminate()
|
|
|
|
address = phantom.args[0]
|
|
|
|
page.open address, (status) ->
|
|
if status != "success"
|
|
console.log "Can't load the address!"
|
|
phantom.exit 1
|
|
|
|
# Now we wait until onConsoleMessage reads the termination signal from the log.
|