erubis_rails_helper 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/README.rdoc +66 -0
  2. data/lib/erubis_rails_helper.rb +17 -0
  3. data/lib/erubis_rails_helper/erubis/generator.rb +100 -0
  4. data/lib/erubis_rails_helper/template_handlers/erubis.rb +258 -0
  5. data/test/abstract_unit.rb +51 -0
  6. data/test/controller/action_pack_assertions_test.rb +516 -0
  7. data/test/controller/addresses_render_test.rb +37 -0
  8. data/test/controller/assert_select_test.rb +734 -0
  9. data/test/controller/base_test.rb +217 -0
  10. data/test/controller/benchmark_test.rb +32 -0
  11. data/test/controller/caching_test.rb +690 -0
  12. data/test/controller/capture_test.rb +66 -0
  13. data/test/controller/content_type_test.rb +168 -0
  14. data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
  15. data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
  16. data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
  17. data/test/controller/cookie_test.rb +111 -0
  18. data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
  19. data/test/controller/dispatcher_test.rb +103 -0
  20. data/test/controller/fake_controllers.rb +33 -0
  21. data/test/controller/fake_models.rb +19 -0
  22. data/test/controller/filter_params_test.rb +49 -0
  23. data/test/controller/filters_test.rb +885 -0
  24. data/test/controller/flash_test.rb +142 -0
  25. data/test/controller/header_test.rb +14 -0
  26. data/test/controller/helper_test.rb +224 -0
  27. data/test/controller/html-scanner/cdata_node_test.rb +15 -0
  28. data/test/controller/html-scanner/document_test.rb +148 -0
  29. data/test/controller/html-scanner/node_test.rb +89 -0
  30. data/test/controller/html-scanner/sanitizer_test.rb +273 -0
  31. data/test/controller/html-scanner/tag_node_test.rb +238 -0
  32. data/test/controller/html-scanner/text_node_test.rb +50 -0
  33. data/test/controller/html-scanner/tokenizer_test.rb +131 -0
  34. data/test/controller/http_basic_authentication_test.rb +88 -0
  35. data/test/controller/http_digest_authentication_test.rb +178 -0
  36. data/test/controller/integration_test.rb +417 -0
  37. data/test/controller/layout_test.rb +204 -0
  38. data/test/controller/logging_test.rb +46 -0
  39. data/test/controller/middleware_stack_test.rb +90 -0
  40. data/test/controller/mime_responds_test.rb +536 -0
  41. data/test/controller/mime_type_test.rb +93 -0
  42. data/test/controller/polymorphic_routes_test.rb +293 -0
  43. data/test/controller/rack_test.rb +294 -0
  44. data/test/controller/record_identifier_test.rb +139 -0
  45. data/test/controller/redirect_test.rb +282 -0
  46. data/test/controller/render_test.rb +1752 -0
  47. data/test/controller/request/json_params_parsing_test.rb +45 -0
  48. data/test/controller/request/multipart_params_parsing_test.rb +223 -0
  49. data/test/controller/request/query_string_parsing_test.rb +120 -0
  50. data/test/controller/request/url_encoded_params_parsing_test.rb +184 -0
  51. data/test/controller/request/xml_params_parsing_test.rb +88 -0
  52. data/test/controller/request_forgery_protection_test.rb +246 -0
  53. data/test/controller/request_test.rb +407 -0
  54. data/test/controller/rescue_test.rb +536 -0
  55. data/test/controller/resources_test.rb +1341 -0
  56. data/test/controller/routing_test.rb +2557 -0
  57. data/test/controller/selector_test.rb +628 -0
  58. data/test/controller/send_file_test.rb +161 -0
  59. data/test/controller/session/cookie_store_test.rb +239 -0
  60. data/test/controller/session/mem_cache_store_test.rb +127 -0
  61. data/test/controller/session/test_session_test.rb +58 -0
  62. data/test/controller/test_test.rb +692 -0
  63. data/test/controller/translation_test.rb +26 -0
  64. data/test/controller/url_rewriter_test.rb +359 -0
  65. data/test/controller/verification_test.rb +270 -0
  66. data/test/controller/view_paths_test.rb +141 -0
  67. data/test/controller/webservice_test.rb +260 -0
  68. data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
  69. data/test/fixtures/company.rb +10 -0
  70. data/test/fixtures/developer.rb +9 -0
  71. data/test/fixtures/helpers/abc_helper.rb +5 -0
  72. data/test/fixtures/helpers/fun/games_helper.rb +3 -0
  73. data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
  74. data/test/fixtures/mascot.rb +3 -0
  75. data/test/fixtures/project.rb +3 -0
  76. data/test/fixtures/reply.rb +7 -0
  77. data/test/fixtures/topic.rb +3 -0
  78. data/test/template/asset_tag_helper_test.rb +713 -0
  79. data/test/template/atom_feed_helper_test.rb +286 -0
  80. data/test/template/benchmark_helper_test.rb +86 -0
  81. data/test/template/compiled_templates_test.rb +203 -0
  82. data/test/template/date_helper_i18n_test.rb +120 -0
  83. data/test/template/date_helper_test.rb +2469 -0
  84. data/test/template/erb_util_test.rb +24 -0
  85. data/test/template/form_helper_test.rb +1176 -0
  86. data/test/template/form_options_helper_test.rb +751 -0
  87. data/test/template/form_tag_helper_test.rb +327 -0
  88. data/test/template/javascript_helper_test.rb +106 -0
  89. data/test/template/number_helper_i18n_test.rb +69 -0
  90. data/test/template/number_helper_test.rb +128 -0
  91. data/test/template/prototype_helper_test.rb +639 -0
  92. data/test/template/record_tag_helper_test.rb +58 -0
  93. data/test/template/render_test.rb +291 -0
  94. data/test/template/sanitize_helper_test.rb +48 -0
  95. data/test/template/scriptaculous_helper_test.rb +90 -0
  96. data/test/template/tag_helper_test.rb +97 -0
  97. data/test/template/test_test.rb +54 -0
  98. data/test/template/text_helper_test.rb +520 -0
  99. data/test/template/translation_helper_test.rb +32 -0
  100. data/test/template/url_helper_test.rb +614 -0
  101. data/test/test_erubis_rails_helper.rb +4 -0
  102. data/test/testing_sandbox.rb +15 -0
  103. data/test/view/test_case_test.rb +8 -0
  104. metadata +293 -0
