david-capybara 0.3.8

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 (88) hide show
  1. data/History.txt +87 -0
  2. data/README.rdoc +389 -0
  3. data/lib/capybara.rb +52 -0
  4. data/lib/capybara/cucumber.rb +32 -0
  5. data/lib/capybara/driver/base.rb +48 -0
  6. data/lib/capybara/driver/celerity_driver.rb +143 -0
  7. data/lib/capybara/driver/culerity_driver.rb +25 -0
  8. data/lib/capybara/driver/rack_test_driver.rb +272 -0
  9. data/lib/capybara/driver/selenium_driver.rb +156 -0
  10. data/lib/capybara/dsl.rb +60 -0
  11. data/lib/capybara/node.rb +60 -0
  12. data/lib/capybara/rails.rb +17 -0
  13. data/lib/capybara/save_and_open_page.rb +33 -0
  14. data/lib/capybara/searchable.rb +54 -0
  15. data/lib/capybara/server.rb +114 -0
  16. data/lib/capybara/session.rb +262 -0
  17. data/lib/capybara/spec/driver.rb +162 -0
  18. data/lib/capybara/spec/fixtures/capybara.jpg +0 -0
  19. data/lib/capybara/spec/fixtures/test_file.txt +1 -0
  20. data/lib/capybara/spec/public/canvas.jpg +0 -0
  21. data/lib/capybara/spec/public/jquery-ui.js +35 -0
  22. data/lib/capybara/spec/public/jquery.js +19 -0
  23. data/lib/capybara/spec/public/test.js +33 -0
  24. data/lib/capybara/spec/session.rb +81 -0
  25. data/lib/capybara/spec/session/all_spec.rb +69 -0
  26. data/lib/capybara/spec/session/attach_file_spec.rb +64 -0
  27. data/lib/capybara/spec/session/check_spec.rb +67 -0
  28. data/lib/capybara/spec/session/choose_spec.rb +26 -0
  29. data/lib/capybara/spec/session/click_button_spec.rb +236 -0
  30. data/lib/capybara/spec/session/click_link_spec.rb +118 -0
  31. data/lib/capybara/spec/session/click_spec.rb +24 -0
  32. data/lib/capybara/spec/session/current_url_spec.rb +8 -0
  33. data/lib/capybara/spec/session/fill_in_spec.rb +108 -0
  34. data/lib/capybara/spec/session/find_button_spec.rb +16 -0
  35. data/lib/capybara/spec/session/find_by_id_spec.rb +16 -0
  36. data/lib/capybara/spec/session/find_field_spec.rb +22 -0
  37. data/lib/capybara/spec/session/find_link_spec.rb +17 -0
  38. data/lib/capybara/spec/session/find_spec.rb +57 -0
  39. data/lib/capybara/spec/session/has_button_spec.rb +32 -0
  40. data/lib/capybara/spec/session/has_content_spec.rb +106 -0
  41. data/lib/capybara/spec/session/has_css_spec.rb +107 -0
  42. data/lib/capybara/spec/session/has_field_spec.rb +96 -0
  43. data/lib/capybara/spec/session/has_link_spec.rb +33 -0
  44. data/lib/capybara/spec/session/has_select_spec.rb +89 -0
  45. data/lib/capybara/spec/session/has_table_spec.rb +96 -0
  46. data/lib/capybara/spec/session/has_xpath_spec.rb +123 -0
  47. data/lib/capybara/spec/session/headers.rb +19 -0
  48. data/lib/capybara/spec/session/javascript.rb +204 -0
  49. data/lib/capybara/spec/session/locate_spec.rb +59 -0
  50. data/lib/capybara/spec/session/select_spec.rb +83 -0
  51. data/lib/capybara/spec/session/uncheck_spec.rb +21 -0
  52. data/lib/capybara/spec/session/unselect_spec.rb +54 -0
  53. data/lib/capybara/spec/session/within_spec.rb +153 -0
  54. data/lib/capybara/spec/test_app.rb +75 -0
  55. data/lib/capybara/spec/views/buttons.erb +4 -0
  56. data/lib/capybara/spec/views/fieldsets.erb +29 -0
  57. data/lib/capybara/spec/views/form.erb +235 -0
  58. data/lib/capybara/spec/views/frame_one.erb +8 -0
  59. data/lib/capybara/spec/views/frame_two.erb +8 -0
  60. data/lib/capybara/spec/views/postback.erb +13 -0
  61. data/lib/capybara/spec/views/tables.erb +122 -0
  62. data/lib/capybara/spec/views/with_html.erb +46 -0
  63. data/lib/capybara/spec/views/with_js.erb +39 -0
  64. data/lib/capybara/spec/views/with_scope.erb +36 -0
  65. data/lib/capybara/spec/views/with_simple_html.erb +1 -0
  66. data/lib/capybara/spec/views/within_frames.erb +10 -0
  67. data/lib/capybara/version.rb +3 -0
  68. data/lib/capybara/wait_until.rb +28 -0
  69. data/lib/capybara/xpath.rb +180 -0
  70. data/spec/capybara_spec.rb +18 -0
  71. data/spec/driver/celerity_driver_spec.rb +16 -0
  72. data/spec/driver/culerity_driver_spec.rb +12 -0
  73. data/spec/driver/rack_test_driver_spec.rb +17 -0
  74. data/spec/driver/remote_culerity_driver_spec.rb +23 -0
  75. data/spec/driver/remote_selenium_driver_spec.rb +18 -0
  76. data/spec/driver/selenium_driver_spec.rb +11 -0
  77. data/spec/dsl_spec.rb +140 -0
  78. data/spec/save_and_open_page_spec.rb +43 -0
  79. data/spec/searchable_spec.rb +66 -0
  80. data/spec/server_spec.rb +53 -0
  81. data/spec/session/celerity_session_spec.rb +27 -0
  82. data/spec/session/culerity_session_spec.rb +25 -0
  83. data/spec/session/rack_test_session_spec.rb +33 -0
  84. data/spec/session/selenium_session_spec.rb +25 -0
  85. data/spec/spec_helper.rb +19 -0
  86. data/spec/wait_until_spec.rb +28 -0
  87. data/spec/xpath_spec.rb +180 -0
  88. metadata +260 -0
