require 'abstract_unit' require 'inflector_test_cases' module Ace module Base class Case end end end class InflectorTest < Test::Unit::TestCase include InflectorTestCases def test_pluralize_plurals assert_equal "plurals", Inflector.pluralize("plurals") assert_equal "Plurals", Inflector.pluralize("Plurals") end def test_pluralize_empty_string assert_equal "", Inflector.pluralize("") end SingularToPlural.each do |singular, plural| define_method "test_pluralize_#{singular}" do assert_equal(plural, Inflector.pluralize(singular)) assert_equal(plural.capitalize, Inflector.pluralize(singular.capitalize)) end end SingularToPlural.each do |singular, plural| define_method "test_singularize_#{plural}" do assert_equal(singular, Inflector.singularize(plural)) assert_equal(singular.capitalize, Inflector.singularize(plural.capitalize)) end end MixtureToTitleCase.each do |before, titleized| define_method "test_titleize_#{before}" do assert_equal(titleized, Inflector.titleize(before)) end end def test_camelize CamelToUnderscore.each do |camel, underscore| assert_equal(camel, Inflector.camelize(underscore)) end end def test_underscore CamelToUnderscore.each do |camel, underscore| assert_equal(underscore, Inflector.underscore(camel)) end CamelToUnderscoreWithoutReverse.each do |camel, underscore| assert_equal(underscore, Inflector.underscore(camel)) end end def test_camelize_with_module CamelWithModuleToUnderscoreWithSlash.each do |camel, underscore| assert_equal(camel, Inflector.camelize(underscore)) end end def test_underscore_with_slashes CamelWithModuleToUnderscoreWithSlash.each do |camel, underscore| assert_equal(underscore, Inflector.underscore(camel)) end end def test_demodulize assert_equal "Account", Inflector.demodulize("MyApplication::Billing::Account") end def test_foreign_key ClassNameToForeignKeyWithUnderscore.each do |klass, foreign_key| assert_equal(foreign_key, Inflector.foreign_key(klass)) end ClassNameToForeignKeyWithoutUnderscore.each do |klass, foreign_key| assert_equal(foreign_key, Inflector.foreign_key(klass, false)) end end def test_tableize ClassNameToTableName.each do |class_name, table_name| assert_equal(table_name, Inflector.tableize(class_name)) end end def test_classify ClassNameToTableName.each do |class_name, table_name| assert_equal(class_name, Inflector.classify(table_name)) assert_equal(class_name, Inflector.classify("table_prefix." + table_name)) end end def test_classify_with_symbol assert_nothing_raised do assert_equal 'FooBar', Inflector.classify(:foo_bars) end end def test_classify_with_leading_schema_name assert_equal 'FooBar', Inflector.classify('schema.foo_bar') end def test_humanize UnderscoreToHuman.each do |underscore, human| assert_equal(human, Inflector.humanize(underscore)) end end def test_constantize assert_nothing_raised { assert_equal Ace::Base::Case, Inflector.constantize("Ace::Base::Case") } assert_nothing_raised { assert_equal Ace::Base::Case, Inflector.constantize("::Ace::Base::Case") } assert_nothing_raised { assert_equal InflectorTest, Inflector.constantize("InflectorTest") } assert_nothing_raised { assert_equal InflectorTest, Inflector.constantize("::InflectorTest") } assert_raises(NameError) { Inflector.constantize("UnknownClass") } assert_raises(NameError) { Inflector.constantize("An invalid string") } assert_raises(NameError) { Inflector.constantize("InvalidClass\n") } end def test_constantize_does_lexical_lookup assert_raises(NameError) { Inflector.constantize("Ace::Base::InflectorTest") } end def test_ordinal OrdinalNumbers.each do |number, ordinalized| assert_equal(ordinalized, Inflector.ordinalize(number)) end end def test_dasherize UnderscoresToDashes.each do |underscored, dasherized| assert_equal(dasherized, Inflector.dasherize(underscored)) end end def test_underscore_as_reverse_of_dasherize UnderscoresToDashes.each do |underscored, dasherized| assert_equal(underscored, Inflector.underscore(Inflector.dasherize(underscored))) end end def test_underscore_to_lower_camel UnderscoreToLowerCamel.each do |underscored, lower_camel| assert_equal(lower_camel, Inflector.camelize(underscored, false)) end end %w{plurals singulars uncountables}.each do |inflection_type| class_eval " def test_clear_#{inflection_type} cached_values = Inflector.inflections.#{inflection_type} Inflector.inflections.clear :#{inflection_type} assert Inflector.inflections.#{inflection_type}.empty?, \"#{inflection_type} inflections should be empty after clear :#{inflection_type}\" Inflector.inflections.instance_variable_set :@#{inflection_type}, cached_values end " end def test_clear_all cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables Inflector.inflections.clear :all assert Inflector.inflections.plurals.empty? assert Inflector.inflections.singulars.empty? assert Inflector.inflections.uncountables.empty? Inflector.inflections.instance_variable_set :@plurals, cached_values[0] Inflector.inflections.instance_variable_set :@singulars, cached_values[1] Inflector.inflections.instance_variable_set :@uncountables, cached_values[2] end def test_clear_with_default cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables Inflector.inflections.clear assert Inflector.inflections.plurals.empty? assert Inflector.inflections.singulars.empty? assert Inflector.inflections.uncountables.empty? Inflector.inflections.instance_variable_set :@plurals, cached_values[0] Inflector.inflections.instance_variable_set :@singulars, cached_values[1] Inflector.inflections.instance_variable_set :@uncountables, cached_values[2] end Irregularities.each do |irregularity| singular, plural = *irregularity Inflector.inflections do |inflect| define_method("test_irregularity_between_#{singular}_and_#{plural}") do inflect.irregular(singular, plural) assert_equal singular, Inflector.singularize(plural) assert_equal plural, Inflector.pluralize(singular) end end end [ :all, [] ].each do |scope| Inflector.inflections do |inflect| 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 { :singulars => :singular, :plurals => :plural, :uncountables => :uncountable }.each do |scope, method| Inflector.inflections do |inflect| 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 end