lib/webrat/selenium.rb in webrat-0.4.3 vs lib/webrat/selenium.rb in webrat-0.4.4

- old
+ new

@@ -1,88 +1,13 @@ require "webrat" -gem "selenium-client", ">=1.2.9" +gem "selenium-client", ">=1.2.14" require "selenium/client" require "webrat/selenium/selenium_session" require "webrat/selenium/matchers" +require "webrat/core_extensions/tcp_socket" module Webrat - - def self.with_selenium_server #:nodoc: - start_selenium_server - yield - stop_selenium_server - end - - def self.start_selenium_server #:nodoc: - unless Webrat.configuration.selenium_server_address - remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5) - remote_control.jar_file = File.expand_path(__FILE__ + "../../../../vendor/selenium-server.jar") - remote_control.start :background => true - end - TCPSocket.wait_for_service :host => (Webrat.configuration.selenium_server_address || "0.0.0.0"), :port => Webrat.configuration.selenium_server_port - end - - def self.stop_selenium_server #:nodoc: - ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5).stop unless Webrat.configuration.selenium_server_address - end - - def self.pid_file - if File.exists?('config.ru') - prepare_pid_file(Dir.pwd, 'rack.pid') - else - prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_selenium.pid") - end - end - # Start the appserver for the underlying framework to test - # - # Sinatra: requires a config.ru in the root of your sinatra app to use this - # Merb: Attempts to use bin/merb and falls back to the system merb - # Rails: Calls mongrel_rails to startup the appserver - def self.start_app_server - case Webrat.configuration.application_framework - when :sinatra - fork do - File.open('rack.pid', 'w') { |fp| fp.write Process.pid } - exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s - end - when :merb - cmd = 'merb' - if File.exist?('bin/merb') - cmd = 'bin/merb' - end - system("#{cmd} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}") - else # rails - system("mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &") - end - TCPSocket.wait_for_service :host => Webrat.configuration.application_address, :port => Webrat.configuration.application_port.to_i - end - - # Stop the appserver for the underlying framework under test - # - # Sinatra: Reads and kills the pid from the pid file created on startup - # Merb: Reads and kills the pid from the pid file created on startup - # Rails: Calls mongrel_rails stop to kill the appserver - def self.stop_app_server - case Webrat.configuration.application_framework - when :sinatra - pid = File.read('rack.pid') - system("kill -9 #{pid}") - FileUtils.rm_f 'rack.pid' - when :merb - pid = File.read("log/merb.#{Webrat.configuration.application_port}.pid") - system("kill -9 #{pid}") - FileUtils.rm_f "log/merb.#{Webrat.configuration.application_port}.pid" - else # rails - system "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}" - end - end - - def self.prepare_pid_file(file_path, pid_file_name) - FileUtils.mkdir_p File.expand_path(file_path) - File.expand_path("#{file_path}/#{pid_file_name}") - end - # To use Webrat's Selenium support, you'll need the selenium-client gem installed. # Activate it with (for example, in your <tt>env.rb</tt>): # # require "webrat" # @@ -141,9 +66,10 @@ webrat_session.save_and_open_screengrab end end end end + if defined?(ActionController::IntegrationTest) module ActionController #:nodoc: IntegrationTest.class_eval do include Webrat::Methods include Webrat::Selenium::Methods