2005-03-09 13:53:47 +00:00
require File . dirname ( __FILE__ ) + '/../abstract_unit'
2004-11-24 01:04:44 +00:00
require File . dirname ( __FILE__ ) + '/../../lib/action_view/helpers/url_helper'
2005-03-14 00:18:12 +00:00
require File . dirname ( __FILE__ ) + '/../../lib/action_view/helpers/asset_tag_helper'
2004-11-24 01:04:44 +00:00
require File . dirname ( __FILE__ ) + '/../../lib/action_view/helpers/tag_helper'
2005-02-23 15:05:04 +00:00
RequestMock = Struct . new ( " Request " , :request_uri )
2004-11-24 01:04:44 +00:00
class UrlHelperTest < Test :: Unit :: TestCase
2005-03-14 00:18:12 +00:00
include ActionView :: Helpers :: AssetTagHelper
2004-11-24 01:04:44 +00:00
include ActionView :: Helpers :: UrlHelper
include ActionView :: Helpers :: TagHelper
def setup
@controller = Class . new do
def url_for ( options , * parameters_for_method_reference )
2005-03-06 12:27:06 +00:00
" http://www.example.com "
2004-11-24 01:04:44 +00:00
end
end
@controller = @controller . new
end
# todo: missing test cases
2005-06-16 06:17:51 +00:00
def test_button_to_with_straight_url
assert_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 " )
end
def test_button_to_with_javascript_confirm
assert_equal (
" <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> " ,
button_to ( " Hello " , " http://www.example.com " , :confirm = > " Are you sure? " )
)
end
def test_button_to_enabled_disabled
assert_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 " , :disabled = > false )
)
assert_equal (
" <form method= \" post \" action= \" http://www.example.com \" class= \" button-to \" ><div><input disabled= \" disabled \" type= \" submit \" value= \" Hello \" /></div></form> " ,
button_to ( " Hello " , " http://www.example.com " , :disabled = > true )
)
end
2004-11-24 01:04:44 +00:00
def test_link_tag_with_straight_url
2005-03-06 12:27:06 +00:00
assert_equal " <a href= \" http://www.example.com \" >Hello</a> " , link_to ( " Hello " , " http://www.example.com " )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2005-09-08 17:54:16 +00:00
def test_link_tag_with_custom_onclick
assert_equal " <a href= \" http://www.example.com \" onclick= \" alert('yay!') \" >Hello</a> " , link_to ( " Hello " , " http://www.example.com " , :onclick = > " alert('yay!') " )
end
2004-11-24 01:04:44 +00:00
def test_link_tag_with_javascript_confirm
assert_equal (
2005-03-06 12:27:06 +00:00
" <a href= \" http://www.example.com \" onclick= \" return confirm('Are you sure?'); \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :confirm = > " Are you sure? " )
2004-11-24 01:04:44 +00:00
)
2005-03-06 12:07:13 +00:00
assert_equal (
2005-03-06 12:27:06 +00:00
" <a href= \" http://www.example.com \" onclick= \" return confirm('You can \\ 't possibly be sure, can you?'); \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :confirm = > " You can't possibly be sure, can you? " )
2005-03-06 12:07:13 +00:00
)
2005-08-14 08:43:07 +00:00
assert_equal (
" <a href= \" http://www.example.com \" onclick= \" return confirm('You can \\ 't possibly be sure, \\ n can you?'); \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :confirm = > " You can't possibly be sure, \n can you? " )
)
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2005-09-04 00:33:45 +00:00
def test_link_tag_with_popup
assert_equal (
" <a href= \" http://www.example.com \" onclick= \" window.open(this.href);return false; \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :popup = > true )
)
assert_equal (
" <a href= \" http://www.example.com \" onclick= \" window.open(this.href);return false; \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :popup = > 'true' )
)
assert_equal (
" <a href= \" http://www.example.com \" onclick= \" window.open(this.href,'window_name','width=300,height=300');return false; \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :popup = > [ 'window_name' , 'width=300,height=300' ] )
)
end
def test_link_tag_with_popup_and_javascript_confirm
assert_equal (
" <a href= \" http://www.example.com \" onclick= \" if (confirm('Fo \\ ' sho \\ '?')) { window.open(this.href); };return false; \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , { :popup = > true , :confirm = > " Fo' sho'? " } )
)
assert_equal (
" <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> " ,
link_to ( " Hello " , " http://www.example.com " , { :popup = > [ 'window_name' , 'width=300,height=300' ] , :confirm = > " Are you serious? " } )
)
end
2005-09-07 12:56:33 +00:00
def test_link_tag_using_post_javascript
assert_equal (
2005-09-07 13:04:09 +00:00
" <a href= \" http://www.example.com \" onclick= \" f = document.createElement('form'); document.body.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit();return false; \" >Hello</a> " ,
2005-09-07 12:56:33 +00:00
link_to ( " Hello " , " http://www.example.com " , :post = > true )
)
end
def test_link_tag_using_post_javascript_and_confirm
assert_equal (
2005-09-08 16:30:13 +00:00
" <a href= \" http://www.example.com \" onclick= \" if (confirm('Are you serious?')) { f = document.createElement('form'); document.body.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false; \" >Hello</a> " ,
2005-09-07 12:56:33 +00:00
link_to ( " Hello " , " http://www.example.com " , :post = > true , :confirm = > " Are you serious? " )
)
end
def test_link_tag_using_post_javascript_and_popup
assert_raises ( ActionView :: ActionViewError ) { link_to ( " Hello " , " http://www.example.com " , :popup = > true , :post = > true , :confirm = > " Are you serious? " ) }
end
2005-03-06 14:06:33 +00:00
def test_link_to_unless
assert_equal " Showing " , link_to_unless ( true , " Showing " , :action = > " show " , :controller = > " weblog " )
assert " <a href= \" http://www.example.com \" >Listing</a> " , link_to_unless ( false , " Listing " , :action = > " list " , :controller = > " weblog " )
assert_equal " Showing " , link_to_unless ( true , " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 )
assert_equal " <strong>Showing</strong> " , link_to_unless ( true , " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 ) { | name , options , html_options , * parameters_for_method_reference |
" <strong> #{ name } </strong> "
}
assert_equal " <strong>Showing</strong> " , link_to_unless ( true , " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 ) { | name |
" <strong> #{ name } </strong> "
}
assert_equal " test " , link_to_unless ( true , " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 ) {
" test "
}
end
def test_link_to_if
assert_equal " Showing " , link_to_if ( false , " Showing " , :action = > " show " , :controller = > " weblog " )
assert " <a href= \" http://www.example.com \" >Listing</a> " , link_to_if ( true , " Listing " , :action = > " list " , :controller = > " weblog " )
assert_equal " Showing " , link_to_if ( false , " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 )
end
2004-11-24 01:04:44 +00:00
def test_link_unless_current
2005-03-06 12:27:06 +00:00
@request = RequestMock . new ( " http://www.example.com " )
2004-11-24 01:04:44 +00:00
assert_equal " Showing " , link_to_unless_current ( " Showing " , :action = > " show " , :controller = > " weblog " )
2005-03-06 12:27:06 +00:00
@request = RequestMock . new ( " http://www.example.org " )
assert " <a href= \" http://www.example.com \" >Listing</a> " , link_to_unless_current ( " Listing " , :action = > " list " , :controller = > " weblog " )
2004-12-22 22:50:44 +00:00
2005-03-06 12:27:06 +00:00
@request = RequestMock . new ( " http://www.example.com " )
2004-12-22 22:50:44 +00:00
assert_equal " Showing " , link_to_unless_current ( " Showing " , :action = > " show " , :controller = > " weblog " , :id = > 1 )
2004-11-24 01:04:44 +00:00
end
def test_mail_to
assert_equal " <a href= \" mailto:david@loudthinking.com \" >david@loudthinking.com</a> " , mail_to ( " david@loudthinking.com " )
assert_equal " <a href= \" mailto:david@loudthinking.com \" >David Heinemeier Hansson</a> " , mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " )
assert_equal (
2005-03-06 11:50:41 +00:00
" <a class= \" admin \" href= \" mailto:david@loudthinking.com \" >David Heinemeier Hansson</a> " ,
2004-11-24 01:04:44 +00:00
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " )
)
2005-03-06 11:50:41 +00:00
assert_equal mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " ) ,
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , :class = > " admin " )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2005-03-09 13:53:47 +00:00
def test_mail_to_with_javascript
assert_equal " <script type= \" text/javascript \" language= \" javascript \" >eval(unescape('%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 " )
end
2005-04-02 08:16:57 +00:00
def test_mail_with_options
assert_equal (
%( <a href="mailto:me@example.com?cc=ccaddress%40example.com&bcc=bccaddress%40example.com&body=This%20is%20the%20body%20of%20the%20message.&subject=This%20is%20an%20example%20email">My email</a> ) ,
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. " )
)
end
2005-03-09 13:53:47 +00:00
def test_mail_to_with_hex
assert_equal " <a href= \" mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >My email</a> " , mail_to ( " me@domain.com " , " My email " , :encode = > " hex " )
end
2005-07-02 06:46:41 +00:00
def test_mail_to_with_replace_options
assert_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) " )
assert_equal " <a href= \" mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >me(at)domain.com</a> " , mail_to ( " me@domain.com " , nil , :encode = > " hex " , :replace_at = > " (at) " )
assert_equal " <a href= \" mailto:%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) " )
assert_equal " <a href= \" mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >me(at)domain(dot)com</a> " , mail_to ( " me@domain.com " , nil , :encode = > " hex " , :replace_at = > " (at) " , :replace_dot = > " (dot) " )
assert_equal " <script type= \" text/javascript \" language= \" javascript \" >eval(unescape('%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) " )
end
2004-11-24 01:04:44 +00:00
def test_link_with_nil_html_options
2005-03-06 12:27:06 +00:00
assert_equal " <a href= \" http://www.example.com \" >Hello</a> " , link_to ( " Hello " , { :action = > 'myaction' } , nil )
2004-11-24 01:04:44 +00:00
end
2004-12-22 22:50:44 +00:00
end