webrat 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/History.txt +76 -14
  2. data/README.txt +40 -36
  3. data/Rakefile +80 -18
  4. data/TODO.txt +9 -3
  5. data/init.rb +1 -1
  6. data/lib/webrat.rb +30 -5
  7. data/lib/webrat/core.rb +12 -0
  8. data/lib/webrat/core/area.rb +44 -0
  9. data/lib/webrat/core/field.rb +332 -0
  10. data/lib/webrat/core/flunk.rb +7 -0
  11. data/lib/webrat/core/form.rb +130 -0
  12. data/lib/webrat/core/label.rb +18 -0
  13. data/lib/webrat/core/link.rb +101 -0
  14. data/lib/webrat/core/locators.rb +92 -0
  15. data/lib/webrat/core/logging.rb +25 -0
  16. data/lib/webrat/core/matchers.rb +4 -0
  17. data/lib/webrat/core/matchers/have_content.rb +94 -0
  18. data/lib/webrat/core/matchers/have_selector.rb +39 -0
  19. data/lib/webrat/core/matchers/have_tag.rb +58 -0
  20. data/lib/webrat/core/matchers/have_xpath.rb +85 -0
  21. data/lib/webrat/core/methods.rb +44 -0
  22. data/lib/webrat/core/mime.rb +29 -0
  23. data/lib/webrat/core/nokogiri.rb +42 -0
  24. data/lib/webrat/core/scope.rb +208 -0
  25. data/lib/webrat/core/select_option.rb +29 -0
  26. data/lib/webrat/core/session.rb +188 -0
  27. data/lib/webrat/core_extensions/blank.rb +58 -0
  28. data/lib/webrat/core_extensions/deprecate.rb +8 -0
  29. data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
  30. data/lib/webrat/core_extensions/hash_with_indifferent_access.rb +131 -0
  31. data/lib/webrat/core_extensions/meta_class.rb +6 -0
  32. data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
  33. data/lib/webrat/mechanize.rb +28 -0
  34. data/lib/webrat/merb.rb +75 -0
  35. data/lib/webrat/rack.rb +24 -0
  36. data/lib/webrat/rails.rb +102 -0
  37. data/lib/webrat/rails/redirect_actions.rb +18 -0
  38. data/lib/webrat/selenium.rb +3 -0
  39. data/lib/webrat/selenium/location_strategy_javascript/button.js +12 -0
  40. data/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
  41. data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
  42. data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +9 -0
  43. data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
  44. data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
  45. data/lib/webrat/selenium/selenium_extensions.js +6 -0
  46. data/lib/webrat/selenium/selenium_session.rb +137 -0
  47. data/lib/webrat/sinatra.rb +19 -0
  48. metadata +66 -52
  49. data/Manifest.txt +0 -20
  50. data/lib/webrat/rails_extensions.rb +0 -27
  51. data/lib/webrat/session.rb +0 -523
  52. data/test/checks_test.rb +0 -121
  53. data/test/chooses_test.rb +0 -74
  54. data/test/clicks_button_test.rb +0 -308
  55. data/test/clicks_link_test.rb +0 -193
  56. data/test/fills_in_test.rb +0 -139
  57. data/test/helper.rb +0 -21
  58. data/test/reloads_test.rb +0 -26
  59. data/test/selects_test.rb +0 -93
  60. data/test/visits_test.rb +0 -31
