2010-04-24 21:35:12 -04:00
# encoding: us-ascii
2007-12-21 06:51:17 -05:00
require 'abstract_unit'
require 'testing_sandbox'
2010-06-08 07:22:48 -04:00
2008-04-19 14:06:57 -04:00
class TextHelperTest < ActionView :: TestCase
tests ActionView :: Helpers :: TextHelper
2005-09-19 17:36:36 -04:00
include TestingSandbox
2007-09-22 20:11:08 -04:00
2005-09-12 01:26:25 -04:00
def setup
2009-04-08 20:33:06 -04:00
super
2005-09-12 01:26:25 -04:00
# This simulates the fact that instance variables are reset every time
# a view is rendered. The cycle helper depends on this behavior.
@_cycles = nil if ( defined? @_cycles )
end
2006-11-19 04:57:16 -05:00
2008-06-06 21:00:01 -04:00
def test_concat
2008-06-08 23:05:39 -04:00
self . output_buffer = 'foo'
2008-06-20 01:03:27 -04:00
assert_equal 'foobar' , concat ( 'bar' )
2008-06-08 23:05:39 -04:00
assert_equal 'foobar' , output_buffer
2008-06-06 21:00:01 -04:00
end
2005-03-20 10:03:32 -05:00
def test_simple_format
2006-11-19 04:57:16 -05:00
assert_equal " <p></p> " , simple_format ( nil )
2005-03-20 10:03:32 -05:00
assert_equal " <p>crazy \n <br /> cross \n <br /> platform linebreaks</p> " , simple_format ( " crazy \r \n cross \r platform linebreaks " )
assert_equal " <p>A paragraph</p> \n \n <p>and another one!</p> " , simple_format ( " A paragraph \n \n and another one! " )
assert_equal " <p>A paragraph \n <br /> With a newline</p> " , simple_format ( " A paragraph \n With a newline " )
2006-11-19 04:57:16 -05:00
text = " A \n B \n C \n D " . freeze
2006-10-22 19:58:41 -04:00
assert_equal " <p>A \n <br />B \n <br />C \n <br />D</p> " , simple_format ( text )
2006-11-19 04:57:16 -05:00
text = " A \r \n \n B \n \n \r \n \t \n C \n D " . freeze
assert_equal " <p>A \n <br /> \n <br />B</p> \n \n <p> \t \n <br />C \n <br />D</p> " , simple_format ( text )
2008-05-14 15:34:28 -04:00
2008-03-23 22:29:30 -04:00
assert_equal %q( <p class="test">This is a classy test</p> ) , simple_format ( " This is a classy test " , :class = > 'test' )
2008-05-14 15:34:28 -04:00
assert_equal %Q( <p class="test">para 1</p> \n \n <p class="test">para 2</p> ) , simple_format ( " para 1 \n \n para 2 " , :class = > 'test' )
2005-03-20 10:03:32 -05:00
end
2006-11-19 04:57:16 -05:00
2010-02-12 20:24:04 -05:00
def test_simple_format_should_be_html_safe
assert simple_format ( " <b> test with html tags </b> " ) . html_safe?
end
2010-06-06 01:16:26 -04:00
def test_simple_format_should_sanitize_unsafe_input
2010-06-11 03:37:10 -04:00
assert_equal " <p><b> test with unsafe string </b><script>code!</script></p> " , simple_format ( " <b> test with unsafe string </b><script>code!</script> " )
2010-02-12 20:24:04 -05:00
end
2010-06-06 01:16:26 -04:00
def test_simple_format_should_not_sanitize_input_if_safe_option
assert_equal " <p><b> test with unsafe string </b><script>code!</script></p> " , simple_format ( " <b> test with unsafe string </b><script>code!</script> " , { } , :safe = > true )
end
def test_simple_format_should_not_sanitize_safe_input
2010-02-12 20:24:04 -05:00
assert_equal " <p><b> test with safe string </b></p> " , simple_format ( " <b> test with safe string </b> " . html_safe )
end
2010-06-06 01:16:26 -04:00
def test_truncate_should_be_html_safe
assert truncate ( " Hello World! " , :length = > 12 ) . html_safe?
end
2004-11-23 20:04:44 -05:00
def test_truncate
2008-07-27 17:49:19 -04:00
assert_equal " Hello World! " , truncate ( " Hello World! " , :length = > 12 )
assert_equal " Hello Wor... " , truncate ( " Hello World!! " , :length = > 12 )
2004-11-23 20:04:44 -05:00
end
2005-03-06 06:50:41 -05:00
2010-06-06 01:16:26 -04:00
def test_truncate_should_sanitize_unsafe_input
2010-06-11 03:37:10 -04:00
assert_equal " Hello <... " , truncate ( " Hello <script>code!</script>World!! " , :length = > 12 )
2010-06-06 01:16:26 -04:00
end
def test_truncate_should_not_sanitize_input_if_safe_option
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World! " , :length = > 12 , :safe = > true )
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World!! " , :length = > 12 , :safe = > true )
end
def test_truncate_should_not_sanitize_safe_input
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World! " . html_safe , :length = > 12 )
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World!! " . html_safe , :length = > 12 )
end
2007-06-08 00:05:35 -04:00
def test_truncate_should_use_default_length_of_30
str = " This is a string that will go longer then the default truncate length of 30 "
assert_equal str [ 0 ... 27 ] + " ... " , truncate ( str )
end
2008-07-27 17:49:19 -04:00
def test_truncate_with_options_hash
assert_equal " This is a string that wil[...] " , truncate ( " This is a string that will go longer then the default truncate length of 30 " , :omission = > " [...] " )
assert_equal " Hello W... " , truncate ( " Hello World! " , :length = > 10 )
assert_equal " Hello[...] " , truncate ( " Hello World! " , :omission = > " [...] " , :length = > 10 )
2009-01-28 11:45:28 -05:00
assert_equal " Hello[...] " , truncate ( " Hello Big World! " , :omission = > " [...] " , :length = > 13 , :separator = > ' ' )
assert_equal " Hello Big[...] " , truncate ( " Hello Big World! " , :omission = > " [...] " , :length = > 14 , :separator = > ' ' )
assert_equal " Hello Big[...] " , truncate ( " Hello Big World! " , :omission = > " [...] " , :length = > 15 , :separator = > ' ' )
2008-07-27 17:49:19 -04:00
end
2007-12-21 06:51:17 -05:00
if RUBY_VERSION < '1.9.0'
def test_truncate_multibyte
with_kcode 'none' do
2008-07-27 17:49:19 -04:00
assert_equal " \354 \225 \210 \353 \205 \225 \355 ... " , truncate ( " \354 \225 \210 \353 \205 \225 \355 \225 \230 \354 \204 \270 \354 \232 \224 " , :length = > 10 )
2007-12-21 06:51:17 -05:00
end
with_kcode 'u' do
assert_equal " \354 \225 \204 \353 \246 \254 \353 \236 \221 \354 \225 \204 \353 \246 \254 ... " ,
2008-07-27 17:49:19 -04:00
truncate ( " \354 \225 \204 \353 \246 \254 \353 \236 \221 \354 \225 \204 \353 \246 \254 \354 \225 \204 \353 \235 \274 \353 \246 \254 \354 \230 \244 " , :length = > 10 )
2007-12-21 06:51:17 -05:00
end
2006-10-12 17:13:05 -04:00
end
2007-12-21 06:51:17 -05:00
else
def test_truncate_multibyte
2010-05-29 15:20:52 -04:00
# .mb_chars always returns a UTF-8 String.
# assert_equal "\354\225\210\353\205\225\355...",
# truncate("\354\225\210\353\205\225\355\225\230\354\204\270\354\232\224", :length => 10)
2007-12-21 06:51:17 -05:00
assert_equal " \354 \225 \204 \353 \246 \254 \353 \236 \221 \354 \225 \204 \353 \246 \254 ... " . force_encoding ( 'UTF-8' ) ,
2008-07-27 17:49:19 -04:00
truncate ( " \354 \225 \204 \353 \246 \254 \353 \236 \221 \354 \225 \204 \353 \246 \254 \354 \225 \204 \353 \235 \274 \353 \246 \254 \354 \230 \244 " . force_encoding ( 'UTF-8' ) , :length = > 10 )
2006-10-12 17:13:05 -04:00
end
2005-09-19 17:36:36 -04:00
end
2007-12-21 06:51:17 -05:00
2010-06-06 01:16:26 -04:00
def test_highlight_should_be_html_safe
assert highlight ( " This is a beautiful morning " , " beautiful " ) . html_safe?
end
def test_highlight
2004-11-23 20:04:44 -05:00
assert_equal (
" This is a <strong class= \" highlight \" >beautiful</strong> morning " ,
highlight ( " This is a beautiful morning " , " beautiful " )
)
assert_equal (
" This is a <strong class= \" highlight \" >beautiful</strong> morning, but also a <strong class= \" highlight \" >beautiful</strong> day " ,
highlight ( " This is a beautiful morning, but also a beautiful day " , " beautiful " )
)
assert_equal (
" This is a <b>beautiful</b> morning, but also a <b>beautiful</b> day " ,
highlight ( " This is a beautiful morning, but also a beautiful day " , " beautiful " , '<b>\1</b>' )
)
2008-05-14 15:34:28 -04:00
2005-06-16 01:42:47 -04:00
assert_equal (
" This text is not changed because we supplied an empty phrase " ,
highlight ( " This text is not changed because we supplied an empty phrase " , nil )
)
2007-03-29 21:19:01 -04:00
assert_equal ' ' , highlight ( ' ' , 'blank text is returned verbatim' )
2004-11-23 20:04:44 -05:00
end
2005-03-06 06:50:41 -05:00
2010-06-06 01:16:26 -04:00
def test_highlight_should_sanitize_unsafe_input
assert_equal (
2010-06-11 03:37:10 -04:00
" This is a <strong class= \" highlight \" >beautiful</strong> morning<script>code!</script> " ,
2010-06-06 01:16:26 -04:00
highlight ( " This is a beautiful morning<script>code!</script> " , " beautiful " )
)
end
def test_highlight_should_not_sanitize_input_if_safe_option
assert_equal (
" This is a <strong class= \" highlight \" >beautiful</strong> morning<script>code!</script> " ,
highlight ( " This is a beautiful morning<script>code!</script> " , " beautiful " , :safe = > true )
)
end
def test_highlight_should_not_sanitize_safe_input
assert_equal (
" This is a <strong class= \" highlight \" >beautiful</strong> morning<script>code!</script> " ,
highlight ( " This is a beautiful morning<script>code!</script> " . html_safe , " beautiful " )
)
end
2008-07-27 17:49:19 -04:00
def test_highlight_with_regexp
2004-11-23 20:04:44 -05:00
assert_equal (
" This is a <strong class= \" highlight \" >beautiful!</strong> morning " ,
highlight ( " This is a beautiful! morning " , " beautiful! " )
)
assert_equal (
" This is a <strong class= \" highlight \" >beautiful! morning</strong> " ,
highlight ( " This is a beautiful! morning " , " beautiful! morning " )
)
assert_equal (
" This is a <strong class= \" highlight \" >beautiful? morning</strong> " ,
highlight ( " This is a beautiful? morning " , " beautiful? morning " )
)
end
2005-03-06 06:50:41 -05:00
2008-07-27 17:49:19 -04:00
def test_highlight_with_multiple_phrases_in_one_pass
2007-03-29 21:19:01 -04:00
assert_equal %( <em>wow</em> <em>em</em> ) , highlight ( 'wow em' , %w( wow em ) , '<em>\1</em>' )
end
2008-07-27 17:49:19 -04:00
def test_highlight_with_options_hash
assert_equal (
" This is a <b>beautiful</b> morning, but also a <b>beautiful</b> day " ,
highlight ( " This is a beautiful morning, but also a beautiful day " , " beautiful " , :highlighter = > '<b>\1</b>' )
)
end
2008-10-30 13:52:12 -04:00
def test_highlight_with_html
assert_equal (
2010-06-11 03:37:10 -04:00
" <p>This is a <strong class= \" highlight \" >beautiful</strong> morning, but also a <strong class= \" highlight \" >beautiful</strong> day</p> " ,
2008-10-30 13:52:12 -04:00
highlight ( " <p>This is a beautiful morning, but also a beautiful day</p> " , " beautiful " )
)
assert_equal (
2010-06-11 03:37:10 -04:00
" <p>This is a <em><strong class= \" highlight \" >beautiful</strong></em> morning, but also a <strong class= \" highlight \" >beautiful</strong> day</p> " ,
2008-10-30 13:52:12 -04:00
highlight ( " <p>This is a <em>beautiful</em> morning, but also a beautiful day</p> " , " beautiful " )
)
assert_equal (
2010-06-11 03:37:10 -04:00
" <p>This is a <em class="error"><strong class= \" highlight \" >beautiful</strong></em> morning, but also a <strong class= \" highlight \" >beautiful</strong> <span class="last">day</span></p> " ,
2008-10-30 13:52:12 -04:00
highlight ( " <p>This is a <em class= \" error \" >beautiful</em> morning, but also a beautiful <span class= \" last \" >day</span></p> " , " beautiful " )
)
assert_equal (
2010-06-11 03:37:10 -04:00
" <p class="<strong class= \" highlight \" >beautiful</strong>">This is a <strong class= \" highlight \" >beautiful</strong> morning, but also a <strong class= \" highlight \" >beautiful</strong> day</p> " ,
2008-10-30 13:52:12 -04:00
highlight ( " <p class= \" beautiful \" >This is a beautiful morning, but also a beautiful day</p> " , " beautiful " )
)
assert_equal (
2010-06-11 03:37:10 -04:00
" <p>This is a <strong class= \" highlight \" >beautiful</strong> <a href="http://example.com/<strong class= \" highlight \" >beautiful</strong> # top?what=<strong class= \" highlight \" >beautiful</strong>%20morning&when=now+then">morning</a>, but also a <strong class= \" highlight \" >beautiful</strong> day</p> " ,
2008-10-30 13:52:12 -04:00
highlight ( " <p>This is a beautiful <a href= \" http://example.com/beautiful \# top?what=beautiful%20morning&when=now+then \" >morning</a>, but also a beautiful day</p> " , " beautiful " )
)
end
2004-11-23 20:04:44 -05:00
def test_excerpt
2008-03-15 15:59:34 -04:00
assert_equal ( " ...is a beautiful morn... " , excerpt ( " This is a beautiful morning " , " beautiful " , 5 ) )
2004-11-23 20:04:44 -05:00
assert_equal ( " This is a... " , excerpt ( " This is a beautiful morning " , " this " , 5 ) )
assert_equal ( " ...iful morning " , excerpt ( " This is a beautiful morning " , " morning " , 5 ) )
assert_nil excerpt ( " This is a beautiful morning " , " day " )
end
2005-09-26 16:49:52 -04:00
2008-03-15 15:59:34 -04:00
def test_excerpt_in_borderline_cases
assert_equal ( " " , excerpt ( " " , " " , 0 ) )
assert_equal ( " a " , excerpt ( " a " , " a " , 0 ) )
assert_equal ( " ...b... " , excerpt ( " abc " , " b " , 0 ) )
assert_equal ( " abc " , excerpt ( " abc " , " b " , 1 ) )
assert_equal ( " abc... " , excerpt ( " abcd " , " b " , 1 ) )
assert_equal ( " ...abc " , excerpt ( " zabc " , " b " , 1 ) )
assert_equal ( " ...abc... " , excerpt ( " zabcd " , " b " , 1 ) )
assert_equal ( " zabcd " , excerpt ( " zabcd " , " b " , 2 ) )
# excerpt strips the resulting string before ap-/prepending excerpt_string.
# whether this behavior is meaningful when excerpt_string is not to be
# appended is questionable.
assert_equal ( " zabcd " , excerpt ( " zabcd " , " b " , 4 ) )
assert_equal ( " ...abc... " , excerpt ( " z abc d " , " b " , 1 ) )
end
2005-09-26 16:49:52 -04:00
def test_excerpt_with_regex
2008-03-15 15:59:34 -04:00
assert_equal ( '...is a beautiful! mor...' , excerpt ( 'This is a beautiful! morning' , 'beautiful' , 5 ) )
assert_equal ( '...is a beautiful? mor...' , excerpt ( 'This is a beautiful? morning' , 'beautiful' , 5 ) )
2005-09-26 16:49:52 -04:00
end
2006-10-12 17:13:05 -04:00
2008-07-27 17:49:19 -04:00
def test_excerpt_with_options_hash
assert_equal ( " ...is a beautiful morn... " , excerpt ( " This is a beautiful morning " , " beautiful " , :radius = > 5 ) )
assert_equal ( " [...]is a beautiful morn[...] " , excerpt ( " This is a beautiful morning " , " beautiful " , :omission = > " [...] " , :radius = > 5 ) )
assert_equal (
" This is the ultimate supercalifragilisticexpialidoceous very looooooooooooooooooong looooooooooooong beautiful morning with amazing sunshine and awesome tempera[...] " ,
excerpt ( " This is the ultimate supercalifragilisticexpialidoceous very looooooooooooooooooong looooooooooooong beautiful morning with amazing sunshine and awesome temperatures. So what are you gonna do about it? " , " very " ,
:omission = > " [...] " )
)
end
2007-12-21 06:51:17 -05:00
if RUBY_VERSION < '1.9'
def test_excerpt_with_utf8
with_kcode ( 'u' ) do
2008-04-01 03:39:04 -04:00
assert_equal ( " ... \357 \254 \203 ciency could not be... " , excerpt ( " That's why e \357 \254 \203 ciency could not be helped " , 'could' , 8 ) )
2007-12-21 06:51:17 -05:00
end
with_kcode ( 'none' ) do
2008-04-01 03:39:04 -04:00
assert_equal ( " ... \203 ciency could not be... " , excerpt ( " That's why e \357 \254 \203 ciency could not be helped " , 'could' , 8 ) )
2007-12-21 06:51:17 -05:00
end
2006-10-12 17:13:05 -04:00
end
2007-12-21 06:51:17 -05:00
else
def test_excerpt_with_utf8
2008-04-01 03:39:04 -04:00
assert_equal ( " ... \357 \254 \203 ciency could not be... " . force_encoding ( 'UTF-8' ) , excerpt ( " That's why e \357 \254 \203 ciency could not be helped " . force_encoding ( 'UTF-8' ) , 'could' , 8 ) )
2010-05-29 15:20:52 -04:00
# .mb_chars always returns UTF-8, even in 1.9. This is not great, but it's how it works. Let's work this out.
# assert_equal("...\203ciency could not be...", excerpt("That's why e\357\254\203ciency could not be helped".force_encoding("BINARY"), 'could', 8))
2006-10-12 17:13:05 -04:00
end
end
2007-12-21 06:51:17 -05:00
2005-06-21 03:16:11 -04:00
def test_word_wrap
assert_equal ( " my very very \n very long \n string " , word_wrap ( " my very very very long string " , 15 ) )
end
2005-03-06 06:50:41 -05:00
2007-09-22 14:21:54 -04:00
def test_word_wrap_with_extra_newlines
assert_equal ( " my very very \n very long \n string \n \n with another \n line " , word_wrap ( " my very very very long string \n \n with another line " , 15 ) )
end
2008-07-27 17:49:19 -04:00
def test_word_wrap_with_options_hash
assert_equal ( " my very very \n very long \n string " , word_wrap ( " my very very very long string " , :line_width = > 15 ) )
end
2004-11-23 20:04:44 -05:00
def test_pluralization
assert_equal ( " 1 count " , pluralize ( 1 , " count " ) )
assert_equal ( " 2 counts " , pluralize ( 2 , " count " ) )
2006-09-04 15:23:07 -04:00
assert_equal ( " 1 count " , pluralize ( '1' , " count " ) )
assert_equal ( " 2 counts " , pluralize ( '2' , " count " ) )
assert_equal ( " 1,066 counts " , pluralize ( '1,066' , " count " ) )
assert_equal ( " 1.25 counts " , pluralize ( '1.25' , " count " ) )
2010-01-30 12:38:33 -05:00
assert_equal ( " 1.0 count " , pluralize ( '1.0' , " count " ) )
assert_equal ( " 1.00 count " , pluralize ( '1.00' , " count " ) )
2006-10-22 19:58:41 -04:00
assert_equal ( " 2 counters " , pluralize ( 2 , " count " , " counters " ) )
2006-11-06 16:39:16 -05:00
assert_equal ( " 0 counters " , pluralize ( nil , " count " , " counters " ) )
2007-06-08 00:05:35 -04:00
assert_equal ( " 2 people " , pluralize ( 2 , " person " ) )
2008-05-14 15:34:28 -04:00
assert_equal ( " 10 buffaloes " , pluralize ( 10 , " buffalo " ) )
2008-05-14 20:17:24 -04:00
assert_equal ( " 1 berry " , pluralize ( 1 , " berry " ) )
assert_equal ( " 12 berries " , pluralize ( 12 , " berry " ) )
2004-11-23 20:04:44 -05:00
end
2005-03-06 06:50:41 -05:00
2006-09-01 21:47:32 -04:00
def test_auto_link_parsing
2008-11-13 16:39:16 -05:00
urls = %w(
http : / / www . rubyonrails . com
http : / / www . rubyonrails . com : 80
http : / / www . rubyonrails . com / ~ minam
https : / / www . rubyonrails . com / ~ minam
http : / / www . rubyonrails . com / ~ minam / url % 20 with % 20 spaces
http : / / www . rubyonrails . com / foo . cgi? something = here
http : / / www . rubyonrails . com / foo . cgi? something = here & and = here
http : / / www . rubyonrails . com / contact ; new
http : / / www . rubyonrails . com / contact ; new % 20 with % 20 spaces
http : / / www . rubyonrails . com / contact ; new ? with = query & string = params
http : / / www . rubyonrails . com / ~ minam / contact ; new ? with = query & string = params
http : / /en . wikipedia . org / wiki / Wikipedia : Today % 27 s_featured_picture_ % 28 animation % 29 / January_20 % 2 C_2007
http : / / www . mail - archive . com / rails @lists . rubyonrails . org /
http : / / www . amazon . com / Testing - Equal - Sign - In - Path / ref = pd_bbs_sr_1? ie = UTF8 & s = books & qid = 1198861734 & sr = 8 - 1
http : / /en . wikipedia . org / wiki / Texas_hold ' em
https : / / www . google . com / doku . php? id = gps : resource : scs : start
http : / / connect . oraclecorp . com / search? search [ q ] = green + france & search [ type ] = Group
http : / /o f . openfoundry . org / projects / 492 / download #4th.Release.3
http : / /m aps . google . co . uk / maps? f = q & q = the + london + eye & ie = UTF8 & ll = 51 . 503373 , - 0 . 11939 & spn = 0 . 007052 , 0 . 012767 & z = 16 & iwloc = A
)
2006-09-01 21:47:32 -04:00
urls . each do | url |
2008-11-13 16:39:16 -05:00
assert_equal generate_result ( url ) , auto_link ( url )
2006-09-01 21:47:32 -04:00
end
end
2008-11-12 07:15:57 -05:00
def generate_result ( link_text , href = nil )
href || = link_text
%{ <a href=" #{ CGI :: escapeHTML href } "> #{ CGI :: escapeHTML link_text } </a> }
end
2010-06-06 01:16:26 -04:00
def test_auto_link_should_be_html_safe
email_raw = 'santiago@wyeworks.com'
link_raw = 'http://www.rubyonrails.org'
assert auto_link ( nil ) . html_safe?
assert auto_link ( '' ) . html_safe?
assert auto_link ( " #{ link_raw } #{ link_raw } #{ link_raw } " ) . html_safe?
assert auto_link ( " hello #{ email_raw } " ) . html_safe?
end
def test_auto_link
2005-04-06 11:22:46 -04:00
email_raw = 'david@loudthinking.com'
email_result = %{ <a href="mailto: #{ email_raw } "> #{ email_raw } </a> }
link_raw = 'http://www.rubyonrails.com'
2008-11-12 07:15:57 -05:00
link_result = generate_result ( link_raw )
2008-11-13 16:39:16 -05:00
link_result_with_options = %{ <a href=" #{ link_raw } " target="_blank"> #{ link_raw } </a> }
assert_equal '' , auto_link ( nil )
assert_equal '' , auto_link ( '' )
assert_equal " #{ link_result } #{ link_result } #{ link_result } " , auto_link ( " #{ link_raw } #{ link_raw } #{ link_raw } " )
2005-04-06 11:22:46 -04:00
assert_equal %( hello #{ email_result } ) , auto_link ( " hello #{ email_raw } " , :email_addresses )
assert_equal %( Go to #{ link_result } ) , auto_link ( " Go to #{ link_raw } " , :urls )
assert_equal %( Go to #{ link_raw } ) , auto_link ( " Go to #{ link_raw } " , :email_addresses )
assert_equal %( Go to #{ link_result } and say hello to #{ email_result } ) , auto_link ( " Go to #{ link_raw } and say hello to #{ email_raw } " )
assert_equal %( <p>Link #{ link_result } </p> ) , auto_link ( " <p>Link #{ link_raw } </p> " )
assert_equal %( <p> #{ link_result } Link</p> ) , auto_link ( " <p> #{ link_raw } Link</p> " )
2005-09-11 01:53:52 -04:00
assert_equal %( <p>Link #{ link_result_with_options } </p> ) , auto_link ( " <p>Link #{ link_raw } </p> " , :all , { :target = > " _blank " } )
assert_equal %( Go to #{ link_result } . ) , auto_link ( %( Go to #{ link_raw } . ) )
assert_equal %( <p>Go to #{ link_result } , then say hello to #{ email_result } .</p> ) , auto_link ( %( <p>Go to #{ link_raw } , then say hello to #{ email_raw } .</p> ) )
2009-03-11 06:27:44 -04:00
assert_equal %( #{ link_result } #{ link_result } ) , auto_link ( %( #{ link_result } #{ link_raw } ) )
2008-11-13 16:39:16 -05:00
email2_raw = '+david@loudthinking.com'
email2_result = %{ <a href="mailto: #{ email2_raw } "> #{ email2_raw } </a> }
assert_equal email2_result , auto_link ( email2_raw )
2008-11-19 13:55:27 -05:00
email3_raw = '+david@loudthinking.com'
email3_result = %{ <a href="& # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;+%64%61%76%69%64@%6c%6f%75%64%74%68%69%6e%6b%69%6e%67.%63%6f%6d"> #{ email3_raw } </a> }
assert_equal email3_result , auto_link ( email3_raw , :all , :encode = > :hex )
assert_equal email3_result , auto_link ( email3_raw , :email_addresses , :encode = > :hex )
2008-11-13 16:39:16 -05:00
link2_raw = 'www.rubyonrails.com'
link2_result = generate_result ( link2_raw , " http:// #{ link2_raw } " )
2005-04-06 11:22:46 -04:00
assert_equal %( Go to #{ link2_result } ) , auto_link ( " Go to #{ link2_raw } " , :urls )
assert_equal %( Go to #{ link2_raw } ) , auto_link ( " Go to #{ link2_raw } " , :email_addresses )
assert_equal %( <p>Link #{ link2_result } </p> ) , auto_link ( " <p>Link #{ link2_raw } </p> " )
assert_equal %( <p> #{ link2_result } Link</p> ) , auto_link ( " <p> #{ link2_raw } Link</p> " )
2005-09-11 01:53:52 -04:00
assert_equal %( Go to #{ link2_result } . ) , auto_link ( %( Go to #{ link2_raw } . ) )
assert_equal %( <p>Say hello to #{ email_result } , then go to #{ link2_result } .</p> ) , auto_link ( %( <p>Say hello to #{ email_raw } , then go to #{ link2_raw } .</p> ) )
2008-11-13 16:39:16 -05:00
link3_raw = 'http://manuals.ruby-on-rails.com/read/chapter.need_a-period/103#page281'
link3_result = generate_result ( link3_raw )
2005-09-11 01:53:52 -04:00
assert_equal %( Go to #{ link3_result } ) , auto_link ( " Go to #{ link3_raw } " , :urls )
assert_equal %( Go to #{ link3_raw } ) , auto_link ( " Go to #{ link3_raw } " , :email_addresses )
assert_equal %( <p>Link #{ link3_result } </p> ) , auto_link ( " <p>Link #{ link3_raw } </p> " )
assert_equal %( <p> #{ link3_result } Link</p> ) , auto_link ( " <p> #{ link3_raw } Link</p> " )
assert_equal %( Go to #{ link3_result } . ) , auto_link ( %( Go to #{ link3_raw } . ) )
2008-11-13 16:39:16 -05:00
assert_equal %( <p>Go to #{ link3_result } . Seriously, #{ link3_result } ? I think I'll say hello to #{ email_result } . Instead.</p> ) ,
auto_link ( %( <p>Go to #{ link3_raw } . Seriously, #{ link3_raw } ? I think I'll say hello to #{ email_raw } . Instead.</p> ) )
link4_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor123'
link4_result = generate_result ( link4_raw )
2005-09-14 08:07:05 -04:00
assert_equal %( <p>Link #{ link4_result } </p> ) , auto_link ( " <p>Link #{ link4_raw } </p> " )
assert_equal %( <p> #{ link4_result } Link</p> ) , auto_link ( " <p> #{ link4_raw } Link</p> " )
2008-11-13 16:39:16 -05:00
link5_raw = 'http://foo.example.com:3000/controller/action'
link5_result = generate_result ( link5_raw )
2005-12-26 14:31:40 -05:00
assert_equal %( <p> #{ link5_result } Link</p> ) , auto_link ( " <p> #{ link5_raw } Link</p> " )
2008-11-13 16:39:16 -05:00
link6_raw = 'http://foo.example.com:3000/controller/action+pack'
link6_result = generate_result ( link6_raw )
2006-12-07 17:12:48 -05:00
assert_equal %( <p> #{ link6_result } Link</p> ) , auto_link ( " <p> #{ link6_raw } Link</p> " )
2008-11-13 16:39:16 -05:00
link7_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor-123'
link7_result = generate_result ( link7_raw )
2006-12-07 17:12:48 -05:00
assert_equal %( <p> #{ link7_result } Link</p> ) , auto_link ( " <p> #{ link7_raw } Link</p> " )
2008-11-13 16:39:16 -05:00
link8_raw = 'http://foo.example.com:3000/controller/action.html'
link8_result = generate_result ( link8_raw )
2007-01-24 13:42:03 -05:00
assert_equal %( Go to #{ link8_result } ) , auto_link ( " Go to #{ link8_raw } " , :urls )
assert_equal %( Go to #{ link8_raw } ) , auto_link ( " Go to #{ link8_raw } " , :email_addresses )
assert_equal %( <p>Link #{ link8_result } </p> ) , auto_link ( " <p>Link #{ link8_raw } </p> " )
assert_equal %( <p> #{ link8_result } Link</p> ) , auto_link ( " <p> #{ link8_raw } Link</p> " )
assert_equal %( Go to #{ link8_result } . ) , auto_link ( %( Go to #{ link8_raw } . ) )
2008-11-13 16:39:16 -05:00
assert_equal %( <p>Go to #{ link8_result } . Seriously, #{ link8_result } ? I think I'll say hello to #{ email_result } . Instead.</p> ) ,
auto_link ( %( <p>Go to #{ link8_raw } . Seriously, #{ link8_raw } ? I think I'll say hello to #{ email_raw } . Instead.</p> ) )
link9_raw = 'http://business.timesonline.co.uk/article/0,,9065-2473189,00.html'
link9_result = generate_result ( link9_raw )
2007-01-24 13:42:03 -05:00
assert_equal %( Go to #{ link9_result } ) , auto_link ( " Go to #{ link9_raw } " , :urls )
assert_equal %( Go to #{ link9_raw } ) , auto_link ( " Go to #{ link9_raw } " , :email_addresses )
assert_equal %( <p>Link #{ link9_result } </p> ) , auto_link ( " <p>Link #{ link9_raw } </p> " )
assert_equal %( <p> #{ link9_result } Link</p> ) , auto_link ( " <p> #{ link9_raw } Link</p> " )
assert_equal %( Go to #{ link9_result } . ) , auto_link ( %( Go to #{ link9_raw } . ) )
2008-11-13 16:39:16 -05:00
assert_equal %( <p>Go to #{ link9_result } . Seriously, #{ link9_result } ? I think I'll say hello to #{ email_result } . Instead.</p> ) ,
auto_link ( %( <p>Go to #{ link9_raw } . Seriously, #{ link9_raw } ? I think I'll say hello to #{ email_raw } . Instead.</p> ) )
link10_raw = 'http://www.mail-archive.com/ruby-talk@ruby-lang.org/'
link10_result = generate_result ( link10_raw )
2007-09-20 16:40:22 -04:00
assert_equal %( <p> #{ link10_result } Link</p> ) , auto_link ( " <p> #{ link10_raw } Link</p> " )
2008-11-12 07:15:57 -05:00
end
2010-06-06 01:16:26 -04:00
def test_auto_link_should_sanitize_unsafe_input
link_raw = %{ http://www.rubyonrails.com?id=1&num=2 }
assert_equal %{ <a href="http://www.rubyonrails.com?id=1&num=2">http://www.rubyonrails.com?id=1&num=2</a> } , auto_link ( link_raw )
end
def test_auto_link_should_sanitize_unsafe_input
link_raw = %{ http://www.rubyonrails.com?id=1&num=2 }
assert_equal %{ <a href="http://www.rubyonrails.com?id=1&num=2">http://www.rubyonrails.com?id=1&num=2</a> } , auto_link ( link_raw , :safe = > true )
end
def test_auto_link_should_not_sanitize_safe_input
link_raw = %{ http://www.rubyonrails.com?id=1&num=2 }
assert_equal %{ <a href="http://www.rubyonrails.com?id=1&num=2">http://www.rubyonrails.com?id=1&num=2</a> } , auto_link ( link_raw . html_safe )
end
2009-11-25 02:51:51 -05:00
def test_auto_link_other_protocols
2010-04-16 23:13:40 -04:00
ftp_raw = 'ftp://example.com/file.txt'
assert_equal %( Download #{ generate_result ( ftp_raw ) } ) , auto_link ( " Download #{ ftp_raw } " )
file_scheme = 'file:///home/username/RomeoAndJuliet.pdf'
z39_scheme = 'z39.50r://host:696/db'
chrome_scheme = 'chrome://package/section/path'
view_source = 'view-source:http://en.wikipedia.org/wiki/URI_scheme'
assert_equal generate_result ( z39_scheme ) , auto_link ( z39_scheme )
assert_equal generate_result ( chrome_scheme ) , auto_link ( chrome_scheme )
assert_equal generate_result ( view_source ) , auto_link ( view_source )
2009-11-25 02:51:51 -05:00
end
2008-11-12 07:15:57 -05:00
def test_auto_link_already_linked
linked1 = generate_result ( 'Ruby On Rails' , 'http://www.rubyonrails.com' )
2009-03-11 06:27:44 -04:00
linked2 = %( '<a href="http://www.example.com">www.example.com</a>' )
linked3 = %( '<a href="http://www.example.com" rel="nofollow">www.example.com</a>' )
linked4 = %( '<a href="http://www.example.com"><b>www.example.com</b></a>' )
linked5 = %( '<a href=" # close">close</a> <a href="http://www.example.com"><b>www.example.com</b></a>' )
2008-11-12 07:15:57 -05:00
assert_equal linked1 , auto_link ( linked1 )
assert_equal linked2 , auto_link ( linked2 )
2009-03-11 06:27:44 -04:00
assert_equal linked3 , auto_link ( linked3 )
assert_equal linked4 , auto_link ( linked4 )
assert_equal linked5 , auto_link ( linked5 )
linked_email = %Q( <a href="mailto:david@loudthinking.com">Mail me</a> )
assert_equal linked_email , auto_link ( linked_email )
end
def test_auto_link_within_tags
link_raw = 'http://www.rubyonrails.org/images/rails.png'
link_result = %Q( <img src=" #{ link_raw } " /> )
assert_equal link_result , auto_link ( link_result )
2005-02-18 09:06:36 -05:00
end
2005-05-09 07:24:18 -04:00
2008-11-13 16:39:16 -05:00
def test_auto_link_with_brackets
link1_raw = 'http://en.wikipedia.org/wiki/Sprite_(computer_graphics)'
link1_result = generate_result ( link1_raw )
assert_equal link1_result , auto_link ( link1_raw )
assert_equal " (link: #{ link1_result } ) " , auto_link ( " (link: #{ link1_raw } ) " )
link2_raw = 'http://en.wikipedia.org/wiki/Sprite_[computer_graphics]'
link2_result = generate_result ( link2_raw )
assert_equal link2_result , auto_link ( link2_raw )
assert_equal " [link: #{ link2_result } ] " , auto_link ( " [link: #{ link2_raw } ] " )
link3_raw = 'http://en.wikipedia.org/wiki/Sprite_{computer_graphics}'
link3_result = generate_result ( link3_raw )
assert_equal link3_result , auto_link ( link3_raw )
assert_equal " {link: #{ link3_result } } " , auto_link ( " {link: #{ link3_raw } } " )
end
2005-09-13 14:48:34 -04:00
def test_auto_link_at_eol
url1 = " http://api.rubyonrails.com/Foo.html "
url2 = " http://www.ruby-doc.org/core/Bar.html "
assert_equal %( <p><a href=" #{ url1 } "> #{ url1 } </a><br /><a href=" #{ url2 } "> #{ url2 } </a><br /></p> ) , auto_link ( " <p> #{ url1 } <br /> #{ url2 } <br /></p> " )
end
2005-11-10 01:04:50 -05:00
def test_auto_link_with_block
url = " http://api.rubyonrails.com/Foo.html "
email = " fantabulous@shiznadel.ic "
2008-07-27 17:49:19 -04:00
assert_equal %( <p><a href=" #{ url } "> #{ url [ 0 ... 7 ] } ...</a><br /><a href="mailto: #{ email } "> #{ email [ 0 ... 7 ] } ...</a><br /></p> ) , auto_link ( " <p> #{ url } <br /> #{ email } <br /></p> " ) { | url | truncate ( url , :length = > 10 ) }
end
2009-03-11 06:27:44 -04:00
def test_auto_link_with_block_with_html
pic = " http://example.com/pic.png "
url = " http://example.com/album?a&b=c "
assert_equal %( My pic: <a href=" #{ pic } "><img src=" #{ pic } " width="160px"></a> -- full album here #{ generate_result ( url ) } ) , auto_link ( " My pic: #{ pic } -- full album here #{ url } " ) { | link |
if link =~ / \ .(jpg|gif|png|bmp|tif)$ /i
raw %( <img src=" #{ link } " width="160px"> )
else
link
end
}
end
2008-07-27 17:49:19 -04:00
def test_auto_link_with_options_hash
2008-11-19 13:55:27 -05:00
assert_dom_equal 'Welcome to my new blog at <a href="http://www.myblog.com/" class="menu" target="_blank">http://www.myblog.com/</a>. Please e-mail me at <a href="mailto:me@email.com" class="menu" target="_blank">me@email.com</a>.' ,
2008-07-27 17:49:19 -04:00
auto_link ( " Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com. " ,
:link = > :all , :html = > { :class = > " menu " , :target = > " _blank " } )
2005-11-10 01:04:50 -05:00
end
2009-04-15 19:46:30 -04:00
def test_auto_link_with_multiple_trailing_punctuations
url = " http://youtube.com "
url_result = generate_result ( url )
assert_equal url_result , auto_link ( url )
assert_equal " (link: #{ url_result } ). " , auto_link ( " (link: #{ url } ). " )
end
2005-11-10 01:04:50 -05:00
2005-09-12 01:26:25 -04:00
def test_cycle_class
value = Cycle . new ( " one " , 2 , " 3 " )
assert_equal ( " one " , value . to_s )
assert_equal ( " 2 " , value . to_s )
assert_equal ( " 3 " , value . to_s )
assert_equal ( " one " , value . to_s )
value . reset
assert_equal ( " one " , value . to_s )
assert_equal ( " 2 " , value . to_s )
assert_equal ( " 3 " , value . to_s )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_cycle_class_with_no_arguments
assert_raise ( ArgumentError ) { value = Cycle . new ( ) }
end
def test_cycle
assert_equal ( " one " , cycle ( " one " , 2 , " 3 " ) )
assert_equal ( " 2 " , cycle ( " one " , 2 , " 3 " ) )
assert_equal ( " 3 " , cycle ( " one " , 2 , " 3 " ) )
assert_equal ( " one " , cycle ( " one " , 2 , " 3 " ) )
assert_equal ( " 2 " , cycle ( " one " , 2 , " 3 " ) )
assert_equal ( " 3 " , cycle ( " one " , 2 , " 3 " ) )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_cycle_with_no_arguments
assert_raise ( ArgumentError ) { value = cycle ( ) }
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_cycle_resets_with_new_values
assert_equal ( " even " , cycle ( " even " , " odd " ) )
assert_equal ( " odd " , cycle ( " even " , " odd " ) )
assert_equal ( " even " , cycle ( " even " , " odd " ) )
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 ) )
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 ) )
assert_equal ( " 3 " , cycle ( 1 , 2 , 3 ) )
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 ) )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_named_cycles
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " red " , cycle ( " red " , " blue " , :name = > " colors " ) )
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " blue " , cycle ( " red " , " blue " , :name = > " colors " ) )
assert_equal ( " 3 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " red " , cycle ( " red " , " blue " , :name = > " colors " ) )
end
2008-05-14 15:34:28 -04:00
2008-06-14 14:06:27 -04:00
def test_current_cycle_with_default_name
cycle ( " even " , " odd " )
assert_equal " even " , current_cycle
cycle ( " even " , " odd " )
assert_equal " odd " , current_cycle
cycle ( " even " , " odd " )
assert_equal " even " , current_cycle
end
def test_current_cycle_with_named_cycles
cycle ( " red " , " blue " , :name = > " colors " )
assert_equal " red " , current_cycle ( " colors " )
cycle ( " red " , " blue " , :name = > " colors " )
assert_equal " blue " , current_cycle ( " colors " )
cycle ( " red " , " blue " , :name = > " colors " )
assert_equal " red " , current_cycle ( " colors " )
end
def test_current_cycle_safe_call
assert_nothing_raised { current_cycle }
assert_nothing_raised { current_cycle ( " colors " ) }
end
def test_current_cycle_with_more_than_two_names
cycle ( 1 , 2 , 3 )
assert_equal " 1 " , current_cycle
cycle ( 1 , 2 , 3 )
assert_equal " 2 " , current_cycle
cycle ( 1 , 2 , 3 )
assert_equal " 3 " , current_cycle
cycle ( 1 , 2 , 3 )
assert_equal " 1 " , current_cycle
end
2005-09-12 01:26:25 -04:00
def test_default_named_cycle
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 ) )
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 , :name = > " default " ) )
assert_equal ( " 3 " , cycle ( 1 , 2 , 3 ) )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_reset_cycle
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 ) )
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 ) )
reset_cycle
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 ) )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_reset_unknown_cycle
reset_cycle ( " colors " )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_recet_named_cycle
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " red " , cycle ( " red " , " blue " , :name = > " colors " ) )
reset_cycle ( " numbers " )
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " blue " , cycle ( " red " , " blue " , :name = > " colors " ) )
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 , :name = > " numbers " ) )
assert_equal ( " red " , cycle ( " red " , " blue " , :name = > " colors " ) )
end
2008-05-14 15:34:28 -04:00
2005-09-12 01:26:25 -04:00
def test_cycle_no_instance_variable_clashes
@cycles = %w{ Specialized Fuji Giant }
assert_equal ( " red " , cycle ( " red " , " blue " ) )
assert_equal ( " blue " , cycle ( " red " , " blue " ) )
assert_equal ( " red " , cycle ( " red " , " blue " ) )
assert_equal ( %w{ Specialized Fuji Giant } , @cycles )
end
2005-03-06 06:50:41 -05:00
end