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:
parent
2abf19516a
commit
e28cc06cab
|
@ -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
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
Loading…
Reference in New Issue