~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/actionpack/test/template/url_helper_test.rb

  • Committer: Richard Lee (Canonical)
  • Date: 2010-10-15 15:17:58 UTC
  • mfrom: (190.1.3 use-case-mapper)
  • Revision ID: richard.lee@canonical.com-20101015151758-wcvmfxrexsongf9d
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
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_delete_javascript_and_href_and_confirm
223
 
    assert_dom_equal(
224
 
      "<a href='\#' onclick=\"if (confirm('Are you serious?')) { 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>",
225
 
      link_to("Destroy", "http://www.example.com", :method => :delete, :href => '#', :confirm => "Are you serious?"),
226
 
      "When specifying url, form should be generated with it, but not this.href"
227
 
    )
228
 
  end
229
 
 
230
 
  def test_link_tag_using_post_javascript_and_popup
231
 
    assert_raise(ActionView::ActionViewError) { link_to("Hello", "http://www.example.com", :popup => true, :method => :post, :confirm => "Are you serious?") }
232
 
  end
233
 
 
234
 
  def test_link_tag_using_block_in_erb
235
 
    __in_erb_template = ''
236
 
 
237
 
    link_to("http://example.com") { concat("Example site") }
238
 
 
239
 
    assert_equal '<a href="http://example.com">Example site</a>', output_buffer
240
 
  end
241
 
 
242
 
  def test_link_to_unless
243
 
    assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog")
244
 
    assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_unless(false, "Listing", :action => "list", :controller => "weblog")
245
 
    assert_equal "Showing", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1)
246
 
    assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name, options, html_options|
247
 
      "<strong>#{name}</strong>"
248
 
    }
249
 
    assert_equal "<strong>Showing</strong>", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) { |name|
250
 
      "<strong>#{name}</strong>"
251
 
    }
252
 
    assert_equal "test", link_to_unless(true, "Showing", :action => "show", :controller => "weblog", :id => 1) {
253
 
      "test"
254
 
    }
255
 
  end
256
 
 
257
 
  def test_link_to_if
258
 
    assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog")
259
 
    assert_dom_equal "<a href=\"http://www.example.com\">Listing</a>", link_to_if(true, "Listing", :action => "list", :controller => "weblog")
260
 
    assert_equal "Showing", link_to_if(false, "Showing", :action => "show", :controller => "weblog", :id => 1)
261
 
  end
262
 
 
263
 
  def test_current_page_with_simple_url
264
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show")
265
 
    @controller.url = "http://www.example.com/weblog/show"
266
 
    assert current_page?({ :action => "show", :controller => "weblog" })
267
 
    assert current_page?("http://www.example.com/weblog/show")
268
 
  end
269
 
  
270
 
  def test_current_page_ignoring_params
271
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
272
 
    @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
273
 
    assert current_page?({ :action => "show", :controller => "weblog" })
274
 
    assert current_page?("http://www.example.com/weblog/show")
275
 
  end
276
 
  
277
 
  def test_current_page_with_params_that_match
278
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
279
 
    @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
280
 
    assert current_page?({ :action => "show", :controller => "weblog", :order => "desc", :page => "1" })
281
 
    assert current_page?("http://www.example.com/weblog/show?order=desc&amp;page=1")
282
 
  end
283
 
  
284
 
  def test_link_unless_current
285
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show")
286
 
    @controller.url = "http://www.example.com/weblog/show"
287
 
    assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
288
 
    assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
289
 
 
290
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
291
 
    @controller.url = "http://www.example.com/weblog/show"
292
 
    assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
293
 
    assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show")
294
 
 
295
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
296
 
    @controller.url = "http://www.example.com/weblog/show?order=desc&page=1"
297
 
    assert_equal "Showing", link_to_unless_current("Showing", { :action => "show", :controller => "weblog", :order=>'desc', :page=>'1' })
298
 
    assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&amp;page=1")
