2017-07-23 11:36:41 -04:00
# frozen_string_literal: true
2016-08-06 12:50:17 -04:00
require " abstract_unit "
2010-06-08 07:22:48 -04:00
2008-04-19 14:06:57 -04:00
class TextHelperTest < ActionView :: TestCase
tests ActionView :: Helpers :: TextHelper
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.
2018-08-18 19:12:05 -04:00
@_cycles = nil if defined? ( @_cycles )
2005-09-12 01:26:25 -04:00
end
2006-11-19 04:57:16 -05:00
2008-06-06 21:00:01 -04:00
def test_concat
2018-05-17 04:32:27 -04:00
self . output_buffer = + " foo "
2016-08-06 12:50:17 -04:00
assert_equal " foobar " , concat ( " bar " )
assert_equal " foobar " , output_buffer
2008-06-06 21:00:01 -04:00
end
2010-06-17 11:56:15 -04:00
def test_simple_format_should_be_html_safe
2018-01-25 18:14:09 -05:00
assert_predicate simple_format ( " <b> test with html tags </b> " ) , :html_safe?
2010-06-17 11:56:15 -04:00
end
2013-12-03 21:50:17 -05:00
def test_simple_format_included_in_isolation
helper_klass = Class . new { include ActionView :: Helpers :: TextHelper }
2018-01-25 18:14:09 -05:00
assert_predicate helper_klass . new . simple_format ( " <b> test with html tags </b> " ) , :html_safe?
2013-12-03 21:50:17 -05: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
2018-02-27 23:33:37 -05:00
text = " A \n B \n C \n D "
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
2018-02-27 23:33:37 -05:00
text = " A \r \n \n B \n \n \r \n \t \n C \n D "
2006-11-19 04:57:16 -05:00
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
2016-08-06 14:20:22 -04:00
assert_equal '<p class="test">This is a classy test</p>' , simple_format ( " This is a classy test " , class : " test " )
2016-08-06 13:36:34 -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-06-17 11:56:15 -04:00
def test_simple_format_should_sanitize_input_when_sanitize_option_is_not_false
2016-01-26 15:43:29 -05:00
assert_equal " <p><b> test with unsafe string </b>code!</p> " , simple_format ( " <b> test with unsafe string </b><script>code!</script> " )
2010-02-12 20:24:04 -05:00
end
2013-11-08 11:13:59 -05:00
def test_simple_format_should_sanitize_input_when_sanitize_option_is_true
2016-08-06 12:50:17 -04:00
assert_equal " <p><b> test with unsafe string </b>code!</p> " ,
2017-08-12 07:31:46 -04:00
simple_format ( " <b> test with unsafe string </b><script>code!</script> " , { } , { sanitize : true } )
2013-11-08 11:13:59 -05:00
end
2010-06-17 11:56:15 -04:00
def test_simple_format_should_not_sanitize_input_when_sanitize_option_is_false
2017-08-12 07:31:46 -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> " , { } , { sanitize : false } )
2010-02-12 20:24:04 -05:00
end
2012-05-13 18:15:46 -04:00
def test_simple_format_with_custom_wrapper
2017-08-12 07:31:46 -04:00
assert_equal " <div></div> " , simple_format ( nil , { } , { wrapper_tag : " div " } )
2012-05-13 18:15:46 -04:00
end
def test_simple_format_with_custom_wrapper_and_multi_line_breaks
2017-08-12 07:31:46 -04:00
assert_equal " <div>We want to put a wrapper...</div> \n \n <div>...right there.</div> " , simple_format ( " We want to put a wrapper... \n \n ...right there. " , { } , { wrapper_tag : " div " } )
2012-05-13 18:15:46 -04:00
end
2011-08-04 13:34:47 -04:00
def test_simple_format_should_not_change_the_text_passed
2011-06-20 09:51:07 -04:00
text = " <b>Ok</b><script>code!</script> "
text_clone = text . dup
2011-08-04 13:34:47 -04:00
simple_format ( text )
2011-06-20 09:51:07 -04:00
assert_equal text_clone , text
end
2012-05-26 12:44:30 -04:00
2012-05-18 11:50:02 -04:00
def test_simple_format_does_not_modify_the_html_options_hash
2016-08-16 03:30:11 -04:00
options = { class : " foobar " }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
simple_format ( " some text " , passed_options )
assert_equal options , passed_options
end
2012-05-26 12:44:30 -04:00
2012-05-18 11:50:02 -04:00
def test_simple_format_does_not_modify_the_options_hash
2016-08-06 13:36:34 -04:00
options = { wrapper_tag : :div , sanitize : false }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
simple_format ( " some text " , { } , passed_options )
assert_equal options , passed_options
end
2011-06-20 09:51:07 -04:00
2004-11-23 20:04:44 -05:00
def test_truncate
2016-08-06 13:36:34 -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
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
2016-08-06 13:36:34 -04:00
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 )
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
2011-12-21 03:04:54 -05:00
def test_truncate_multibyte
2018-05-17 04:32:27 -04:00
assert_equal ( + " \354 \225 \204 \353 \246 \254 \353 \236 \221 \354 \225 \204 \353 \246 \254 ... " ) . force_encoding ( Encoding :: UTF_8 ) ,
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 ( Encoding :: UTF_8 ) , length : 10 )
2005-09-19 17:36:36 -04:00
end
2012-05-26 12:44:30 -04:00
2012-05-18 11:50:02 -04:00
def test_truncate_does_not_modify_the_options_hash
2016-08-06 13:36:34 -04:00
options = { length : 10 }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
truncate ( " some text " , passed_options )
assert_equal options , passed_options
end
2007-12-21 06:51:17 -05:00
2012-04-28 02:48:28 -04:00
def test_truncate_with_link_options
2012-07-31 21:25:54 -04:00
assert_equal " Here is a long test and ...<a href= \" # \" >Continue</a> " ,
2016-08-06 13:36:34 -04:00
truncate ( " Here is a long test and I need a continue to read link " , length : 27 ) { link_to " Continue " , " # " }
2012-04-28 02:48:28 -04:00
end
def test_truncate_should_be_html_safe
2018-01-25 18:14:09 -05:00
assert_predicate truncate ( " Hello World! " , length : 12 ) , :html_safe?
2012-04-28 02:48:28 -04:00
end
def test_truncate_should_escape_the_input
2016-08-06 13:36:34 -04:00
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World!! " , length : 12 )
2012-04-28 02:48:28 -04:00
end
2012-05-26 13:11:28 -04:00
def test_truncate_should_not_escape_the_input_with_escape_false
2016-08-06 13:36:34 -04:00
assert_equal " Hello <sc... " , truncate ( " Hello <script>code!</script>World!! " , length : 12 , escape : false )
2012-05-26 13:11:28 -04:00
end
def test_truncate_with_escape_false_should_be_html_safe
2016-08-06 13:36:34 -04:00
truncated = truncate ( " Hello <script>code!</script>World!! " , length : 12 , escape : false )
2018-01-25 18:14:09 -05:00
assert_predicate truncated , :html_safe?
2012-05-26 13:11:28 -04:00
end
2012-04-28 02:48:28 -04:00
def test_truncate_with_block_should_be_html_safe
2016-08-06 13:36:34 -04:00
truncated = truncate ( " Here's a long test and I need a continue to read link " , length : 27 ) { link_to " Continue " , " # " }
2018-01-25 18:14:09 -05:00
assert_predicate truncated , :html_safe?
2012-04-28 02:48:28 -04:00
end
def test_truncate_with_block_should_escape_the_input
assert_equal " <script>code!</script>He...<a href= \" # \" >Continue</a> " ,
2016-08-06 13:36:34 -04:00
truncate ( " <script>code!</script>Here's a long test and I need a continue to read link " , length : 27 ) { link_to " Continue " , " # " }
2012-04-28 02:48:28 -04:00
end
2012-05-26 13:11:28 -04:00
def test_truncate_with_block_should_not_escape_the_input_with_escape_false
assert_equal " <script>code!</script>He...<a href= \" # \" >Continue</a> " ,
2016-08-06 13:36:34 -04:00
truncate ( " <script>code!</script>Here's a long test and I need a continue to read link " , length : 27 , escape : false ) { link_to " Continue " , " # " }
2012-05-26 13:11:28 -04:00
end
def test_truncate_with_block_with_escape_false_should_be_html_safe
2016-08-06 13:36:34 -04:00
truncated = truncate ( " <script>code!</script>Here's a long test and I need a continue to read link " , length : 27 , escape : false ) { link_to " Continue " , " # " }
2018-01-25 18:14:09 -05:00
assert_predicate truncated , :html_safe?
2012-05-26 13:11:28 -04:00
end
2012-05-26 12:44:30 -04:00
def test_truncate_with_block_should_escape_the_block
2012-09-03 05:42:24 -04:00
assert_equal " Here is a long test and ...<script>alert(& # 39;foo& # 39;);</script> " ,
2016-08-06 13:36:34 -04:00
truncate ( " Here is a long test and I need a continue to read link " , length : 27 ) { " <script>alert('foo');</script> " }
2012-05-26 12:44:30 -04:00
end
2010-06-06 01:16:26 -04:00
def test_highlight_should_be_html_safe
2018-01-25 18:14:09 -05:00
assert_predicate highlight ( " This is a beautiful morning " , " beautiful " ) , :html_safe?
2010-06-06 01:16:26 -04:00
end
2010-08-14 01:13:00 -04:00
2010-06-06 01:16:26 -04:00
def test_highlight
2004-11-23 20:04:44 -05:00
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful</mark> morning " ,
2004-11-23 20:04:44 -05:00
highlight ( " This is a beautiful morning " , " beautiful " )
)
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful</mark> morning, but also a <mark>beautiful</mark> day " ,
2004-11-23 20:04:44 -05:00
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 " ,
2016-08-06 13:36:34 -04:00
highlight ( " This is a beautiful morning, but also a beautiful day " , " beautiful " , highlighter : '<b>\1</b>' )
2004-11-23 20:04:44 -05:00
)
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 )
)
2013-07-10 10:29:15 -04:00
end
2007-03-29 21:19:01 -04:00
2013-07-10 10:29:15 -04:00
def test_highlight_pending
2016-08-06 12:50:17 -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
2014-09-30 07:48:48 -04:00
def test_highlight_should_return_blank_string_for_nil
2016-08-06 12:50:17 -04:00
assert_equal " " , highlight ( nil , " blank string is returned for nil " )
2014-09-30 07:48:48 -04:00
end
2010-06-17 11:56:15 -04:00
def test_highlight_should_sanitize_input
2010-06-06 01:16:26 -04:00
assert_equal (
2016-01-26 15:43:29 -05:00
" This is a <mark>beautiful</mark> morningcode! " ,
2010-06-06 01:16:26 -04:00
highlight ( " This is a beautiful morning<script>code!</script> " , " beautiful " )
)
end
2010-06-17 11:56:15 -04:00
def test_highlight_should_not_sanitize_if_sanitize_option_if_false
2010-06-06 01:16:26 -04:00
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful</mark> morning<script>code!</script> " ,
2016-08-06 13:36:34 -04:00
highlight ( " This is a beautiful morning<script>code!</script> " , " beautiful " , sanitize : false )
2010-06-06 01:16:26 -04:00
)
end
2008-07-27 17:49:19 -04:00
def test_highlight_with_regexp
2004-11-23 20:04:44 -05:00
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful!</mark> morning " ,
2004-11-23 20:04:44 -05:00
highlight ( " This is a beautiful! morning " , " beautiful! " )
)
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful! morning</mark> " ,
2004-11-23 20:04:44 -05:00
highlight ( " This is a beautiful! morning " , " beautiful! morning " )
)
assert_equal (
2012-02-05 12:08:21 -05:00
" This is a <mark>beautiful? morning</mark> " ,
2004-11-23 20:04:44 -05:00
highlight ( " This is a beautiful? morning " , " beautiful? morning " )
)
end
2005-03-06 06:50:41 -05:00
2013-08-07 08:34:24 -04:00
def test_highlight_accepts_regexp
assert_equal ( " This day was challenging for judge <mark>Allen</mark> and his colleagues. " ,
highlight ( " This day was challenging for judge Allen and his colleagues. " , / \ ballen \ b /i ) )
end
2008-07-27 17:49:19 -04:00
def test_highlight_with_multiple_phrases_in_one_pass
2016-08-06 13:36:34 -04:00
assert_equal %( <em>wow</em> <em>em</em> ) , highlight ( " wow em " , %w( wow em ) , highlighter : '<em>\1</em>' )
2008-07-27 17:49:19 -04:00
end
2008-10-30 13:52:12 -04:00
def test_highlight_with_html
assert_equal (
2012-02-05 12:08:21 -05:00
" <p>This is a <mark>beautiful</mark> morning, but also a <mark>beautiful</mark> 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 (
2012-02-05 12:08:21 -05:00
" <p>This is a <em><mark>beautiful</mark></em> morning, but also a <mark>beautiful</mark> 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 (
2012-02-05 12:08:21 -05:00
" <p>This is a <em class= \" error \" ><mark>beautiful</mark></em> morning, but also a <mark>beautiful</mark> <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 (
2012-02-05 12:08:21 -05:00
" <p class= \" beautiful \" >This is a <mark>beautiful</mark> morning, but also a <mark>beautiful</mark> 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 (
2012-02-05 12:08:21 -05:00
" <p>This is a <mark>beautiful</mark> <a href= \" http://example.com/beautiful # top?what=beautiful%20morning&when=now+then \" >morning</a>, but also a <mark>beautiful</mark> 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 " )
)
2011-11-10 02:26:42 -05:00
assert_equal (
" <div>abc <b>div</b></div> " ,
2016-08-06 13:36:34 -04:00
highlight ( " <div>abc div</div> " , " div " , highlighter : '<b>\1</b>' )
2011-11-10 02:26:42 -05:00
)
2008-10-30 13:52:12 -04:00
end
2012-05-26 12:44:30 -04:00
2012-05-18 11:50:02 -04:00
def test_highlight_does_not_modify_the_options_hash
2016-08-06 13:36:34 -04:00
options = { highlighter : '<b>\1</b>' , sanitize : false }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
highlight ( " <div>abc div</div> " , " div " , passed_options )
assert_equal options , passed_options
end
2008-10-30 13:52:12 -04:00
2014-06-19 13:58:36 -04:00
def test_highlight_with_block
assert_equal (
" <b>one</b> <b>two</b> <b>three</b> " ,
highlight ( " one two three " , [ " one " , " two " , " three " ] ) { | word | " <b> #{ word } </b> " }
)
end
2004-11-23 20:04:44 -05:00
def test_excerpt
2016-08-06 13:36:34 -04:00
assert_equal ( " ...is a beautiful morn... " , excerpt ( " This is a beautiful morning " , " beautiful " , radius : 5 ) )
assert_equal ( " This is a... " , excerpt ( " This is a beautiful morning " , " this " , radius : 5 ) )
assert_equal ( " ...iful morning " , excerpt ( " This is a beautiful morning " , " morning " , radius : 5 ) )
2013-08-07 08:34:24 -04:00
assert_nil excerpt ( " This is a beautiful morning " , " day " )
end
def test_excerpt_with_regex
2016-08-06 13:36:34 -04:00
assert_equal ( " ...is a beautiful! mor... " , excerpt ( " This is a beautiful! morning " , " beautiful " , radius : 5 ) )
assert_equal ( " ...is a beautiful? mor... " , excerpt ( " This is a beautiful? morning " , " beautiful " , radius : 5 ) )
assert_equal ( " ...is a beautiful? mor... " , excerpt ( " This is a beautiful? morning " , / \ bbeau \ w* \ b /i , radius : 5 ) )
assert_equal ( " ...is a beautiful? mor... " , excerpt ( " This is a beautiful? morning " , / \ b(beau \ w*) \ b /i , radius : 5 ) )
assert_equal ( " ...udge Allen and... " , excerpt ( " This day was challenging for judge Allen and his colleagues. " , / \ ballen \ b /i , radius : 5 ) )
assert_equal ( " ...judge Allen and... " , excerpt ( " This day was challenging for judge Allen and his colleagues. " , / \ ballen \ b /i , radius : 1 , separator : " " ) )
assert_equal ( " ...was challenging for... " , excerpt ( " This day was challenging for judge Allen and his colleagues. " , / \ b( \ w*allen \ w*) \ b /i , radius : 5 ) )
2004-11-23 20:04:44 -05:00
end
2005-09-26 16:49:52 -04:00
2010-06-17 06:37:33 -04:00
def test_excerpt_should_not_be_html_safe
2018-01-25 18:14:09 -05:00
assert_not_predicate excerpt ( " This is a beautiful! morning " , " beautiful " , radius : 5 ) , :html_safe?
2010-06-17 06:37:33 -04:00
end
2008-03-15 15:59:34 -04:00
def test_excerpt_in_borderline_cases
2016-08-06 13:36:34 -04:00
assert_equal ( " " , excerpt ( " " , " " , radius : 0 ) )
assert_equal ( " a " , excerpt ( " a " , " a " , radius : 0 ) )
assert_equal ( " ...b... " , excerpt ( " abc " , " b " , radius : 0 ) )
assert_equal ( " abc " , excerpt ( " abc " , " b " , radius : 1 ) )
assert_equal ( " abc... " , excerpt ( " abcd " , " b " , radius : 1 ) )
assert_equal ( " ...abc " , excerpt ( " zabc " , " b " , radius : 1 ) )
assert_equal ( " ...abc... " , excerpt ( " zabcd " , " b " , radius : 1 ) )
assert_equal ( " zabcd " , excerpt ( " zabcd " , " b " , radius : 2 ) )
2008-03-15 15:59:34 -04:00
# 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.
2016-08-06 13:36:34 -04:00
assert_equal ( " zabcd " , excerpt ( " zabcd " , " b " , radius : 4 ) )
assert_equal ( " ...abc... " , excerpt ( " z abc d " , " b " , radius : 1 ) )
2008-03-15 15:59:34 -04:00
end
2012-05-17 16:52:49 -04:00
def test_excerpt_with_omission
2016-10-28 23:05:58 -04:00
assert_equal ( " [...]is a beautiful morn[...] " , excerpt ( " This is a beautiful morning " , " beautiful " , omission : " [...] " , radius : 5 ) )
2008-07-27 17:49:19 -04:00
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 " ,
2016-08-06 13:36:34 -04:00
omission : " [...] " )
2008-07-27 17:49:19 -04:00
)
end
2011-12-21 03:04:54 -05:00
def test_excerpt_with_utf8
2018-05-17 04:32:27 -04:00
assert_equal ( ( + " ... \357 \254 \203 ciency could not be... " ) . force_encoding ( Encoding :: UTF_8 ) , excerpt ( ( + " That's why e \357 \254 \203 ciency could not be helped " ) . force_encoding ( Encoding :: UTF_8 ) , " could " , radius : 8 ) )
2006-10-12 17:13:05 -04:00
end
2012-05-26 12:44:30 -04:00
2012-05-18 11:50:02 -04:00
def test_excerpt_does_not_modify_the_options_hash
2016-10-28 23:05:58 -04:00
options = { omission : " [...] " , radius : 5 }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
excerpt ( " This is a beautiful morning " , " beautiful " , passed_options )
assert_equal options , passed_options
end
2007-12-21 06:51:17 -05:00
2012-07-28 17:34:36 -04:00
def test_excerpt_with_separator
2016-08-06 13:36:34 -04:00
options = { separator : " " , radius : 1 }
2016-08-06 12:50:17 -04:00
assert_equal ( " ...a very beautiful... " , excerpt ( " This is a very beautiful morning " , " very " , options ) )
assert_equal ( " This is... " , excerpt ( " This is a very beautiful morning " , " this " , options ) )
assert_equal ( " ...beautiful morning " , excerpt ( " This is a very beautiful morning " , " morning " , options ) )
2012-07-28 17:34:36 -04:00
2016-08-06 13:36:34 -04:00
options = { separator : " \n " , radius : 0 }
2016-08-06 12:50:17 -04:00
assert_equal ( " ...very long... " , excerpt ( " my very \n very \n very long \n string " , " long " , options ) )
2012-07-28 17:34:36 -04:00
2016-08-06 13:36:34 -04:00
options = { separator : " \n " , radius : 1 }
2016-08-06 12:50:17 -04:00
assert_equal ( " ...very \n very long \n string " , excerpt ( " my very \n very \n very long \n string " , " long " , options ) )
2013-07-25 16:56:26 -04:00
2016-08-06 12:50:17 -04:00
assert_equal excerpt ( " This is a beautiful morning " , " a " ) ,
excerpt ( " This is a beautiful morning " , " a " , separator : nil )
2012-07-28 17:34:36 -04:00
end
2005-06-21 03:16:11 -04:00
def test_word_wrap
2016-08-06 13:36:34 -04:00
assert_equal ( " my very very \n very long \n string " , word_wrap ( " my very very very long string " , line_width : 15 ) )
2005-06-21 03:16:11 -04:00
end
2005-03-06 06:50:41 -05:00
2007-09-22 14:21:54 -04:00
def test_word_wrap_with_extra_newlines
2016-08-06 13:36:34 -04:00
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 " , line_width : 15 ) )
2008-07-27 17:49:19 -04:00
end
2012-05-26 12:44:30 -04:00
2018-11-19 17:16:34 -05:00
def test_word_wrap_with_leading_spaces
assert_equal ( " This is a paragraph \n that includes some \n indented lines: \n Like this sample \n blockquote " , word_wrap ( " This is a paragraph that includes some \n indented lines: \n Like this sample \n blockquote " , line_width : 25 ) )
end
2012-05-18 11:50:02 -04:00
def test_word_wrap_does_not_modify_the_options_hash
2016-08-06 13:36:34 -04:00
options = { line_width : 15 }
2012-05-18 11:50:02 -04:00
passed_options = options . dup
2019-09-04 13:36:17 -04:00
word_wrap ( " some text " , ** passed_options )
2012-05-18 11:50:02 -04:00
assert_equal options , passed_options
end
2008-07-27 17:49:19 -04:00
2015-08-11 17:15:47 -04:00
def test_word_wrap_with_custom_break_sequence
assert_equal ( " 1234567890 \r \n 1234567890 \r \n 1234567890 " , word_wrap ( " 1234567890 " * 3 , line_width : 2 , break_sequence : " \r \n " ) )
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 " ) )
2016-08-06 12:50:17 -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 " ) )
assert_equal ( " 1.0 count " , pluralize ( " 1.0 " , " count " ) )
assert_equal ( " 1.00 count " , pluralize ( " 1.00 " , " count " ) )
2016-09-21 20:54:36 -04:00
assert_equal ( " 2 counters " , pluralize ( 2 , " count " , " counters " ) )
assert_equal ( " 0 counters " , pluralize ( nil , " count " , " counters " ) )
2015-06-19 15:35:35 -04:00
assert_equal ( " 2 counters " , pluralize ( 2 , " count " , plural : " counters " ) )
assert_equal ( " 0 counters " , pluralize ( nil , " count " , plural : " 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
2015-06-19 15:35:35 -04:00
def test_localized_pluralization
old_locale = I18n . locale
begin
I18n . locale = :de
ActiveSupport :: Inflector . inflections ( :de ) do | inflect |
2016-08-06 12:50:17 -04:00
inflect . irregular " region " , " regionen "
2015-06-19 15:35:35 -04:00
end
2015-07-08 08:59:47 -04:00
2015-06-19 15:35:35 -04:00
assert_equal ( " 1 region " , pluralize ( 1 , " region " ) )
assert_equal ( " 2 regionen " , pluralize ( 2 , " region " ) )
assert_equal ( " 2 regions " , pluralize ( 2 , " region " , locale : :en ) )
ensure
I18n . locale = old_locale
end
end
2015-07-08 08:59:47 -04: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
2011-06-07 20:39:55 -04:00
assert_raise ( ArgumentError ) { Cycle . new }
2005-09-12 01:26:25 -04:00
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
2013-11-26 15:09:52 -05:00
def test_cycle_with_array
array = [ 1 , 2 , 3 ]
assert_equal ( " 1 " , cycle ( array ) )
assert_equal ( " 2 " , cycle ( array ) )
assert_equal ( " 3 " , cycle ( array ) )
end
2005-09-12 01:26:25 -04:00
def test_cycle_with_no_arguments
2011-06-07 20:39:55 -04:00
assert_raise ( ArgumentError ) { cycle }
2005-09-12 01:26:25 -04:00
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
2016-08-06 13:36:34 -04:00
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 " ) )
2005-09-12 01:26:25 -04:00
end
2008-05-14 15:34:28 -04:00
2008-06-14 14:06:27 -04:00
def test_current_cycle_with_default_name
2016-10-28 23:05:58 -04:00
cycle ( " even " , " odd " )
2008-06-14 14:06:27 -04:00
assert_equal " even " , current_cycle
2016-10-28 23:05:58 -04:00
cycle ( " even " , " odd " )
2008-06-14 14:06:27 -04:00
assert_equal " odd " , current_cycle
2016-10-28 23:05:58 -04:00
cycle ( " even " , " odd " )
2008-06-14 14:06:27 -04:00
assert_equal " even " , current_cycle
end
def test_current_cycle_with_named_cycles
2016-08-06 13:36:34 -04:00
cycle ( " red " , " blue " , name : " colors " )
2008-06-14 14:06:27 -04:00
assert_equal " red " , current_cycle ( " colors " )
2016-08-06 13:36:34 -04:00
cycle ( " red " , " blue " , name : " colors " )
2008-06-14 14:06:27 -04:00
assert_equal " blue " , current_cycle ( " colors " )
2016-08-06 13:36:34 -04:00
cycle ( " red " , " blue " , name : " colors " )
2008-06-14 14:06:27 -04:00
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
2016-10-28 23:05:58 -04:00
cycle ( 1 , 2 , 3 )
2008-06-14 14:06:27 -04:00
assert_equal " 1 " , current_cycle
2016-10-28 23:05:58 -04:00
cycle ( 1 , 2 , 3 )
2008-06-14 14:06:27 -04:00
assert_equal " 2 " , current_cycle
2016-10-28 23:05:58 -04:00
cycle ( 1 , 2 , 3 )
2008-06-14 14:06:27 -04:00
assert_equal " 3 " , current_cycle
2016-10-28 23:05:58 -04:00
cycle ( 1 , 2 , 3 )
2008-06-14 14:06:27 -04:00
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 ) )
2016-08-06 13:36:34 -04:00
assert_equal ( " 2 " , cycle ( 1 , 2 , 3 , name : " default " ) )
2005-09-12 01:26:25 -04:00
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
2013-11-26 13:56:12 -05:00
def test_reset_named_cycle
2016-08-06 13:36:34 -04:00
assert_equal ( " 1 " , cycle ( 1 , 2 , 3 , name : " numbers " ) )
assert_equal ( " red " , cycle ( " red " , " blue " , name : " colors " ) )
2005-09-12 01:26:25 -04:00
reset_cycle ( " numbers " )
2016-08-06 13:36:34 -04:00
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 " ) )
2005-09-12 01:26:25 -04:00
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