79 lines
2.0 KiB
CoffeeScript
79 lines
2.0 KiB
CoffeeScript
vows = require 'vows'
|
|
assert = require 'assert'
|
|
phantom = require '../phantom'
|
|
Promise = require 'bluebird'
|
|
|
|
describe = (name, bat) -> vows.describe(name).addBatch(bat).export(module)
|
|
|
|
# Make coffeescript not return anything
|
|
# This is needed because vows topics do different things if you have a return
|
|
# value
|
|
t = (fn) ->
|
|
->
|
|
fn.apply this, arguments
|
|
return
|
|
|
|
# Inject an `onExit` callback on `create` to resolve this promise.
|
|
exitPromise = new Promise (resolve) ->
|
|
wrapCreate = (p) ->
|
|
_cached = p.create
|
|
wrapped = false
|
|
|
|
p.create = (args...) ->
|
|
for arg, idx in args when typeof arg is 'object'
|
|
args[idx]['onExit'] = resolve
|
|
wrapped = true
|
|
break
|
|
|
|
args.push {onExit: resolve} unless wrapped is true
|
|
_cached.apply phantom, args
|
|
|
|
wrapCreate phantom
|
|
|
|
describe "The phantom module (callbacks)",
|
|
"Can create an instance":
|
|
topic: t ->
|
|
phantom.create {port: 12305}, (ph) =>
|
|
@callback null, ph
|
|
|
|
"and can add cookies":
|
|
topic: t (ph) ->
|
|
ph.addCookie
|
|
name: "cookieName"
|
|
value: "cookieValue"
|
|
path: "/testPath"
|
|
domain: "localhost", (status) =>
|
|
@callback null, status
|
|
|
|
"which succeeds": (status) ->
|
|
assert.ok status, "addCookie should succeed"
|
|
|
|
"and, when getCookies is called,":
|
|
topic: t (ph) ->
|
|
ph.getCookies (cookies) =>
|
|
@callback null, cookies
|
|
|
|
"the cookie is available": (cookies) ->
|
|
assert.equal (c for c in cookies when (c) ->
|
|
c.name is "cookieName" and
|
|
c.value is "cookieValue" and
|
|
c.path is "/testPath").length, 1, "cookie must be in phantom.cookies"
|
|
|
|
|
|
"which, when you call exit()":
|
|
topic: t (ph) ->
|
|
countdown = null
|
|
|
|
exitPromise.then =>
|
|
clearTimeout countdown
|
|
@callback null, 'success'
|
|
|
|
ph.exit()
|
|
|
|
countdown = setTimeout =>
|
|
@callback 'timeout'
|
|
, 500
|
|
|
|
"runs the onExit callback within 500ms": (status) ->
|
|
assert.equal status, 'success'
|