diff --git a/gemfiles/Gemfile.beta-versions b/gemfiles/Gemfile.beta-versions index 09ff70fa..3aed1438 100644 --- a/gemfiles/Gemfile.beta-versions +++ b/gemfiles/Gemfile.beta-versions @@ -14,3 +14,5 @@ gem 'rspec-mocks', github: 'rspec/rspec-mocks' gem 'rspec-expectations', github: 'rspec/rspec-expectations' gem 'cucumber', github: 'cucumber/cucumber-ruby' +gem 'puma', github: 'puma/puma' + diff --git a/gemfiles/Gemfile.edge-marionette b/gemfiles/Gemfile.edge-marionette index d5a7e0b8..301beec5 100644 --- a/gemfiles/Gemfile.edge-marionette +++ b/gemfiles/Gemfile.edge-marionette @@ -8,3 +8,5 @@ gem 'xpath', github: 'teamcapybara/xpath' gem 'selenium-webdriver', :path => '../../selenium/build/rb' gem 'rack', github: 'rack/rack' gem 'sinatra', github: 'sinatra/sinatra', branch: 'master' + +gem 'puma', github: 'puma/puma' \ No newline at end of file diff --git a/gemfiles/Gemfile.rspec-34 b/gemfiles/Gemfile.rspec-34 index 6cb23f38..d4886d82 100644 --- a/gemfiles/Gemfile.rspec-34 +++ b/gemfiles/Gemfile.rspec-34 @@ -5,4 +5,3 @@ gemspec :path => '..' gem 'xpath', github: 'teamcapybara/xpath' gem 'rspec', '~>3.4.0' - diff --git a/lib/capybara.rb b/lib/capybara.rb index 97e5d691..51e517d3 100644 --- a/lib/capybara.rb +++ b/lib/capybara.rb @@ -232,7 +232,7 @@ module Capybara # @param [Integer] port The port to run the application on # def run_default_server(app, port) - servers[:webrick].call(app, port, server_host) + servers[:puma].call(app, port, server_host) end ## diff --git a/lib/capybara/spec/test_app.rb b/lib/capybara/spec/test_app.rb index 4e197b71..34396746 100644 --- a/lib/capybara/spec/test_app.rb +++ b/lib/capybara/spec/test_app.rb @@ -186,5 +186,5 @@ class TestApp < Sinatra::Base end if __FILE__ == $0 - Rack::Handler::WEBrick.run TestApp, Port: 8070 + Rack::Handler::Puma.run TestApp, Port: 8070 end diff --git a/spec/capybara_spec.rb b/spec/capybara_spec.rb index 17adfa77..d36f9e4f 100644 --- a/spec/capybara_spec.rb +++ b/spec/capybara_spec.rb @@ -79,6 +79,19 @@ RSpec.describe Capybara do end end + describe "server=" do + after do + Capybara.server = :default + end + + it "should have a :webrick server registered" do + Capybara.server = :webrick + session = Capybara::Session.new(:selenium, TestApp.new) + session.visit('/') + expect(session.body).to include("Hello world!") + end + end + describe 'app_host' do after do Capybara.app_host = nil diff --git a/spec/server_spec.rb b/spec/server_spec.rb index ee9acfc1..aef4fd68 100644 --- a/spec/server_spec.rb +++ b/spec/server_spec.rb @@ -98,24 +98,23 @@ RSpec.describe Capybara::Server do end it "detects and waits for all reused server sessions pending requests" do - done = false + done = 0 app = proc do |env| request = Rack::Request.new(env) sleep request.params['wait_time'].to_f - done = true + done += 1 [200, {}, ["Hello Server!"]] end server1 = Capybara::Server.new(app).boot server2 = Capybara::Server.new(app).boot - start_request(server1, 0.5) - start_request(server2, 1.0) - expect { + start_request(server1, 1.0) + start_request(server2, 3.0) server1.wait_for_pending_requests - }.to change{done}.from(false).to(true) + }.to change{done}.from(0).to(2) expect(server2.send(:pending_requests?)).to eq(false) end @@ -147,25 +146,27 @@ RSpec.describe Capybara::Server do end it "detects and waits for only one sessions pending requests" do - done = false + done = 0 app = proc do |env| request = Rack::Request.new(env) sleep request.params['wait_time'].to_f - done = true + done += 1 [200, {}, ["Hello Server!"]] end server1 = Capybara::Server.new(app).boot server2 = Capybara::Server.new(app).boot - start_request(server1, 0.5) - start_request(server2, 1.0) - expect { + start_request(server1, 1.0) + start_request(server2, 3.0) server1.wait_for_pending_requests - }.to change{done}.from(false).to(true) + }.to change{done}.from(0).to(1) expect(server2.send(:pending_requests?)).to eq(true) + expect { + server2.wait_for_pending_requests + }.to change{done}.from(1).to(2) end end @@ -199,6 +200,7 @@ RSpec.describe Capybara::Server do # Start request, but don't wait for it to finish socket = TCPSocket.new(server.host, server.port) socket.write "GET /?wait_time=#{wait_time.to_s} HTTP/1.0\r\n\r\n" + sleep 0.1 socket.close sleep 0.1 end