299
 
    assert_equal "Showing", link_to_unless_current("Showing", "http://www.example.com/weblog/show?order=desc&page=1")
300
 
 
301
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc")
302
 
    @controller.url = "http://www.example.com/weblog/show?order=asc"
303
 
    assert_equal "<a href=\"http://www.example.com/weblog/show?order=asc\">Showing</a>", link_to_unless_current("Showing", { :action => "show", :controller => "weblog" })
304
 
    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")
305
 
 
306
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show?order=desc&page=1")
307
 
    @controller.url = "http://www.example.com/weblog/show?order=desc&page=2"
308
 
    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" })
309
 
    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")
310
 
 
311
 
 
312
 
    @controller.request = RequestMock.new("http://www.example.com/weblog/show")
313
 
    @controller.url = "http://www.example.com/weblog/list"
314
 
    assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
315
 
      link_to_unless_current("Listing", :action => "list", :controller => "weblog")
316
 
    assert_equal "<a href=\"http://www.example.com/weblog/list\">Listing</a>",
317
 
      link_to_unless_current("Listing", "http://www.example.com/weblog/list")
318
 
  end
319
 
 
320
 
  def test_mail_to
321
 
    assert_dom_equal "<a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a>", mail_to("david@loudthinking.com")
322
 
    assert_dom_equal "<a href=\"mailto:david@loudthinking.com\">David Heinemeier Hansson</a>", mail_to("david@loudthinking.com", "David Heinemeier Hansson")
323
 
    assert_dom_equal(
324
 
      "<a class=\"admin\" href=\"mailto:david@loudthinking.com\">David Heinemeier Hansson</a>",
325
 
      mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin")
326
 
    )
327
 
    assert_equal mail_to("david@loudthinking.com", "David Heinemeier Hansson", "class" => "admin"),
328
 
                 mail_to("david@loudthinking.com", "David Heinemeier Hansson", :class => "admin")
329
 
  end
330
 
 
331
 
  def test_mail_to_with_javascript
332
 
    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")
333
 
  end
334
 
 
335
 
  def test_mail_to_with_javascript_unicode
336
 
    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")
337
 
  end
338
 
 
339
 
  def test_mail_with_options
340
 
    assert_dom_equal(
341
 
      %(<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>),
342
 
      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.")
343
 
    )
344
 
  end
345
 
 
346
 
  def test_mail_to_with_img
347
 
    assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>), mail_to('feedback@example.com', '<img src="/feedback.png" />')
348
 
  end
349
 
 
350
 
  def test_mail_to_with_hex
351
 
    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")
352
 
    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")
353
 
  end
354
 
 
355
 
  def test_mail_to_with_replace_options
356
 
    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)")
357
 
    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)")
358
 
    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)")
359
 
    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)")
360
 
    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)")
361
 
    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)")
362
 
  end
363
 
  
364
 
  def protect_against_forgery?
365
 
    false
366
 
  end
367
 
end
368
 
 
369
 
class UrlHelperWithControllerTest < ActionView::TestCase
370
 
  class UrlHelperController < ActionController::Base
371
 
    def self.controller_path; 'url_helper_with_controller' end
372
 
 
373
 
    def show_url_for
374
 
      render :inline => "<%= url_for :controller => 'url_helper_with_controller', :action => 'show_url_for' %>"
375
 
    end
376
 
 
377
 
    def show_named_route
378
 
      render :inline => "<%= show_named_route_#{params[:kind]} %>"
379
 
    end
380
 
 
381
 
    def nil_url_for
382
 
      render :inline => '<%= url_for(nil) %>'
383
 
    end
384
 
 
385
 
    def rescue_action(e) raise e end
386
 
  end
387
 
 
388
 
  tests ActionView::Helpers::UrlHelper
389
 
 
390
 
  def setup
391
 
    @request    = ActionController::TestRequest.new
392
 
    @response   = ActionController::TestResponse.new
393
 
    @controller = UrlHelperController.new
