emipair-webrat 0.0.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/.document +4 -0
  2. data/.gitignore +15 -0
  3. data/History.txt +34 -1
  4. data/Rakefile +45 -78
  5. data/VERSION +1 -0
  6. data/emipair-webrat.gemspec +354 -0
  7. data/lib/webrat.rb +3 -24
  8. data/lib/webrat/core/configuration.rb +5 -1
  9. data/lib/webrat/core/elements/field.rb +3 -3
  10. data/lib/webrat/core/logging.rb +3 -4
  11. data/lib/webrat/core/methods.rb +4 -4
  12. data/lib/webrat/core/mime.rb +11 -22
  13. data/lib/webrat/core/session.rb +27 -12
  14. data/lib/webrat/mechanize.rb +5 -1
  15. data/lib/webrat/{merb_session.rb → merb_adapter.rb} +4 -2
  16. data/lib/webrat/rack.rb +15 -14
  17. data/lib/webrat/rails.rb +7 -10
  18. data/lib/webrat/selenium.rb +0 -1
  19. data/lib/webrat/selenium/selenium_session.rb +8 -8
  20. data/lib/webrat/sinatra.rb +3 -36
  21. data/spec/fakes/{test_session.rb → test_adapter.rb} +6 -3
  22. data/spec/integration/mechanize/Rakefile +7 -0
  23. data/spec/integration/mechanize/config.ru +2 -0
  24. data/spec/integration/mechanize/sample_app.rb +20 -0
  25. data/spec/integration/mechanize/spec/mechanize_spec.rb +22 -0
  26. data/spec/integration/mechanize/spec/spec_helper.rb +27 -0
  27. data/spec/integration/merb/.gitignore +21 -0
  28. data/spec/integration/merb/Rakefile +35 -0
  29. data/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
  30. data/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
  31. data/spec/integration/merb/app/views/layout/application.html.erb +12 -0
  32. data/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
  33. data/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
  34. data/spec/integration/merb/spec/spec.opts +1 -0
  35. data/spec/integration/merb/spec/spec_helper.rb +2 -0
  36. data/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
  37. data/spec/integration/rack/Rakefile +5 -0
  38. data/spec/integration/rack/app.rb +89 -0
  39. data/spec/integration/rack/test/helper.rb +21 -0
  40. data/spec/integration/rack/test/webrat_rack_test.rb +58 -52
  41. data/spec/integration/rails/.gitignore +3 -0
  42. data/spec/integration/rails/Rakefile +30 -0
  43. data/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
  44. data/spec/integration/rails/app/views/fields/show.html.erb +9 -0
  45. data/spec/integration/rails/app/views/links/show.html.erb +5 -0
  46. data/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
  47. data/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
  48. data/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
  49. data/spec/integration/rails/config/locales/en.yml +5 -0
  50. data/spec/integration/rails/public/404.html +30 -0
  51. data/spec/integration/rails/public/422.html +30 -0
  52. data/spec/integration/rails/public/500.html +33 -0
  53. data/spec/integration/rails/script/about +4 -0
  54. data/spec/integration/rails/script/console +3 -0
  55. data/spec/integration/rails/script/dbconsole +3 -0
  56. data/spec/integration/rails/script/destroy +3 -0
  57. data/spec/integration/rails/script/generate +3 -0
  58. data/spec/integration/rails/script/performance/benchmarker +3 -0
  59. data/spec/integration/rails/script/performance/profiler +3 -0
  60. data/spec/integration/rails/script/performance/request +3 -0
  61. data/spec/integration/rails/script/plugin +3 -0
  62. data/spec/integration/rails/script/process/inspector +3 -0
  63. data/spec/integration/rails/script/process/reaper +3 -0
  64. data/spec/integration/rails/script/process/spawner +3 -0
  65. data/spec/integration/rails/script/runner +3 -0
  66. data/spec/integration/rails/script/server +3 -0
  67. data/spec/integration/rails/test/test_helper.rb +2 -1
  68. data/spec/integration/sinatra/Rakefile +5 -0
  69. data/spec/integration/sinatra/test/test_helper.rb +2 -1
  70. data/spec/private/core/configuration_spec.rb +11 -2
  71. data/spec/private/core/field_spec.rb +1 -1
  72. data/spec/private/core/link_spec.rb +1 -1
  73. data/spec/private/core/session_spec.rb +5 -0
  74. data/spec/private/mechanize/{mechanize_session_spec.rb → mechanize_adapter_spec.rb} +4 -10
  75. data/spec/private/merb/{merb_session_spec.rb → merb_adapter_spec.rb} +5 -5
  76. data/spec/private/rails/{rails_session_spec.rb → rails_adapter_spec.rb} +17 -14
  77. data/spec/public/matchers/contain_spec.rb +4 -4
  78. data/spec/public/matchers/have_selector_spec.rb +2 -2
  79. data/spec/public/matchers/have_xpath_spec.rb +2 -2
  80. data/spec/rcov.opts +1 -0
  81. data/spec/spec.opts +2 -0
  82. data/spec/spec_helper.rb +3 -1
  83. metadata +172 -19
  84. data/lib/webrat/rack_test.rb +0 -32
  85. data/spec/integration/rack/rack_app.rb +0 -16
  86. data/spec/integration/rack/test/test_helper.rb +0 -20
  87. data/spec/private/core/logging_spec.rb +0 -10