@@ -1,193 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class ClicksLinkTest < Test::Unit::TestCase
4
- def setup
5
- @session = ActionController::Integration::Session.new
6
- @session.stubs(:assert_response)
7
- @session.stubs(:get_via_redirect)
8
- @session.stubs(:response).returns(@response=mock)
9
- end
10
-
11
- def test_should_use_get_by_default
12
- @response.stubs(:body).returns(<<-EOS)
13
- <a href="/page">Link text</a>
14
- EOS
15
- @session.expects(:get_via_redirect).with("/page", {})
16
- @session.clicks_link "Link text"
17
- end
18
-
19
- def test_should_click_get_links
20
- @response.stubs(:body).returns(<<-EOS)
21
- <a href="/page">Link text</a>
22
- EOS
23
- @session.expects(:get_via_redirect).with("/page", {})
24
- @session.clicks_get_link "Link text"
25
- end
26
-
27
- def test_should_click_delete_links
28
- @response.stubs(:body).returns(<<-EOS)
29
- <a href="/page">Link text</a>
30
- EOS
31
- @session.expects(:delete_via_redirect).with("/page", {})
32
- @session.clicks_delete_link "Link text"
33
- end
34
-
35
- def test_should_click_post_links
36
- @response.stubs(:body).returns(<<-EOS)
37
- <a href="/page">Link text</a>
38
- EOS
39
- @session.expects(:post_via_redirect).with("/page", {})
40
- @session.clicks_post_link "Link text"
41
- end
42
-
43
- def test_should_click_put_links
44
- @response.stubs(:body).returns(<<-EOS)
45
- <a href="/page">Link text</a>
46
- EOS
47
- @session.expects(:put_via_redirect).with("/page", {})
48
- @session.clicks_put_link "Link text"
49
- end
50
-
51
- def test_should_click_rails_javascript_links_with_authenticity_tokens
52
- @response.stubs(:body).returns(<<-EOS)
53
- <a href="/posts" onclick="var f = document.createElement('form');
54
- f.style.display = 'none';
55
- this.parentNode.appendChild(f);
56
- f.method = 'POST';
57
- f.action = this.href;
58
- var s = document.createElement('input');
59
- s.setAttribute('type', 'hidden');
60
- s.setAttribute('name', 'authenticity_token');
61
- s.setAttribute('value', 'aa79cb354597a60a3786e7e291ed4f74d77d3a62');
62
- f.appendChild(s);
63
- f.submit();
64
- return false;">Posts</a>
65
- EOS
66
- @session.expects(:post_via_redirect).with("/posts", "authenticity_token" => "aa79cb354597a60a3786e7e291ed4f74d77d3a62")
67
- @session.clicks_link "Posts"
68
- end
69
-
70
- def test_should_click_rails_javascript_delete_links
71
- @response.stubs(:body).returns(<<-EOS)
72
- <a href="/posts/1" onclick="var f = document.createElement('form');
73
- f.style.display = 'none';
74
- this.parentNode.appendChild(f);
75
- f.method = 'POST';
76
- f.action = this.href;
77
- var m = document.createElement('input');
78
- m.setAttribute('type', 'hidden');
79
- m.setAttribute('name', '_method');
80
- m.setAttribute('value', 'delete');
81
- f.appendChild(m);
82
- f.submit();
83
- return false;">Delete</a>
84
- EOS
85
- @session.expects(:delete_via_redirect).with("/posts/1", {})
86
- @session.clicks_link "Delete"
87
- end
88
-
89
- def test_should_click_rails_javascript_post_links
90
- @response.stubs(:body).returns(<<-EOS)
91
- <a href="/posts" onclick="var f = document.createElement('form');
92
- f.style.display = 'none';
93
- this.parentNode.appendChild(f);
94
- f.method = 'POST';
95
- f.action = this.href;
96
- f.submit();
97
- return false;">Posts</a>
98
- EOS
99
- @session.expects(:post_via_redirect).with("/posts", {})
100
- @session.clicks_link "Posts"
101
- end
102
-
103
- def test_should_click_rails_javascript_put_links
104
- @response.stubs(:body).returns(<<-EOS)
105
- <a href="/posts" onclick="var f = document.createElement('form');
106
- f.style.display = 'none';
107
- this.parentNode.appendChild(f);
108
- f.method = 'POST';
109
- f.action = this.href;
110
- var m = document.createElement('input');
111
- m.setAttribute('type', 'hidden');
112
- m.setAttribute('name', '_method');
113
- m.setAttribute('value', 'put');
114
- f.appendChild(m);
115
- f.submit();
116
- return false;">Put</a></h2>
117
- EOS
118
- @session.expects(:put_via_redirect).with("/posts", {})
119
- @session.clicks_link "Put"
120
- end
121
-
122
- def test_should_assert_valid_response
123
- @response.stubs(:body).returns(<<-EOS)
124
- <a href="/page">Link text</a>
125
- EOS
126
- @session.expects(:assert_response).with(:success)
127
- @session.clicks_link "Link text"
128
- end
129
-
130
- def test_should_not_be_case_sensitive
131
- @response.stubs(:body).returns(<<-EOS)
132
- <a href="/page">Link text</a>
133
- EOS
134
- @session.expects(:get_via_redirect).with("/page", {})
135
- @session.clicks_link "LINK TEXT"
136
- end
137
-
138
- def test_should_match_link_substrings
139
- @response.stubs(:body).returns(<<-EOS)
140
- <a href="/page">This is some cool link text, isn't it?</a>
141
- EOS
142
- @session.expects(:get_via_redirect).with("/page", {})
143
- @session.clicks_link "Link text"
144
- end
145
-
146
- def test_should_work_with_elements_in_the_link
147
- @response.stubs(:body).returns(<<-EOS)
148
- <a href="/page"><span>Link text</span></a>
149
- EOS
150
- @session.expects(:get_via_redirect).with("/page", {})
151
- @session.clicks_link "Link text"
152
- end
153
-
154
- def test_should_match_the_first_matching_link
155
- @response.stubs(:body).returns(<<-EOS)
156
- <a href="/page1">Link text</a>
157
- <a href="/page2">Link text</a>
158
- EOS
159
- @session.expects(:get_via_redirect).with("/page1", {})
160
- @session.clicks_link "Link text"
161
- end
162
-
163
- def test_should_choose_the_shortest_link_text_match
164
- @response.stubs(:body).returns(<<-EOS)
165
- <a href="/page1">Linkerama</a>
166
- <a href="/page2">Link</a>
167
- EOS
168
-
169
- @session.expects(:get_via_redirect).with("/page2", {})
170
- @session.clicks_link "Link"
171
- end
172
-
173
- def test_should_click_link_within_a_selector
174
- @response.stubs(:body).returns(<<-EOS)
175
- <a href="/page1">Link</a>
176
- <div id="container">
177
- <a href="/page2">Link</a>
178
- </div>
179
- EOS
180
-
181
- @session.expects(:get_via_redirect).with("/page2", {})
182
- @session.clicks_link_within "#container", "Link"
183
- end
184
-
185
- def test_should_not_make_request_when_link_is_local_anchor
186
- @response.stubs(:body).returns(<<-EOS)
187
- <a href="#section-1">Jump to Section 1</a>
188
- EOS
189
- # Don't know why @session.expects(:get_via_redirect).never doesn't work here
190
- @session.expects(:send).with('get_via_redirect', '#section-1', {}).never
191
- @session.clicks_link "Jump to Section 1"
192
- end
193
- end
@@ -1,139 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class FillsInTest < Test::Unit::TestCase
4
- def setup
5
- @session = ActionController::Integration::Session.new
6
- @session.stubs(:assert_response)
7
- @session.stubs(:get_via_redirect)
8
- @session.stubs(:response).returns(@response=mock)
9
- end
10
-
11
- def test_should_work_with_textareas
12
- @response.stubs(:body).returns(<<-EOS)
13
- <form method="post" action="/login">
14
- <label for="user_text">User Text</label>
15
- <textarea id="user_text" name="user[text]"></textarea>
16
- <input type="submit" />
17
- </form>
18
- EOS
19
- @session.expects(:post_via_redirect).with("/login", "user" => {"text" => "filling text area"})
20
- @session.fills_in "User Text", :with => "filling text area"
21
- @session.clicks_button
22
- end
23
-
24
- def test_should_fail_if_input_not_found
25
- @response.stubs(:body).returns(<<-EOS)
26
- <form method="get" action="/login">
27
- </form>
28
- EOS
29
- @session.expects(:flunk)
30
- @session.fills_in "Email", :with => "foo@example.com"
31
- end
32
-
33
- def test_should_allow_overriding_default_form_values
34
- @response.stubs(:body).returns(<<-EOS)
35
- <form method="post" action="/login">
36
- <label for="user_email">Email</label>
37
- <input id="user_email" name="user[email]" value="test@example.com" type="text" />
38
- <input type="submit" />
39
- </form>
40
- EOS
41
- @session.expects(:post_via_redirect).with("/login", "user" => {"email" => "foo@example.com"})
42
- @session.fills_in "user[email]", :with => "foo@example.com"
43
- @session.clicks_button
44
- end
45
-
46
- def test_should_choose_the_closest_label_match
47
- @response.stubs(:body).returns(<<-EOS)
48
- <form method="post" action="/login">
49
- <label for="user_mail1">Some other mail</label>
50
- <input id="user_mail1" name="user[mail1]" type="text" />
51
- <label for="user_mail2">Some mail</label>
52
- <input id="user_mail2" name="user[mail2]" type="text" />
53
- <input type="submit" />
54
- </form>
55
- EOS
56
-
57
- @session.expects(:post_via_redirect).with("/login", "user" => {"mail1" => "", "mail2" => "value"})
58
- @session.fills_in "Some", :with => "value"
59
- @session.clicks_button
60
- end
61
-
62
- def test_should_choose_the_first_label_match_if_closest_is_a_tie
63
- @response.stubs(:body).returns(<<-EOS)
64
- <form method="post" action="/login">
65
- <label for="user_mail1">Some mail one</label>
66
- <input id="user_mail1" name="user[mail1]" type="text" />
67
- <label for="user_mail2">Some mail two</label>
68
- <input id="user_mail2" name="user[mail2]" type="text" />
69
- <input type="submit" />
70
- </form>
71
- EOS
72
-
73
- @session.expects(:post_via_redirect).with("/login", "user" => {"mail1" => "value", "mail2" => ""})
74
- @session.fills_in "Some mail", :with => "value"
75
- @session.clicks_button
76
- end
77
-
78
- def test_should_anchor_label_matches_to_start_of_label
79
- @response.stubs(:body).returns(<<-EOS)
80
- <form method="post" action="/login">
81
- <label for="user_email">Some mail</label>
82
- <input id="user_email" name="user[email]" value="test@example.com" type="text" />
83
- </form>
84
- EOS
85
-
86
- assert_raises(RuntimeError) { @session.fills_in "mail", :with => "value" }
87
- end
88
-
89
- def test_should_anchor_label_matches_to_word_boundaries
90
- @response.stubs(:body).returns(<<-EOS)
91
- <form method="post" action="/login">
92
- <label for="user_email">Emailtastic</label>
93
- <input id="user_email" name="user[email]" value="test@example.com" type="text" />
94
- </form>
95
- EOS
96
-
97
- assert_raises(RuntimeError) { @session.fills_in "Email", :with => "value" }
98
- end
99
-
100
- def test_should_work_with_inputs_nested_in_labels
101
- @response.stubs(:body).returns(<<-EOS)
102
- <form method="post" action="/login">
103
- <label>
104
- Email
105
- <input id="user_email" name="user[email]" value="test@example.com" type="text" />
106
- </label>
107
- <input type="submit" />
108
- </form>
109
- EOS
110
- @session.expects(:post_via_redirect).with("/login", "user" => {"email" => "foo@example.com"})
111
- @session.fills_in "Email", :with => "foo@example.com"
112
- @session.clicks_button
113
- end
114
-
115
- def test_should_work_with_full_input_names
116
- @response.stubs(:body).returns(<<-EOS)
117
- <form method="post" action="/login">
118
- <input id="user_email" name="user[email]" type="text" />
119
- <input type="submit" />
120
- </form>
121
- EOS
122
- @session.expects(:post_via_redirect).with("/login", "user" => {"email" => "foo@example.com"})
123
- @session.fills_in "user[email]", :with => "foo@example.com"
124
- @session.clicks_button
125
- end
126
-
127
- def test_should_work_with_symbols
128
- @response.stubs(:body).returns(<<-EOS)
129
- <form method="post" action="/login">
130
- <label for="user_email">Email</label>
131
- <input id="user_email" name="user[email]" type="text" />
132
- <input type="submit" />
133
- </form>
134
- EOS
135
- @session.expects(:post_via_redirect).with("/login", "user" => {"email" => "foo@example.com"})
136
- @session.fills_in :email, :with => "foo@example.com"
137
- @session.clicks_button
138
- end
139
- end
data/test/helper.rb DELETED
@@ -1,21 +0,0 @@
1
- require "rubygems"
2
- require "test/unit"
3
- # gem install redgreen for colored test output
4
- begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
5
- require "mocha"
6
-
7
-
8
- require "active_support"
9
-
10
- silence_warnings do
11
- require "action_controller"
12
- require "action_controller/integration"
13
- end
14
-
15
- require File.expand_path(File.dirname(__FILE__) + "/../lib/webrat")
16
-
17
- class ActionController::Integration::Session
18
- def flunk(message)
19
- raise message
20
- end
21
- end
data/test/reloads_test.rb DELETED
@@ -1,26 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- RAILS_ROOT = "." unless defined?(RAILS_ROOT)
4
-
5
- class ReloadsTest < Test::Unit::TestCase
6
-
7
- def setup
8
- @session = ActionController::Integration::Session.new
9
- @session.stubs(:assert_response)
10
- @session.stubs(:get_via_redirect)
11
- @response = mock
12
- @session.stubs(:response).returns(@response)
13
- @response.stubs(:body).returns("")
14
- end
15
-
16
- def test_should_reload_the_page
17
- @session.expects(:get_via_redirect).with("/", {}).times(2)
18
- @session.visits("/")
19
- @session.reloads
20
- end
21
-
22
- def test_should_not_request_page_if_not_visited_any_page
23
- @session.expects(:get_via_redirect).never
24
- @session.reloads
25
- end
26
- end
data/test/selects_test.rb DELETED
@@ -1,93 +0,0 @@
1
- require File.dirname(__FILE__) + "/helper"
2
-
3
- class SelectsTest < Test::Unit::TestCase
4
- def setup
5
- @session = ActionController::Integration::Session.new
6
- @session.stubs(:assert_response)
7
- @session.stubs(:get_via_redirect)
8
- @session.stubs(:response).returns(@response=mock)
9
- end
10
-
11
- def test_should_fail_if_option_not_found
12
- @response.stubs(:body).returns(<<-EOS)
13
- <form method="get" action="/login">
14
- <select name="month"><option value="1">January</option></select>
15
- </form>
16
- EOS
17
- @session.expects(:flunk)
18
- @session.selects "February"
19
- end
20
-
21
- def test_should_fail_if_option_not_found_in_list_specified_by_element_name
22
- @response.stubs(:body).returns(<<-EOS)
23
- <form method="get" action="/login">
24
- <select name="month"><option value="1">January</option></select>
25
- <select name="year"><option value="2008">2008</option></select>
26
- </form>
27
- EOS
28
- @session.expects(:flunk)
29
- @session.selects "February", :from => "year"
30
- end
31
-
32
- def test_should_fail_if_specified_list_not_found
33
- @response.stubs(:body).returns(<<-EOS)
34
- <form method="get" action="/login">
35
- <select name="month"><option value="1">January</option></select>
36
- </form>
37
- EOS
38
- @session.expects(:flunk)
39
- @session.selects "February", :from => "year"
40
- end
41
-
42
- def test_should_send_value_from_option
43
- @response.stubs(:body).returns(<<-EOS)
44
- <form method="post" action="/login">
45
- <select name="month"><option value="1">January</option></select>
46
- <input type="submit" />
47
- </form>
48
- EOS
49
- @session.expects(:post_via_redirect).with("/login", "month" => "1")
50
- @session.selects "January"
51
- @session.clicks_button
52
- end
53
-
54
- def test_should_send_value_from_option_in_list_specified_by_name
55
- @response.stubs(:body).returns(<<-EOS)
56
- <form method="post" action="/login">
57
- <select name="start_month"><option value="s1">January</option></select>
58
- <select name="end_month"><option value="e1">January</option></select>
59
- <input type="submit" />
60
- </form>
61
- EOS
62
- @session.expects(:post_via_redirect).with("/login", "start_month" => "s1", "end_month" => "e1")
63
- @session.selects "January", :from => "end_month"
64
- @session.clicks_button
65
- end
66
-
67
- def test_should_send_value_from_option_in_list_specified_by_label
68
- @response.stubs(:body).returns(<<-EOS)
69
- <form method="post" action="/login">
70
- <label for="start_month">Start Month</label>
71
- <select id="start_month" name="start_month"><option value="s1">January</option></select>
72
- <label for="end_month">End Month</label>
73
- <select id="end_month" name="end_month"><option value="e1">January</option></select>
74
- <input type="submit" />
75
- </form>
76
- EOS
77
- @session.expects(:post_via_redirect).with("/login", "start_month" => "s1", "end_month" => "e1")
78
- @session.selects "January", :from => "End Month"
79
- @session.clicks_button
80
- end
81
-
82
- def test_should_use_option_text_if_no_value
83
- @response.stubs(:body).returns(<<-EOS)
84
- <form method="post" action="/login">
85
- <select name="month"><option>January</option></select>
86
- <input type="submit" />
87
- </form>
88
- EOS
89
- @session.expects(:post_via_redirect).with("/login", "month" => "January")
90
- @session.selects "January"
91
- @session.clicks_button
92
- end
93
- end