2008-01-05 21:31:04 +08:00
require 'abstract_unit'
2007-09-27 18:19:48 +08:00
require 'inflector_test_cases'
2004-12-30 05:03:21 +08:00
2005-02-15 23:02:43 +08:00
module Ace
module Base
class Case
2005-02-15 09:45:35 +08:00
end
end
end
2004-12-30 05:03:21 +08:00
class InflectorTest < Test :: Unit :: TestCase
2007-09-27 18:19:48 +08:00
include InflectorTestCases
2007-01-28 23:52:45 +08:00
2005-03-26 21:20:47 +08:00
def test_pluralize_plurals
2008-06-04 02:32:53 +08:00
assert_equal " plurals " , ActiveSupport :: Inflector . pluralize ( " plurals " )
assert_equal " Plurals " , ActiveSupport :: Inflector . pluralize ( " Plurals " )
2005-03-26 21:20:47 +08:00
end
2007-09-23 02:34:43 +08:00
def test_pluralize_empty_string
2008-06-04 02:32:53 +08:00
assert_equal " " , ActiveSupport :: Inflector . pluralize ( " " )
2007-09-23 02:34:43 +08:00
end
2005-03-26 21:20:47 +08:00
SingularToPlural . each do | singular , plural |
define_method " test_pluralize_ #{ singular } " do
2008-06-04 02:32:53 +08:00
assert_equal ( plural , ActiveSupport :: Inflector . pluralize ( singular ) )
assert_equal ( plural . capitalize , ActiveSupport :: Inflector . pluralize ( singular . capitalize ) )
2004-12-30 05:03:21 +08:00
end
end
2005-03-26 21:20:47 +08:00
SingularToPlural . each do | singular , plural |
define_method " test_singularize_ #{ plural } " do
2008-06-04 02:32:53 +08:00
assert_equal ( singular , ActiveSupport :: Inflector . singularize ( plural ) )
assert_equal ( singular . capitalize , ActiveSupport :: Inflector . singularize ( plural . capitalize ) )
2004-12-30 05:03:21 +08:00
end
end
2007-01-28 23:52:45 +08:00
MixtureToTitleCase . each do | before , titleized |
define_method " test_titleize_ #{ before } " do
2008-06-04 02:32:53 +08:00
assert_equal ( titleized , ActiveSupport :: Inflector . titleize ( before ) )
2005-10-20 04:20:11 +08:00
end
end
2004-12-30 05:03:21 +08:00
def test_camelize
CamelToUnderscore . each do | camel , underscore |
2008-06-04 02:32:53 +08:00
assert_equal ( camel , ActiveSupport :: Inflector . camelize ( underscore ) )
2004-12-30 05:03:21 +08:00
end
end
def test_underscore
CamelToUnderscore . each do | camel , underscore |
2008-06-04 02:32:53 +08:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2004-12-30 05:03:21 +08:00
end
2005-09-13 15:44:20 +08:00
CamelToUnderscoreWithoutReverse . each do | camel , underscore |
2008-06-04 02:32:53 +08:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2005-09-13 15:44:20 +08:00
end
2004-12-30 05:03:21 +08:00
end
2005-02-15 09:45:35 +08:00
def test_camelize_with_module
CamelWithModuleToUnderscoreWithSlash . each do | camel , underscore |
2008-06-04 02:32:53 +08:00
assert_equal ( camel , ActiveSupport :: Inflector . camelize ( underscore ) )
2005-02-15 09:45:35 +08:00
end
end
2006-07-09 02:14:49 +08:00
2005-02-15 09:45:35 +08:00
def test_underscore_with_slashes
CamelWithModuleToUnderscoreWithSlash . each do | camel , underscore |
2008-06-04 02:32:53 +08:00
assert_equal ( underscore , ActiveSupport :: Inflector . underscore ( camel ) )
2005-02-15 09:45:35 +08:00
end
end
2004-12-30 05:03:21 +08:00
def test_demodulize
2008-06-04 02:32:53 +08:00
assert_equal " Account " , ActiveSupport :: Inflector . demodulize ( " MyApplication::Billing::Account " )
2004-12-30 05:03:21 +08:00
end
def test_foreign_key
ClassNameToForeignKeyWithUnderscore . each do | klass , foreign_key |
2008-06-04 02:32:53 +08:00
assert_equal ( foreign_key , ActiveSupport :: Inflector . foreign_key ( klass ) )
2004-12-30 05:03:21 +08:00
end
ClassNameToForeignKeyWithoutUnderscore . each do | klass , foreign_key |
2008-06-04 02:32:53 +08:00
assert_equal ( foreign_key , ActiveSupport :: Inflector . foreign_key ( klass , false ) )
2004-12-30 05:03:21 +08:00
end
end
def test_tableize
ClassNameToTableName . each do | class_name , table_name |
2008-06-04 02:32:53 +08:00
assert_equal ( table_name , ActiveSupport :: Inflector . tableize ( class_name ) )
2004-12-30 05:03:21 +08:00
end
end
def test_classify
ClassNameToTableName . each do | class_name , table_name |
2008-06-04 02:32:53 +08:00
assert_equal ( class_name , ActiveSupport :: Inflector . classify ( table_name ) )
assert_equal ( class_name , ActiveSupport :: Inflector . classify ( " table_prefix. " + table_name ) )
2004-12-30 05:03:21 +08:00
end
end
2006-05-22 23:17:45 +08:00
def test_classify_with_symbol
assert_nothing_raised do
2008-06-04 02:32:53 +08:00
assert_equal 'FooBar' , ActiveSupport :: Inflector . classify ( :foo_bars )
2006-05-22 23:17:45 +08:00
end
end
2006-07-09 02:14:49 +08:00
2007-01-28 23:52:45 +08:00
def test_classify_with_leading_schema_name
2008-06-04 02:32:53 +08:00
assert_equal 'FooBar' , ActiveSupport :: Inflector . classify ( 'schema.foo_bar' )
2007-01-28 23:52:45 +08:00
end
2005-01-18 03:53:42 +08:00
def test_humanize
UnderscoreToHuman . each do | underscore , human |
2008-06-04 02:32:53 +08:00
assert_equal ( human , ActiveSupport :: Inflector . humanize ( underscore ) )
2005-01-18 03:53:42 +08:00
end
end
2006-07-09 02:14:49 +08:00
2008-07-02 20:25:17 +08: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-15 09:45:35 +08:00
def test_constantize
2008-06-04 02:32:53 +08: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 " ) }
assert_raises ( NameError ) { ActiveSupport :: Inflector . constantize ( " UnknownClass " ) }
assert_raises ( NameError ) { ActiveSupport :: Inflector . constantize ( " An invalid string " ) }
assert_raises ( NameError ) { ActiveSupport :: Inflector . constantize ( " InvalidClass \n " ) }
2005-11-16 08:56:16 +08:00
end
2006-07-09 02:14:49 +08:00
2008-05-02 04:34:07 +08:00
def test_constantize_does_lexical_lookup
2008-06-04 02:32:53 +08:00
assert_raises ( NameError ) { ActiveSupport :: Inflector . constantize ( " Ace::Base::InflectorTest " ) }
2005-02-15 09:45:35 +08:00
end
2005-07-17 18:02:23 +08:00
def test_ordinal
OrdinalNumbers . each do | number , ordinalized |
2008-06-04 02:32:53 +08:00
assert_equal ( ordinalized , ActiveSupport :: Inflector . ordinalize ( number ) )
2005-07-17 18:02:23 +08:00
end
end
2006-03-08 10:56:25 +08:00
def test_dasherize
UnderscoresToDashes . each do | underscored , dasherized |
2008-06-04 02:32:53 +08:00
assert_equal ( dasherized , ActiveSupport :: Inflector . dasherize ( underscored ) )
2006-03-08 10:56:25 +08:00
end
end
2006-03-16 05:05:10 +08:00
def test_underscore_as_reverse_of_dasherize
UnderscoresToDashes . each do | underscored , dasherized |
2008-06-04 02:32:53 +08:00
assert_equal ( underscored , ActiveSupport :: Inflector . underscore ( ActiveSupport :: Inflector . dasherize ( underscored ) ) )
2006-03-16 05:05:10 +08:00
end
end
2006-03-20 11:32:28 +08:00
def test_underscore_to_lower_camel
UnderscoreToLowerCamel . each do | underscored , lower_camel |
2008-06-04 02:32:53 +08:00
assert_equal ( lower_camel , ActiveSupport :: Inflector . camelize ( underscored , false ) )
2006-03-20 11:32:28 +08:00
end
end
2008-06-04 02:32:53 +08:00
2008-07-02 20:25:17 +08:00
%w{ plurals singulars uncountables humans } . each do | inflection_type |
2007-01-23 13:32:08 +08:00
class_eval "
def test_clear_ #{inflection_type}
2008-06-04 02:32:53 +08: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 13:32:08 +08:00
end
"
end
2008-06-04 02:32:53 +08:00
2007-01-23 13:32:08 +08:00
def test_clear_all
2008-07-02 20:25:17 +08:00
cached_values = ActiveSupport :: Inflector . inflections . plurals , ActiveSupport :: Inflector . inflections . singulars , ActiveSupport :: Inflector . inflections . uncountables , ActiveSupport :: Inflector . inflections . humans
2008-06-04 02:32:53 +08: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 20:25:17 +08:00
assert ActiveSupport :: Inflector . inflections . humans . empty?
2008-06-04 02:32:53 +08: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 20:25:17 +08:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@humans , cached_values [ 3 ]
2008-06-04 02:32:53 +08:00
end
2007-01-23 13:32:08 +08:00
def test_clear_with_default
2008-07-02 20:25:17 +08:00
cached_values = ActiveSupport :: Inflector . inflections . plurals , ActiveSupport :: Inflector . inflections . singulars , ActiveSupport :: Inflector . inflections . uncountables , ActiveSupport :: Inflector . inflections . humans
2008-06-04 02:32:53 +08: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 20:25:17 +08:00
assert ActiveSupport :: Inflector . inflections . humans . empty?
2008-06-04 02:32:53 +08: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 20:25:17 +08:00
ActiveSupport :: Inflector . inflections . instance_variable_set :@humans , cached_values [ 3 ]
2007-01-23 13:32:08 +08:00
end
2007-01-28 23:52:45 +08:00
Irregularities . each do | irregularity |
singular , plural = * irregularity
2008-06-04 02:32:53 +08:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 23:52:45 +08:00
define_method ( " test_irregularity_between_ #{ singular } _and_ #{ plural } " ) do
inflect . irregular ( singular , plural )
2008-06-04 02:32:53 +08:00
assert_equal singular , ActiveSupport :: Inflector . singularize ( plural )
assert_equal plural , ActiveSupport :: Inflector . pluralize ( singular )
2007-01-28 23:52:45 +08:00
end
end
end
[ :all , [ ] ] . each do | scope |
2008-06-04 02:32:53 +08:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 23:52:45 +08: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 20:25:17 +08:00
{ :singulars = > :singular , :plurals = > :plural , :uncountables = > :uncountable , :humans = > :human } . each do | scope , method |
2008-06-04 02:32:53 +08:00
ActiveSupport :: Inflector . inflections do | inflect |
2007-01-28 23:52:45 +08: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 18:02:23 +08:00
end