@@ -1,12 +1,15 @@
1
1
  module Webrat #:nodoc:
2
- def self.session_class #:nodoc:
3
- TestSession
2
+ def self.adapter_class #:nodoc:
3
+ TestAdapter
4
4
  end
5
5
 
6
- class TestSession < Session #:nodoc:
6
+ class TestAdapter #:nodoc:
7
7
  attr_accessor :response_body
8
8
  attr_writer :response_code
9
9
 
10
+ def initialize(*args)
11
+ end
12
+
10
13
  def doc_root
11
14
  File.expand_path(File.join(".", "public"))
12
15
  end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'spec/rake/spectask'
3
+
4
+ Spec::Rake::SpecTask.new do |t|
5
+ t.spec_opts = ['--color']
6
+ t.spec_files = FileList['spec/**/*_spec.rb']
7
+ end
@@ -0,0 +1,2 @@
1
+ require "sample_app"
2
+ run SampleApp
@@ -0,0 +1,20 @@
1
+ require "rubygems"
2
+ require "sinatra/base"
3
+
4
+ class SampleApp < Sinatra::Default
5
+ get "/" do
6
+ "Hello World"
7
+ end
8
+
9
+ get "/internal_redirect" do
10
+ redirect URI.join(request.url, "redirected").to_s
11
+ end
12
+
13
+ get "/external_redirect" do
14
+ redirect "http://example.tst/"
15
+ end
16
+
17
+ get "/redirected" do
18
+ "Redirected"
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe "Webrat's Mechanize mode" do
4
+ it "should work" do
5
+ response = visit("http://localhost:9292/")
6
+ response.should contain("Hello World")
7
+ end
8
+
9
+ it "should follow redirects" do
10
+ response = visit("http://localhost:9292/internal_redirect")
11
+ response.should contain("Redirected")
12
+ end
13
+
14
+ it "should follow links"
15
+ it "should submit forms"
16
+ it "should not follow external redirects" do
17
+ pending do
18
+ response = visit("http://localhost:9292/external_redirect")
19
+ response.should contain("Foo")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ require "rubygems"
2
+ require "spec"
3
+
4
+ $LOAD_PATH.unshift File.dirname(__FILE__) + "/../../../../lib"
5
+ require "webrat"
6
+
7
+ Webrat.configure do |config|
8
+ config.mode = :mechanize
9
+ end
10
+
11
+ Spec::Runner.configure do |config|
12
+ config.include Webrat::Methods
13
+ config.include Webrat::Matchers
14
+
15
+ config.before :suite do
16
+ if File.exists?("rack.pid")
17
+ Process.kill("TERM", File.read("rack.pid").to_i)
18
+ end
19
+
20
+ system "rackup --daemonize --pid rack.pid config.ru"
21
+ end
22
+
23
+ config.after :suite do
24
+ Process.kill("TERM", File.read("rack.pid").to_i)
25
+ end
26
+ end
27
+
@@ -0,0 +1,21 @@
1
+ .DS_Store
2
+ log/*
3
+ tmp/*
4
+ TAGS
5
+ *~
6
+ .#*
7
+ schema/schema.rb
8
+ schema/*_structure.sql
9
+ schema/*.sqlite3
10
+ schema/*.sqlite
11
+ schema/*.db
12
+ *.sqlite
13
+ *.sqlite3
14
+ *.db
15
+ src/*
16
+ .hgignore
17
+ .hg/*
18
+ .svn/*
19
+ gems/gems/*
20
+ gems/specifications/*
21
+ merb_profile_results
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'rake/rdoctask'
3
+
4
+ require 'merb-core'
5
+ require 'merb-core/tasks/merb'
6
+
7
+ include FileUtils
8
+
9
+ # Load the basic runtime dependencies; this will include
10
+ # any plugins and therefore plugin rake tasks.
11
+ init_env = ENV['MERB_ENV'] || 'rake'
12
+ Merb.load_dependencies(:environment => init_env)
13
+
14
+ # Get Merb plugins and dependencies
15
+ Merb::Plugins.rakefiles.each { |r| require r }
16
+
17
+ # Load any app level custom rakefile extensions from lib/tasks
18
+ tasks_path = File.join(File.dirname(__FILE__), "lib", "tasks")
19
+ rake_files = Dir["#{tasks_path}/*.rake"]
20
+ rake_files.each{|rake_file| load rake_file }
21
+
22
+ desc "Start runner environment"
23
+ task :merb_env do
24
+ Merb.start_environment(:environment => init_env, :adapter => 'runner')
25
+ end
26
+
27
+ require 'spec/rake/spectask'
28
+ require 'merb-core/test/tasks/spectasks'
29
+ desc 'Default: run spec examples'
30
+ task :default => 'spec'
31
+
32
+ ##############################################################################
33
+ # ADD YOUR CUSTOM TASKS IN /lib/tasks
34
+ # NAME YOUR RAKE FILES file_name.rake
35
+ ##############################################################################
@@ -0,0 +1,63 @@
1
+ <div id="container">
2
+ <div id="header-container">
3
+ <img src="/images/merb.jpg" />
4
+ <!-- <h1>Mongrel + Erb</h1> -->
5
+ <h2>pocket rocket web framework</h2>
6
+ <hr />
7
+ </div>
8
+
9
+ <div id="left-container">
10
+ <h3>Exception:</h3>
11
+ <p><%= request.exceptions.first.message %></p>
12
+ </div>
13
+
14
+ <div id="main-container">
15
+ <h3>Why am I seeing this page?</h3>
16
+ <p>Merb couldn't find an appropriate content_type to return,
17
+ based on what you said was available via provides() and
18
+ what the client requested.</p>
19
+
20
+ <h3>How to add a mime-type</h3>
21
+ <pre><code>
22
+ Merb.add_mime_type :pdf, :to_pdf, %w[application/pdf], &quot;Content-Encoding&quot; =&gt; &quot;gzip&quot;
23
+ </code></pre>
24
+ <h3>What this means is:</h3>
25
+ <ul>
26
+ <li>Add a mime-type for :pdf</li>
27
+ <li>Register the method for converting objects to PDF as <code>#to_pdf</code>.</li>
28
+ <li>Register the incoming mime-type "Accept" header as <code>application/pdf</code>.</li>
29
+ <li>Specify a new header for PDF types so it will set <code>Content-Encoding</code> to gzip.</li>
30
+ </ul>
31
+
32
+ <h3>You can then do:</h3>
33
+ <pre><code>
34
+ class Foo &lt; Application
35
+ provides :pdf
36
+ end
37
+ </code></pre>
38
+
39
+ <h3>Where can I find help?</h3>
40
+ <p>If you have any questions or if you can't figure something out, please take a
41
+ look at our <a href="http://merbivore.com/"> project page</a>,
42
+ feel free to come chat at irc.freenode.net, channel #merb,
43
+ or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
44
+ on Google Groups.</p>
45
+
46
+ <h3>What if I've found a bug?</h3>
47
+ <p>If you want to file a bug or make your own contribution to Merb,
48
+ feel free to register and create a ticket at our
49
+ <a href="http://merb.lighthouseapp.com/">project development page</a>
50
+ on Lighthouse.</p>
51
+
52
+ <h3>How do I edit this page?</h3>
53
+ <p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_acceptable.html.erb</tt>.</p>
54
+
55
+ </div>
56
+
57
+ <div id="footer-container">
58
+ <hr />
59
+ <div class="left"></div>
60
+ <div class="right">&copy; 2008 the merb dev team</div>
61
+ <p>&nbsp;</p>
62
+ </div>
63
+ </div>
@@ -0,0 +1,47 @@
1
+ <div id="container">
2
+ <div id="header-container">
3
+ <img src="/images/merb.jpg" />
4
+ <!-- <h1>Mongrel + Erb</h1> -->
5
+ <h2>pocket rocket web framework</h2>
6
+ <hr />
7
+ </div>
8
+
9
+ <div id="left-container">
10
+ <h3>Exception:</h3>
11
+ <p><%= request.exceptions.first.message %></p>
12
+ </div>
13
+
14
+ <div id="main-container">
15
+ <h3>Welcome to Merb!</h3>
16
+ <p>Merb is a light-weight MVC framework written in Ruby. We hope you enjoy it.</p>
17
+
18
+ <h3>Where can I find help?</h3>
19
+ <p>If you have any questions or if you can't figure something out, please take a
20
+ look at our <a href="http://merbivore.com/"> project page</a>,
21
+ feel free to come chat at irc.freenode.net, channel #merb,
22
+ or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
23
+ on Google Groups.</p>
24
+
25
+ <h3>What if I've found a bug?</h3>
26
+ <p>If you want to file a bug or make your own contribution to Merb,
27
+ feel free to register and create a ticket at our
28
+ <a href="http://merb.lighthouseapp.com/">project development page</a>
29
+ on Lighthouse.</p>
30
+
31
+ <h3>How do I edit this page?</h3>
32
+ <p>You're seeing this page because you need to edit the following files:
33
+ <ul>
34
+ <li>config/router.rb <strong><em>(recommended)</em></strong></li>
35
+ <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
36
+ <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
37
+ </ul>
38
+ </p>
39
+ </div>
40
+
41
+ <div id="footer-container">
42
+ <hr />
43
+ <div class="left"></div>
44
+ <div class="right">&copy; 2008 the merb dev team</div>
45
+ <p>&nbsp;</p>
46
+ </div>
47
+ </div>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
3
+ <head>
4
+ <title>Fresh Merb App</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8" />
7
+ </head>
8
+ <body>
9
+ <%#= message[:notice] %>
10
+ <%= catch_content :for_layout %>
11
+ </body>
12
+ </html>
@@ -0,0 +1,27 @@
1
+ <h1>Webrat Form</h1>
2
+
3
+ <form action="/testing/submit_form" method="post">
4
+ <label>
5
+ Text field
6
+ <input type="text" name="text_field" />
7
+ </label>
8
+
9
+ <label>
10
+ TOS <input type="checkbox" name="tos" />
11
+ </label>
12
+
13
+ <label>
14
+ Prefilled
15
+ <input type="text" name="prefilled" value="text" />
16
+ </label>
17
+
18
+ <label>
19
+ Month
20
+ <select name="month">
21
+ <option>None</option>
22
+ <option>January</option>
23
+ </select>
24
+ </label>
25
+
26
+ <input type="submit" value="Test">
27
+ </form>
@@ -0,0 +1,9 @@
1
+ <h1>Webrat Form</h1>
2
+
3
+ <form action="/upload" method="post">
4
+ <label>
5
+ File
6
+ <input type="file" name="uploaded_file" />
7
+ </label>
8
+ <input type="submit" value="Upload">
9
+ </form>
@@ -0,0 +1 @@
1
+ --color
@@ -1,5 +1,7 @@
1
1
  require "rubygems"
2
2
 
3
+ $LOAD_PATH.unshift File.dirname(__FILE__) + "/../../../../lib"
4
+
3
5
  # Add the local gems dir if found within the app root; any dependencies loaded
4
6
  # hereafter will try to load from the local gems before loading system gems.
5
7
  if (local_gem_dir = File.join(File.dirname(__FILE__), '..', 'gems')) && $BUNDLE.nil?
@@ -0,0 +1,150 @@
1
+ require "rubygems"
2
+ require "rubygems/source_index"
3
+ require "rubygems/dependency_installer"
4
+ require "rubygems/uninstaller"
5
+ require "fileutils"
6
+ require File.join(File.dirname(__FILE__), "utils")
7
+ require File.join(File.dirname(__FILE__), "gem_ext")
8
+ require File.join(File.dirname(__FILE__), "ops")
9
+
10
+ $INSTALLING = []
11
+
12
+ module Merb
13
+
14
+ class Gem < Thor
15
+ extend ColorfulMessages
16
+
17
+ def initialize
18
+ dirs = [Dir.pwd, File.dirname(__FILE__) / ".."]
19
+ root = dirs.find {|d| File.file?(d / "config" / "dependencies.rb")}
20
+
21
+ if root
22
+ @depsrb = root / "config" / "dependencies.rb"
23
+ else
24
+ self.class.error "dependencies.rb was not found"
25
+ exit!
26
+ end
27
+
28
+ FileUtils.mkdir_p(Dir.pwd / "gems")
29
+
30
+ @list = Collector.collect(File.read(@depsrb))
31
+ @idx = ::Gem::SourceIndex.new.load_gems_in("gems/specifications")
32
+ end
33
+
34
+ def list
35
+ require "pp"
36
+ pp @list
37
+ end
38
+
39
+ desc "redeploy", "Syncs up gems/cache with gems/gems. All gems in the cache " \
40
+ "that are not already installed will be installed from the " \
41
+ "cache. All installed gems that are not in the cache will " \
42
+ "be uninstalled."
43
+ def redeploy
44
+ gem_dir = Dir.pwd / "gems" / "gems"
45
+ cache_dir = Dir.pwd / "gems" / "cache"
46
+
47
+ gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
48
+ cache = Dir[cache_dir / "*.gem"].map! {|n| File.basename(n, ".gem")}
49
+ new_gems = cache - gems
50
+ outdated = gems - cache
51
+ idx = ::Gem::SourceIndex.new
52
+ idx.load_gems_in(Dir.pwd / "gems" / "specifications")
53
+
54
+ new_gems.each do |g|
55
+ installer = ::Gem::Installer.new(cache_dir / "#{g}.gem",
56
+ :bin_dir => Dir.pwd / "bin",
57
+ :install_dir => Dir.pwd / "gems",
58
+ :ignore_dependencies => true,
59
+ :user_install => false,
60
+ :wrappers => true,
61
+ :source_index => idx)
62
+
63
+ installer.install
64
+ end
65
+
66
+ outdated.each do |g|
67
+ /(.*)\-(.*)/ =~ g
68
+ name, version = $1, $2
69
+ uninstaller = ::Gem::Uninstaller.new(name,
70
+ :version => version,
71
+ :bin_dir => Dir.pwd / "bin",
72
+ :install_dir => Dir.pwd / "gems",
73
+ :ignore => true,
74
+ :executables => true
75
+ )
76
+ uninstaller.uninstall
77
+ end
78
+ end
79
+
80
+ desc "confirm", "Confirm the current setup. merb:gem:install will " \
81
+ "automatically run this task before committing the " \
82
+ "changes it makes."
83
+ def confirm(gems = @list)
84
+ ::Gem.path.replace([Dir.pwd / "gems"])
85
+ ::Gem.source_index.load_gems_in(Dir.pwd / "gems" / "specifications")
86
+
87
+ self.class.info "Confirming configuration..."
88
+
89
+ ::Gem.loaded_specs.clear
90
+
91
+ begin
92
+ gems.each do |name, versions|
93
+ versions ||= []
94
+ ::Gem.activate name, *versions
95
+ end
96
+ rescue ::Gem::LoadError => e
97
+ self.class.error "Configuration could not be confirmed: #{e.message}"
98
+ self.class.rollback_trans
99
+ end
100
+ self.class.info "Confirmed"
101
+ end
102
+
103
+ desc 'install', 'Sync up your bundled gems with the list in config/dependencies.rb'
104
+ def install(*gems)
105
+ if gems.empty?
106
+ gems = @list
107
+ else
108
+ gems = gems.map {|desc| name, *versions = desc.split(" ") }
109
+ end
110
+
111
+ $GEMS = gems
112
+
113
+ self.class.begin_trans
114
+
115
+ gems.each do |name, versions|
116
+ dep = ::Gem::Dependency.new(name, versions || [])
117
+ unless @idx.search(dep).empty?
118
+ next
119
+ end
120
+
121
+ rescue_failures do
122
+ $INSTALLING = []
123
+ _install(dep)
124
+ end
125
+ end
126
+
127
+ gem_dir = Dir.pwd / "gems" / "gems"
128
+ installed_gems = Dir[gem_dir / "*"].map! {|n| File.basename(n)}
129
+
130
+ list = full_list.map {|x| x.full_name}.compact
131
+
132
+ (installed_gems - list).each do |g|
133
+ /^(.*)\-(.*)$/ =~ g
134
+ name, version = $1, $2
135
+ uninstaller = ::Gem::Uninstaller.new(name,
136
+ :version => version,
137
+ :bin_dir => (Dir.pwd / "bin").to_s,
138
+ :install_dir => (Dir.pwd / "gems").to_s,
139
+ :ignore => true,
140
+ :executables => true
141
+ )
142
+ uninstaller.uninstall
143
+ end
144
+
145
+ confirm(gems)
146
+
147
+ self.class.commit_trans
148
+ end
149
+ end
150
+ end