kbaum-webrat 0.5.1
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 +406 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +85 -0
- data/Rakefile +186 -0
- data/VERSION +1 -0
- data/install.rb +1 -0
- data/lib/webrat.rb +18 -0
- data/lib/webrat/adapters/mechanize.rb +78 -0
- data/lib/webrat/adapters/merb.rb +11 -0
- data/lib/webrat/adapters/rack.rb +25 -0
- data/lib/webrat/adapters/rails.rb +96 -0
- data/lib/webrat/adapters/sinatra.rb +9 -0
- data/lib/webrat/core.rb +13 -0
- data/lib/webrat/core/configuration.rb +96 -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 +487 -0
- data/lib/webrat/core/elements/form.rb +103 -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 +74 -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 +74 -0
- data/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/lib/webrat/core/matchers/have_xpath.rb +122 -0
- data/lib/webrat/core/methods.rb +64 -0
- data/lib/webrat/core/mime.rb +18 -0
- data/lib/webrat/core/save_and_open_page.rb +48 -0
- data/lib/webrat/core/scope.rb +365 -0
- data/lib/webrat/core/session.rb +307 -0
- data/lib/webrat/core/xml.rb +72 -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_param.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/rails.rb +9 -0
- data/lib/webrat/integrations/rspec-rails.rb +10 -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 +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 +19 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +24 -0
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -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 +66 -0
- data/lib/webrat/selenium/matchers/have_selector.rb +74 -0
- data/lib/webrat/selenium/matchers/have_tag.rb +49 -0
- data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +86 -0
- data/lib/webrat/selenium/selenium_session.rb +250 -0
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/selenium_rc_server.patch +20 -0
- data/spec/fakes/test_adapter.rb +37 -0
- data/spec/integration/mechanize/Rakefile +7 -0
- data/spec/integration/mechanize/config.ru +2 -0
- data/spec/integration/mechanize/sample_app.rb +20 -0
- data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
- data/spec/integration/mechanize/spec/spec_helper.rb +27 -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 +21 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +73 -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 +26 -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 +17 -0
- data/spec/private/core/configuration_spec.rb +87 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/session_spec.rb +200 -0
- data/spec/private/mechanize/mechanize_adapter_spec.rb +73 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_adapter_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 +494 -0
- data/spec/public/click_link_spec.rb +511 -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 +114 -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 +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 +455 -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 +54 -0
- data/vendor/selenium-server.jar +0 -0
- data/webrat.gemspec +356 -0
- metadata +410 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'jeweler'
|
|
5
|
+
|
|
6
|
+
Jeweler::Tasks.new do |s|
|
|
7
|
+
s.name = "kbaum-webrat"
|
|
8
|
+
s.author = "Bryan Helmkamp"
|
|
9
|
+
s.email = "bryan" + "@" + "brynary.com"
|
|
10
|
+
s.homepage = "http://github.com/brynary/webrat"
|
|
11
|
+
s.summary = "Ruby Acceptance Testing for Web applications"
|
|
12
|
+
s.description = <<-EOS.strip
|
|
13
|
+
Webrat lets you quickly write expressive and robust acceptance tests
|
|
14
|
+
for a Ruby web application. It supports simulating a browser inside
|
|
15
|
+
a Ruby process to avoid the performance hit and browser dependency of
|
|
16
|
+
Selenium or Watir, but the same API can also be used to drive real
|
|
17
|
+
Selenium tests when necessary (eg. for testing AJAX interactions).
|
|
18
|
+
Most Ruby web frameworks and testing frameworks are supported.
|
|
19
|
+
EOS
|
|
20
|
+
|
|
21
|
+
s.rubyforge_project = "webrat"
|
|
22
|
+
s.extra_rdoc_files = %w[README.rdoc MIT-LICENSE.txt History.txt]
|
|
23
|
+
|
|
24
|
+
# Dependencies
|
|
25
|
+
s.add_dependency "nokogiri", ">= 1.2.0"
|
|
26
|
+
s.add_dependency "rack", ">= 1.0"
|
|
27
|
+
|
|
28
|
+
s.add_development_dependency "rails", ">= 2.3"
|
|
29
|
+
s.add_development_dependency "merb-core", ">= 1.0"
|
|
30
|
+
s.add_development_dependency "launchy"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Jeweler::RubyforgeTasks.new
|
|
34
|
+
rescue LoadError
|
|
35
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# require 'spec'
|
|
39
|
+
require 'spec/rake/spectask'
|
|
40
|
+
require 'spec/rake/verify_rcov'
|
|
41
|
+
|
|
42
|
+
desc "Run API and Core specs"
|
|
43
|
+
Spec::Rake::SpecTask.new do |t|
|
|
44
|
+
t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
|
|
45
|
+
t.spec_files = FileList['spec/public/**/*_spec.rb'] + FileList['spec/private/**/*_spec.rb']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
desc "Run all specs in spec directory with RCov"
|
|
49
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
|
50
|
+
t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
|
|
51
|
+
t.spec_files = FileList['spec/public/**/*_spec.rb'] + FileList['spec/private/**/*_spec.rb']
|
|
52
|
+
t.rcov = true
|
|
53
|
+
t.rcov_opts = lambda do
|
|
54
|
+
IO.readlines(File.dirname(__FILE__) + "/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
RCov::VerifyTask.new(:verify_rcov => :rcov) do |t|
|
|
59
|
+
t.threshold = 96.2 # Make sure you have rcov 0.7 or higher!
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
desc "Run everything against multiruby"
|
|
63
|
+
task :multiruby do
|
|
64
|
+
result = system "multiruby -S rake spec"
|
|
65
|
+
raise "Multiruby tests failed" unless result
|
|
66
|
+
result = system "jruby -S rake spec"
|
|
67
|
+
raise "JRuby tests failed" unless result
|
|
68
|
+
|
|
69
|
+
Dir.chdir "spec/integration/rails" do
|
|
70
|
+
result = system "multiruby -S rake test_unit:rails"
|
|
71
|
+
raise "Rails integration tests failed" unless result
|
|
72
|
+
|
|
73
|
+
result = system "jruby -S rake test_unit:rails"
|
|
74
|
+
raise "Rails integration tests failed" unless result
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
Dir.chdir "spec/integration/merb" do
|
|
78
|
+
result = system "multiruby -S rake spec"
|
|
79
|
+
raise "Merb integration tests failed" unless result
|
|
80
|
+
|
|
81
|
+
result = system "jruby -S rake spec"
|
|
82
|
+
raise "Rails integration tests failed" unless result
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
Dir.chdir "spec/integration/sinatra" do
|
|
86
|
+
result = system "multiruby -S rake test"
|
|
87
|
+
raise "Sinatra integration tests failed" unless result
|
|
88
|
+
|
|
89
|
+
result = system "jruby -S rake test"
|
|
90
|
+
raise "Sinatra integration tests failed" unless result
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
Dir.chdir "spec/integration/rack" do
|
|
94
|
+
result = system "multiruby -S rake test"
|
|
95
|
+
raise "Rack integration tests failed" unless result
|
|
96
|
+
|
|
97
|
+
result = system "jruby -S rake test"
|
|
98
|
+
raise "Rack integration tests failed" unless result
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
puts
|
|
102
|
+
puts "Multiruby OK!"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
desc "Run each spec in isolation to test for dependency issues"
|
|
106
|
+
task :spec_deps do
|
|
107
|
+
Dir["spec/**/*_spec.rb"].each do |test|
|
|
108
|
+
if !system("spec #{test} &> /dev/null")
|
|
109
|
+
puts "Dependency Issues: #{test}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
task :prepare do
|
|
115
|
+
system "ln -s ../../../../.. ./spec/integration/rails/vendor/plugins/webrat"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
namespace :spec do
|
|
119
|
+
desc "Run the integration specs"
|
|
120
|
+
task :integration => ["integration:rails", "integration:merb", "integration:sinatra", "integration:rack", "integration:mechanize"]
|
|
121
|
+
|
|
122
|
+
namespace :integration do
|
|
123
|
+
desc "Run the Rails integration specs"
|
|
124
|
+
task :rails => ['rails:webrat'] #,'rails:selenium'] currently not running selenium as it doesn't pass.
|
|
125
|
+
|
|
126
|
+
namespace :rails do
|
|
127
|
+
task :selenium do
|
|
128
|
+
Dir.chdir "spec/integration/rails" do
|
|
129
|
+
result = system "rake test_unit:selenium"
|
|
130
|
+
raise "Rails integration tests failed" unless result
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
task :webrat do
|
|
135
|
+
Dir.chdir "spec/integration/rails" do
|
|
136
|
+
result = system "rake test_unit:rails"
|
|
137
|
+
raise "Rails integration tests failed" unless result
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
desc "Run the Merb integration specs"
|
|
143
|
+
task :merb do
|
|
144
|
+
Dir.chdir "spec/integration/merb" do
|
|
145
|
+
result = system "rake spec"
|
|
146
|
+
raise "Merb integration tests failed" unless result
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
desc "Run the Sinatra integration specs"
|
|
151
|
+
task :sinatra do
|
|
152
|
+
Dir.chdir "spec/integration/sinatra" do
|
|
153
|
+
result = system "rake test"
|
|
154
|
+
raise "Sinatra integration tests failed" unless result
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
desc "Run the Sinatra integration specs"
|
|
159
|
+
task :rack do
|
|
160
|
+
Dir.chdir "spec/integration/rack" do
|
|
161
|
+
result = system "rake test"
|
|
162
|
+
raise "Rack integration tests failed" unless result
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
desc "Run the Mechanize integration specs"
|
|
167
|
+
task :mechanize do
|
|
168
|
+
Dir.chdir "spec/integration/mechanize" do
|
|
169
|
+
result = system "rake spec"
|
|
170
|
+
raise "Mechanize integration tests failed" unless result
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
desc 'Removes trailing whitespace'
|
|
177
|
+
task :whitespace do
|
|
178
|
+
sh %{find . -name '*.rb' -exec sed -i '' 's/ *$//g' {} \\;}
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
if defined?(Jeweler)
|
|
182
|
+
task :spec => :check_dependencies
|
|
183
|
+
task :build => :gemspec
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
task :default => :spec
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.1
|
data/install.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
puts IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
|
data/lib/webrat.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "rack"
|
|
2
|
+
require "nokogiri"
|
|
3
|
+
|
|
4
|
+
module Webrat
|
|
5
|
+
VERSION = "0.6pre"
|
|
6
|
+
|
|
7
|
+
autoload :MechanizeAdapter, "webrat/adapters/mechanize"
|
|
8
|
+
autoload :MerbAdapter, "webrat/adapters/merb"
|
|
9
|
+
autoload :RackAdapter, "webrat/adapters/rack"
|
|
10
|
+
autoload :RailsAdapter, "webrat/adapters/rails"
|
|
11
|
+
autoload :SinatraAdapter, "webrat/adapters/sinatra"
|
|
12
|
+
|
|
13
|
+
# The common base class for all exceptions raised by Webrat.
|
|
14
|
+
class WebratError < StandardError
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
require "webrat/core"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require "mechanize"
|
|
2
|
+
|
|
3
|
+
module Webrat #:nodoc:
|
|
4
|
+
class MechanizeAdapter #:nodoc:
|
|
5
|
+
extend Forwardable
|
|
6
|
+
|
|
7
|
+
attr_accessor :response
|
|
8
|
+
alias :page :response
|
|
9
|
+
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def request_page(url, http_method, data) #:nodoc:
|
|
14
|
+
super(absolute_url(url), http_method, data)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get(url, data, headers_argument_not_used = nil)
|
|
18
|
+
@response = mechanize.get(url, data)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def post(url, data, headers_argument_not_used = nil)
|
|
22
|
+
post_data = data.inject({}) do |memo, param|
|
|
23
|
+
case param.last
|
|
24
|
+
when Hash
|
|
25
|
+
param.last.each {|attribute, value| memo["#{param.first}[#{attribute}]"] = value }
|
|
26
|
+
else
|
|
27
|
+
memo[param.first] = param.last
|
|
28
|
+
end
|
|
29
|
+
memo
|
|
30
|
+
end
|
|
31
|
+
@response = mechanize.post(url, post_data)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def response_body
|
|
35
|
+
@response.content
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def response_code
|
|
39
|
+
@response.code.to_i
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def mechanize
|
|
43
|
+
@mechanize ||= WWW::Mechanize.new
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def_delegators :mechanize, :basic_auth
|
|
47
|
+
|
|
48
|
+
def absolute_url(url) #:nodoc:
|
|
49
|
+
current_host, current_path = split_current_url
|
|
50
|
+
if url =~ Regexp.new('^https?://')
|
|
51
|
+
url
|
|
52
|
+
elsif url =~ Regexp.new('^/')
|
|
53
|
+
current_host + url
|
|
54
|
+
elsif url =~ Regexp.new('^\.')
|
|
55
|
+
current_host + absolute_path(current_path, url)
|
|
56
|
+
else
|
|
57
|
+
url
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
def split_current_url
|
|
63
|
+
current_url =~ Regexp.new('^(https?://[^/]+)(/.*)?')
|
|
64
|
+
[Regexp.last_match(1), Regexp.last_match(2)]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def absolute_path(current_path, url)
|
|
68
|
+
levels_up = url.split('/').find_all { |x| x == '..' }.size
|
|
69
|
+
ancestor = if current_path.nil?
|
|
70
|
+
""
|
|
71
|
+
else
|
|
72
|
+
current_path.split("/")[0..(-1 - levels_up)].join("/")
|
|
73
|
+
end
|
|
74
|
+
descendent = url.split("/")[levels_up..-1].join
|
|
75
|
+
"#{ancestor}/#{descendent}"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require "webrat/integrations/merb"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
class MerbAdapter < RackAdapter #:nodoc:
|
|
5
|
+
def initialize(context=nil)
|
|
6
|
+
app = context.respond_to?(:app) ?
|
|
7
|
+
context.app : Merb::Rack::Application.new
|
|
8
|
+
super(Rack::Test::Session.new(Rack::MockSession.new(app, "www.example.com")))
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "rack/test"
|
|
2
|
+
|
|
3
|
+
module Webrat
|
|
4
|
+
class RackAdapter
|
|
5
|
+
extend Forwardable
|
|
6
|
+
|
|
7
|
+
def_delegators :@session, :get, :post, :put, :delete
|
|
8
|
+
|
|
9
|
+
def initialize(session) #:nodoc:
|
|
10
|
+
@session = session
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def response_body
|
|
14
|
+
response.body
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def response_code
|
|
18
|
+
response.status
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def response
|
|
22
|
+
@session.last_response
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require "webrat/integrations/rails"
|
|
2
|
+
require "action_controller/record_identifier"
|
|
3
|
+
|
|
4
|
+
module Webrat
|
|
5
|
+
class RailsAdapter #:nodoc:
|
|
6
|
+
include ActionController::RecordIdentifier
|
|
7
|
+
|
|
8
|
+
attr_reader :integration_session
|
|
9
|
+
|
|
10
|
+
def initialize(session)
|
|
11
|
+
@integration_session = session
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The Rails version of within supports passing in a model and Webrat
|
|
15
|
+
# will apply a scope based on Rails' dom_id for that model.
|
|
16
|
+
#
|
|
17
|
+
# Example:
|
|
18
|
+
# within User.last do
|
|
19
|
+
# click_link "Delete"
|
|
20
|
+
# end
|
|
21
|
+
def within(selector_or_object, &block)
|
|
22
|
+
if selector_or_object.is_a?(String)
|
|
23
|
+
super
|
|
24
|
+
else
|
|
25
|
+
super('#' + dom_id(selector_or_object), &block)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def doc_root
|
|
30
|
+
File.expand_path(File.join(RAILS_ROOT, 'public'))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def saved_page_dir
|
|
34
|
+
File.expand_path(File.join(RAILS_ROOT, "tmp"))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def get(url, data, headers = nil)
|
|
38
|
+
do_request(:get, url, data, headers)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def post(url, data, headers = nil)
|
|
42
|
+
do_request(:post, url, data, headers)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def put(url, data, headers = nil)
|
|
46
|
+
do_request(:put, url, data, headers)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def delete(url, data, headers = nil)
|
|
50
|
+
do_request(:delete, url, data, headers)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def response_body
|
|
54
|
+
response.body
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def response_code
|
|
58
|
+
response.code.to_i
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def xml_content_type?
|
|
62
|
+
response.headers["Content-Type"].to_s =~ /xml/
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
protected
|
|
66
|
+
|
|
67
|
+
def do_request(http_method, url, data, headers) #:nodoc:
|
|
68
|
+
update_protocol(url)
|
|
69
|
+
integration_session.send(http_method, normalize_url(url), data, headers)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# remove protocol, host and anchor
|
|
73
|
+
def normalize_url(href) #:nodoc:
|
|
74
|
+
uri = URI.parse(href)
|
|
75
|
+
normalized_url = []
|
|
76
|
+
normalized_url << "#{uri.scheme}://" if uri.scheme
|
|
77
|
+
normalized_url << uri.host if uri.host
|
|
78
|
+
normalized_url << ":#{uri.port}" if uri.port && ![80,443].include?(uri.port)
|
|
79
|
+
normalized_url << uri.path if uri.path
|
|
80
|
+
normalized_url << "?#{uri.query}" if uri.query
|
|
81
|
+
normalized_url.join
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def update_protocol(href) #:nodoc:
|
|
85
|
+
if href =~ /^https:/
|
|
86
|
+
integration_session.https!(true)
|
|
87
|
+
elsif href =~ /^http:/
|
|
88
|
+
integration_session.https!(false)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def response #:nodoc:
|
|
93
|
+
integration_session.response
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
data/lib/webrat/core.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require "webrat/core/configuration"
|
|
2
|
+
require "webrat/core/xml"
|
|
3
|
+
require "webrat/core/logging"
|
|
4
|
+
require "webrat/core/elements/form"
|
|
5
|
+
require "webrat/core/scope"
|
|
6
|
+
require "webrat/core/elements/link"
|
|
7
|
+
require "webrat/core/elements/area"
|
|
8
|
+
require "webrat/core/elements/label"
|
|
9
|
+
require "webrat/core/elements/select_option"
|
|
10
|
+
require "webrat/core/session"
|
|
11
|
+
require "webrat/core/methods"
|
|
12
|
+
require "webrat/core/matchers"
|
|
13
|
+
require "webrat/core/save_and_open_page"
|