indirect-webrat 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +4 -0
- data/.gitignore +21 -0
- data/Gemfile +14 -0
- data/History.txt +470 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +85 -0
- data/Rakefile +143 -0
- data/Thorfile +118 -0
- data/install.rb +1 -0
- data/lib/webrat.rb +18 -0
- data/lib/webrat/adapters/mechanize.rb +94 -0
- data/lib/webrat/adapters/merb.rb +11 -0
- data/lib/webrat/adapters/rack.rb +30 -0
- data/lib/webrat/adapters/rails.rb +77 -0
- data/lib/webrat/adapters/sinatra.rb +9 -0
- data/lib/webrat/core.rb +13 -0
- data/lib/webrat/core/configuration.rb +114 -0
- data/lib/webrat/core/elements/area.rb +31 -0
- data/lib/webrat/core/elements/element.rb +33 -0
- data/lib/webrat/core/elements/field.rb +438 -0
- data/lib/webrat/core/elements/form.rb +127 -0
- data/lib/webrat/core/elements/label.rb +31 -0
- data/lib/webrat/core/elements/link.rb +93 -0
- data/lib/webrat/core/elements/select_option.rb +48 -0
- data/lib/webrat/core/locators.rb +20 -0
- data/lib/webrat/core/locators/area_locator.rb +38 -0
- data/lib/webrat/core/locators/button_locator.rb +54 -0
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/lib/webrat/core/locators/field_locator.rb +25 -0
- data/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/lib/webrat/core/locators/form_locator.rb +19 -0
- data/lib/webrat/core/locators/label_locator.rb +34 -0
- data/lib/webrat/core/locators/link_locator.rb +82 -0
- data/lib/webrat/core/locators/locator.rb +20 -0
- data/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/lib/webrat/core/logging.rb +23 -0
- data/lib/webrat/core/matchers.rb +4 -0
- data/lib/webrat/core/matchers/have_content.rb +68 -0
- data/lib/webrat/core/matchers/have_selector.rb +85 -0
- data/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/lib/webrat/core/matchers/have_xpath.rb +124 -0
- data/lib/webrat/core/methods.rb +73 -0
- data/lib/webrat/core/mime.rb +18 -0
- data/lib/webrat/core/save_and_open_page.rb +28 -0
- data/lib/webrat/core/scope.rb +362 -0
- data/lib/webrat/core/session.rb +318 -0
- data/lib/webrat/core/xml.rb +44 -0
- data/lib/webrat/core_extensions/blank.rb +58 -0
- data/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/lib/webrat/core_extensions/nil_to_query_string.rb +5 -0
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/integrations/merb.rb +10 -0
- data/lib/webrat/integrations/rack.rb +9 -0
- data/lib/webrat/integrations/rails.rb +25 -0
- data/lib/webrat/integrations/rspec-rails.rb +11 -0
- data/lib/webrat/integrations/selenium.rb +11 -0
- data/lib/webrat/merb.rb +9 -0
- data/lib/webrat/rspec-rails.rb +2 -0
- data/lib/webrat/selenium.rb +70 -0
- data/lib/webrat/selenium/application_server_factory.rb +43 -0
- data/lib/webrat/selenium/application_servers.rb +5 -0
- data/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/lib/webrat/selenium/application_servers/rack.rb +51 -0
- data/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +48 -0
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +6 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +32 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/lib/webrat/selenium/matchers.rb +4 -0
- data/lib/webrat/selenium/matchers/have_content.rb +78 -0
- data/lib/webrat/selenium/matchers/have_selector.rb +57 -0
- data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/lib/webrat/selenium/matchers/have_xpath.rb +53 -0
- data/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +89 -0
- data/lib/webrat/selenium/selenium_session.rb +276 -0
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/spec/fakes/test_adapter.rb +33 -0
- data/spec/integration/mechanize/Rakefile +7 -0
- data/spec/integration/mechanize/config.ru +2 -0
- data/spec/integration/mechanize/sample_app.rb +35 -0
- data/spec/integration/mechanize/spec/mechanize_spec.rb +30 -0
- data/spec/integration/mechanize/spec/spec_helper.rb +29 -0
- data/spec/integration/merb/.gitignore +21 -0
- data/spec/integration/merb/Rakefile +35 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +34 -0
- data/spec/integration/merb/spec/spec.opts +1 -0
- data/spec/integration/merb/spec/spec_helper.rb +26 -0
- data/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rack/Rakefile +5 -0
- data/spec/integration/rack/app.rb +89 -0
- data/spec/integration/rack/test/helper.rb +20 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +74 -0
- data/spec/integration/rails/.gitignore +3 -0
- data/spec/integration/rails/Rakefile +30 -0
- data/spec/integration/rails/app/controllers/application_controller.rb +15 -0
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +46 -0
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/spec/integration/rails/app/views/buttons/show.html.erb +9 -0
- data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/spec/integration/rails/app/views/webrat/buttons.html.erb +9 -0
- data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/spec/integration/rails/app/views/webrat/within.html.erb +3 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/locales/en.yml +5 -0
- data/spec/integration/rails/config/routes.rb +19 -0
- data/spec/integration/rails/public/404.html +30 -0
- data/spec/integration/rails/public/422.html +30 -0
- data/spec/integration/rails/public/500.html +33 -0
- data/spec/integration/rails/script/about +4 -0
- data/spec/integration/rails/script/console +3 -0
- data/spec/integration/rails/script/dbconsole +3 -0
- data/spec/integration/rails/script/destroy +3 -0
- data/spec/integration/rails/script/generate +3 -0
- data/spec/integration/rails/script/performance/benchmarker +3 -0
- data/spec/integration/rails/script/performance/profiler +3 -0
- data/spec/integration/rails/script/performance/request +3 -0
- data/spec/integration/rails/script/plugin +3 -0
- data/spec/integration/rails/script/process/inspector +3 -0
- data/spec/integration/rails/script/process/reaper +3 -0
- data/spec/integration/rails/script/process/spawner +3 -0
- data/spec/integration/rails/script/runner +3 -0
- data/spec/integration/rails/script/server +3 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +66 -0
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +123 -0
- data/spec/integration/rails/test/test_helper.rb +27 -0
- data/spec/integration/sinatra/Rakefile +5 -0
- data/spec/integration/sinatra/classic_app.rb +63 -0
- data/spec/integration/sinatra/modular_app.rb +15 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +38 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +87 -0
- data/spec/private/core/field_spec.rb +83 -0
- data/spec/private/core/form_spec.rb +51 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/session_spec.rb +182 -0
- data/spec/private/mechanize/mechanize_adapter_spec.rb +96 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +114 -0
- data/spec/private/rails/rails_adapter_spec.rb +79 -0
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/spec/public/basic_auth_spec.rb +35 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +494 -0
- data/spec/public/click_link_spec.rb +544 -0
- data/spec/public/fill_in_spec.rb +224 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +118 -0
- data/spec/public/matchers/have_selector_spec.rb +146 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +165 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +49 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +474 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +56 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/rcov.opts +1 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +53 -0
- data/vendor/selenium-server.jar +0 -0
- data/webrat.gemspec +355 -0
- metadata +424 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class TCPSocket
|
|
2
|
+
|
|
3
|
+
def self.wait_for_service_with_timeout(options)
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
until listening_service?(options)
|
|
7
|
+
verbose_wait
|
|
8
|
+
|
|
9
|
+
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
10
|
+
raise SocketError.new("Socket did not open within #{options[:timeout]} seconds")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.wait_for_service_termination_with_timeout(options)
|
|
16
|
+
start_time = Time.now
|
|
17
|
+
|
|
18
|
+
while listening_service?(options)
|
|
19
|
+
verbose_wait
|
|
20
|
+
|
|
21
|
+
if options[:timeout] && (Time.now > start_time + options[:timeout])
|
|
22
|
+
raise SocketError.new("Socket did not terminate within #{options[:timeout]} seconds")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "action_controller"
|
|
2
|
+
require "action_controller/integration"
|
|
3
|
+
|
|
4
|
+
module ActionController #:nodoc:
|
|
5
|
+
IntegrationTest.class_eval do
|
|
6
|
+
include Webrat::Methods
|
|
7
|
+
include Webrat::Matchers
|
|
8
|
+
|
|
9
|
+
# The Rails version of within supports passing in a model and Webrat
|
|
10
|
+
# will apply a scope based on Rails' dom_id for that model.
|
|
11
|
+
#
|
|
12
|
+
# Example:
|
|
13
|
+
# within User.last do
|
|
14
|
+
# click_link "Delete"
|
|
15
|
+
# end
|
|
16
|
+
def within(selector_or_object, &block)
|
|
17
|
+
if selector_or_object.is_a?(String)
|
|
18
|
+
super
|
|
19
|
+
else
|
|
20
|
+
super('#' + RecordIdentifier.dom_id(selector_or_object), &block)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Supports using the matchers in controller, helper, and view specs if you're
|
|
2
|
+
# using rspec-rails. Just add a require statement to spec/spec_helper.rb or env.rb:
|
|
3
|
+
#
|
|
4
|
+
# require 'webrat/integrations/rspec-rails'
|
|
5
|
+
#
|
|
6
|
+
require "nokogiri"
|
|
7
|
+
require "webrat/core/matchers"
|
|
8
|
+
|
|
9
|
+
Spec::Runner.configure do |config|
|
|
10
|
+
config.include(Webrat::Matchers, :type => [:controller, :helper, :view])
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require "webrat/selenium"
|
|
2
|
+
|
|
3
|
+
if defined?(ActionController::IntegrationTest)
|
|
4
|
+
module ActionController #:nodoc:
|
|
5
|
+
IntegrationTest.class_eval do
|
|
6
|
+
include Webrat::Methods
|
|
7
|
+
include Webrat::Selenium::Methods
|
|
8
|
+
include Webrat::Selenium::Matchers
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
data/lib/webrat/merb.rb
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require "webrat"
|
|
2
|
+
require "selenium/client"
|
|
3
|
+
require "webrat/selenium/silence_stream"
|
|
4
|
+
require "webrat/selenium/selenium_session"
|
|
5
|
+
require "webrat/selenium/matchers"
|
|
6
|
+
require "webrat/core_extensions/tcp_socket"
|
|
7
|
+
|
|
8
|
+
module Webrat
|
|
9
|
+
# To use Webrat's Selenium support, you'll need the selenium-client gem installed.
|
|
10
|
+
# Activate it with (for example, in your <tt>env.rb</tt>):
|
|
11
|
+
#
|
|
12
|
+
# require "webrat"
|
|
13
|
+
#
|
|
14
|
+
# Webrat.configure do |config|
|
|
15
|
+
# config.mode = :selenium
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
# == Dropping down to the selenium-client API
|
|
19
|
+
#
|
|
20
|
+
# If you ever need to do something with Selenium not provided in the Webrat API,
|
|
21
|
+
# you can always drop down to the selenium-client API using the <tt>selenium</tt> method.
|
|
22
|
+
# For example:
|
|
23
|
+
#
|
|
24
|
+
# When "I drag the photo to the left" do
|
|
25
|
+
# selenium.dragdrop("id=photo_123", "+350, 0")
|
|
26
|
+
# end
|
|
27
|
+
#
|
|
28
|
+
# == Choosing the underlying framework to test
|
|
29
|
+
#
|
|
30
|
+
# Webrat assumes you're using rails by default but it can also work with sinatra
|
|
31
|
+
# and merb. To take advantage of this you can use the configuration block to
|
|
32
|
+
# set the application_framework variable.
|
|
33
|
+
# require "webrat"
|
|
34
|
+
#
|
|
35
|
+
# Webrat.configure do |config|
|
|
36
|
+
# config.mode = :selenium
|
|
37
|
+
# config.application_port = 4567
|
|
38
|
+
# config.application_framework = :sinatra # could also be :merb
|
|
39
|
+
# end
|
|
40
|
+
#
|
|
41
|
+
# == Auto-starting of the appserver and java server
|
|
42
|
+
#
|
|
43
|
+
# Webrat will automatically start the Selenium Java server process and an instance
|
|
44
|
+
# of Mongrel when a test is run. The Mongrel will run in the "selenium" environment
|
|
45
|
+
# instead of "test", so ensure you've got that defined, and will run on port
|
|
46
|
+
# Webrat.configuration.application_port.
|
|
47
|
+
#
|
|
48
|
+
# == Waiting
|
|
49
|
+
#
|
|
50
|
+
# In order to make writing Selenium tests as easy as possible, Webrat will automatically
|
|
51
|
+
# wait for the correct elements to exist on the page when trying to manipulate them
|
|
52
|
+
# with methods like <tt>fill_in</tt>, etc. In general, this means you should be able to write
|
|
53
|
+
# your Webrat::Selenium tests ignoring the concurrency issues that can plague in-browser
|
|
54
|
+
# testing, so long as you're using the Webrat API.
|
|
55
|
+
module Selenium
|
|
56
|
+
module Methods
|
|
57
|
+
def response
|
|
58
|
+
webrat_session.response
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def wait_for(*args, &block)
|
|
62
|
+
webrat_session.wait_for(*args, &block)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def save_and_open_screengrab
|
|
66
|
+
webrat_session.save_and_open_screengrab
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
module Selenium
|
|
3
|
+
|
|
4
|
+
class ApplicationServerFactory
|
|
5
|
+
|
|
6
|
+
def self.app_server_instance
|
|
7
|
+
case Webrat.configuration.application_framework
|
|
8
|
+
when :sinatra
|
|
9
|
+
require "webrat/selenium/application_servers/sinatra"
|
|
10
|
+
return Webrat::Selenium::ApplicationServers::Sinatra.new
|
|
11
|
+
when :merb
|
|
12
|
+
require "webrat/selenium/application_servers/merb"
|
|
13
|
+
return Webrat::Selenium::ApplicationServers::Merb.new
|
|
14
|
+
when :rails
|
|
15
|
+
require "webrat/selenium/application_servers/rails"
|
|
16
|
+
return Webrat::Selenium::ApplicationServers::Rails.new
|
|
17
|
+
when :rack
|
|
18
|
+
require "webrat/selenium/application_servers/rack"
|
|
19
|
+
return Webrat::Selenium::ApplicationServers::Rack.new
|
|
20
|
+
when :external
|
|
21
|
+
require "webrat/selenium/application_servers/external"
|
|
22
|
+
return Webrat::Selenium::ApplicationServers::External.new
|
|
23
|
+
else
|
|
24
|
+
raise WebratError.new(<<-STR)
|
|
25
|
+
Unknown Webrat application_framework: #{Webrat.configuration.application_framework.inspect}
|
|
26
|
+
|
|
27
|
+
Please ensure you have a Webrat configuration block that specifies an application_framework
|
|
28
|
+
in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
|
|
29
|
+
|
|
30
|
+
For example:
|
|
31
|
+
|
|
32
|
+
Webrat.configure do |config|
|
|
33
|
+
# ...
|
|
34
|
+
config.application_framework = :rails
|
|
35
|
+
end
|
|
36
|
+
STR
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require "webrat/selenium/silence_stream"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class Base
|
|
7
|
+
include Webrat::Selenium::SilenceStream
|
|
8
|
+
|
|
9
|
+
def boot
|
|
10
|
+
start
|
|
11
|
+
wait
|
|
12
|
+
stop_at_exit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def stop_at_exit
|
|
16
|
+
at_exit do
|
|
17
|
+
stop
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def wait
|
|
22
|
+
$stderr.print "==> Waiting for #{Webrat.configuration.application_framework} application server on port #{Webrat.configuration.application_port}... "
|
|
23
|
+
wait_for_socket
|
|
24
|
+
$stderr.print "Ready!\n"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def wait_for_socket
|
|
28
|
+
silence_stream(STDOUT) do
|
|
29
|
+
TCPSocket.wait_for_service_with_timeout \
|
|
30
|
+
:host => "0.0.0.0",
|
|
31
|
+
:port => Webrat.configuration.application_port.to_i,
|
|
32
|
+
:timeout => 30 # seconds
|
|
33
|
+
end
|
|
34
|
+
rescue SocketError
|
|
35
|
+
fail
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def prepare_pid_file(file_path, pid_file_name)
|
|
39
|
+
FileUtils.mkdir_p File.expand_path(file_path)
|
|
40
|
+
File.expand_path("#{file_path}/#{pid_file_name}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require "webrat/selenium/application_servers/base"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class External < Webrat::Selenium::ApplicationServers::Base
|
|
7
|
+
def start
|
|
8
|
+
warn "Webrat Ignoring Start Of Application Server Due to External Mode"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def stop
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def fail
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def pid_file
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def wait
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "webrat/selenium/application_servers/base"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class Merb < Webrat::Selenium::ApplicationServers::Base
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
system start_command
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stop
|
|
13
|
+
silence_stream(STDOUT) do
|
|
14
|
+
pid = File.read(pid_file)
|
|
15
|
+
system("kill -9 #{pid}")
|
|
16
|
+
FileUtils.rm_f pid_file
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def fail
|
|
21
|
+
$stderr.puts
|
|
22
|
+
$stderr.puts
|
|
23
|
+
$stderr.puts "==> Failed to boot the Merb application server... exiting!"
|
|
24
|
+
$stderr.puts
|
|
25
|
+
$stderr.puts "Verify you can start a Merb server on port #{Webrat.configuration.application_port} with the following command:"
|
|
26
|
+
$stderr.puts
|
|
27
|
+
$stderr.puts " #{start_command}"
|
|
28
|
+
exit
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def pid_file
|
|
32
|
+
"log/merb.#{Webrat.configuration.application_port}.pid"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def start_command
|
|
36
|
+
"#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def merb_command
|
|
40
|
+
if File.exist?('bin/merb')
|
|
41
|
+
merb_cmd = 'bin/merb'
|
|
42
|
+
else
|
|
43
|
+
merb_cmd = 'merb'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require "webrat/selenium/application_servers/base"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class Rack < Webrat::Selenium::ApplicationServers::Base
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
@pid = fork do
|
|
10
|
+
if File.exist?("log")
|
|
11
|
+
redirect_io(STDOUT, File.join("log", "webrat.webrick.stdout.log"))
|
|
12
|
+
redirect_io(STDERR, File.join("log", "webrat.webrick.stderr.log"))
|
|
13
|
+
end
|
|
14
|
+
exec start_command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def stop
|
|
19
|
+
Process.kill("INT", @pid)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def fail
|
|
23
|
+
$stderr.puts
|
|
24
|
+
$stderr.puts
|
|
25
|
+
$stderr.puts "==> Failed to boot the application server... exiting!"
|
|
26
|
+
$stderr.puts
|
|
27
|
+
$stderr.puts "Verify you can start a server on port #{Webrat.configuration.application_port} with the following command:"
|
|
28
|
+
$stderr.puts
|
|
29
|
+
$stderr.puts " #{start_command}"
|
|
30
|
+
exit
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def start_command
|
|
34
|
+
"#{bundler} rackup -s webrick --port #{Webrat.configuration.application_port} --env #{Webrat.configuration.application_environment}".strip
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def bundler
|
|
40
|
+
File.exist?("./Gemfile") ? "bundle exec " : ""
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def redirect_io(io, path)
|
|
44
|
+
File.open(path, 'ab') { |fp| io.reopen(fp) } if path
|
|
45
|
+
io.sync = true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require "webrat/selenium/application_servers/base"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class Rails < Webrat::Selenium::ApplicationServers::Base
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
system start_command
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stop
|
|
13
|
+
silence_stream(STDOUT) do
|
|
14
|
+
system stop_command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fail
|
|
19
|
+
$stderr.puts
|
|
20
|
+
$stderr.puts
|
|
21
|
+
$stderr.puts "==> Failed to boot the Rails application server... exiting!"
|
|
22
|
+
$stderr.puts
|
|
23
|
+
$stderr.puts "Verify you can start a Rails server on port #{Webrat.configuration.application_port} with the following command:"
|
|
24
|
+
$stderr.puts
|
|
25
|
+
$stderr.puts " #{start_command}"
|
|
26
|
+
exit
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def pid_file
|
|
30
|
+
prepare_pid_file("#{::Rails.root}/tmp/pids", "mongrel_selenium.pid")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def start_command
|
|
34
|
+
"mongrel_rails start -d --chdir='#{::Rails.root}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def stop_command
|
|
38
|
+
"mongrel_rails stop -c #{::Rails.root} --pid #{pid_file}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|