capybara-facebook 0.1.0
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 +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.md +44 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/capybara-facebook.gemspec +76 -0
- data/config.ru +6 -0
- data/lib/capybara-facebook.rb +2 -0
- data/lib/capybara-facebook/cucumber.rb +5 -0
- data/lib/capybara-facebook/driver/base.rb +7 -0
- data/lib/capybara-facebook/driver/facebook_driver.rb +29 -0
- data/lib/capybara-facebook/session.rb +20 -0
- data/spec/driver/facebook_driver_spec.rb +43 -0
- data/spec/drivers_spec.rb +128 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/test_app.rb +71 -0
- data/spec/views/buttons.erb +4 -0
- data/spec/views/fieldsets.erb +29 -0
- data/spec/views/form.erb +227 -0
- data/spec/views/postback.erb +13 -0
- data/spec/views/tables.erb +122 -0
- data/spec/views/with_html.erb +38 -0
- data/spec/views/with_js.erb +39 -0
- data/spec/views/with_scope.erb +36 -0
- data/spec/views/with_simple_html.erb +1 -0
- metadata +119 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Mathieu Fosse
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# capybara-facebook
|
2
|
+
|
3
|
+
capybara-facebook is a Facebook Driver for Capybara. It aims to easily test a Facebook application in your integration tests.
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
|
9
|
+
$ [sudo] gem install capybara-facebook
|
10
|
+
|
11
|
+
|
12
|
+
## How to use it with Cucumber ?
|
13
|
+
|
14
|
+
Add these lines on your `features/support/env.rb` file :
|
15
|
+
|
16
|
+
require 'capybara-facebook'
|
17
|
+
require 'capybara-facebook/cucumber'
|
18
|
+
|
19
|
+
Important, if you use Cucumber with Rails you must require `capybara/rails` after the lines above.
|
20
|
+
|
21
|
+
For more information see [http://github.com/jnicklas/capybara](http://github.com/jnicklas/capybara)
|
22
|
+
|
23
|
+
Capybara Facebook added the method `facecebook_parameters!` to manage the facebook parameters sent with request.
|
24
|
+
|
25
|
+
For instance you can add a Cucumber step like this one :
|
26
|
+
|
27
|
+
Given /^I am logged in with Facebook uid "(\d+)"$/ do |facebook_uid|
|
28
|
+
facebook_parameters!({ "fb_sig_user" => facebook_uid })
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
## Note on Patches/Pull Requests
|
33
|
+
|
34
|
+
* Fork the project.
|
35
|
+
* Make your feature addition or bug fix.
|
36
|
+
* Add tests for it. This is important so I don't break it in a
|
37
|
+
future version unintentionally.
|
38
|
+
* Commit, do not mess with rakefile, version, or history.
|
39
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
40
|
+
* Send me a pull request. Bonus points for topic branches.
|
41
|
+
|
42
|
+
## Copyright
|
43
|
+
|
44
|
+
Copyright (c) 2010 Mathieu Fosse. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "capybara-facebook"
|
8
|
+
gem.summary = %Q{Facebook Driver for Capybara}
|
9
|
+
gem.description = %Q{Facebook Driver for Capybara}
|
10
|
+
gem.email = "mathieu@tigerlilyapps.com"
|
11
|
+
gem.homepage = "http://github.com/tigerlily/capybara-facebook"
|
12
|
+
gem.authors = ["Mathieu Fosse"]
|
13
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
+
gem.add_dependency "capybara", ">= 0.3.5"
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'spec/rake/spectask'
|
22
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
23
|
+
spec.libs << 'lib' << 'spec'
|
24
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
25
|
+
end
|
26
|
+
|
27
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
28
|
+
spec.libs << 'lib' << 'spec'
|
29
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
30
|
+
spec.rcov = true
|
31
|
+
end
|
32
|
+
|
33
|
+
task :spec => :check_dependencies
|
34
|
+
|
35
|
+
|
36
|
+
task :default => :spec
|
37
|
+
|
38
|
+
require 'rake/rdoctask'
|
39
|
+
Rake::RDocTask.new do |rdoc|
|
40
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
41
|
+
|
42
|
+
rdoc.rdoc_dir = 'rdoc'
|
43
|
+
rdoc.title = "capybara-facebook #{version}"
|
44
|
+
rdoc.rdoc_files.include('README*')
|
45
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{capybara-facebook}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Mathieu Fosse"]
|
12
|
+
s.date = %q{2010-03-27}
|
13
|
+
s.description = %q{Facebook Driver for Capybara}
|
14
|
+
s.email = %q{mathieu@tigerlilyapps.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"capybara-facebook.gemspec",
|
27
|
+
"config.ru",
|
28
|
+
"lib/capybara-facebook.rb",
|
29
|
+
"lib/capybara-facebook/cucumber.rb",
|
30
|
+
"lib/capybara-facebook/driver/base.rb",
|
31
|
+
"lib/capybara-facebook/driver/facebook_driver.rb",
|
32
|
+
"lib/capybara-facebook/session.rb",
|
33
|
+
"spec/driver/facebook_driver_spec.rb",
|
34
|
+
"spec/drivers_spec.rb",
|
35
|
+
"spec/spec.opts",
|
36
|
+
"spec/spec_helper.rb",
|
37
|
+
"spec/test_app.rb",
|
38
|
+
"spec/views/buttons.erb",
|
39
|
+
"spec/views/fieldsets.erb",
|
40
|
+
"spec/views/form.erb",
|
41
|
+
"spec/views/postback.erb",
|
42
|
+
"spec/views/tables.erb",
|
43
|
+
"spec/views/with_html.erb",
|
44
|
+
"spec/views/with_js.erb",
|
45
|
+
"spec/views/with_scope.erb",
|
46
|
+
"spec/views/with_simple_html.erb"
|
47
|
+
]
|
48
|
+
s.homepage = %q{http://github.com/tigerlily/capybara-facebook}
|
49
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
50
|
+
s.require_paths = ["lib"]
|
51
|
+
s.rubygems_version = %q{1.3.6}
|
52
|
+
s.summary = %q{Facebook Driver for Capybara}
|
53
|
+
s.test_files = [
|
54
|
+
"spec/driver/facebook_driver_spec.rb",
|
55
|
+
"spec/drivers_spec.rb",
|
56
|
+
"spec/spec_helper.rb",
|
57
|
+
"spec/test_app.rb"
|
58
|
+
]
|
59
|
+
|
60
|
+
if s.respond_to? :specification_version then
|
61
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
62
|
+
s.specification_version = 3
|
63
|
+
|
64
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
65
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
66
|
+
s.add_runtime_dependency(%q<capybara>, [">= 0.3.5"])
|
67
|
+
else
|
68
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
69
|
+
s.add_dependency(%q<capybara>, [">= 0.3.5"])
|
70
|
+
end
|
71
|
+
else
|
72
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
73
|
+
s.add_dependency(%q<capybara>, [">= 0.3.5"])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
data/config.ru
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'capybara-facebook/driver/base'
|
2
|
+
require 'capybara/driver/rack_test_driver'
|
3
|
+
|
4
|
+
class Capybara::Driver::Facebook < Capybara::Driver::RackTest
|
5
|
+
|
6
|
+
def visit(path, attributes = {})
|
7
|
+
return if path.gsub(/^#{current_path}/, '') =~ /^#/
|
8
|
+
get(path, facebook_default_params.merge(attributes), env)
|
9
|
+
follow_redirects!
|
10
|
+
cache_body
|
11
|
+
end
|
12
|
+
|
13
|
+
def facebook_parameters!(params={})
|
14
|
+
facebook_default_params.merge!(params)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def facebook_default_params
|
19
|
+
@facebook_default_params ||= {
|
20
|
+
"fb_sig_added" => "1",
|
21
|
+
"fb_sig_session_key" => "facebook_session_key",
|
22
|
+
"fb_sig_user" => "1234",
|
23
|
+
"fb_sig_expires" => "0",
|
24
|
+
"fb_sig_in_canvas" => "1",
|
25
|
+
"fb_sig_time" => Time.now.to_f
|
26
|
+
}
|
27
|
+
@facebook_default_params
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'capybara/session'
|
2
|
+
require 'capybara-facebook/driver/facebook_driver'
|
3
|
+
|
4
|
+
Capybara::Session::DSL_METHODS << :facebook_parameters!
|
5
|
+
|
6
|
+
Capybara::Session.class_eval do
|
7
|
+
def driver_with_facebook
|
8
|
+
@driver ||= Capybara::Driver::Facebook.new(app) if mode == :facebook
|
9
|
+
driver_without_facebook
|
10
|
+
end
|
11
|
+
|
12
|
+
alias_method :driver_without_facebook, :driver
|
13
|
+
alias_method :driver, :driver_with_facebook
|
14
|
+
|
15
|
+
def facebook_parameters!(params)
|
16
|
+
driver.facebook_parameters!(params)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe Capybara::Driver::Facebook do
|
4
|
+
before do
|
5
|
+
@driver = Capybara::Driver::Facebook.new(TestApp)
|
6
|
+
end
|
7
|
+
|
8
|
+
it_should_behave_like "driver"
|
9
|
+
it_should_behave_like "driver with header support"
|
10
|
+
|
11
|
+
|
12
|
+
describe "Facebook parameters" do
|
13
|
+
before do
|
14
|
+
@default_keys = %w(fb_sig_added fb_sig_session_key fb_sig_user fb_sig_expires fb_sig_in_canvas fb_sig_time)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have Facebook default params" do
|
18
|
+
@driver.visit('/')
|
19
|
+
@driver.last_request.env["rack.request.query_hash"].should include(*@default_keys)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be able to add a param to Facebook default params" do
|
23
|
+
@driver.facebook_parameters!({ :fb_sig_is_fan => "1" })
|
24
|
+
@driver.visit('/')
|
25
|
+
query_hash = @driver.last_request.env["rack.request.query_hash"]
|
26
|
+
query_hash.should have_key("fb_sig_is_fan")
|
27
|
+
query_hash["fb_sig_is_fan"].should == "1"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to change a Facebook default param value" do
|
31
|
+
@driver.facebook_parameters!({ :fb_sig_in_canvas => "0" })
|
32
|
+
@driver.visit('/')
|
33
|
+
|
34
|
+
@driver.last_request.env["rack.request.query_hash"].should include(*@default_keys)
|
35
|
+
|
36
|
+
query_hash = @driver.last_request.env["rack.request.query_hash"]
|
37
|
+
query_hash.should have_key("fb_sig_in_canvas")
|
38
|
+
query_hash["fb_sig_in_canvas"].should == "0"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
+
require 'capybara/wait_until'
|
3
|
+
|
4
|
+
shared_examples_for 'driver' do
|
5
|
+
|
6
|
+
describe '#visit' do
|
7
|
+
it "should move to another page" do
|
8
|
+
@driver.visit('/')
|
9
|
+
@driver.body.should include('Hello world!')
|
10
|
+
@driver.visit('/foo')
|
11
|
+
@driver.body.should include('Another World')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should show the correct URL" do
|
15
|
+
@driver.visit('/foo')
|
16
|
+
@driver.current_url.should include('/foo')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#body' do
|
21
|
+
it "should return text reponses" do
|
22
|
+
@driver.visit('/')
|
23
|
+
@driver.body.should include('Hello world!')
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return the full response html" do
|
27
|
+
@driver.visit('/with_simple_html')
|
28
|
+
@driver.body.should include('Bar')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#find' do
|
33
|
+
context "with xpath selector" do
|
34
|
+
before do
|
35
|
+
@driver.visit('/with_html')
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should extract node texts" do
|
39
|
+
@driver.find('//a')[0].text.should == 'labore'
|
40
|
+
@driver.find('//a')[1].text.should == 'ullamco'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should extract node attributes" do
|
44
|
+
@driver.find('//a')[0][:href].should == '/with_simple_html'
|
45
|
+
@driver.find('//a')[0][:class].should == 'simple'
|
46
|
+
@driver.find('//a')[1][:href].should == '/foo'
|
47
|
+
@driver.find('//a')[1][:id].should == 'foo'
|
48
|
+
@driver.find('//a')[1][:rel].should be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should extract boolean node attributes" do
|
52
|
+
@driver.find('//input[@id="checked_field"]')[0][:checked].should be_true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should allow assignment of field value" do
|
56
|
+
@driver.find('//input').first.value.should == 'monkey'
|
57
|
+
@driver.find('//input').first.set('gorilla')
|
58
|
+
@driver.find('//input').first.value.should == 'gorilla'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should extract node tag name" do
|
62
|
+
@driver.find('//a')[0].tag_name.should == 'a'
|
63
|
+
@driver.find('//a')[1].tag_name.should == 'a'
|
64
|
+
@driver.find('//p')[1].tag_name.should == 'p'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should extract node visibility" do
|
68
|
+
@driver.find('//a')[0].should be_visible
|
69
|
+
|
70
|
+
@driver.find('//div[@id="hidden"]')[0].should_not be_visible
|
71
|
+
@driver.find('//div[@id="hidden_via_ancestor"]')[0].should_not be_visible
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "node relative searching" do
|
77
|
+
before do
|
78
|
+
@driver.visit('/tables')
|
79
|
+
@node = @driver.find('//body').first
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should be able to navigate/search child node" do
|
83
|
+
@node.all('//table').size.should == 5
|
84
|
+
@node.find('//form').all('.//table').size.should == 1
|
85
|
+
@node.find('//form').find('.//table//caption').text.should == 'Agent'
|
86
|
+
if @driver.class == Capybara::Driver::Selenium
|
87
|
+
pending("Selenium gets this wrong, see http://code.google.com/p/selenium/issues/detail?id=403") do
|
88
|
+
@node.find('//form').all('//table').size.should == 5
|
89
|
+
end
|
90
|
+
else
|
91
|
+
@node.find('//form').all('//table').size.should == 5
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
shared_examples_for "driver with javascript support" do
|
99
|
+
before { @driver.visit('/with_js') }
|
100
|
+
|
101
|
+
describe '#find' do
|
102
|
+
it "should find dynamically changed nodes" do
|
103
|
+
@driver.find('//p').first.text.should == 'I changed it'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#drag_to' do
|
108
|
+
it "should drag and drop an object" do
|
109
|
+
draggable = @driver.find('//div[@id="drag"]').first
|
110
|
+
droppable = @driver.find('//div[@id="drop"]').first
|
111
|
+
draggable.drag_to(droppable)
|
112
|
+
@driver.find('//div[contains(., "Dropped!")]').should_not be_nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#evaluate_script" do
|
117
|
+
it "should return the value of the executed script" do
|
118
|
+
@driver.evaluate_script('1+1').should == 2
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
shared_examples_for "driver with header support" do
|
124
|
+
it "should make headers available through response_headers" do
|
125
|
+
@driver.visit('/with_simple_html')
|
126
|
+
@driver.response_headers['Content-Type'].should == 'text/html'
|
127
|
+
end
|
128
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'capybara'
|
6
|
+
require 'capybara-facebook'
|
7
|
+
require 'spec'
|
8
|
+
require 'spec/autorun'
|
9
|
+
require 'test_app'
|
10
|
+
require 'drivers_spec'
|
11
|
+
|
12
|
+
Capybara.default_wait_time = 0 # less timeout so tests run faster
|
13
|
+
|
14
|
+
Spec::Runner.configure do |config|
|
15
|
+
config.after do
|
16
|
+
Capybara.default_selector = :xpath
|
17
|
+
end
|
18
|
+
end
|
data/spec/test_app.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'rack'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
class TestApp < Sinatra::Base
|
6
|
+
set :root, File.dirname(__FILE__)
|
7
|
+
set :static, true
|
8
|
+
|
9
|
+
get '/' do
|
10
|
+
'Hello world!'
|
11
|
+
end
|
12
|
+
|
13
|
+
get '/foo' do
|
14
|
+
'Another World'
|
15
|
+
end
|
16
|
+
|
17
|
+
get '/redirect' do
|
18
|
+
redirect '/redirect_again'
|
19
|
+
end
|
20
|
+
|
21
|
+
get '/redirect_again' do
|
22
|
+
redirect '/landed'
|
23
|
+
end
|
24
|
+
|
25
|
+
get '/landed' do
|
26
|
+
"You landed"
|
27
|
+
end
|
28
|
+
|
29
|
+
get '/with-quotes' do
|
30
|
+
%q{"No," he said, "you can't do that."}
|
31
|
+
end
|
32
|
+
|
33
|
+
get '/form/get' do
|
34
|
+
'<pre id="results">' + params[:form].to_yaml + '</pre>'
|
35
|
+
end
|
36
|
+
|
37
|
+
get '/favicon.ico' do
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
post '/redirect' do
|
42
|
+
redirect '/redirect_again'
|
43
|
+
end
|
44
|
+
|
45
|
+
get '/redirect_back' do
|
46
|
+
redirect back
|
47
|
+
end
|
48
|
+
|
49
|
+
get '/:view' do |view|
|
50
|
+
erb view.to_sym
|
51
|
+
end
|
52
|
+
|
53
|
+
post '/form' do
|
54
|
+
'<pre id="results">' + params[:form].to_yaml + '</pre>'
|
55
|
+
end
|
56
|
+
|
57
|
+
post '/upload' do
|
58
|
+
begin
|
59
|
+
buffer = []
|
60
|
+
buffer << "Content-type: #{params[:form][:document][:type]}"
|
61
|
+
buffer << "File content: #{params[:form][:document][:tempfile].read}"
|
62
|
+
buffer.join(' | ')
|
63
|
+
rescue
|
64
|
+
'No file uploaded'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if __FILE__ == $0
|
70
|
+
Rack::Handler::Mongrel.run TestApp, :Port => 8070
|
71
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<form action="/form" method="post">
|
2
|
+
<fieldset id="agent_fieldset">
|
3
|
+
<legend>Agent</legend>
|
4
|
+
|
5
|
+
<p>
|
6
|
+
<label for="form_agent_name">Name</label>
|
7
|
+
<input type="text" name="form[agent_name]" value="James" id="form_agent_name"/>
|
8
|
+
</p>
|
9
|
+
|
10
|
+
<p>
|
11
|
+
<input type="submit" value="Create"/>
|
12
|
+
</p>
|
13
|
+
</fieldset>
|
14
|
+
</form>
|
15
|
+
|
16
|
+
<form action="/form" method="post">
|
17
|
+
<fieldset id="villain_fieldset">
|
18
|
+
<legend>Villain</legend>
|
19
|
+
|
20
|
+
<p>
|
21
|
+
<label for="form_villain_name">Name</label>
|
22
|
+
<input type="text" name="form[villain_name]" value="Ernst" id="form_villain_name"/>
|
23
|
+
</p>
|
24
|
+
|
25
|
+
<p>
|
26
|
+
<input type="submit" value="Create"/>
|
27
|
+
</p>
|
28
|
+
</fieldset>
|
29
|
+
</form>
|
data/spec/views/form.erb
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
<h1>Form</h1>
|
2
|
+
|
3
|
+
<form action="/form" method="post">
|
4
|
+
|
5
|
+
<p>
|
6
|
+
<label for="form_title">Title</label>
|
7
|
+
<select name="form[title]" id="form_title">
|
8
|
+
<option>Mrs</option>
|
9
|
+
<option>Mr</option>
|
10
|
+
<option>Miss</option>
|
11
|
+
</select>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<p>
|
15
|
+
<label for="form_first_name">
|
16
|
+
First Name
|
17
|
+
<input type="text" name="form[first_name]" value="John" id="form_first_name"/>
|
18
|
+
</label>
|
19
|
+
</p>
|
20
|
+
|
21
|
+
<p>
|
22
|
+
<label for="form_last_name">Last Name</label>
|
23
|
+
<input type="text" name="form[last_name]" value="Smith" id="form_last_name"/>
|
24
|
+
</p>
|
25
|
+
|
26
|
+
<p>
|
27
|
+
<label for="form_name_explanation">Explanation of Name</label>
|
28
|
+
<textarea name="form[name_explanation]" id="form_name_explanation"></textarea>
|
29
|
+
</p>
|
30
|
+
|
31
|
+
<p>
|
32
|
+
<label for="form_name">Name</label>
|
33
|
+
<input type="text" name="form[name]" value="John Smith" id="form_name"/>
|
34
|
+
</p>
|
35
|
+
|
36
|
+
<p>
|
37
|
+
<label>Street<br/>
|
38
|
+
<input type="text" name="form[street]" value="Sesame street 66"/>
|
39
|
+
</label>
|
40
|
+
</p>
|
41
|
+
|
42
|
+
<p>
|
43
|
+
<label for="form_phone">Phone</label>
|
44
|
+
<input type="text" name="form[phone]" value="+1 555 7021" id="form_phone"/>
|
45
|
+
</p>
|
46
|
+
|
47
|
+
<p>
|
48
|
+
<label for="form_password">Password</label>
|
49
|
+
<input type="password" name="form[password]" value="seeekrit" id="form_password"/>
|
50
|
+
</p>
|
51
|
+
|
52
|
+
<p>
|
53
|
+
<label for="form_terms_of_use">Terms of Use</label>
|
54
|
+
<input type="hidden" name="form[terms_of_use]" value="0" id="form_terms_of_use_default">
|
55
|
+
<input type="checkbox" name="form[terms_of_use]" value="1" id="form_terms_of_use">
|
56
|
+
</p>
|
57
|
+
|
58
|
+
<p>
|
59
|
+
<label for="form_image">Image</label>
|
60
|
+
<input type="file" name="form[image]" id="form_image"/>
|
61
|
+
</p>
|
62
|
+
|
63
|
+
<p>
|
64
|
+
<input type="hidden" name="form[token]" value="12345" id="form_token"/>
|
65
|
+
</p>
|
66
|
+
|
67
|
+
<p>
|
68
|
+
<label for="form_locale">Locale</label>
|
69
|
+
<select name="form[locale]" id="form_locale">
|
70
|
+
<option value="sv">Swedish</option>
|
71
|
+
<option selected="selected" value="en">English</option>
|
72
|
+
<option value="fi">Finish</option>
|
73
|
+
<option value="no">Norwegian</option>
|
74
|
+
</select>
|
75
|
+
</p>
|
76
|
+
|
77
|
+
<p>
|
78
|
+
<label for="form_region">Region</label>
|
79
|
+
<select name="form[region]" id="form_region">
|
80
|
+
<option>Sweden</option>
|
81
|
+
<option selected="selected">Norway</option>
|
82
|
+
<option>Finland</option>
|
83
|
+
</select>
|
84
|
+
</p>
|
85
|
+
|
86
|
+
<p>
|
87
|
+
<label for="form_city">City</label>
|
88
|
+
<select name="form[city]" id="form_city">
|
89
|
+
<option>London</option>
|
90
|
+
<option>Stockholm</option>
|
91
|
+
<option>Paris</option>
|
92
|
+
</select>
|
93
|
+
</p>
|
94
|
+
|
95
|
+
<p>
|
96
|
+
<label for="form_tendency">Tendency</label>
|
97
|
+
<select name="form[tendency]" id="form_tendency"></select>
|
98
|
+
</p>
|
99
|
+
|
100
|
+
<p>
|
101
|
+
<label for="form_description">Description</label></br>
|
102
|
+
<textarea name="form[description]" id="form_description">Descriptive text goes here</textarea>
|
103
|
+
<p>
|
104
|
+
|
105
|
+
<p>
|
106
|
+
<input type="radio" name="form[gender]" value="male" id="gender_male"/>
|
107
|
+
<label for="gender_male">Male</label>
|
108
|
+
<input type="radio" name="form[gender]" value="female" id="gender_female" checked="checked"/>
|
109
|
+
<label for="gender_female">Female</label>
|
110
|
+
<input type="radio" name="form[gender]" value="both" id="gender_both"/>
|
111
|
+
<label for="gender_both">Both</label>
|
112
|
+
</p>
|
113
|
+
|
114
|
+
<p>
|
115
|
+
<input type="checkbox" value="dog" name="form[pets][]" id="form_pets_dog" checked="checked"/>
|
116
|
+
<label for="form_pets_dog">Dog</label>
|
117
|
+
<input type="checkbox" value="cat" name="form[pets][]" id="form_pets_cat"/>
|
118
|
+
<label for="form_pets_cat">Cat</label>
|
119
|
+
<input type="checkbox" value="hamster" name="form[pets][]" id="form_pets_hamster" checked="checked"/>
|
120
|
+
<label for="form_pets_hamster">Hamster</label>
|
121
|
+
</p>
|
122
|
+
|
123
|
+
<p>
|
124
|
+
<label for="form_languages">Languages</label>
|
125
|
+
<select name="form[languages][]" id="form_languages" multiple="multiple">
|
126
|
+
<option>Ruby</option>
|
127
|
+
<option>SQL</option>
|
128
|
+
<option>HTML</option>
|
129
|
+
<option>Javascript</option>
|
130
|
+
</select>
|
131
|
+
</p>
|
132
|
+
|
133
|
+
<p>
|
134
|
+
<label for="form_underwear">Underwear</label>
|
135
|
+
<select name="form[underwear][]" id="form_underwear" multiple="multiple">
|
136
|
+
<option selected="selected">Boxer Briefs</option>
|
137
|
+
<option>Boxers</option>
|
138
|
+
<option selected="selected">Briefs</option>
|
139
|
+
<option selected="selected">Commando</option>
|
140
|
+
</select>
|
141
|
+
</p>
|
142
|
+
|
143
|
+
<div style="display:none;">
|
144
|
+
<label for="form_first_name_hidden">
|
145
|
+
Super Secret
|
146
|
+
<input type="text" name="form[super_secret]" value="test123" id="form_super_secret"/>
|
147
|
+
</label>
|
148
|
+
</div>
|
149
|
+
|
150
|
+
<p>
|
151
|
+
<input type="button" name="form[fresh]" id="fresh_btn" value="i am fresh"/>
|
152
|
+
<input type="submit" name="form[awesome]" id="awe123" value="awesome"/>
|
153
|
+
<input type="submit" name="form[crappy]" id="crap321" value="crappy"/>
|
154
|
+
<input type="image" name="form[okay]" id="okay556" value="okay" alt="oh hai thar"/>
|
155
|
+
<button type="submit" id="click_me_123" value="click_me">Click me!</button>
|
156
|
+
<button type="submit" name="form[no_value]">No Value!</button>
|
157
|
+
</p>
|
158
|
+
</form>
|
159
|
+
|
160
|
+
<form action="/form/get?foo=bar" method="get">
|
161
|
+
<p>
|
162
|
+
<label for="form_middle_name">Middle Name</label>
|
163
|
+
<input type="text" name="form[middle_name]" value="Darren" id="form_middle_name"/>
|
164
|
+
</p>
|
165
|
+
|
166
|
+
<p>
|
167
|
+
<input type="submit" name="form[mediocre]" id="mediocre" value="med"/>
|
168
|
+
<p>
|
169
|
+
</form>
|
170
|
+
|
171
|
+
<form action="/upload" method="post" enctype="multipart/form-data">
|
172
|
+
<p>
|
173
|
+
<label for="form_file_name">File Name</label>
|
174
|
+
<input type="file" name="form[file_name]" id="form_file_name"/>
|
175
|
+
</p>
|
176
|
+
|
177
|
+
<p>
|
178
|
+
<label for="form_document">Document</label>
|
179
|
+
<input type="file" name="form[document]" id="form_document"/>
|
180
|
+
</p>
|
181
|
+
|
182
|
+
<p>
|
183
|
+
<input type="submit" value="Upload"/>
|
184
|
+
<p>
|
185
|
+
</form>
|
186
|
+
|
187
|
+
<form action="/redirect" method="post">
|
188
|
+
<p>
|
189
|
+
<input type="submit" value="Go FAR"/>
|
190
|
+
</p>
|
191
|
+
</form>
|
192
|
+
|
193
|
+
<form action="/form" method="post">
|
194
|
+
<p>
|
195
|
+
<label for="html5_email">Html5 Email</label>
|
196
|
+
<input type="email" name="form[html5_email]" value="person@email.com" id="html5_email"/>
|
197
|
+
</p>
|
198
|
+
<p>
|
199
|
+
<label for="html5_url">Html5 Url</label>
|
200
|
+
<input type="url" name="form[html5_url]" value="http://www.example.com" id="html5_url"/>
|
201
|
+
</p>
|
202
|
+
<p>
|
203
|
+
<label for="html5_search">Html5 Search</label>
|
204
|
+
<input type="search" name="form[html5_search]" value="what are you looking for" id="html5_search"/>
|
205
|
+
</p>
|
206
|
+
<p>
|
207
|
+
<label for="html5_tel">Html5 Tel</label>
|
208
|
+
<input type="tel" name="form[html5_tel]" value="911" id="html5_tel"/>
|
209
|
+
</p>
|
210
|
+
<p>
|
211
|
+
<label for="html5_color">Html5 Color</label>
|
212
|
+
<input type="color" name="form[html5_color]" value="#FFF" id="html5_color"/>
|
213
|
+
</p>
|
214
|
+
|
215
|
+
<p>
|
216
|
+
<input type="submit" name="form[html5_submit]" value="html5_submit"/>
|
217
|
+
</p>
|
218
|
+
</form>
|
219
|
+
|
220
|
+
<form action="/form" method="post">
|
221
|
+
<p>
|
222
|
+
<button type="submit" name="form[button]" value="button_first">Just an input that came first</button>
|
223
|
+
<button type="submit" name="form[button]" value="button_second">Just an input</button>
|
224
|
+
<input type="submit" name="form[button]" value="Just a button that came first"/>
|
225
|
+
<input type="submit" name="form[button]" value="Just a button"/>
|
226
|
+
</p>
|
227
|
+
</form>
|
@@ -0,0 +1,122 @@
|
|
1
|
+
<form action="/form" method="post">
|
2
|
+
<table id="agent_table">
|
3
|
+
<caption>Agent</caption>
|
4
|
+
|
5
|
+
<tr>
|
6
|
+
<td>
|
7
|
+
<label for="form_agent_name">Name</label>
|
8
|
+
</td>
|
9
|
+
<td>
|
10
|
+
<input type="text" name="form[agent_name]" value="James" id="form_agent_name"/>
|
11
|
+
</td>
|
12
|
+
</tr>
|
13
|
+
|
14
|
+
<tr>
|
15
|
+
<td colspan="2">
|
16
|
+
<input type="submit" value="Create"/>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
</table>
|
20
|
+
</form>
|
21
|
+
|
22
|
+
<form action="/form" method="post">
|
23
|
+
<table id="girl_table">
|
24
|
+
<caption>Girl</caption>
|
25
|
+
|
26
|
+
<tr>
|
27
|
+
<td>
|
28
|
+
<label for="form_girl_name">Name</label>
|
29
|
+
</td>
|
30
|
+
<td>
|
31
|
+
<input type="text" name="form[girl_name]" value="Vesper" id="form_girl_name"/>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
|
35
|
+
<tr>
|
36
|
+
<td colspan="2">
|
37
|
+
<input type="submit" value="Create"/>
|
38
|
+
</td>
|
39
|
+
</tr>
|
40
|
+
</table>
|
41
|
+
</form>
|
42
|
+
|
43
|
+
<form action="/form" method="post">
|
44
|
+
<table id="villain_table">
|
45
|
+
<caption>Villain</caption>
|
46
|
+
|
47
|
+
<tr>
|
48
|
+
<td>
|
49
|
+
<label for="form_villain_name">Name</label>
|
50
|
+
</td>
|
51
|
+
<td>
|
52
|
+
<input type="text" name="form[villain_name]" value="Ernst" id="form_villain_name"/>
|
53
|
+
</td>
|
54
|
+
</tr>
|
55
|
+
|
56
|
+
<tr>
|
57
|
+
<td colspan="2">
|
58
|
+
<input type="submit" value="Create"/>
|
59
|
+
</td>
|
60
|
+
</tr>
|
61
|
+
</table>
|
62
|
+
</form>
|
63
|
+
|
64
|
+
<table>
|
65
|
+
<caption>Ransom</caption>
|
66
|
+
|
67
|
+
<thead>
|
68
|
+
<tr>
|
69
|
+
<th>Year</th>
|
70
|
+
<th>Governmental</th>
|
71
|
+
<th>Private</th>
|
72
|
+
</tr>
|
73
|
+
</thead>
|
74
|
+
|
75
|
+
<tbody>
|
76
|
+
<tr>
|
77
|
+
<th scope="row">2007</th>
|
78
|
+
<td>$300</td>
|
79
|
+
<td>$100</td>
|
80
|
+
</tr>
|
81
|
+
<tr>
|
82
|
+
<th scope="row">2008</th>
|
83
|
+
<td>$123</td>
|
84
|
+
<td>$897</td>
|
85
|
+
</tr>
|
86
|
+
<tr>
|
87
|
+
<th scope="row">2009</th>
|
88
|
+
<td>$543</td>
|
89
|
+
<td>$99</td>
|
90
|
+
</tr>
|
91
|
+
</tbody>
|
92
|
+
</table>
|
93
|
+
|
94
|
+
<table>
|
95
|
+
<caption>Deaths</caption>
|
96
|
+
|
97
|
+
<thead>
|
98
|
+
<tr>
|
99
|
+
<th>Year</th>
|
100
|
+
<th>Sharks with lasers</th>
|
101
|
+
<th>Flaming volcano</th>
|
102
|
+
</tr>
|
103
|
+
</thead>
|
104
|
+
|
105
|
+
<tbody>
|
106
|
+
<tr>
|
107
|
+
<th scope="row">2007</th>
|
108
|
+
<td>66</td>
|
109
|
+
<td>7</td>
|
110
|
+
</tr>
|
111
|
+
<tr>
|
112
|
+
<th scope="row">2008</th>
|
113
|
+
<td>123</td>
|
114
|
+
<td>12</td>
|
115
|
+
</tr>
|
116
|
+
<tr>
|
117
|
+
<th scope="row">2009</th>
|
118
|
+
<td>913</td>
|
119
|
+
<td>13</td>
|
120
|
+
</tr>
|
121
|
+
</tbody>
|
122
|
+
</table>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<h1>This is a test</h1>
|
2
|
+
|
3
|
+
<p id="first">
|
4
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
5
|
+
tempor incididunt ut <a href="/with_simple_html" title="awesome title" class="simple">labore</a>
|
6
|
+
et dolore magna aliqua. Ut enim ad minim veniam,
|
7
|
+
quis nostrud exercitation <a href="/foo" id="foo">ullamco</a> laboris nisi
|
8
|
+
ut aliquip ex ea commodo consequat.
|
9
|
+
<a href="/with_simple_html"><img src="http://www.foobar.sun/dummy_image.jpg" width="20" height="20" alt="awesome image" /></a>
|
10
|
+
</p>
|
11
|
+
|
12
|
+
<p id="second">
|
13
|
+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
14
|
+
dolore eu fugiat <a href="/redirect" id="red">Redirect</a> pariatur. Excepteur sint occaecat cupidatat non proident,
|
15
|
+
sunt in culpa qui officia deserunt mollit anim id est laborum.
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<p>
|
19
|
+
<input type="text" id="test_field" value="monkey"/>
|
20
|
+
<a href="/redirect_back">BackToMyself</a>
|
21
|
+
<a title="twas a fine link" href="/redirect">A link came first</a>
|
22
|
+
<a title="a fine link" href="/with_simple_html">A link</a>
|
23
|
+
<a>No Href</a>
|
24
|
+
<a href="">Blank Href</a>
|
25
|
+
<a href="#">Blank Anchor</a>
|
26
|
+
<a href="#anchor">Anchor</a>
|
27
|
+
<a href="/with_simple_html#anchor">Anchor on different page</a>
|
28
|
+
<a href="/with_html#anchor">Anchor on same page</a>
|
29
|
+
<input type="text" value="" id="test_field">
|
30
|
+
<input type="text" checked="checked" id="checked_field">
|
31
|
+
<a href="/redirect"><img src="http://www.foobar.sun/dummy_image.jpg" width="20" height="20" alt="very fine image" /></a>
|
32
|
+
<a href="/with_simple_html"><img src="http://www.foobar.sun/dummy_image.jpg" width="20" height="20" alt="fine image" /></a>
|
33
|
+
</p>
|
34
|
+
|
35
|
+
<div id="hidden" style="display: none;">
|
36
|
+
<div id="hidden_via_ancestor">Inside element with hidden ancestor</div>
|
37
|
+
<a href="/with_simple_html" title="awesome title" class="simple">hidden link</a>
|
38
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
2
|
+
<head>
|
3
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
|
4
|
+
<title>with_js</title>
|
5
|
+
<script src="/jquery.js" type="text/javascript" charset="utf-8"></script>
|
6
|
+
<script src="/jquery-ui.js" type="text/javascript" charset="utf-8"></script>
|
7
|
+
<script src="/test.js" type="text/javascript" charset="utf-8"></script>
|
8
|
+
</head>
|
9
|
+
|
10
|
+
<body id="with_js">
|
11
|
+
<h1>FooBar</h1>
|
12
|
+
|
13
|
+
<p id="change">This is text</p>
|
14
|
+
<div id="drag">
|
15
|
+
<p>This is a draggable element.</p>
|
16
|
+
</div>
|
17
|
+
<div id="drop">
|
18
|
+
<p>It should be dropped here.</p>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<p><a href="#" id="clickable">Click me</a></p>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
<select id="waiter">
|
25
|
+
<option>Foo</option>
|
26
|
+
<option>My Waiting Option</option>
|
27
|
+
</select>
|
28
|
+
</p>
|
29
|
+
|
30
|
+
<p>
|
31
|
+
<input type="text" name="with_focus_event" value="" id="with_focus_event"/>
|
32
|
+
</p>
|
33
|
+
|
34
|
+
<p>
|
35
|
+
<input type="checkbox" id="checkbox_with_event"/>
|
36
|
+
</p>
|
37
|
+
</body>
|
38
|
+
</html>
|
39
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<h1>This page is used for testing various scopes</h1>
|
2
|
+
|
3
|
+
<p id="for_foo">
|
4
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
|
5
|
+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim venia.
|
6
|
+
<a href="/redirect">Go</a>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<div id="for_bar">
|
10
|
+
<ul>
|
11
|
+
<li>With Simple HTML: <a href="/with_simple_html">Go</a>
|
12
|
+
<form action="/redirect" method="post" accept-charset="utf-8">
|
13
|
+
<p>
|
14
|
+
<label for="simple_first_name">First Name</label>
|
15
|
+
<input type="text" name="first_name" value="John" id="simple_first_name"/>
|
16
|
+
</p>
|
17
|
+
<p><input type="submit" value="Go"/></p>
|
18
|
+
</form>
|
19
|
+
</li>
|
20
|
+
<li>Bar: <a href="/foo">Go</a>
|
21
|
+
<form action="/form" method="post" accept-charset="utf-8">
|
22
|
+
<p>
|
23
|
+
<label for="bar_first_name">First Name</label>
|
24
|
+
<input type="text" name="form[first_name]" value="Peter" id="bar_first_name"/>
|
25
|
+
</p>
|
26
|
+
<p><input type="submit" value="Go"/></p>
|
27
|
+
</form>
|
28
|
+
</li>
|
29
|
+
</ul>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div id="another_foo">
|
33
|
+
<ul>
|
34
|
+
<li>With Simple HTML: <a href="/">Go</a>
|
35
|
+
</ul>
|
36
|
+
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
Bar
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capybara-facebook
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Mathieu Fosse
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-27 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 9
|
31
|
+
version: 1.2.9
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: capybara
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 3
|
44
|
+
- 5
|
45
|
+
version: 0.3.5
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
description: Facebook Driver for Capybara
|
49
|
+
email: mathieu@tigerlilyapps.com
|
50
|
+
executables: []
|
51
|
+
|
52
|
+
extensions: []
|
53
|
+
|
54
|
+
extra_rdoc_files:
|
55
|
+
- LICENSE
|
56
|
+
- README.md
|
57
|
+
files:
|
58
|
+
- .document
|
59
|
+
- .gitignore
|
60
|
+
- LICENSE
|
61
|
+
- README.md
|
62
|
+
- Rakefile
|
63
|
+
- VERSION
|
64
|
+
- capybara-facebook.gemspec
|
65
|
+
- config.ru
|
66
|
+
- lib/capybara-facebook.rb
|
67
|
+
- lib/capybara-facebook/cucumber.rb
|
68
|
+
- lib/capybara-facebook/driver/base.rb
|
69
|
+
- lib/capybara-facebook/driver/facebook_driver.rb
|
70
|
+
- lib/capybara-facebook/session.rb
|
71
|
+
- spec/driver/facebook_driver_spec.rb
|
72
|
+
- spec/drivers_spec.rb
|
73
|
+
- spec/spec.opts
|
74
|
+
- spec/spec_helper.rb
|
75
|
+
- spec/test_app.rb
|
76
|
+
- spec/views/buttons.erb
|
77
|
+
- spec/views/fieldsets.erb
|
78
|
+
- spec/views/form.erb
|
79
|
+
- spec/views/postback.erb
|
80
|
+
- spec/views/tables.erb
|
81
|
+
- spec/views/with_html.erb
|
82
|
+
- spec/views/with_js.erb
|
83
|
+
- spec/views/with_scope.erb
|
84
|
+
- spec/views/with_simple_html.erb
|
85
|
+
has_rdoc: true
|
86
|
+
homepage: http://github.com/tigerlily/capybara-facebook
|
87
|
+
licenses: []
|
88
|
+
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options:
|
91
|
+
- --charset=UTF-8
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
requirements: []
|
109
|
+
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.3.6
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Facebook Driver for Capybara
|
115
|
+
test_files:
|
116
|
+
- spec/driver/facebook_driver_spec.rb
|
117
|
+
- spec/drivers_spec.rb
|
118
|
+
- spec/spec_helper.rb
|
119
|
+
- spec/test_app.rb
|