@@ -0,0 +1,18 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ require 'capybara'
4
+
5
+ describe Capybara do
6
+
7
+ describe 'default_wait_time' do
8
+ after do
9
+ Capybara.default_wait_time = 2
10
+ end
11
+
12
+ it "should be changeable" do
13
+ Capybara.default_wait_time = 5
14
+ Capybara.default_wait_time.should == 5
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ if RUBY_PLATFORM =~ /java/
4
+ describe Capybara::Driver::Celerity do
5
+ before(:all) do
6
+ @driver = Capybara::Driver::Celerity.new(TestApp)
7
+ end
8
+
9
+ it_should_behave_like "driver"
10
+ it_should_behave_like "driver with javascript support"
11
+ it_should_behave_like "driver with header support"
12
+
13
+ end
14
+ else
15
+ puts "#{File.basename(__FILE__)} requires JRuby; skipping.."
16
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Driver::Culerity do
4
+ before(:all) do
5
+ @driver = Capybara::Driver::Culerity.new(TestApp)
6
+ end
7
+
8
+ it_should_behave_like "driver"
9
+ it_should_behave_like "driver with javascript support"
10
+ it_should_behave_like "driver with header support"
11
+
12
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Driver::RackTest do
4
+ before do
5
+ @driver = Capybara::Driver::RackTest.new(TestApp)
6
+ end
7
+
8
+ it "should throw an error when no rack app is given" do
9
+ running do
10
+ Capybara::Driver::RackTest.new(nil)
11
+ end.should raise_error(ArgumentError)
12
+ end
13
+
14
+ it_should_behave_like "driver"
15
+ it_should_behave_like "driver with header support"
16
+
17
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Driver::Culerity do
4
+ before(:all) do
5
+ Capybara.app_host = "http://capybara-testapp.heroku.com"
6
+ Capybara.run_server = false
7
+ @driver = Capybara::Driver::Culerity.new(TestApp)
8
+ end
9
+
10
+ after(:all) do
11
+ Capybara.app_host = nil
12
+ Capybara.run_server = true
13
+ end
14
+
15
+ it "should navigate to a fully qualified remote page" do
16
+ @driver.visit('http://elabs.se/contact')
17
+ @driver.body.should include('Edithouse eLabs AB')
18
+ end
19
+
20
+ it_should_behave_like "driver"
21
+ it_should_behave_like "driver with javascript support"
22
+ it_should_behave_like "driver with header support"
23
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Driver::Selenium do
4
+ before(:all) do
5
+ Capybara.app_host = "http://capybara-testapp.heroku.com"
6
+ end
7
+
8
+ after(:all) do
9
+ Capybara.app_host = nil
10
+ end
11
+
12
+ before do
13
+ @driver = Capybara::Driver::Selenium.new(TestApp)
14
+ end
15
+
16
+ it_should_behave_like "driver"
17
+ it_should_behave_like "driver with javascript support"
18
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Driver::Selenium do
4
+ before do
5
+ @driver = Capybara::Driver::Selenium.new(TestApp)
6
+ end
7
+
8
+ it_should_behave_like "driver"
9
+ it_should_behave_like "driver with javascript support"
10
+ it_should_behave_like "driver with frame support"
11
+ end
data/spec/dsl_spec.rb ADDED
@@ -0,0 +1,140 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ require 'capybara/dsl'
4
+
5
+ describe Capybara do
6
+
7
+ before do
8
+ Capybara.app = TestApp
9
+ end
10
+
11
+ after do
12
+ Capybara.default_driver = nil
13
+ Capybara.use_default_driver
14
+ end
15
+
16
+ describe '#default_driver' do
17
+ it "should default to rack_test" do
18
+ Capybara.default_driver.should == :rack_test
19
+ end
20
+
21
+ it "should be changeable" do
22
+ Capybara.default_driver = :culerity
23
+ Capybara.default_driver.should == :culerity
24
+ end
25
+ end
26
+
27
+ describe '#current_driver' do
28
+ it "should default to the default driver" do
29
+ Capybara.current_driver.should == :rack_test
30
+ Capybara.default_driver = :culerity
31
+ Capybara.current_driver.should == :culerity
32
+ end
33
+
34
+ it "should be changeable" do
35
+ Capybara.current_driver = :culerity
36
+ Capybara.current_driver.should == :culerity
37
+ end
38
+ end
39
+
40
+ describe '#javascript_driver' do
41
+ it "should default to selenium" do
42
+ Capybara.javascript_driver.should == :selenium
43
+ end
44
+
45
+ it "should be changeable" do
46
+ Capybara.javascript_driver = :culerity
47
+ Capybara.javascript_driver.should == :culerity
48
+ end
49
+ end
50
+
51
+ describe '#use_default_driver' do
52
+ it "should restore the default driver" do
53
+ Capybara.current_driver = :culerity
54
+ Capybara.use_default_driver
55
+ Capybara.current_driver.should == :rack_test
56
+ end
57
+ end
58
+
59
+ describe '#app' do
60
+ it "should be changeable" do
61
+ Capybara.app = "foobar"
62
+ Capybara.app.should == 'foobar'
63
+ end
64
+ end
65
+
66
+ describe '#current_session' do
67
+ it "should choose a session object of the current driver type" do
68
+ Capybara.current_session.should be_a(Capybara::Session)
69
+ end
70
+
71
+ it "should use #app as the application" do
72
+ Capybara.app = proc {}
73
+ Capybara.current_session.app.should == Capybara.app
74
+ end
75
+
76
+ it "should change with the current driver" do
77
+ Capybara.current_session.mode.should == :rack_test
78
+ Capybara.current_driver = :culerity
79
+ Capybara.current_session.mode.should == :culerity
80
+ end
81
+
82
+ it "should be persistent even across driver changes" do
83
+ object_id = Capybara.current_session.object_id
84
+ Capybara.current_session.object_id.should == object_id
85
+ Capybara.current_driver = :culerity
86
+ Capybara.current_session.mode.should == :culerity
87
+ Capybara.current_session.object_id.should_not == object_id
88
+
89
+ Capybara.current_driver = :rack_test
90
+ Capybara.current_session.object_id.should == object_id
91
+ end
92
+
93
+ it "should change when changing application" do
94
+ object_id = Capybara.current_session.object_id
95
+ Capybara.current_session.object_id.should == object_id
96
+ Capybara.app = proc {}
97
+ Capybara.current_session.object_id.should_not == object_id
98
+ Capybara.current_session.app.should == Capybara.app
99
+ end
100
+ end
101
+
102
+ describe '.reset_sessions!' do
103
+ it "should clear any persisted sessions" do
104
+ object_id = Capybara.current_session.object_id
105
+ Capybara.current_session.object_id.should == object_id
106
+ Capybara.reset_sessions!
107
+ Capybara.current_session.object_id.should_not == object_id
108
+ end
109
+ end
110
+
111
+ describe 'the DSL' do
112
+ before do
113
+ @session = Capybara
114
+ end
115
+
116
+ it_should_behave_like "session"
117
+ it_should_behave_like "session without javascript support"
118
+
119
+ it "should be possible to include it in another class" do
120
+ klass = Class.new do
121
+ include Capybara
122
+ end
123
+ foo = klass.new
124
+ foo.visit('/with_html')
125
+ foo.click_link('ullamco')
126
+ foo.body.should include('Another World')
127
+ end
128
+
129
+ it "should provide a 'page' shortcut for more expressive tests" do
130
+ klass = Class.new do
131
+ include Capybara
132
+ end
133
+ foo = klass.new
134
+ foo.page.visit('/with_html')
135
+ foo.page.click_link('ullamco')
136
+ foo.page.body.should include('Another World')
137
+ end
138
+ end
139
+
140
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ require 'capybara/save_and_open_page'
4
+ require 'launchy'
5
+ describe Capybara::SaveAndOpenPage do
6
+ describe "#save_save_and_open_page" do
7
+ before do
8
+
9
+ @time = Time.new.strftime("%Y%m%d%H%M%S")
10
+ @name = "capybara-#{@time}.html"
11
+
12
+ @temp_file = mock("FILE")
13
+ @temp_file.stub!(:write)
14
+ @temp_file.stub!(:close)
15
+ @temp_file.stub!(:path).and_return(@name)
16
+
17
+ File.should_receive(:exist?).and_return true
18
+ File.should_receive(:new).and_return @temp_file
19
+
20
+ @html = <<-HTML
21
+ <html>
22
+ <head>
23
+ </head>
24
+ <body>
25
+ <h1>test</h1>
26
+ </body>
27
+ <html>
28
+ HTML
29
+
30
+ Launchy::Browser.stub(:run)
31
+ end
32
+
33
+ it "should create a new temporary file" do
34
+ @temp_file.should_receive(:write).with @html
35
+ Capybara::SaveAndOpenPage.save_and_open_page @html
36
+ end
37
+
38
+ it "should open the file in the browser" do
39
+ Capybara::SaveAndOpenPage.should_receive(:open_in_browser).with(@name)
40
+ Capybara::SaveAndOpenPage.save_and_open_page @html
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,66 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ module Capybara
4
+
5
+ describe Searchable do
6
+ class Klass
7
+ include Searchable
8
+
9
+ def all_unfiltered(locator, options = {})
10
+ []
11
+ end
12
+
13
+ end
14
+
15
+ describe "#all" do
16
+ before do
17
+ @searchable = Klass.new
18
+ end
19
+
20
+ it "should return unfiltered list without options" do
21
+ node1 = stub(Node)
22
+ node2 = stub(Node)
23
+ @searchable.should_receive(:all_unfiltered).with('//x').and_return([node1, node2])
24
+ @searchable.all('//x').should == [node1, node2]
25
+ end
26
+
27
+ context "with :text filter" do
28
+ before do
29
+ @node1 = stub(Node, :text => 'node one text (with parens)')
30
+ @node2 = stub(Node, :text => 'node two text [-]')
31
+ @searchable.stub(:all_unfiltered).and_return([@node1, @node2])
32
+ end
33
+
34
+ it "should accept regular expression" do
35
+ @searchable.all('//x', :text => /node one/).should == [@node1]
36
+ @searchable.all('//x', :text => /node two/).should == [@node2]
37
+ end
38
+
39
+ it "should accept text" do
40
+ @searchable.all('//x', :text => "node one").should == [@node1]
41
+ @searchable.all('//x', :text => "node two").should == [@node2]
42
+ end
43
+
44
+ it "should allow Regexp reserved words in text" do
45
+ @searchable.all('//x', :text => "node one text (with parens)").should == [@node1]
46
+ @searchable.all('//x', :text => "node two text [-]").should == [@node2]
47
+ end
48
+ end
49
+
50
+ context "with :visible filter" do
51
+ before do
52
+ @visible_node = stub(Node, :visible? => true)
53
+ @hidden_node = stub(Node, :visible? => false)
54
+ @searchable.stub(:all_unfiltered).and_return([@visible_node, @hidden_node])
55
+ end
56
+
57
+ it "should filter out hidden nodes" do
58
+ @searchable.all('//x', :visible => true).should == [@visible_node]
59
+ end
60
+
61
+ end
62
+
63
+ end #all
64
+ end
65
+
66
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ describe Capybara::Server do
4
+
5
+ it "should spool up a rack server" do
6
+ @app = proc { |env| [200, {}, "Hello Server!"]}
7
+ @server = Capybara::Server.new(@app).boot
8
+
9
+ @res = Net::HTTP.start(@server.host, @server.port) { |http| http.get('/') }
10
+
11
+ @res.body.should include('Hello Server')
12
+ end
13
+
14
+ it "should do nothing when no server given" do
15
+ running do
16
+ @server = Capybara::Server.new(nil).boot
17
+ end.should_not raise_error
18
+ end
19
+
20
+ it "should find an available port" do
21
+ @app1 = proc { |env| [200, {}, "Hello Server!"]}
22
+ @app2 = proc { |env| [200, {}, "Hello Second Server!"]}
23
+
24
+ @server1 = Capybara::Server.new(@app1).boot
25
+ @server2 = Capybara::Server.new(@app2).boot
26
+
27
+ @res1 = Net::HTTP.start(@server1.host, @server1.port) { |http| http.get('/') }
28
+ @res1.body.should include('Hello Server')
29
+
30
+ @res2 = Net::HTTP.start(@server2.host, @server2.port) { |http| http.get('/') }
31
+ @res2.body.should include('Hello Second Server')
32
+ end
33
+
34
+ it "should use the server if it already running" do
35
+ @app1 = proc { |env| [200, {}, "Hello Server!"]}
36
+ @app2 = proc { |env| [200, {}, "Hello Second Server!"]}
37
+
38
+ @server1a = Capybara::Server.new(@app1).boot
39
+ @server1b = Capybara::Server.new(@app1).boot
40
+ @server2a = Capybara::Server.new(@app2).boot
41
+ @server2b = Capybara::Server.new(@app2).boot
42
+
43
+ @res1 = Net::HTTP.start(@server1b.host, @server1b.port) { |http| http.get('/') }
44
+ @res1.body.should include('Hello Server')
45
+
46
+ @res2 = Net::HTTP.start(@server2b.host, @server2b.port) { |http| http.get('/') }
47
+ @res2.body.should include('Hello Second Server')
48
+
49
+ @server1a.port.should == @server1b.port
50
+ @server2a.port.should == @server2b.port
51
+ end
52
+
53
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
2
+
3
+ if RUBY_PLATFORM =~ /java/
4
+ describe Capybara::Driver::Celerity do
5
+ before(:all) do
6
+ @session = Capybara::Session.new(:celerity, TestApp)
7
+ end
8
+
9
+ describe '#driver' do
10
+ it "should be a rack test driver" do
11
+ @session.driver.should be_an_instance_of(Capybara::Driver::Celerity)
12
+ end
13
+ end
14
+
15
+ describe '#mode' do
16
+ it "should remember the mode" do
17
+ @session.mode.should == :celerity
18
+ end
19
+ end
20
+
21
+ it_should_behave_like "session"
22
+ it_should_behave_like "session with javascript support"
23
+ it_should_behave_like "session with headers support"
24
+ end
25
+ else
26
+ puts "#{File.basename(__FILE__)} requires JRuby; skipping.."
27
+ end