webrat 0.4.4 → 0.4.5
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 +15 -0
- data/History.txt +44 -8
- data/Rakefile +80 -66
- data/VERSION +1 -0
- data/lib/webrat.rb +7 -12
- data/lib/webrat/core/configuration.rb +7 -3
- data/lib/webrat/core/elements/area.rb +7 -7
- data/lib/webrat/core/elements/element.rb +11 -11
- data/lib/webrat/core/elements/field.rb +63 -55
- data/lib/webrat/core/elements/form.rb +17 -17
- data/lib/webrat/core/elements/label.rb +6 -6
- data/lib/webrat/core/elements/link.rb +13 -12
- data/lib/webrat/core/elements/select_option.rb +9 -9
- data/lib/webrat/core/locators.rb +2 -2
- data/lib/webrat/core/locators/area_locator.rb +10 -10
- data/lib/webrat/core/locators/button_locator.rb +13 -13
- data/lib/webrat/core/locators/field_by_id_locator.rb +8 -8
- data/lib/webrat/core/locators/field_labeled_locator.rb +11 -11
- data/lib/webrat/core/locators/field_locator.rb +7 -7
- data/lib/webrat/core/locators/field_named_locator.rb +10 -10
- data/lib/webrat/core/locators/form_locator.rb +6 -6
- data/lib/webrat/core/locators/label_locator.rb +9 -9
- data/lib/webrat/core/locators/link_locator.rb +21 -13
- data/lib/webrat/core/locators/locator.rb +5 -5
- data/lib/webrat/core/locators/select_option_locator.rb +11 -11
- data/lib/webrat/core/logging.rb +7 -4
- data/lib/webrat/core/matchers/have_content.rb +12 -12
- data/lib/webrat/core/matchers/have_selector.rb +9 -9
- data/lib/webrat/core/matchers/have_tag.rb +4 -4
- data/lib/webrat/core/matchers/have_xpath.rb +26 -26
- data/lib/webrat/core/methods.rb +13 -11
- data/lib/webrat/core/mime.rb +3 -3
- data/lib/webrat/core/save_and_open_page.rb +14 -16
- data/lib/webrat/core/scope.rb +53 -53
- data/lib/webrat/core/session.rb +23 -14
- data/lib/webrat/core/xml.rb +16 -16
- data/lib/webrat/core/xml/hpricot.rb +3 -3
- data/lib/webrat/core/xml/nokogiri.rb +11 -11
- data/lib/webrat/core/xml/rexml.rb +3 -3
- data/lib/webrat/core_extensions/blank.rb +1 -1
- data/lib/webrat/core_extensions/deprecate.rb +1 -1
- data/lib/webrat/core_extensions/detect_mapped.rb +4 -4
- data/lib/webrat/core_extensions/meta_class.rb +1 -1
- data/lib/webrat/core_extensions/tcp_socket.rb +8 -8
- data/lib/webrat/mechanize.rb +9 -9
- data/lib/webrat/merb.rb +1 -1
- data/lib/webrat/merb_multipart_support.rb +27 -0
- data/lib/webrat/merb_session.rb +39 -24
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +2 -2
- data/lib/webrat/rspec-rails.rb +3 -6
- data/lib/webrat/selenium.rb +2 -1
- data/lib/webrat/selenium/application_server_factory.rb +40 -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/rails.rb +44 -0
- data/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +14 -7
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +4 -1
- data/lib/webrat/selenium/matchers.rb +1 -1
- data/lib/webrat/selenium/matchers/have_content.rb +4 -4
- data/lib/webrat/selenium/matchers/have_selector.rb +4 -4
- data/lib/webrat/selenium/matchers/have_tag.rb +16 -16
- data/lib/webrat/selenium/matchers/have_xpath.rb +4 -4
- data/lib/webrat/selenium/selenium_rc_server.rb +25 -19
- data/lib/webrat/selenium/selenium_session.rb +24 -17
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/spec/fakes/test_session.rb +34 -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 +24 -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/rack_app.rb +16 -0
- data/spec/integration/rack/test/test_helper.rb +20 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
- data/spec/integration/rails/.gitignore +3 -0
- data/spec/integration/rails/Rakefile +30 -0
- data/spec/integration/rails/app/controllers/application.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 +43 -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 +11 -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 +11 -0
- data/spec/integration/rails/app/views/webrat/form.html.erb +28 -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 +18 -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 +80 -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 +97 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/Rakefile +5 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -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 +116 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +195 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/attaches_file_spec.rb +93 -0
- data/spec/private/merb/merb_session_spec.rb +61 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/spec/public/basic_auth_spec.rb +24 -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 +496 -0
- data/spec/public/click_link_spec.rb +511 -0
- data/spec/public/fill_in_spec.rb +209 -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 +114 -0
- data/spec/public/matchers/have_selector_spec.rb +142 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +70 -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 +249 -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 +5 -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 +50 -0
- data/vendor/selenium-server.jar +0 -0
- data/webrat.gemspec +340 -0
- metadata +248 -33
- data/lib/webrat/selenium/application_server.rb +0 -71
- data/lib/webrat/selenium/merb_application_server.rb +0 -48
- data/lib/webrat/selenium/rails_application_server.rb +0 -42
- data/lib/webrat/selenium/sinatra_application_server.rb +0 -35
data/lib/webrat/merb.rb
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
|
|
3
|
+
# These methods are copied from merb-core/two-oh.rb which defines new
|
|
4
|
+
# multipart_post and multipart_put methods for Merb::Test::MultipartRequestHelper.
|
|
5
|
+
# We can't require two-oh.rb because it alters Merb's own behavior, causing
|
|
6
|
+
# failing specs in Merb when Webrat is required.
|
|
7
|
+
module MerbMultipartSupport
|
|
8
|
+
def multipart_request(path, params = {}, env = {})
|
|
9
|
+
multipart = Merb::Test::MultipartRequestHelper::Post.new(params)
|
|
10
|
+
body, head = multipart.to_multipart
|
|
11
|
+
env["CONTENT_TYPE"] = head
|
|
12
|
+
env["CONTENT_LENGTH"] = body.size
|
|
13
|
+
env[:input] = StringIO.new(body)
|
|
14
|
+
request(path, env)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def multipart_post(path, params = {}, env = {})
|
|
18
|
+
env[:method] = "POST"
|
|
19
|
+
multipart_request(path, params, env)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def multipart_put(path, params = {}, env = {}, &block)
|
|
23
|
+
env[:method] = "PUT"
|
|
24
|
+
multipart_request(path, params, env)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/webrat/merb_session.rb
CHANGED
|
@@ -1,49 +1,70 @@
|
|
|
1
1
|
require "webrat"
|
|
2
|
-
|
|
3
|
-
require "cgi"
|
|
4
|
-
gem "extlib"
|
|
5
|
-
require "extlib"
|
|
6
2
|
require "merb-core"
|
|
7
|
-
|
|
8
|
-
# HashWithIndifferentAccess = Mash
|
|
3
|
+
require "webrat/merb_multipart_support"
|
|
9
4
|
|
|
10
5
|
module Webrat
|
|
11
6
|
class MerbSession < Session #:nodoc:
|
|
12
7
|
include Merb::Test::MakeRequest
|
|
13
|
-
|
|
8
|
+
|
|
9
|
+
# Include Webrat's own version of multipart_post/put because the officially
|
|
10
|
+
# supported methods in Merb don't perform the request correctly.
|
|
11
|
+
include MerbMultipartSupport
|
|
12
|
+
|
|
14
13
|
attr_accessor :response
|
|
15
|
-
|
|
14
|
+
|
|
16
15
|
def get(url, data, headers = nil)
|
|
17
16
|
do_request(url, data, headers, "GET")
|
|
18
17
|
end
|
|
19
|
-
|
|
18
|
+
|
|
20
19
|
def post(url, data, headers = nil)
|
|
21
20
|
do_request(url, data, headers, "POST")
|
|
22
21
|
end
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
def put(url, data, headers = nil)
|
|
25
24
|
do_request(url, data, headers, "PUT")
|
|
26
25
|
end
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
def delete(url, data, headers = nil)
|
|
29
28
|
do_request(url, data, headers, "DELETE")
|
|
30
29
|
end
|
|
31
|
-
|
|
30
|
+
|
|
32
31
|
def response_body
|
|
33
32
|
@response.body.to_s
|
|
34
33
|
end
|
|
35
|
-
|
|
34
|
+
|
|
36
35
|
def response_code
|
|
37
36
|
@response.status
|
|
38
37
|
end
|
|
39
|
-
|
|
38
|
+
|
|
40
39
|
def do_request(url, data, headers, method)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if method == "POST" && has_file?(data)
|
|
41
|
+
@response = multipart_post(url, data, :headers => headers)
|
|
42
|
+
|
|
43
|
+
elsif method == "PUT" && has_file?(data)
|
|
44
|
+
@response = multipart_put(url, data, :headers => headers)
|
|
45
|
+
|
|
46
|
+
else
|
|
47
|
+
@response = request(url,
|
|
48
|
+
:params => (data && data.any?) ? data : nil,
|
|
49
|
+
:headers => headers,
|
|
50
|
+
:method => method)
|
|
51
|
+
end
|
|
45
52
|
end
|
|
46
53
|
|
|
54
|
+
protected
|
|
55
|
+
|
|
56
|
+
# Recursively search the data for a file attachment.
|
|
57
|
+
def has_file?(data)
|
|
58
|
+
data.each do |key, value|
|
|
59
|
+
if value.is_a?(Hash)
|
|
60
|
+
return has_file?(value)
|
|
61
|
+
else
|
|
62
|
+
return true if value.is_a?(File)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
return false
|
|
66
|
+
end
|
|
67
|
+
|
|
47
68
|
end
|
|
48
69
|
end
|
|
49
70
|
|
|
@@ -57,9 +78,3 @@ module Merb #:nodoc:
|
|
|
57
78
|
end
|
|
58
79
|
end
|
|
59
80
|
end
|
|
60
|
-
|
|
61
|
-
class Merb::Test::RspecStory #:nodoc:
|
|
62
|
-
def browser
|
|
63
|
-
@browser ||= Webrat::MerbSession.new
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Webrat
|
|
2
|
+
class RackTestSession < Session
|
|
3
|
+
|
|
4
|
+
def initialize(rack_test_session) #:nodoc:
|
|
5
|
+
super()
|
|
6
|
+
@rack_test_session = rack_test_session
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def response_body
|
|
10
|
+
response.body
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def response_code
|
|
14
|
+
response.status
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def response
|
|
18
|
+
@rack_test_session.last_response
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def process_request(http_method, url, data = {}, headers = {})
|
|
24
|
+
headers ||= {}
|
|
25
|
+
data ||= {}
|
|
26
|
+
|
|
27
|
+
env = headers.merge(:params => data, :method => http_method.to_s.upcase)
|
|
28
|
+
@rack_test_session.request(url, env)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/webrat/rails.rb
CHANGED
|
@@ -7,7 +7,7 @@ require "action_controller/record_identifier"
|
|
|
7
7
|
module Webrat
|
|
8
8
|
class RailsSession < Session #:nodoc:
|
|
9
9
|
include ActionController::RecordIdentifier
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# The Rails version of within supports passing in a model and Webrat
|
|
12
12
|
# will apply a scope based on Rails' dom_id for that model.
|
|
13
13
|
#
|
|
@@ -22,7 +22,7 @@ module Webrat
|
|
|
22
22
|
super('#' + dom_id(selector_or_object), &block)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
def doc_root
|
|
27
27
|
File.expand_path(File.join(RAILS_ROOT, 'public'))
|
|
28
28
|
end
|
data/lib/webrat/rspec-rails.rb
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
# Supports using the matchers in controller, helper, and view specs if you're
|
|
2
2
|
# using rspec-rails. Just add a require statement to spec/spec_helper.rb or env.rb:
|
|
3
|
-
#
|
|
3
|
+
#
|
|
4
4
|
# require 'webrat/rspec-rails'
|
|
5
5
|
#
|
|
6
6
|
require "webrat/core/matchers"
|
|
7
7
|
|
|
8
8
|
Spec::Runner.configure do |config|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
config.include(Webrat::Matchers, :type => :helper)
|
|
12
|
-
config.include(Webrat::Matchers, :type => :view)
|
|
13
|
-
end
|
|
9
|
+
config.include(Webrat::Matchers, :type => [:controller, :helper, :view])
|
|
10
|
+
end
|
data/lib/webrat/selenium.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require "webrat"
|
|
2
|
-
gem "selenium-client", ">=1.2.
|
|
2
|
+
gem "selenium-client", ">=1.2.16"
|
|
3
3
|
require "selenium/client"
|
|
4
|
+
require "webrat/selenium/silence_stream"
|
|
4
5
|
require "webrat/selenium/selenium_session"
|
|
5
6
|
require "webrat/selenium/matchers"
|
|
6
7
|
require "webrat/core_extensions/tcp_socket"
|
|
@@ -0,0 +1,40 @@
|
|
|
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 :external
|
|
18
|
+
require "webrat/selenium/application_servers/external"
|
|
19
|
+
return Webrat::Selenium::ApplicationServers::External.new
|
|
20
|
+
else
|
|
21
|
+
raise WebratError.new(<<-STR)
|
|
22
|
+
Unknown Webrat application_framework: #{Webrat.configuration.application_framework.inspect}
|
|
23
|
+
|
|
24
|
+
Please ensure you have a Webrat configuration block that specifies an application_framework
|
|
25
|
+
in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
|
|
26
|
+
|
|
27
|
+
For example:
|
|
28
|
+
|
|
29
|
+
Webrat.configure do |config|
|
|
30
|
+
# ...
|
|
31
|
+
config.application_framework = :rails
|
|
32
|
+
end
|
|
33
|
+
STR
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
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,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
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "webrat/selenium/application_servers/base"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
module Selenium
|
|
5
|
+
module ApplicationServers
|
|
6
|
+
class Sinatra < Webrat::Selenium::ApplicationServers::Base
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
fork do
|
|
10
|
+
File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
|
|
11
|
+
exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def stop
|
|
16
|
+
silence_stream(STDOUT) do
|
|
17
|
+
pid = File.read(pid_file)
|
|
18
|
+
system("kill -9 #{pid}")
|
|
19
|
+
FileUtils.rm_f pid_file
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def fail
|
|
24
|
+
$stderr.puts
|
|
25
|
+
$stderr.puts
|
|
26
|
+
$stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
|
|
27
|
+
exit
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def pid_file
|
|
31
|
+
prepare_pid_file(Dir.pwd, 'rack.pid')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|