2008-01-05 08:31:04 -05:00
require 'abstract_unit'
2009-04-22 20:41:28 -04:00
require 'active_support/inflector'
2007-09-27 06:19:48 -04:00
require 'inflector_test_cases'
2004-12-29 16:03:21 -05:00
2005-02-15 10:02:43 -05:00
module Ace
module Base
class Case
2005-02-14 20:45:35 -05:00
end
end
end
2004-12-29 16:03:21 -05:00
class InflectorTest < Test :: Unit :: TestCase
2007-09-27 06:19:48 -04:00
include InflectorTestCases
2007-01-28 10:52:45 -05:00
2005-03-26 08:20:47 -05:00
def test_pluralize_plurals
2008-06-03 14:32:53 -04:00
assert_equal " plurals " , ActiveSupport :: Inflector . pluralize ( " plurals " )
assert_equal " Plurals " , ActiveSupport :: Inflector . pluralize ( " Plurals " )
2005-03-26 08:20:47 -05:00
end
2007-09-22 14:34:43 -04:00
def test_pluralize_empty_string
2008-06-03 14:32:53 -04:00
assert_equal " " , ActiveSupport :: Inflector . pluralize ( " " )
2007-09-22 14:34:43 -04:00
end
2010-12-22 03:08:20 -05:00
2010-11-30 13:48:25 -05:00
ActiveSupport :: Inflector . inflections . uncountable . each do | word |
define_method " test_uncountability_of_ #{ word } " do
assert_equal word , ActiveSupport :: Inflector . singularize ( word )
assert_equal word , ActiveSupport :: Inflector . pluralize ( word )
assert_equal ActiveSupport :: Inflector . pluralize ( word ) , ActiveSupport :: Inflector . singularize ( word )
end
end
2010-12-22 03:08:20 -05:00
2010-11-30 13:48:25 -05:00
def test_uncountable_word_is_not_greedy
uncountable_word = " ors "
countable_word = " sponsor "
2010-12-22 03:08:20 -05:00
2010-11-30 13:48:25 -05:00
cached_uncountables = ActiveSupport :: Inflector . inflections . uncountables
2010-12-22 03:08:20 -05:00
2010-11-30 13:48:25 -05:00
ActiveSupport :: Inflector . inflections . uncountable << uncountable_word
assert_equal uncountable_word , ActiveSupport :: Inflector . singularize ( uncountable_word )
assert_equal uncountable_word , ActiveSupport :: Inflector . pluralize ( uncountable_word )
assert_equal ActiveSupport :: Inflector . pluralize ( uncountable_word ) , ActiveSupport :: Inflector . singularize ( uncountable_word )
assert_equal " sponsor " , ActiveSupport :: Inflector . singularize ( countable_word )
assert_equal " sponsors " , ActiveSupport :: Inflector . pluralize ( countable_word )
assert_equal " sponsor " , ActiveSupport :: Inflector . singularize ( ActiveSupport :: Inflector . pluralize ( countable_word ) )
2010-12-22 03:08:20 -05:00
ensure
2010-11-30 13:48:25 -05:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@uncountables , cached_uncountables
end
2007-09-22 14:34:43 -04:00
2005-03-26 08:20:47 -05:00
SingularToPlural . each do | singular , plural |
define_method " test_pluralize_ #{ singular } " do
2008-06-03 14:32:53 -04:00
assert_equal ( plural , ActiveSupport :: Inflector . pluralize ( singular ) )
assert_equal ( plural . capitalize , ActiveSupport :: Inflector . pluralize ( singular . capitalize ) )
2004-12-29 16:03:21 -05:00
end
end
2005-03-26 08:20:47 -05:00
SingularToPlural . each do | singular , plural |
define_method " test_singularize_ #{ plural } " do
2008-06-03 14:32:53 -04:00
assert_equal ( singular , ActiveSupport :: Inflector . singularize ( plural ) )
assert_equal ( singular . capitalize , ActiveSupport :: Inflector . singularize ( plural . capitalize ) )
2004-12-29 16:03:21 -05:00
end
end
2008-08-23 13:33:07 -04:00
def test_overwrite_previous_inflectors
assert_equal ( " series " , ActiveSupport :: Inflector . singularize ( " series " ) )
ActiveSupport :: Inflector . inflections . singular " series " , " serie "
assert_equal ( " serie " , ActiveSupport :: Inflector . singularize ( " series " ) )
ActiveSupport :: Inflector . inflections . uncountable " series " # Return to normal
end
2007-01-28 10:52:45 -05:00
MixtureToTitleCase . each do | before , titleized |
define_method " test_titleize_ #{ before } " do
2008-06-03 14:32:53 -04:00
assert_equal ( titleized , ActiveSupport :: Inflector . titleize ( before ) )
2005-10-19 16:20:11 -04:00
end
end
2004-12-29 16:03:21 -05:00
def test_camelize
CamelToUnderscore . each do | camel , underscore |
2008-06-03 14:32:53 -04:00
assert_equal ( camel , ActiveSupport :: Inflector . camelize ( underscore ) )
2004-12-29 16:03:21 -05:00
end
end
2008-08-22 08:31:13 -04:00
def test_camelize_with_lower_downcases_the_first_letter
assert_equal ( 'capital' , ActiveSupport :: Inflector . camelize ( 'Capital' , false ) )
end
2004-12-29 16:03:21 -05:00
def test_underscore
CamelToUnderscore . each do | camel , underscore |
2008-06-03 14:32:53 -04:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2004-12-29 16:03:21 -05:00
end
2005-09-13 03:44:20 -04:00
CamelToUnderscoreWithoutReverse . each do | camel , underscore |
2008-06-03 14:32:53 -04:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2005-09-13 03:44:20 -04:00
end
2004-12-29 16:03:21 -05:00
end
2005-02-14 20:45:35 -05:00
def test_camelize_with_module
CamelWithModuleToUnderscoreWithSlash . each do | camel , underscore |
2008-06-03 14:32:53 -04:00
assert_equal ( camel , ActiveSupport :: Inflector . camelize ( underscore ) )
2005-02-14 20:45:35 -05:00
end
end
2006-07-08 14:14:49 -04:00
2005-02-14 20:45:35 -05:00
def test_underscore_with_slashes
CamelWithModuleToUnderscoreWithSlash . each do | camel , underscore |
2008-06-03 14:32:53 -04:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2005-02-14 20:45:35 -05:00
end
end
2004-12-29 16:03:21 -05:00
def test_demodulize
2008-06-03 14:32:53 -04:00
assert_equal " Account " , ActiveSupport :: Inflector . demodulize ( " MyApplication::Billing::Account " )
2004-12-29 16:03:21 -05:00
end
def test_foreign_key
ClassNameToForeignKeyWithUnderscore . each do | klass , foreign_key |
2008-06-03 14:32:53 -04:00
assert_equal ( foreign_key , ActiveSupport :: Inflector . foreign_key ( klass ) )
2004-12-29 16:03:21 -05:00
end
ClassNameToForeignKeyWithoutUnderscore . each do | klass , foreign_key |
2008-06-03 14:32:53 -04:00
assert_equal ( foreign_key , ActiveSupport :: Inflector . foreign_key ( klass , false ) )
2004-12-29 16:03:21 -05:00
end
end
def test_tableize
ClassNameToTableName . each do | class_name , table_name |
2008-06-03 14:32:53 -04:00
assert_equal ( table_name , ActiveSupport :: Inflector . tableize ( class_name ) )
2004-12-29 16:03:21 -05:00
end
end
2008-09-10 01:26:50 -04:00
def test_parameterize
StringToParameterized . each do | some_string , parameterized_string |
assert_equal ( parameterized_string , ActiveSupport :: Inflector . parameterize ( some_string ) )
end
end
2008-11-26 20:59:35 -05:00
def test_parameterize_and_normalize
StringToParameterizedAndNormalized . each do | some_string , parameterized_string |
assert_equal ( parameterized_string , ActiveSupport :: Inflector . parameterize ( some_string ) )
end
end
2008-09-12 08:45:11 -04:00
def test_parameterize_with_custom_separator
StringToParameterized . each do | some_string , parameterized_string |
assert_equal ( parameterized_string . gsub ( '-' , '_' ) , ActiveSupport :: Inflector . parameterize ( some_string , '_' ) )
end
end
2009-03-10 17:36:46 -04:00
def test_parameterize_with_multi_character_separator
StringToParameterized . each do | some_string , parameterized_string |
assert_equal ( parameterized_string . gsub ( '-' , '__sep__' ) , ActiveSupport :: Inflector . parameterize ( some_string , '__sep__' ) )
end
end
2004-12-29 16:03:21 -05:00
def test_classify
ClassNameToTableName . each do | class_name , table_name |
2008-06-03 14:32:53 -04:00
assert_equal ( class_name , ActiveSupport :: Inflector . classify ( table_name ) )
assert_equal ( class_name , ActiveSupport :: Inflector . classify ( " table_prefix. " + table_name ) )
2004-12-29 16:03:21 -05:00
end
end
2006-05-22 11:17:45 -04:00
def test_classify_with_symbol
assert_nothing_raised do
2008-06-03 14:32:53 -04:00
assert_equal 'FooBar' , ActiveSupport :: Inflector . classify ( :foo_bars )
2006-05-22 11:17:45 -04:00
end
end
2006-07-08 14:14:49 -04:00
2007-01-28 10:52:45 -05:00
def test_classify_with_leading_schema_name
2008-06-03 14:32:53 -04:00
assert_equal 'FooBar' , ActiveSupport :: Inflector . classify ( 'schema.foo_bar' )
2007-01-28 10:52:45 -05:00
end
2005-01-17 14:53:42 -05:00
def test_humanize
UnderscoreToHuman . each do | underscore , human |
2008-06-03 14:32:53 -04:00
assert_equal ( human , ActiveSupport :: Inflector . humanize ( underscore ) )
2005-01-17 14:53:42 -05:00
end
end
2006-07-08 14:14:49 -04:00
2008-07-02 08:25:17 -04:00
def test_humanize_by_rule
ActiveSupport :: Inflector . inflections do | inflect |
inflect . human ( / _cnt$ /i , '\1_count' )
inflect . human ( / ^prefx_ /i , '\1' )
end
assert_equal ( " Jargon count " , ActiveSupport :: Inflector . humanize ( " jargon_cnt " ) )
assert_equal ( " Request " , ActiveSupport :: Inflector . humanize ( " prefx_request " ) )
end
def test_humanize_by_string
ActiveSupport :: Inflector . inflections do | inflect |
inflect . human ( " col_rpted_bugs " , " Reported bugs " )
end
assert_equal ( " Reported bugs " , ActiveSupport :: Inflector . humanize ( " col_rpted_bugs " ) )
assert_equal ( " Col rpted bugs " , ActiveSupport :: Inflector . humanize ( " COL_rpted_bugs " ) )
end
2005-02-14 20:45:35 -05:00
def test_constantize
2008-06-03 14:32:53 -04:00
assert_nothing_raised { assert_equal Ace :: Base :: Case , ActiveSupport :: Inflector . constantize ( " Ace::Base::Case " ) }
assert_nothing_raised { assert_equal Ace :: Base :: Case , ActiveSupport :: Inflector . constantize ( " ::Ace::Base::Case " ) }
assert_nothing_raised { assert_equal InflectorTest , ActiveSupport :: Inflector . constantize ( " InflectorTest " ) }
assert_nothing_raised { assert_equal InflectorTest , ActiveSupport :: Inflector . constantize ( " ::InflectorTest " ) }
2009-03-08 16:11:58 -04:00
assert_raise ( NameError ) { ActiveSupport :: Inflector . constantize ( " UnknownClass " ) }
assert_raise ( NameError ) { ActiveSupport :: Inflector . constantize ( " An invalid string " ) }
assert_raise ( NameError ) { ActiveSupport :: Inflector . constantize ( " InvalidClass \n " ) }
2005-11-15 19:56:16 -05:00
end
2006-07-08 14:14:49 -04:00
2008-05-01 16:34:07 -04:00
def test_constantize_does_lexical_lookup
2009-03-08 16:11:58 -04:00
assert_raise ( NameError ) { ActiveSupport :: Inflector . constantize ( " Ace::Base::InflectorTest " ) }
2005-02-14 20:45:35 -05:00
end
2005-07-17 06:02:23 -04:00
def test_ordinal
OrdinalNumbers . each do | number , ordinalized |
2008-06-03 14:32:53 -04:00
assert_equal ( ordinalized , ActiveSupport :: Inflector . ordinalize ( number ) )
2005-07-17 06:02:23 -04:00
end
end
2006-03-07 21:56:25 -05:00
def test_dasherize
UnderscoresToDashes . each do | underscored , dasherized |
2008-06-03 14:32:53 -04:00
assert_equal ( dasherized , ActiveSupport :: Inflector . dasherize ( underscored ) )
2006-03-07 21:56:25 -05:00
end
end
2006-03-15 16:05:10 -05:00
def test_underscore_as_reverse_of_dasherize
UnderscoresToDashes . each do | underscored , dasherized |
2008-06-03 14:32:53 -04:00
assert_equal ( underscored , ActiveSupport :: Inflector . underscore ( ActiveSupport :: Inflector . dasherize ( underscored ) ) )
2006-03-15 16:05:10 -05:00
end
end
2006-03-19 22:32:28 -05:00
def test_underscore_to_lower_camel
UnderscoreToLowerCamel . each do | underscored , lower_camel |
2008-06-03 14:32:53 -04:00
assert_equal ( lower_camel , ActiveSupport :: Inflector . camelize ( underscored , false ) )
2006-03-19 22:32:28 -05:00
end
end
2008-06-03 14:32:53 -04:00
2009-07-01 15:14:34 -04:00
def test_symbol_to_lower_camel
SymbolToLowerCamel . each do | symbol , lower_camel |
assert_equal ( lower_camel , ActiveSupport :: Inflector . camelize ( symbol , false ) )
end
end
2008-07-02 08:25:17 -04:00
%w{ plurals singulars uncountables humans } . each do | inflection_type |
2010-05-19 15:37:41 -04:00
class_eval <<-RUBY, __FILE__, __LINE__ + 1
2007-01-23 00:32:08 -05:00
def test_clear_ #{inflection_type}
2008-06-03 14:32:53 -04:00
cached_values = ActiveSupport :: Inflector . inflections . #{inflection_type}
ActiveSupport :: Inflector . inflections . clear : #{inflection_type}
assert ActiveSupport :: Inflector . inflections . #{inflection_type}.empty?, \"#{inflection_type} inflections should be empty after clear :#{inflection_type}\"
ActiveSupport :: Inflector . inflections . instance_variable_set : @ #{inflection_type}, cached_values
2007-01-23 00:32:08 -05:00
end
2010-05-19 15:37:41 -04:00
RUBY
2007-01-23 00:32:08 -05:00
end
2008-06-03 14:32:53 -04:00
2007-01-23 00:32:08 -05:00
def test_clear_all
2008-07-02 08:25:17 -04:00
cached_values = ActiveSupport :: Inflector . inflections . plurals , ActiveSupport :: Inflector . inflections . singulars , ActiveSupport :: Inflector . inflections . uncountables , ActiveSupport :: Inflector . inflections . humans
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections . clear :all
assert ActiveSupport :: Inflector . inflections . plurals . empty?
assert ActiveSupport :: Inflector . inflections . singulars . empty?
assert ActiveSupport :: Inflector . inflections . uncountables . empty?
2008-07-02 08:25:17 -04:00
assert ActiveSupport :: Inflector . inflections . humans . empty?
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@plurals , cached_values [ 0 ]
ActiveSupport :: Inflector . inflections . instance_variable_set :@singulars , cached_values [ 1 ]
ActiveSupport :: Inflector . inflections . instance_variable_set :@uncountables , cached_values [ 2 ]
2008-07-02 08:25:17 -04:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@humans , cached_values [ 3 ]
2008-06-03 14:32:53 -04:00
end
2007-01-23 00:32:08 -05:00
def test_clear_with_default
2008-07-02 08:25:17 -04:00
cached_values = ActiveSupport :: Inflector . inflections . plurals , ActiveSupport :: Inflector . inflections . singulars , ActiveSupport :: Inflector . inflections . uncountables , ActiveSupport :: Inflector . inflections . humans
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections . clear
assert ActiveSupport :: Inflector . inflections . plurals . empty?
assert ActiveSupport :: Inflector . inflections . singulars . empty?
assert ActiveSupport :: Inflector . inflections . uncountables . empty?
2008-07-02 08:25:17 -04:00
assert ActiveSupport :: Inflector . inflections . humans . empty?
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@plurals , cached_values [ 0 ]
ActiveSupport :: Inflector . inflections . instance_variable_set :@singulars , cached_values [ 1 ]
ActiveSupport :: Inflector . inflections . instance_variable_set :@uncountables , cached_values [ 2 ]
2008-07-02 08:25:17 -04:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@humans , cached_values [ 3 ]
2007-01-23 00:32:08 -05:00
end
2007-01-28 10:52:45 -05:00
Irregularities . each do | irregularity |
singular , plural = * irregularity
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 10:52:45 -05:00
define_method ( " test_irregularity_between_ #{ singular } _and_ #{ plural } " ) do
inflect . irregular ( singular , plural )
2008-06-03 14:32:53 -04:00
assert_equal singular , ActiveSupport :: Inflector . singularize ( plural )
assert_equal plural , ActiveSupport :: Inflector . pluralize ( singular )
2007-01-28 10:52:45 -05:00
end
end
end
2008-07-04 03:04:50 -04:00
Irregularities . each do | irregularity |
singular , plural = * irregularity
ActiveSupport :: Inflector . inflections do | inflect |
define_method ( " test_pluralize_of_irregularity_ #{ plural } _should_be_the_same " ) do
inflect . irregular ( singular , plural )
assert_equal plural , ActiveSupport :: Inflector . pluralize ( plural )
end
end
end
2007-01-28 10:52:45 -05:00
[ :all , [ ] ] . each do | scope |
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 10:52:45 -05:00
define_method ( " test_clear_inflections_with_ #{ scope . kind_of? ( Array ) ? " no_arguments " : scope } " ) do
# save all the inflections
singulars , plurals , uncountables = inflect . singulars , inflect . plurals , inflect . uncountables
# clear all the inflections
inflect . clear ( * scope )
assert_equal [ ] , inflect . singulars
assert_equal [ ] , inflect . plurals
assert_equal [ ] , inflect . uncountables
# restore all the inflections
singulars . reverse . each { | singular | inflect . singular ( * singular ) }
plurals . reverse . each { | plural | inflect . plural ( * plural ) }
inflect . uncountable ( uncountables )
assert_equal singulars , inflect . singulars
assert_equal plurals , inflect . plurals
assert_equal uncountables , inflect . uncountables
end
end
end
2008-07-02 08:25:17 -04:00
{ :singulars = > :singular , :plurals = > :plural , :uncountables = > :uncountable , :humans = > :human } . each do | scope , method |
2008-06-03 14:32:53 -04:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 10:52:45 -05:00
define_method ( " test_clear_inflections_with_ #{ scope } " ) do
# save the inflections
values = inflect . send ( scope )
# clear the inflections
inflect . clear ( scope )
assert_equal [ ] , inflect . send ( scope )
# restore the inflections
if scope == :uncountables
inflect . send ( method , values )
else
values . reverse . each { | value | inflect . send ( method , * value ) }
end
assert_equal values , inflect . send ( scope )
end
end
end
2005-07-17 06:02:23 -04:00
end