1
0
Fork 0
mirror of https://github.com/teampoltergeist/poltergeist.git synced 2022-11-09 12:05:00 -05:00
teampoltergeist--poltergeist/lib/capybara/poltergeist/client.rb
2011-10-28 20:18:45 +01:00

49 lines
1.2 KiB
Ruby

require 'sfl'
module Capybara::Poltergeist
class Client
PHANTOM_SCRIPT = File.expand_path('../client/compiled/main.js', __FILE__)
attr_reader :thread, :pid, :err, :port, :path
def initialize(port, path = nil)
@port = port
@path = path || 'phantomjs'
start
at_exit { stop }
end
def start
@err = IO.pipe
@pid = Kernel.spawn("#{path} #{PHANTOM_SCRIPT} #{port}", :err => err.last)
@thread = Thread.new do
loop do
line = err.first.readline
# QtWebkit seems to throw this error all the time when using WebSockets, but
# it doesn't appear to actually stop anything working, so filter it out.
#
# This isn't the nicest solution I know :( Hopefully it will be fixed in
# QtWebkit (if you search for this string, you'll see it's been reported in
# various places).
unless line.include?('WebCore::SocketStreamHandlePrivate::socketSentData()')
STDERR.puts line
end
end
end
end
def stop
thread.kill
Process.kill('TERM', pid)
err.each { |io| io.close unless io.closed? }
end
def restart
stop
start
end
end
end