394
 
  end
395
 
 
396
 
  def test_url_for_shows_only_path
397
 
    get :show_url_for
398
 
    assert_equal '/url_helper_with_controller/show_url_for', @response.body
399
 
  end
400
 
 
401
 
  def test_named_route_url_shows_host_and_path
402
 
    with_url_helper_routing do
403
 
      get :show_named_route, :kind => 'url'
404
 
      assert_equal 'http://test.host/url_helper_with_controller/show_named_route', @response.body
405
 
    end
406
 
  end
407
 
 
408
 
  def test_named_route_path_shows_only_path
409
 
    with_url_helper_routing do
410
 
      get :show_named_route, :kind => 'path'
411
 
      assert_equal '/url_helper_with_controller/show_named_route', @response.body
412
 
    end
413
 
  end
414
 
 
415
 
  def test_url_for_nil_returns_current_path
416
 
    get :nil_url_for
417
 
    assert_equal '/url_helper_with_controller/nil_url_for', @response.body
418
 
  end
419
 
 
420
 
  def test_named_route_should_show_host_and_path_using_controller_default_url_options
421
 
    class << @controller
422
 
      def default_url_options(options = nil)
423
 
        {:host => 'testtwo.host'}
424
 
      end
425
 
    end
426
 
 
427
 
    with_url_helper_routing do
428
 
      get :show_named_route, :kind => 'url'
429
 
      assert_equal 'http://testtwo.host/url_helper_with_controller/show_named_route', @response.body
430
 
    end
431
 
  end
432
 
 
433
 
  protected
434
 
    def with_url_helper_routing
435
 
      with_routing do |set|
436
 
        set.draw do |map|
437
 
          map.show_named_route 'url_helper_with_controller/show_named_route', :controller => 'url_helper_with_controller', :action => 'show_named_route'
438
 
        end
439
 
        yield
440
 
      end
441
 
    end
442
 
end
443
 
 
444
 
class LinkToUnlessCurrentWithControllerTest < ActionView::TestCase
445
 
  class TasksController < ActionController::Base
446
 
    def self.controller_path; 'tasks' end
447
 
 
448
 
    def index
449
 
      render_default
450
 
    end
451
 
 
452
 
    def show
453
 
      render_default
454
 
    end
455
 
 
456
 
    def rescue_action(e) raise e end
457
 
 
458
 
    protected
459
 
      def render_default
460
 
        render :inline =>
461
 
          "<%= link_to_unless_current(\"tasks\", tasks_path) %>\n" +
462
 
          "<%= link_to_unless_current(\"tasks\", tasks_url) %>"
463
 
      end
464
 
  end
465
 
 
466
 
  tests ActionView::Helpers::UrlHelper
467
 
 
468
 
  def setup
469
 
    @request    = ActionController::TestRequest.new
470
 
    @response   = ActionController::TestResponse.new
471
 
    @controller = TasksController.new
472
 
  end
473
 
 
474
 
  def test_link_to_unless_current_to_current
475
 
    with_restful_routing do
476
 
      get :index
477
 
      assert_equal "tasks\ntasks", @response.body
478
 
    end
479
 
  end
480
 
 
481
 
  def test_link_to_unless_current_shows_link
482
 
    with_restful_routing do
483
 
      get :show, :id => 1
484
 
      assert_equal "<a href=\"/tasks\">tasks</a>\n" +
485
 
        "<a href=\"#{@request.protocol}#{@request.host_with_port}/tasks\">tasks</a>",
486
 
        @response.body
487
 
    end
488
 
  end
489
 
 
490
 
  protected
491
 
    def with_restful_routing
492
 
      with_routing do |set|
493
 
        set.draw do |map|
494
 
          map.resources :tasks
495
 
        end
496
 
        yield
497
 
      end
498
 
    end
499
 
end
500
 
 
501
 
class Workshop
502
 
  attr_accessor :id, :new_record