@@ -0,0 +1,32 @@
1
+ require 'abstract_unit'
2
+
3
+ class TranslationHelperTest < Test::Unit::TestCase
4
+ include ActionView::Helpers::TagHelper
5
+ include ActionView::Helpers::TranslationHelper
6
+
7
+ attr_reader :request
8
+ def setup
9
+ end
10
+
11
+ def test_delegates_to_i18n_setting_the_raise_option
12
+ I18n.expects(:translate).with(:foo, :locale => 'en', :raise => true)
13
+ translate :foo, :locale => 'en'
14
+ end
15
+
16
+ def test_returns_missing_translation_message_wrapped_into_span
17
+ expected = '<span class="translation_missing">en, foo</span>'
18
+ assert_equal expected, translate(:foo)
19
+ end
20
+
21
+ def test_delegates_localize_to_i18n
22
+ @time = Time.utc(2008, 7, 8, 12, 18, 38)
23
+ I18n.expects(:localize).with(@time)
24
+ localize @time
25
+ end
26
+
27
+ def test_scoping_by_partial
28
+ expects(:template).returns(stub(:path_without_format_and_extension => "people/index"))
29
+ I18n.expects(:translate).with("people.index.foo", :locale => 'en', :raise => true)
30
+ translate ".foo", :locale => 'en'
31
+ end
32
+ end
@@ -0,0 +1,614 @@
1
+ # encoding: utf-8
2
+ require 'abstract_unit'
3
+
4
+ RequestMock = Struct.new("Request", :request_uri, :protocol, :host_with_port, :env)
5
+
6
+ class UrlHelperTest < ActionView::TestCase
7
+ tests ActionView::Helpers::UrlHelper
8
+
9
+ def setup
10
+ @controller = Class.new do
11
+ attr_accessor :url, :request
12
+ def url_for(options)
13
+ url
14
+ end
15
+ end
16
+ @controller = @controller.new
17
+ @controller.url = "http://www.example.com"
18
+ end
19
+
20
+ def test_url_for_escapes_urls
21
+ @controller.url = "http://www.example.com?a=b&c=d"
22
+ assert_equal "http://www.example.com?a=b&amp;c=d", url_for(:a => 'b', :c => 'd')
23
+ assert_equal "http://www.example.com?a=b&amp;c=d", url_for(:a => 'b', :c => 'd', :escape => true)
24
+ assert_equal "http://www.example.com?a=b&c=d", url_for(:a => 'b', :c => 'd', :escape => false)
25
+ end
26
+
27
+ def test_url_for_escapes_url_once
28
+ @controller.url = "http://www.example.com?a=b&amp;c=d"
29
+ assert_equal "http://www.example.com?a=b&amp;c=d", url_for("http://www.example.com?a=b&amp;c=d")
30
+ end
31
+
32
+ def test_url_for_with_back
33
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'})
34
+ assert_equal 'http://www.example.com/referer', url_for(:back)
35
+ end
36
+
37
+ def test_url_for_with_back_and_no_referer
38
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {})
39
+ assert_equal 'javascript:history.back()', url_for(:back)
40
+ end
41
+
42
+ # todo: missing test cases
43
+ def test_button_to_with_straight_url
44
+ assert_dom_equal "<form method=\"post\" action=\"http://www.example.com\" class=\"button-to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>", button_to("Hello", "http://www.example.com")
45
+ end
46
+
47
+ def test_button_to_with_query
48
+ assert_dom_equal "<form method=\"post\" action=\"http://www.example.com/q1=v1&amp;q2=v2\" class=\"button-to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>", button_to("Hello", "http://www.example.com/q1=v1&q2=v2")
49
+ end
50
+
51
+ def test_button_to_with_escaped_query
52
+ assert_dom_equal "<form method=\"post\" action=\"http://www.example.com/q1=v1&amp;q2=v2\" class=\"button-to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>", button_to("Hello", "http://www.example.com/q1=v1&amp;q2=v2")
53
+ end
54
+
55
+ def test_button_to_with_query_and_no_name
56
+ assert_dom_equal "<form method=\"post\" action=\"http://www.example.com?q1=v1&amp;q2=v2\" class=\"button-to\"><div><input type=\"submit\" value=\"http://www.example.com?q1=v1&amp;q2=v2\" /></div></form>", button_to(nil, "http://www.example.com?q1=v1&q2=v2")
57
+ end
58
+
59
+ def test_button_to_with_javascript_confirm
60
+ assert_dom_equal(
61
+ "<form method=\"post\" action=\"http://www.example.com\" class=\"button-to\"><div><input onclick=\"return confirm('Are you sure?');\" type=\"submit\" value=\"Hello\" /></div></form>",
62
+ button_to("Hello", "http://www.example.com", :confirm => "Are you sure?")
63
+ )
64
+ end
65
+
66
+ def test_button_to_enabled_disabled
67
+ assert_dom_equal(
68
+ "<form method=\"post\" action=\"http://www.example.com\" class=\"button-to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>",
69
+ button_to("Hello", "http://www.example.com", :disabled => false)
70
+ )
71
+ assert_dom_equal(
72
+ "<form method=\"post\" action=\"http://www.example.com\" class=\"button-to\"><div><input disabled=\"disabled\" type=\"submit\" value=\"Hello\" /></div></form>",
73
+ button_to("Hello", "http://www.example.com", :disabled => true)
74
+ )
75
+ end
76
+
77
+ def test_button_to_with_method_delete
78
+ assert_dom_equal(
79
+ "<form method=\"post\" action=\"http://www.example.com\" class=\"button-to\"><div><input type=\"hidden\" name=\"_method\" value=\"delete\" /><input type=\"submit\" value=\"Hello\" /></div></form>",
80
+ button_to("Hello", "http://www.example.com", :method => :delete)
81
+ )
82
+ end
83
+
84
+ def test_button_to_with_method_get
85
+ assert_dom_equal(
86
+ "<form method=\"get\" action=\"http://www.example.com\" class=\"button-to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>",
87
+ button_to("Hello", "http://www.example.com", :method => :get)
88
+ )
89
+ end
90
+
91
+ def test_link_tag_with_straight_url
92
+ assert_dom_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", "http://www.example.com")
93
+ end
94
+
95
+ def test_link_tag_without_host_option
96
+ ActionController::Base.class_eval { attr_accessor :url }
97
+ url = {:controller => 'weblog', :action => 'show'}
98
+ @controller = ActionController::Base.new
99
+ @controller.request = ActionController::TestRequest.new
100
+ @controller.url = ActionController::UrlRewriter.new(@controller.request, url)
101
+ assert_dom_equal(%q{<a href="/weblog/show">Test Link</a>}, link_to('Test Link', url))
102
+ end
103
+
104
+ def test_link_tag_with_host_option
105
+ ActionController::Base.class_eval { attr_accessor :url }
106
+ url = {:controller => 'weblog', :action => 'show', :host => 'www.example.com'}
107
+ @controller = ActionController::Base.new
108
+ @controller.request = ActionController::TestRequest.new
109
+ @controller.url = ActionController::UrlRewriter.new(@controller.request, url)
110
+ assert_dom_equal(%q{<a href="http://www.example.com/weblog/show">Test Link</a>}, link_to('Test Link', url))
111
+ end
112
+
113
+ def test_link_tag_with_query
114
+ assert_dom_equal "<a href=\"http://www.example.com?q1=v1&amp;q2=v2\">Hello</a>", link_to("Hello", "http://www.example.com?q1=v1&amp;q2=v2")
115
+ end
116
+
117
+ def test_link_tag_with_query_and_no_name
118
+ assert_dom_equal "<a href=\"http://www.example.com?q1=v1&amp;q2=v2\">http://www.example.com?q1=v1&amp;q2=v2</a>", link_to(nil, "http://www.example.com?q1=v1&amp;q2=v2")
119
+ end
120
+
121
+ def test_link_tag_with_back
122
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'})
123
+ assert_dom_equal "<a href=\"http://www.example.com/referer\">go back</a>", link_to('go back', :back)
124
+ end
125
+
126
+ def test_link_tag_with_back_and_no_referer
127
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {})
128
+ assert_dom_equal "<a href=\"javascript:history.back()\">go back</a>", link_to('go back', :back)
129
+ end
130
+
131
+ def test_link_tag_with_back
132
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {'HTTP_REFERER' => 'http://www.example.com/referer'})
133
+ assert_dom_equal "<a href=\"http://www.example.com/referer\">go back</a>", link_to('go back', :back)
134
+ end
135
+
136
+ def test_link_tag_with_back_and_no_referer
137
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show", nil, nil, {})
138
+ assert_dom_equal "<a href=\"javascript:history.back()\">go back</a>", link_to('go back', :back)
139
+ end
140
+
141
+ def test_link_tag_with_img
142
+ assert_dom_equal "<a href=\"http://www.example.com\"><img src='/favicon.jpg' /></a>", link_to("<img src='/favicon.jpg' />", "http://www.example.com")
143
+ end
144
+
145
+ def test_link_with_nil_html_options
146
+ assert_dom_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", {:action => 'myaction'}, nil)
147
+ end
148
+
149
+ def test_link_tag_with_custom_onclick
150
+ assert_dom_equal "<a href=\"http://www.example.com\" onclick=\"alert('yay!')\">Hello</a>", link_to("Hello", "http://www.example.com", :onclick => "alert('yay!')")
151
+ end
152
+
153
+ def test_link_tag_with_javascript_confirm
154
+ assert_dom_equal(
155
+ "<a href=\"http://www.example.com\" onclick=\"return confirm('Are you sure?');\">Hello</a>",
156
+ link_to("Hello", "http://www.example.com", :confirm => "Are you sure?")
157
+ )
158
+ assert_dom_equal(
159
+ "<a href=\"http://www.example.com\" onclick=\"return confirm('You can\\'t possibly be sure, can you?');\">Hello</a>",
160
+ link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure, can you?")
161
+ )
162
+ assert_dom_equal(
163
+ "<a href=\"http://www.example.com\" onclick=\"return confirm('You can\\'t possibly be sure,\\n can you?');\">Hello</a>",
164
+ link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure,\n can you?")
165
+ )
166
+ end
167
+
168
+ def test_link_tag_with_popup
169
+ assert_dom_equal(
170
+ "<a href=\"http://www.example.com\" onclick=\"window.open(this.href);return false;\">Hello</a>",
171
+ link_to("Hello", "http://www.example.com", :popup => true)
172
+ )
173
+ assert_dom_equal(
174
+ "<a href=\"http://www.example.com\" onclick=\"window.open(this.href);return false;\">Hello</a>",
175
+ link_to("Hello", "http://www.example.com", :popup => 'true')
176
+ )
177
+ assert_dom_equal(
178
+ "<a href=\"http://www.example.com\" onclick=\"window.open(this.href,'window_name','width=300,height=300');return false;\">Hello</a>",
179
+ link_to("Hello", "http://www.example.com", :popup => ['window_name', 'width=300,height=300'])
180
+ )
181
+ end
182
+
183
+ def test_link_tag_with_popup_and_javascript_confirm
184
+ assert_dom_equal(
185
+ "<a href=\"http://www.example.com\" onclick=\"if (confirm('Fo\\' sho\\'?')) { window.open(this.href); };return false;\">Hello</a>",
186
+ link_to("Hello", "http://www.example.com", { :popup => true, :confirm => "Fo' sho'?" })
187
+ )
188
+ assert_dom_equal(
189
+ "<a href=\"http://www.example.com\" onclick=\"if (confirm('Are you serious?')) { window.open(this.href,'window_name','width=300,height=300'); };return false;\">Hello</a>",
190
+ link_to("Hello", "http://www.example.com", { :popup => ['window_name', 'width=300,height=300'], :confirm => "Are you serious?" })
191
+ )
192
+ end
193
+
194
+ def test_link_tag_using_post_javascript
195
+ assert_dom_equal(
196
+ "<a href='http://www.example.com' onclick=\"var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();return false;\">Hello</a>",
197
+ link_to("Hello", "http://www.example.com", :method => :post)
198
+ )
199
+ end
200
+
201
+ def test_link_tag_using_delete_javascript
202
+ assert_dom_equal(
203
+ "<a href='http://www.example.com' onclick=\"var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit();return false;\">Destroy</a>",
204
+ link_to("Destroy", "http://www.example.com", :method => :delete)
205
+ )
206
+ end
207
+
208
+ def test_link_tag_using_delete_javascript_and_href
209
+ assert_dom_equal(
210
+ "<a href='\#' onclick=\"var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = 'http://www.example.com';var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);f.submit();return false;\">Destroy</a>",
211
+ link_to("Destroy", "http://www.example.com", :method => :delete, :href => '#')
212
+ )
213
+ end
214
+
215
+ def test_link_tag_using_post_javascript_and_confirm
216
+ assert_dom_equal(
217
+ "<a href=\"http://www.example.com\" onclick=\"if (confirm('Are you serious?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit(); };return false;\">Hello</a>",
218
+ link_to("Hello", "http://www.example.com", :method => :post, :confirm => "Are you serious?")
219
+ )
220
+ end
221
+
222
+ def test_link_tag_using_post_javascript_and_popup
223
+ assert_raise(ActionView::ActionViewError) { link_to("Hello", "http://www.example.com", :popup => true, :method => :post, :confirm => "Are you serious?") }
224
+ end
225
+
226
+ def test_link_tag_using_block_in_erb
227
+ __in_erb_template = ''
228
+
229
+ link_to("http://example.com") { concat("Example site") }
230
+
231
+ assert_equal '<a href="http://example.com">Example site</a>', output_buffer
232
+ end
233
+
234
+ def test_link_to_unless
235
+ assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog")
236
+ assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_unless(false, "Listing", :action => "list", :controller => "weblog")
237
+ assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1)
238
+ assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name, options, html_options|
239
+ "<strong>#{name}</strong>"
240
+ }
241
+ assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name|
242
+ "<strong>#{name}</strong>"
243
+ }
244
+ assert_equal "test", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) {
245
+ "test"
246
+ }
247
+ end
248
+
249
+ def test_link_to_if
250
+ assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog")
251
+ assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_if(true, "Listing", :action => "list", :controller => "weblog")
252
+ assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog", :id => 1)
253
+ end
254
+
255
+ def test_current_page_with_simple_url
256
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show")
257
+ @controller.url = "http://www.example.com/weblog/show"
258
+ assert current_page?({ :action => "show", :controller => "weblog" })
259
+ assert current_page?("http://www.example.com/weblog/show")
260
+ end
261
+
262
+ def test_current_page_ignoring_params
263
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
264
+ @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
265
+ assert current_page?({ :action => "show", :controller => "weblog" })
266
+ assert current_page?("http://www.example.com/weblog/show")
267
+ end
268
+
269
+ def test_current_page_with_params_that_match
270
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
271
+ @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
272
+ assert current_page?({ :action => "show", :controller => "weblog", :order => "desc", :page => "1" })
273
+ assert current_page?("http://www.example.com/weblog/show?order=desc&amp;page=1")
274
+ end
275
+
276
+ def test_link_unless_current
277
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show")
278
+ @controller.url = "http://www.example.com/weblog/show"
279
+ assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
280
+ assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
281
+
282
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
283
+ @controller.url = "http://www.example.com/weblog/show"
284
+ assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
285
+ assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
286
+
287
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
288
+ @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
289
+ assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog", :order=>'desc', :page=>'1' })
290
+ assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&amp;page=1")
291
+ assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=1")
292
+
293
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
294
+ @controller.url = "http://www.example.com/weblog/show?order=asc"
295
+ assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
296
+ assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=asc")
297
+
298
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
299
+ @controller.url = "http://www.example.com/weblog/show?order=desc&page=2"
300
+ assert_equal "<a href=\"http://www.example.com/weblog/show?order=desc&amp;page=2\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
301
+ assert_equal "<a href=\"http://www.example.com/weblog/show?order=desc&amp;page=2\">Showing</a>", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=2")
302
+
303
+
304
+ @controller.request = RequestMock.new("http://www.example.com/weblog/show")
305
+ @controller.url = "http://www.example.com/weblog/list"
306
+ assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
307
+ link_to_unless_current("Listing", :action => "list", :controller => "weblog")
308
+ assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
309
+ link_to_unless_current("Listing", "http://www.example.com/weblog/list")
310
+ end
311
+
312
+ def test_mail_to
313
+ assert_dom_equal "<a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a>", mail_to("david@loudthinking.com")
314
+ assert_dom_equal "<a href=\"mailto:david@loudthinking.com\">David Heinemeier Hansson</a>", mail_to("david@loudthinking.com", "David Heinemeier Hansson")
315
+ assert_dom_equal(
316
+ "<a class=\"admin\" href=\"mailto:david@loudthinking.com\">David Heinemeier Hansson</a>",
317
+ mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin")
318
+ )
319
+ assert_equal mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin"),
320
+ mail_to("david@loudthinking.com", "David Heinemeier Hansson", :class => "admin")
321
+ end
322
+
323
+ def test_mail_to_with_javascript
324
+ assert_dom_equal "<script type=\"text/javascript\">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", "My email", :encode => "javascript")
325
+ end
326
+
327
+ def test_mail_to_with_javascript_unicode
328
+ assert_dom_equal "<script type=\"text/javascript\">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%75%6e%69%63%6f%64%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d%22%3e%c3%ba%6e%69%63%6f%64%65%3c%2f%61%3e%27%29%3b'))</script>", mail_to("unicode@example.com", "únicode", :encode => "javascript")
329
+ end
330
+
331
+ def test_mail_with_options
332
+ assert_dom_equal(
333
+ %(<a href="mailto:me@example.com?cc=ccaddress%40example.com&amp;bcc=bccaddress%40example.com&amp;body=This%20is%20the%20body%20of%20the%20message.&amp;subject=This%20is%20an%20example%20email">My email</a>),
334
+ mail_to("me@example.com", "My email", :cc => "ccaddress@example.com", :bcc => "bccaddress@example.com", :subject => "This is an example email", :body => "This is the body of the message.")
335
+ )
336
+ end
337
+
338
+ def test_mail_to_with_img
339
+ assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>), mail_to('feedback@example.com', '<img src="/feedback.png" />')
340
+ end
341
+
342
+ def test_mail_to_with_hex
343
+ assert_dom_equal "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">My email</a>", mail_to("me@domain.com", "My email", :encode => "hex")
344
+ assert_dom_equal "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">&#109;&#101;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;</a>", mail_to("me@domain.com", nil, :encode => "hex")
345
+ end
346
+
347
+ def test_mail_to_with_replace_options
348
+ assert_dom_equal "<a href=\"mailto:wolfgang@stufenlos.net\">wolfgang(at)stufenlos(dot)net</a>", mail_to("wolfgang@stufenlos.net", nil, :replace_at => "(at)", :replace_dot => "(dot)")
349
+ assert_dom_equal "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">&#109;&#101;&#40;&#97;&#116;&#41;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;</a>", mail_to("me@domain.com", nil, :encode => "hex", :replace_at => "(at)")
350
+ assert_dom_equal "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">My email</a>", mail_to("me@domain.com", "My email", :encode => "hex", :replace_at => "(at)")
351
+ assert_dom_equal "<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">&#109;&#101;&#40;&#97;&#116;&#41;&#100;&#111;&#109;&#97;&#105;&#110;&#40;&#100;&#111;&#116;&#41;&#99;&#111;&#109;</a>", mail_to("me@domain.com", nil, :encode => "hex", :replace_at => "(at)", :replace_dot => "(dot)")
352
+ assert_dom_equal "<script type=\"text/javascript\">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", "My email", :encode => "javascript", :replace_at => "(at)", :replace_dot => "(dot)")
353
+ assert_dom_equal "<script type=\"text/javascript\">eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%6d%65%28%61%74%29%64%6f%6d%61%69%6e%28%64%6f%74%29%63%6f%6d%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", nil, :encode => "javascript", :replace_at => "(at)", :replace_dot => "(dot)")
354
+ end
355
+
356
+ def protect_against_forgery?
357
+ false
358
+ end
359
+ end
360
+
361
+ class UrlHelperWithControllerTest < ActionView::TestCase
362
+ class UrlHelperController < ActionController::Base
363
+ def self.controller_path; 'url_helper_with_controller' end
364
+
365
+ def show_url_for
366
+ render :inline => "<%= url_for :controller => 'url_helper_with_controller', :action => 'show_url_for' %>"
367
+ end
368
+
369
+ def show_named_route
370
+ render :inline => "<%= show_named_route_#{params[:kind]} %>"
371
+ end
372
+
373
+ def nil_url_for
374
+ render :inline => '<%= url_for(nil) %>'
375
+ end
376
+
377
+ def rescue_action(e) raise e end
378
+ end
379
+
380
+ tests ActionView::Helpers::UrlHelper
381
+
382
+ def setup
383
+ @request = ActionController::TestRequest.new
384
+ @response = ActionController::TestResponse.new
385
+ @controller = UrlHelperController.new
386
+ end
387
+
388
+ def test_url_for_shows_only_path
389
+ get :show_url_for
390
+ assert_equal '/url_helper_with_controller/show_url_for', @response.body
391
+ end
392
+
393
+ def test_named_route_url_shows_host_and_path
394
+ with_url_helper_routing do
395
+ get :show_named_route, :kind => 'url'
396
+ assert_equal 'http://test.host/url_helper_with_controller/show_named_route', @response.body
397
+ end
398
+ end
399
+
400
+ def test_named_route_path_shows_only_path
401
+ with_url_helper_routing do
402
+ get :show_named_route, :kind => 'path'
403
+ assert_equal '/url_helper_with_controller/show_named_route', @response.body
404
+ end
405
+ end
406
+
407
+ def test_url_for_nil_returns_current_path
408
+ get :nil_url_for
409
+ assert_equal '/url_helper_with_controller/nil_url_for', @response.body
410
+ end
411
+
412
+ def test_named_route_should_show_host_and_path_using_controller_default_url_options
413
+ class << @controller
414
+ def default_url_options(options = nil)
415
+ {:host => 'testtwo.host'}
416
+ end
417
+ end
418
+
419
+ with_url_helper_routing do
420
+ get :show_named_route, :kind => 'url'
421
+ assert_equal 'http://testtwo.host/url_helper_with_controller/show_named_route', @response.body
422
+ end
423
+ end
424
+
425
+ protected
426
+ def with_url_helper_routing
427
+ with_routing do |set|
428
+ set.draw do |map|
429
+ map.show_named_route 'url_helper_with_controller/show_named_route', :controller => 'url_helper_with_controller', :action => 'show_named_route'
430
+ end
431
+ yield
432
+ end
433
+ end
434
+ end
435
+
436
+ class LinkToUnlessCurrentWithControllerTest < ActionView::TestCase
437
+ class TasksController < ActionController::Base
438
+ def self.controller_path; 'tasks' end
439
+
440
+ def index
441
+ render_default
442
+ end
443
+
444
+ def show
445
+ render_default
446
+ end
447
+
448
+ def rescue_action(e) raise e end
449
+
450
+ protected
451
+ def render_default
452
+ render :inline =>
453
+ "<%= link_to_unless_current(\"tasks\", tasks_path) %>\n" +
454
+ "<%= link_to_unless_current(\"tasks\", tasks_url) %>"
455
+ end
456
+ end
457
+
458
+ tests ActionView::Helpers::UrlHelper
459
+
460
+ def setup
461
+ @request = ActionController::TestRequest.new
462
+ @response = ActionController::TestResponse.new
463
+ @controller = TasksController.new
464
+ end
465
+
466
+ def test_link_to_unless_current_to_current
467
+ with_restful_routing do
468
+ get :index
469
+ assert_equal "tasks\ntasks", @response.body
470
+ end
471
+ end
472
+
473
+ def test_link_to_unless_current_shows_link
474
+ with_restful_routing do
475
+ get :show, :id => 1
476
+ assert_equal "<a href=\"/tasks\">tasks</a>\n" +
477
+ "<a href=\"#{@request.protocol}#{@request.host_with_port}/tasks\">tasks</a>",
478
+ @response.body
479
+ end
480
+ end
481
+
482
+ protected
483
+ def with_restful_routing
484
+ with_routing do |set|
485
+ set.draw do |map|
486
+ map.resources :tasks
487
+ end
488
+ yield
489
+ end
490
+ end
491
+ end
492
+
493
+ class Workshop
494
+ attr_accessor :id, :new_record
495
+
496
+ def initialize(id, new_record)
497
+ @id, @new_record = id, new_record
498
+ end
499
+
500
+ def new_record?
501
+ @new_record
502
+ end
503
+
504
+ def to_s
505
+ id.to_s
506
+ end
507
+ end
508
+
509
+ class Session
510
+ attr_accessor :id, :workshop_id, :new_record
511
+
512
+ def initialize(id, new_record)
513
+ @id, @new_record = id, new_record
514
+ end
515
+
516
+ def new_record?
517
+ @new_record
518
+ end
519
+
520
+ def to_s
521
+ id.to_s
522
+ end
523
+ end
524
+
525
+ class PolymorphicControllerTest < ActionView::TestCase
526
+ class WorkshopsController < ActionController::Base
527
+ def self.controller_path; 'workshops' end
528
+
529
+ def index
530
+ @workshop = Workshop.new(1, true)
531
+ render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>"
532
+ end
533
+
534
+ def show
535
+ @workshop = Workshop.new(params[:id], false)
536
+ render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>"
537
+ end
538
+
539
+ def rescue_action(e) raise e end
540
+ end
541
+
542
+ class SessionsController < ActionController::Base
543
+ def self.controller_path; 'sessions' end
544
+
545
+ def index
546
+ @workshop = Workshop.new(params[:workshop_id], false)
547
+ @session = Session.new(1, true)
548
+ render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>"
549
+ end
550
+
551
+ def show
552
+ @workshop = Workshop.new(params[:workshop_id], false)
553
+ @session = Session.new(params[:id], false)
554
+ render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>"
555
+ end
556
+
557
+ def rescue_action(e) raise e end
558
+ end
559
+
560
+ tests ActionView::Helpers::UrlHelper
561
+
562
+ def setup
563
+ @request = ActionController::TestRequest.new
564
+ @response = ActionController::TestResponse.new
565
+ end
566
+
567
+ def test_new_resource
568
+ @controller = WorkshopsController.new
569
+
570
+ with_restful_routing do
571
+ get :index
572
+ assert_equal "/workshops\n<a href=\"/workshops\">Workshop</a>", @response.body
573
+ end
574
+ end
575
+
576
+ def test_existing_resource
577
+ @controller = WorkshopsController.new
578
+
579
+ with_restful_routing do
580
+ get :show, :id => 1
581
+ assert_equal "/workshops/1\n<a href=\"/workshops/1\">Workshop</a>", @response.body
582
+ end
583
+ end
584
+
585
+ def test_new_nested_resource
586
+ @controller = SessionsController.new
587
+
588
+ with_restful_routing do
589
+ get :index, :workshop_id => 1
590
+ assert_equal "/workshops/1/sessions\n<a href=\"/workshops/1/sessions\">Session</a>", @response.body
591
+ end
592
+ end
593
+
594
+ def test_existing_nested_resource
595
+ @controller = SessionsController.new
596
+
597
+ with_restful_routing do
598
+ get :show, :workshop_id => 1, :id => 1
599
+ assert_equal "/workshops/1/sessions/1\n<a href=\"/workshops/1/sessions/1\">Session</a>", @response.body
600
+ end
601
+ end
602
+
603
+ protected
604
+ def with_restful_routing
605
+ with_routing do |set|
606
+ set.draw do |map|
607
+ map.resources :workshops do |w|
608
+ w.resources :sessions
609
+ end
610
+ end
611
+ yield
612
+ end
613
+ end
614
+ end