diabolo-webrat 0.4.3 → 0.4.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.
Files changed (81) hide show
  1. data/History.txt +8 -0
  2. data/Rakefile +5 -1
  3. data/lib/webrat/core/locators/field_labeled_locator.rb +1 -1
  4. data/lib/webrat/core/locators/label_locator.rb +1 -1
  5. data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
  6. data/lib/webrat/selenium/application_server.rb +71 -0
  7. data/lib/webrat/selenium/merb_application_server.rb +48 -0
  8. data/lib/webrat/selenium/rails_application_server.rb +42 -0
  9. data/lib/webrat/selenium/selenium_rc_server.rb +80 -0
  10. data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
  11. data/spec/fakes/test_session.rb +34 -0
  12. data/spec/integration/merb/app/controllers/application.rb +2 -0
  13. data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
  14. data/spec/integration/merb/app/controllers/testing.rb +18 -0
  15. data/spec/integration/merb/config/environments/development.rb +15 -0
  16. data/spec/integration/merb/config/environments/rake.rb +11 -0
  17. data/spec/integration/merb/config/environments/test.rb +14 -0
  18. data/spec/integration/merb/config/init.rb +25 -0
  19. data/spec/integration/merb/config/rack.rb +11 -0
  20. data/spec/integration/merb/config/router.rb +33 -0
  21. data/spec/integration/merb/spec/spec_helper.rb +24 -0
  22. data/spec/integration/merb/spec/webrat_spec.rb +32 -0
  23. data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
  24. data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
  25. data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
  26. data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
  27. data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
  28. data/spec/integration/rails/app/controllers/application.rb +15 -0
  29. data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
  30. data/spec/integration/rails/config/boot.rb +109 -0
  31. data/spec/integration/rails/config/environment.rb +12 -0
  32. data/spec/integration/rails/config/environments/development.rb +17 -0
  33. data/spec/integration/rails/config/environments/selenium.rb +22 -0
  34. data/spec/integration/rails/config/environments/test.rb +22 -0
  35. data/spec/integration/rails/config/initializers/inflections.rb +10 -0
  36. data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
  37. data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
  38. data/spec/integration/rails/config/routes.rb +14 -0
  39. data/spec/integration/rails/test/integration/webrat_test.rb +80 -0
  40. data/spec/integration/rails/test/test_helper.rb +25 -0
  41. data/spec/integration/sinatra/classic_app.rb +64 -0
  42. data/spec/integration/sinatra/modular_app.rb +16 -0
  43. data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
  44. data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
  45. data/spec/integration/sinatra/test/test_helper.rb +16 -0
  46. data/spec/private/core/configuration_spec.rb +104 -0
  47. data/spec/private/core/field_spec.rb +67 -0
  48. data/spec/private/core/link_spec.rb +24 -0
  49. data/spec/private/core/logging_spec.rb +10 -0
  50. data/spec/private/core/session_spec.rb +198 -0
  51. data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
  52. data/spec/private/merb/merb_session_spec.rb +42 -0
  53. data/spec/private/nokogiri_spec.rb +77 -0
  54. data/spec/private/rails/attaches_file_spec.rb +81 -0
  55. data/spec/private/rails/rails_session_spec.rb +110 -0
  56. data/spec/public/basic_auth_spec.rb +24 -0
  57. data/spec/public/check_spec.rb +191 -0
  58. data/spec/public/choose_spec.rb +118 -0
  59. data/spec/public/click_area_spec.rb +106 -0
  60. data/spec/public/click_button_spec.rb +502 -0
  61. data/spec/public/click_link_spec.rb +541 -0
  62. data/spec/public/fill_in_spec.rb +209 -0
  63. data/spec/public/locators/field_by_xpath_spec.rb +19 -0
  64. data/spec/public/locators/field_labeled_spec.rb +172 -0
  65. data/spec/public/locators/field_with_id_spec.rb +16 -0
  66. data/spec/public/matchers/contain_spec.rb +114 -0
  67. data/spec/public/matchers/have_selector_spec.rb +135 -0
  68. data/spec/public/matchers/have_tag_spec.rb +39 -0
  69. data/spec/public/matchers/have_xpath_spec.rb +123 -0
  70. data/spec/public/reload_spec.rb +10 -0
  71. data/spec/public/save_and_open_spec.rb +51 -0
  72. data/spec/public/select_date_spec.rb +112 -0
  73. data/spec/public/select_datetime_spec.rb +137 -0
  74. data/spec/public/select_spec.rb +261 -0
  75. data/spec/public/select_time_spec.rb +100 -0
  76. data/spec/public/set_hidden_field_spec.rb +5 -0
  77. data/spec/public/submit_form_spec.rb +5 -0
  78. data/spec/public/visit_spec.rb +58 -0
  79. data/spec/public/within_spec.rb +177 -0
  80. data/spec/spec_helper.rb +50 -0
  81. metadata +90 -25
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ == 0.4.5 / ?
2
+
3
+ * Minor enhancements
4
+
5
+ * Added support for field_labeled_locators ending in non word characters
6
+ lh 148 (Zach Dennis)
7
+ * Filled in tests on click link lh 195 (diabolo)
8
+
1
9
  == 0.4.4 / 2009-04-06