503
 
 
504
 
  def initialize(id, new_record)
505
 
    @id, @new_record = id, new_record
506
 
  end
507
 
 
508
 
  def new_record?
509
 
    @new_record
510
 
  end
511
 
 
512
 
  def to_s
513
 
    id.to_s
514
 
  end
515
 
end
516
 
 
517
 
class Session
518
 
  attr_accessor :id, :workshop_id, :new_record
519
 
 
520
 
  def initialize(id, new_record)
521
 
    @id, @new_record = id, new_record
522
 
  end
523
 
 
524
 
  def new_record?
525
 
    @new_record
526
 
  end
527
 
 
528
 
  def to_s
529
 
    id.to_s
530
 
  end
531
 
end
532
 
 
533
 
class PolymorphicControllerTest < ActionView::TestCase
534
 
  class WorkshopsController < ActionController::Base
535
 
    def self.controller_path; 'workshops' end
536
 
 
537
 
    def index
538
 
      @workshop = Workshop.new(1, true)
539
 
      render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>"
540
 
    end
541
 
 
542
 
    def show
543
 
      @workshop = Workshop.new(params[:id], false)
544
 
      render :inline => "<%= url_for(@workshop) %>\n<%= link_to('Workshop', @workshop) %>"
545
 
    end
546
 
 
547
 
    def rescue_action(e) raise e end
548
 
  end
549
 
 
550
 
  class SessionsController < ActionController::Base
551
 
    def self.controller_path; 'sessions' end
552
 
 
553
 
    def index
554
 
      @workshop = Workshop.new(params[:workshop_id], false)
555
 
      @session = Session.new(1, true)
556
 
      render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>"
557
 
    end
558
 
 
559
 
    def show
560
 
      @workshop = Workshop.new(params[:workshop_id], false)
561
 
      @session = Session.new(params[:id], false)
562
 
      render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>"
563
 
    end
564
 
 
565
 
    def rescue_action(e) raise e end
566
 
  end
567
 
 
568
 
  tests ActionView::Helpers::UrlHelper
569
 
 
570
 
  def setup
571
 
    @request    = ActionController::TestRequest.new
572
 
    @response   = ActionController::TestResponse.new
573
 
  end
574
 
 
575
 
  def test_new_resource
576
 
    @controller = WorkshopsController.new
577
 
 
578
 
    with_restful_routing do
579
 
      get :index
580
 
      assert_equal "/workshops\n<a href=\"/workshops\">Workshop</a>", @response.body
581
 
    end
582
 
  end
583
 
 
584
 
  def test_existing_resource
585
 
    @controller = WorkshopsController.new
586
 
 
587
 
    with_restful_routing do
588
 
      get :show, :id => 1
589
 
      assert_equal "/workshops/1\n<a href=\"/workshops/1\">Workshop</a>", @response.body
590
 
    end
591
 
  end
592
 
 
593
 
  def test_new_nested_resource
594
 
    @controller = SessionsController.new
595
 
 
596
 
    with_restful_routing do
597
 
      get :index, :workshop_id => 1
598
 
      assert_equal "/workshops/1/sessions\n<a href=\"/workshops/1/sessions\">Session</a>", @response.body
599
 
    end
600
 
  end
601
 
 
602
 
  def test_existing_nested_resource
603
 
    @controller = SessionsController.new
604
 
 
605
 
    with_restful_routing do
606
 
      get :show, :workshop_id => 1, :id => 1
607
 
      assert_equal "/workshops/1/sessions/1\n<a href=\"/workshops/1/sessions/1\">Session</a>", @response.body
608
 
    end
609
 
  end
610
 
 
611
 
  protected
612
 
    def with_restful_routing
613
 
      with_routing do |set|
614
 
        set.draw do |map|
615
 
          map.resources :workshops do |w|
616
 
            w.resources :sessions
617
 
          end
618
 
        end
619
 
        yield
620
 
      end
621
 
    end
622
 
end