Fixed multiple browsers starting because before(:all) runs multiple times; fixed separate app servers starting for each example; added injectable class for debugging wire protocol

This commit is contained in:
Joe Ferris 2011-03-11 11:19:59 -05:00
parent 2abf19516a
commit e28cc06cab
5 changed files with 61 additions and 15 deletions

View File

@ -4,7 +4,8 @@ require 'json'
class Capybara::Driver::Webkit
class Browser
def initialize
def initialize(options = {})
@socket_class = options[:socket_class] || TCPSocket
start_server
connect
end
@ -65,7 +66,7 @@ class Capybara::Driver::Webkit
end
def attempt_connect
@socket = TCPSocket.open("localhost", 9200)
@socket = @socket_class.open("localhost", 9200)
rescue Errno::ECONNREFUSED
end

View File

@ -2,14 +2,13 @@ require 'spec_helper'
require 'capybara/driver/webkit'
describe Capybara::Driver::Webkit do
before(:all) { @@browser = Capybara::Driver::Webkit::Browser.new }
subject { Capybara::Driver::Webkit.new(app, :browser => @@browser) }
subject { Capybara::Driver::Webkit.new(@app, :browser => $webkit_browser) }
before { subject.visit("/hello/world?success=true") }
after { subject.reset! }
context "hello app" do
let(:app) do
lambda do |env|
before(:all) do
@app = lambda do |env|
body = <<-HTML
<html>
<head>
@ -143,8 +142,8 @@ describe Capybara::Driver::Webkit do
end
context "form app" do
let(:app) do
lambda do |env|
before(:all) do
@app = lambda do |env|
body = <<-HTML
<html><body>
<form action="/" method="GET">
@ -259,8 +258,8 @@ describe Capybara::Driver::Webkit do
end
context "mouse app" do
let(:app) do
lambda do |env|
before(:all) do
@app =lambda do |env|
body = <<-HTML
<html><body>
<div id="change">Change me</div>
@ -315,8 +314,8 @@ describe Capybara::Driver::Webkit do
end
context "nesting app" do
let(:app) do
lambda do |env|
before(:all) do
@app = lambda do |env|
body = <<-HTML
<html><body>
<div id="parent">
@ -338,8 +337,8 @@ describe Capybara::Driver::Webkit do
end
context "slow app" do
let(:app) do
lambda do |env|
before(:all) do
@app = lambda do |env|
body = <<-HTML
<html><body>
<form action="/next"><input type="submit"/></form>

View File

@ -3,7 +3,7 @@ require 'capybara/driver/webkit'
describe Capybara::Driver::Webkit do
before do
@driver = Capybara::Driver::Webkit.new(TestApp)
@driver = Capybara::Driver::Webkit.new(TestApp, :browser => $webkit_browser)
end
# TODO: select options

View File

@ -16,3 +16,7 @@ $:.detect do |dir|
end
require File.join(spec_dir,"spec_helper")
require 'capybara/driver/webkit/browser'
$webkit_browser = Capybara::Driver::Webkit::Browser.new(:socket_class => TCPSocket)

View File

@ -0,0 +1,42 @@
# Wraps the TCP socket and prints data sent and received. Used for debugging
# the wire protocol. You can use this by passing a :socket_class to Browser.
class SocketDebugger
def self.open(host, port)
real_socket = TCPSocket.open(host, port)
new(real_socket)
end
def initialize(socket)
@socket = socket
end
def read(length)
received @socket.read(length)
end
def puts(line)
sent line
@socket.puts(line)
end
def print(content)
sent content
@socket.print(content)
end
def gets
received @socket.gets
end
private
def sent(content)
Kernel.puts " >> " + content.to_s
end
def received(content)
Kernel.puts " << " + content.to_s
content
end
end