2
10
 
3
11
  * Major enhancements
data/Rakefile CHANGED
@@ -6,6 +6,8 @@ require 'spec'
6
6
  require 'spec/rake/spectask'
7
7
  require 'spec/rake/verify_rcov'
8
8
  require File.expand_path('./lib/webrat.rb')
9
+ require 'jeweler'
10
+
9
11
 
10
12
  ##############################################################################
11
13
  # Package && release
@@ -35,7 +37,9 @@ end
35
37
 
36
38
  Rake::GemPackageTask.new(spec) do |package|
37
39
  package.gem_spec = spec
38
- end
40
+ endrak
41
+
42
+ Jeweler::Tasks.new(spec)
39
43
 
40
44
  desc 'Show information about the gem.'
41
45
  task :debug_gem do
@@ -20,7 +20,7 @@ module Webrat
20
20
 
21
21
  def matching_label_elements
22
22
  label_elements.select do |label_element|
23
- text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}\b/i
23
+ text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
24
24
  end
25
25
  end
26
26
 
@@ -12,7 +12,7 @@ module Webrat
12
12
 
13
13
  def label_element
14
14
  label_elements.detect do |label_element|
15
- text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}\b/i
15
+ text(label_element) =~ /^\W*#{Regexp.escape(@value.to_s)}(\b|\Z)/i
16
16
  end
17
17
  end
18
18
 
