mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
fe933be5e2
This is a follow up to #4719. It appears that singularize and pluralize are supposed to be idempotent - i.e. when you call singularize or pluralize multiple times on the same string, you should get the same result. (At least for the "officially supported" cases that the stock inflector is designed to handle.) #4719 added the missing tests for regular cases, and this commit added the missing tests for the irregularities. While I'm at that, I also synced up the irregularity test cases with the current set of irregularity cases that we ship out-of-the-box.
314 lines
9.1 KiB
Ruby
314 lines
9.1 KiB
Ruby
# encoding: utf-8
|
||
|
||
module InflectorTestCases
|
||
SingularToPlural = {
|
||
"search" => "searches",
|
||
"switch" => "switches",
|
||
"fix" => "fixes",
|
||
"box" => "boxes",
|
||
"process" => "processes",
|
||
"address" => "addresses",
|
||
"case" => "cases",
|
||
"stack" => "stacks",
|
||
"wish" => "wishes",
|
||
"fish" => "fish",
|
||
"jeans" => "jeans",
|
||
"funky jeans" => "funky jeans",
|
||
"my money" => "my money",
|
||
|
||
"category" => "categories",
|
||
"query" => "queries",
|
||
"ability" => "abilities",
|
||
"agency" => "agencies",
|
||
"movie" => "movies",
|
||
|
||
"archive" => "archives",
|
||
|
||
"index" => "indices",
|
||
|
||
"wife" => "wives",
|
||
"safe" => "saves",
|
||
"half" => "halves",
|
||
|
||
"move" => "moves",
|
||
|
||
"salesperson" => "salespeople",
|
||
"person" => "people",
|
||
|
||
"spokesman" => "spokesmen",
|
||
"man" => "men",
|
||
"woman" => "women",
|
||
|
||
"basis" => "bases",
|
||
"diagnosis" => "diagnoses",
|
||
"diagnosis_a" => "diagnosis_as",
|
||
|
||
"datum" => "data",
|
||
"medium" => "media",
|
||
"stadium" => "stadia",
|
||
"analysis" => "analyses",
|
||
"my_analysis" => "my_analyses",
|
||
|
||
"node_child" => "node_children",
|
||
"child" => "children",
|
||
|
||
"experience" => "experiences",
|
||
"day" => "days",
|
||
|
||
"comment" => "comments",
|
||
"foobar" => "foobars",
|
||
"newsletter" => "newsletters",
|
||
|
||
"old_news" => "old_news",
|
||
"news" => "news",
|
||
|
||
"series" => "series",
|
||
"species" => "species",
|
||
|
||
"quiz" => "quizzes",
|
||
|
||
"perspective" => "perspectives",
|
||
|
||
"ox" => "oxen",
|
||
"photo" => "photos",
|
||
"buffalo" => "buffaloes",
|
||
"tomato" => "tomatoes",
|
||
"dwarf" => "dwarves",
|
||
"elf" => "elves",
|
||
"information" => "information",
|
||
"equipment" => "equipment",
|
||
"bus" => "buses",
|
||
"status" => "statuses",
|
||
"status_code" => "status_codes",
|
||
"mouse" => "mice",
|
||
|
||
"louse" => "lice",
|
||
"house" => "houses",
|
||
"octopus" => "octopi",
|
||
"virus" => "viri",
|
||
"alias" => "aliases",
|
||
"portfolio" => "portfolios",
|
||
|
||
"vertex" => "vertices",
|
||
"matrix" => "matrices",
|
||
"matrix_fu" => "matrix_fus",
|
||
|
||
"axis" => "axes",
|
||
"taxi" => "taxis", # prevents regression
|
||
"testis" => "testes",
|
||
"crisis" => "crises",
|
||
|
||
"rice" => "rice",
|
||
"shoe" => "shoes",
|
||
|
||
"horse" => "horses",
|
||
"prize" => "prizes",
|
||
"edge" => "edges",
|
||
|
||
"cow" => "kine",
|
||
"database" => "databases",
|
||
|
||
# regression tests against improper inflection regexes
|
||
"|ice" => "|ices",
|
||
"|ouse" => "|ouses",
|
||
"slice" => "slices",
|
||
"police" => "police"
|
||
}
|
||
|
||
CamelToUnderscore = {
|
||
"Product" => "product",
|
||
"SpecialGuest" => "special_guest",
|
||
"ApplicationController" => "application_controller",
|
||
"Area51Controller" => "area51_controller"
|
||
}
|
||
|
||
UnderscoreToLowerCamel = {
|
||
"product" => "product",
|
||
"special_guest" => "specialGuest",
|
||
"application_controller" => "applicationController",
|
||
"area51_controller" => "area51Controller"
|
||
}
|
||
|
||
SymbolToLowerCamel = {
|
||
:product => 'product',
|
||
:special_guest => 'specialGuest',
|
||
:application_controller => 'applicationController',
|
||
:area51_controller => 'area51Controller'
|
||
}
|
||
|
||
CamelToUnderscoreWithoutReverse = {
|
||
"HTMLTidy" => "html_tidy",
|
||
"HTMLTidyGenerator" => "html_tidy_generator",
|
||
"FreeBSD" => "free_bsd",
|
||
"HTML" => "html",
|
||
}
|
||
|
||
CamelWithModuleToUnderscoreWithSlash = {
|
||
"Admin::Product" => "admin/product",
|
||
"Users::Commission::Department" => "users/commission/department",
|
||
"UsersSection::CommissionDepartment" => "users_section/commission_department",
|
||
}
|
||
|
||
ClassNameToForeignKeyWithUnderscore = {
|
||
"Person" => "person_id",
|
||
"MyApplication::Billing::Account" => "account_id"
|
||
}
|
||
|
||
ClassNameToForeignKeyWithoutUnderscore = {
|
||
"Person" => "personid",
|
||
"MyApplication::Billing::Account" => "accountid"
|
||
}
|
||
|
||
ClassNameToTableName = {
|
||
"PrimarySpokesman" => "primary_spokesmen",
|
||
"NodeChild" => "node_children"
|
||
}
|
||
|
||
StringToParameterized = {
|
||
"Donald E. Knuth" => "donald-e-knuth",
|
||
"Random text with *(bad)* characters" => "random-text-with-bad-characters",
|
||
"Allow_Under_Scores" => "allow_under_scores",
|
||
"Trailing bad characters!@#" => "trailing-bad-characters",
|
||
"!@#Leading bad characters" => "leading-bad-characters",
|
||
"Squeeze separators" => "squeeze-separators",
|
||
"Test with + sign" => "test-with-sign",
|
||
"Test with malformed utf8 \251" => "test-with-malformed-utf8"
|
||
}
|
||
|
||
StringToParameterizeWithNoSeparator = {
|
||
"Donald E. Knuth" => "donaldeknuth",
|
||
"With-some-dashes" => "with-some-dashes",
|
||
"Random text with *(bad)* characters" => "randomtextwithbadcharacters",
|
||
"Trailing bad characters!@#" => "trailingbadcharacters",
|
||
"!@#Leading bad characters" => "leadingbadcharacters",
|
||
"Squeeze separators" => "squeezeseparators",
|
||
"Test with + sign" => "testwithsign",
|
||
"Test with malformed utf8 \251" => "testwithmalformedutf8"
|
||
}
|
||
|
||
StringToParameterizeWithUnderscore = {
|
||
"Donald E. Knuth" => "donald_e_knuth",
|
||
"Random text with *(bad)* characters" => "random_text_with_bad_characters",
|
||
"With-some-dashes" => "with-some-dashes",
|
||
"Retain_underscore" => "retain_underscore",
|
||
"Trailing bad characters!@#" => "trailing_bad_characters",
|
||
"!@#Leading bad characters" => "leading_bad_characters",
|
||
"Squeeze separators" => "squeeze_separators",
|
||
"Test with + sign" => "test_with_sign",
|
||
"Test with malformed utf8 \251" => "test_with_malformed_utf8"
|
||
}
|
||
|
||
StringToParameterizedAndNormalized = {
|
||
"Malmö" => "malmo",
|
||
"Garçons" => "garcons",
|
||
"Ops\331" => "opsu",
|
||
"Ærøskøbing" => "aeroskobing",
|
||
"Aßlar" => "asslar",
|
||
"Japanese: 日本語" => "japanese"
|
||
}
|
||
|
||
UnderscoreToHuman = {
|
||
"employee_salary" => "Employee salary",
|
||
"employee_id" => "Employee",
|
||
"underground" => "Underground"
|
||
}
|
||
|
||
MixtureToTitleCase = {
|
||
'active_record' => 'Active Record',
|
||
'ActiveRecord' => 'Active Record',
|
||
'action web service' => 'Action Web Service',
|
||
'Action Web Service' => 'Action Web Service',
|
||
'Action web service' => 'Action Web Service',
|
||
'actionwebservice' => 'Actionwebservice',
|
||
'Actionwebservice' => 'Actionwebservice',
|
||
"david's code" => "David's Code",
|
||
"David's code" => "David's Code",
|
||
"david's Code" => "David's Code",
|
||
"sgt. pepper's" => "Sgt. Pepper's",
|
||
"i've just seen a face" => "I've Just Seen A Face",
|
||
"maybe you'll be there" => "Maybe You'll Be There",
|
||
"¿por qué?" => '¿Por Qué?',
|
||
"Fred’s" => "Fred’s",
|
||
"Fred`s" => "Fred`s"
|
||
}
|
||
|
||
OrdinalNumbers = {
|
||
"-1" => "-1st",
|
||
"-2" => "-2nd",
|
||
"-3" => "-3rd",
|
||
"-4" => "-4th",
|
||
"-5" => "-5th",
|
||
"-6" => "-6th",
|
||
"-7" => "-7th",
|
||
"-8" => "-8th",
|
||
"-9" => "-9th",
|
||
"-10" => "-10th",
|
||
"-11" => "-11th",
|
||
"-12" => "-12th",
|
||
"-13" => "-13th",
|
||
"-14" => "-14th",
|
||
"-20" => "-20th",
|
||
"-21" => "-21st",
|
||
"-22" => "-22nd",
|
||
"-23" => "-23rd",
|
||
"-24" => "-24th",
|
||
"-100" => "-100th",
|
||
"-101" => "-101st",
|
||
"-102" => "-102nd",
|
||
"-103" => "-103rd",
|
||
"-104" => "-104th",
|
||
"-110" => "-110th",
|
||
"-111" => "-111th",
|
||
"-112" => "-112th",
|
||
"-113" => "-113th",
|
||
"-1000" => "-1000th",
|
||
"-1001" => "-1001st",
|
||
"0" => "0th",
|
||
"1" => "1st",
|
||
"2" => "2nd",
|
||
"3" => "3rd",
|
||
"4" => "4th",
|
||
"5" => "5th",
|
||
"6" => "6th",
|
||
"7" => "7th",
|
||
"8" => "8th",
|
||
"9" => "9th",
|
||
"10" => "10th",
|
||
"11" => "11th",
|
||
"12" => "12th",
|
||
"13" => "13th",
|
||
"14" => "14th",
|
||
"20" => "20th",
|
||
"21" => "21st",
|
||
"22" => "22nd",
|
||
"23" => "23rd",
|
||
"24" => "24th",
|
||
"100" => "100th",
|
||
"101" => "101st",
|
||
"102" => "102nd",
|
||
"103" => "103rd",
|
||
"104" => "104th",
|
||
"110" => "110th",
|
||
"111" => "111th",
|
||
"112" => "112th",
|
||
"113" => "113th",
|
||
"1000" => "1000th",
|
||
"1001" => "1001st"
|
||
}
|
||
|
||
UnderscoresToDashes = {
|
||
"street" => "street",
|
||
"street_address" => "street-address",
|
||
"person_street_address" => "person-street-address"
|
||
}
|
||
|
||
Irregularities = {
|
||
'person' => 'people',
|
||
'man' => 'men',
|
||
'child' => 'children',
|
||
'sex' => 'sexes',
|
||
'move' => 'moves',
|
||
'cow' => 'kine',
|
||
'zombie' => 'zombies',
|
||
}
|
||
end
|