@@ -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,71 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class ApplicationServer
5
+
6
+ def self.boot
7
+ case Webrat.configuration.application_framework
8
+ when :sinatra
9
+ require "webrat/selenium/sinatra_application_server"
10
+ SinatraApplicationServer.new.boot
11
+ when :merb
12
+ require "webrat/selenium/merb_application_server"
13
+ MerbApplicationServer.new.boot
14
+ when :rails
15
+ require "webrat/selenium/rails_application_server"
16
+ RailsApplicationServer.new.boot
17
+ else
18
+ raise WebratError.new(<<-STR)
19
+ Unknown Webrat application_framework: #{Webrat.configuration.application_framework.inspect}
20
+
21
+ Please ensure you have a Webrat configuration block that specifies an application_framework
22
+ in your test_helper.rb, spec_helper.rb, or env.rb (for Cucumber).
23
+
24
+ For example:
25
+
26
+ Webrat.configure do |config|
27
+ # ...
28
+ config.application_framework = :rails
29
+ end
30
+ STR
31
+ end
32
+ end
33
+
34
+ def boot
35
+ start
36
+ wait
37
+ stop_at_exit
38
+ end
39
+
40
+ def stop_at_exit
41
+ at_exit do
42
+ stop
43
+ end
44
+ end
45
+
46
+ def wait
47
+ $stderr.print "==> Waiting for #{Webrat.configuration.application_framework} application server on port #{Webrat.configuration.application_port}... "
48
+ wait_for_socket
49
+ $stderr.print "Ready!\n"
50
+ end
51
+
52
+ def wait_for_socket
53
+ silence_stream(STDOUT) do
54
+ TCPSocket.wait_for_service_with_timeout \
55
+ :host => Webrat.configuration.application_address,
56
+ :port => Webrat.configuration.application_port.to_i,
57
+ :timeout => 30 # seconds
58
+ end
59
+ rescue SocketError
60
+ fail
61
+ end
62
+
63
+ def prepare_pid_file(file_path, pid_file_name)
64
+ FileUtils.mkdir_p File.expand_path(file_path)
65
+ File.expand_path("#{file_path}/#{pid_file_name}")
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,48 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class MerbApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ pid = File.read(pid_file)
13
+ system("kill -9 #{pid}")
14
+ FileUtils.rm_f pid_file
15
+ end
16
+ end
17
+
18
+ def fail
19
+ $stderr.puts
20
+ $stderr.puts
21
+ $stderr.puts "==> Failed to boot the Merb application server... exiting!"
22
+ $stderr.puts
23
+ $stderr.puts "Verify you can start a Merb 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
+ "log/merb.#{Webrat.configuration.application_port}.pid"
31
+ end
32
+
33
+ def start_command
34
+ "#{merb_command} -d -p #{Webrat.configuration.application_port} -e #{Webrat.configuration.application_environment}"
35
+ end
36
+
37
+ def merb_command
38
+ if File.exist?('bin/merb')
39
+ merb_cmd = 'bin/merb'
40
+ else
41
+ merb_cmd = 'merb'
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,42 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class RailsApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ system start_command
8
+ end
9
+
10
+ def stop
11
+ silence_stream(STDOUT) do
12
+ system stop_command
13
+ end
14
+ end
15
+
16
+ def fail
17
+ $stderr.puts
18
+ $stderr.puts
19
+ $stderr.puts "==> Failed to boot the Rails application server... exiting!"
20
+ $stderr.puts
21
+ $stderr.puts "Verify you can start a Rails server on port #{Webrat.configuration.application_port} with the following command:"
22
+ $stderr.puts
23
+ $stderr.puts " #{start_command}"
24
+ exit
25
+ end
26
+
27
+ def pid_file
28
+ prepare_pid_file("#{RAILS_ROOT}/tmp/pids", "mongrel_selenium.pid")
29
+ end
30
+
31
+ def start_command
32
+ "mongrel_rails start -d --chdir='#{RAILS_ROOT}' --port=#{Webrat.configuration.application_port} --environment=#{Webrat.configuration.application_environment} --pid #{pid_file} &"
33
+ end
34
+
35
+ def stop_command
36
+ "mongrel_rails stop -c #{RAILS_ROOT} --pid #{pid_file}"
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,80 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class SeleniumRCServer
5
+
6
+ def self.boot
7
+ new.boot
8
+ end
9
+
10
+ def boot
11
+ return if selenium_grid?
12
+
13
+ start
14
+ wait
15
+ stop_at_exit
16
+ end
17
+
18
+ def start
19
+ silence_stream(STDOUT) do
20
+ remote_control.start :background => true
21
+ end
22
+ end
23
+
24
+ def stop_at_exit
25
+ at_exit do
26
+ stop
27
+ end
28
+ end
29
+
30
+ def remote_control
31
+ return @remote_control if @remote_control
32
+
33
+ @remote_control = ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5)
34
+ @remote_control.jar_file = jar_path
35
+
36
+ return @remote_control
37
+ end
38
+
39
+ def jar_path
40
+ File.expand_path(__FILE__ + "../../../../../vendor/selenium-server.jar")
41
+ end
42
+
43
+ def selenium_grid?
44
+ Webrat.configuration.selenium_server_address
45
+ end
46
+
47
+ def wait
48
+ $stderr.print "==> Waiting for Selenium RC server on port #{Webrat.configuration.selenium_server_port}... "
49
+ wait_for_socket
50
+ $stderr.print "Ready!\n"
51
+ rescue SocketError
52
+ fail
53
+ end
54
+
55
+ def wait_for_socket
56
+ silence_stream(STDOUT) do
57
+ TCPSocket.wait_for_service_with_timeout \
58
+ :host => (Webrat.configuration.selenium_server_address || "0.0.0.0"),
59
+ :port => Webrat.configuration.selenium_server_port,
60
+ :timeout => 15 # seconds
61
+ end
62
+ end
63
+
64
+ def fail
65
+ $stderr.puts
66
+ $stderr.puts
67
+ $stderr.puts "==> Failed to boot the Selenium RC server... exiting!"
68
+ exit
69
+ end
70
+
71
+ def stop
72
+ silence_stream(STDOUT) do
73
+ ::Selenium::RemoteControl::RemoteControl.new("0.0.0.0", Webrat.configuration.selenium_server_port, 5).stop
74
+ end
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,35 @@
1
+ module Webrat
2
+ module Selenium
3
+
4
+ class SinatraApplicationServer < ApplicationServer
5
+
6
+ def start
7
+ fork do
8
+ File.open('rack.pid', 'w') { |fp| fp.write Process.pid }
9
+ exec 'rackup', File.expand_path(Dir.pwd + '/config.ru'), '-p', Webrat.configuration.application_port.to_s
10
+ end
11
+ end
12
+
13
+ def stop
14
+ silence_stream(STDOUT) do
15
+ pid = File.read(pid_file)
16
+ system("kill -9 #{pid}")
17
+ FileUtils.rm_f pid_file
18
+ end
19
+ end
20
+
21
+ def fail
22
+ $stderr.puts
23
+ $stderr.puts
24
+ $stderr.puts "==> Failed to boot the Sinatra application server... exiting!"
25
+ exit
26
+ end
27
+
28
+ def pid_file
29
+ prepare_pid_file(Dir.pwd, 'rack.pid')
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ module Webrat #:nodoc:
2
+ def self.session_class #:nodoc:
3
+ TestSession
4
+ end
5
+
6
+ class TestSession < Session #:nodoc:
7
+ attr_accessor :response_body
8
+ attr_writer :response_code
9
+
10
+ def doc_root
11
+ File.expand_path(File.join(".", "public"))
12
+ end
13
+
14
+ def response
15
+ @response ||= Object.new
16
+ end
17
+
18
+ def response_code
19
+ @response_code || 200
20
+ end
21
+
22
+ def get(url, data, headers = nil)
23
+ end
24
+
25
+ def post(url, data, headers = nil)
26
+ end
27
+
28
+ def put(url, data, headers = nil)
29
+ end
30
+
31
+ def delete(url, data, headers = nil)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,2 @@
1
+ class Application < Merb::Controller
2
+ end
@@ -0,0 +1,13 @@
1
+ class Exceptions < Merb::Controller
2
+
3
+ # handle NotFound exceptions (404)
4
+ def not_found
5
+ render :format => :html
6
+ end
7
+
8
+ # handle NotAcceptable exceptions (406)
9
+ def not_acceptable
10
+ render :format => :html
11
+ end
12
+
13
+ end
@@ -0,0 +1,18 @@
1
+ class Testing < Application
2
+
3
+ def show_form
4
+ render
5
+ end
6
+
7
+ def submit_form
8
+ end
9
+
10
+ def internal_redirect
11
+ redirect "/"
12
+ end
13
+
14
+ def external_redirect
15
+ redirect "http://google.com"
16
+ end
17
+
18
+ end
@@ -0,0 +1,15 @@
1
+ Merb.logger.info("Loaded DEVELOPMENT Environment...")
2
+ Merb::Config.use { |c|
3
+ c[:exception_details] = true
4
+ c[:reload_templates] = true
5
+ c[:reload_classes] = true
6
+ c[:reload_time] = 0.5
7
+ c[:ignore_tampered_cookies] = true
8
+ c[:log_auto_flush ] = true
9
+ c[:log_level] = :debug
10
+
11
+ c[:log_stream] = STDOUT
12
+ c[:log_file] = nil
13
+ # Or redirect logging into a file:
14
+ # c[:log_file] = Merb.root / "log" / "development.log"
15
+ }
@@ -0,0 +1,11 @@
1
+ Merb.logger.info("Loaded RAKE Environment...")
2
+ Merb::Config.use { |c|
3
+ c[:exception_details] = true
4
+ c[:reload_classes] = false
5
+ c[:log_auto_flush ] = true
6
+
7
+ c[:log_stream] = STDOUT
8
+ c[:log_file] = nil
9
+ # Or redirect logging into a file:
10
+ # c[:log_file] = Merb.root / "log" / "development.log"
11
+ }
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + "/../../../../../lib/webrat"
2
+
3
+ Merb.logger.info("Loaded TEST Environment...")
4
+ Merb::Config.use { |c|
5
+ c[:testing] = true
6
+ c[:exception_details] = true
7
+ c[:log_auto_flush ] = true
8
+ # log less in testing environment
9
+ c[:log_level] = :error
10
+
11
+ #c[:log_file] = Merb.root / "log" / "test.log"
12
+ # or redirect logger using IO handle
13
+ c[:log_stream] = STDOUT
14
+ }
@@ -0,0 +1,25 @@
1
+ # Go to http://wiki.merbivore.com/pages/init-rb
2
+
3
+ # Specify a specific version of a dependency
4
+ # dependency "RedCloth", "> 3.0"
5
+
6
+ # use_orm :none
7
+ use_test :rspec
8
+ use_template_engine :erb
9
+
10
+ Merb::Config.use do |c|
11
+ c[:use_mutex] = false
12
+ c[:session_store] = 'cookie' # can also be 'memory', 'memcache', 'container', 'datamapper
13
+
14
+ # cookie session store configuration
15
+ c[:session_secret_key] = 'adb9ea7a0e94b5513503f58623a393c5efe18851' # required for cookie session store
16
+ c[:session_id_key] = '_merb_session_id' # cookie session id key, defaults to "_session_id"
17
+ end
18
+
19
+ Merb::BootLoader.before_app_loads do
20
+ # This will get executed after dependencies have been loaded but before your app's classes have loaded.
21
+ end
22
+
23
+ Merb::BootLoader.after_app_loads do
24
+ # This will get executed after your app's classes have been loaded.
25
+ end
@@ -0,0 +1,11 @@
1
+ # use PathPrefix Middleware if :path_prefix is set in Merb::Config
2
+ if prefix = ::Merb::Config[:path_prefix]
3
+ use Merb::Rack::PathPrefix, prefix
4
+ end
5
+
6
+ # comment this out if you are running merb behind a load balancer
7
+ # that serves static files
8
+ use Merb::Rack::Static, Merb.dir_for(:public)
9
+
10
+ # this is our main merb application
11
+ run Merb::Rack::Application.new
@@ -0,0 +1,33 @@
1
+ # Merb::Router is the request routing mapper for the merb framework.
2
+ #
3
+ # You can route a specific URL to a controller / action pair:
4
+ #
5
+ # match("/contact").
6
+ # to(:controller => "info", :action => "contact")
7
+ #
8
+ # You can define placeholder parts of the url with the :symbol notation. These
9
+ # placeholders will be available in the params hash of your controllers. For example:
10
+ #
11
+ # match("/books/:book_id/:action").
12
+ # to(:controller => "books")
13
+ #
14
+ # Or, use placeholders in the "to" results for more complicated routing, e.g.:
15
+ #
16
+ # match("/admin/:module/:controller/:action/:id").
17
+ # to(:controller => ":module/:controller")
18
+ #
19
+ # You can specify conditions on the placeholder by passing a hash as the second
20
+ # argument of "match"
21
+ #
22
+ # match("/registration/:course_name", :course_name => /^[a-z]{3,5}-\d{5}$/).
23
+ # to(:controller => "registration")
24
+ #
25
+ # You can also use regular expressions, deferred routes, and many other options.
26
+ # See merb/specs/merb/router.rb for a fairly complete usage sample.
27
+
28
+ Merb.logger.info("Compiling routes...")
29
+ Merb::Router.prepare do
30
+ match("/").to(:controller => "testing", :action => "show_form")
31
+ match("/internal_redirect").to(:controller => "testing", :action => "internal_redirect")
32
+ match("/external_redirect").to(:controller => "testing", :action => "external_redirect")
33
+ end
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+
3
+ # Add the local gems dir if found within the app root; any dependencies loaded
4
+ # hereafter will try to load from the local gems before loading system gems.
5
+ if (local_gem_dir = File.join(File.dirname(__FILE__), '..', 'gems')) && $BUNDLE.nil?
6
+ $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(local_gem_dir)
7
+ end
8
+
9
+ require "merb-core"
10
+ require "spec" # Satisfies Autotest and anyone else not using the Rake tasks
11
+
12
+ # this loads all plugins required in your init file so don't add them
13
+ # here again, Merb will do it for you
14
+ Merb.start_environment(:testing => true, :adapter => 'runner', :environment => ENV['MERB_ENV'] || 'test')
15
+
16
+ Spec::Runner.configure do |config|
17
+ config.include(Merb::Test::ViewHelper)
18
+ config.include(Merb::Test::RouteHelper)
19
+ config.include(Merb::Test::ControllerHelper)
20
+ end
21
+
22
+ Webrat.configure do |config|
23
+ config.mode = :merb
24
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
+
3
+ describe "Webrat" do
4
+ it "should visit pages" do
5
+ response = visit "/"
6
+ response.should contain("Webrat Form")
7
+ end
8
+
9
+ it "should submit forms" do
10
+ visit "/"
11
+ fill_in "Text field", :with => "Hello"
12
+ check "TOS"
13
+ select "January"
14
+ click_button "Test"
15
+ end
16
+
17
+ it "should follow internal redirects" do
18
+ response = visit "/internal_redirect"
19
+ response.status.should == 200
20
+ response.should contain("Webrat Form")
21
+ end
22
+
23
+ it "should check the value of a field" do
24
+ visit "/"
25
+ field_labeled("Prefilled").value.should == "text"
26
+ end
27
+
28
+ it "should not follow external redirects" do
29
+ response = visit "/external_redirect"
30
+ response.status.should == 302
31
+ end
32
+ end
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This was added by Merb's bundler
4
+
5
+ require "rubygems"
6
+ require File.join(File.dirname(__FILE__), "common")
7
+
8
+ gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
9
+
10
+ if File.directory?(gems_dir)
11
+ $BUNDLE = true
12
+ Gem.clear_paths
13
+ Gem.path.replace([File.expand_path(gems_dir)])
14
+ ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
15
+
16
+ gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
17
+
18
+ if local_gem = Dir[gem_file].last
19
+ version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
20
+ end
21
+ end
22
+
23
+ version ||= "<%= Gem::Requirement.default %>"
24
+
25
+ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
26
+ version = $1
27
+ ARGV.shift
28
+ end
29
+
30
+ gem '<%= @spec.name %>', version
31
+ load '<%= bin_file_name %>'