diff --git a/src/main/java/com/github/javafaker/service/FakeValuesService.java b/src/main/java/com/github/javafaker/service/FakeValuesService.java index 3e288654..093e3a5b 100644 --- a/src/main/java/com/github/javafaker/service/FakeValuesService.java +++ b/src/main/java/com/github/javafaker/service/FakeValuesService.java @@ -427,7 +427,7 @@ public class FakeValuesService { // did first but FIRST we change the Object reference Class.method_name with a yml style internal refernce -> // class.method_name (lowercase) if (resolved == null && isDotDirective(directive)) { - resolved = safeFetch(simpleDirective.toLowerCase(), null); + resolved = safeFetch(javaNameToYamlName(simpleDirective), null); } return resolved; @@ -437,13 +437,24 @@ public class FakeValuesService { return directive.contains("."); } + /** + * @return a yaml style name from the classname of the supplied object (PhoneNumber => phone_number) + */ private String classNameToYamlName(Object current) { - return current.getClass().getSimpleName() - .replaceAll("([A-Z])", "_$1") + return javaNameToYamlName(current.getClass().getSimpleName()); + } + + /** + * @return a yaml style name like 'phone_number' from a java style name like 'PhoneNumber' + */ + private String javaNameToYamlName(String expression) { + return expression.replaceAll("([A-Z])", "_$1") .substring(1) .toLowerCase(); } + + /** * Given a directive like 'firstName', attempts to resolve it to a method. For example if obj is an instance of * {@link Name} then this method would return {@link Name#firstName()}. Returns null if the directive is nested diff --git a/src/main/resources/en-ZA.yml b/src/main/resources/en-ZA.yml new file mode 100644 index 00000000..fafc7397 --- /dev/null +++ b/src/main/resources/en-ZA.yml @@ -0,0 +1,51 @@ +en-ZA: + faker: + internet: + domain_suffix: [org.za, co.za, com] + address: + default_country: [South Africa, The Replublic of South Africa, SA] + post_code: '####' + provinces: [Limpopo, Gauteng, Free State, + North West, Northern Cape, Western Cape, + KwaZulu-Natal, Mpumalanga, Eastern Cape] + province: + - "#{provinces}" + cities: [ Polokwane, Johannesburg, Pretoria, Tshwane,Durban, + Pietermaritzburg, Nelspruit, Cape Town, Stellenbosch, Port Elizabeth, + East London, Kimberley, Rustenburg, Bloemfontein ] + city: + - "#{cities}" + phone_number: + # https://en.wikipedia.org/wiki/Telephone_numbers_in_South_Africa + dial_code: ['10', '11', '12', '13', '14', '15', '16', '17', '18', '21', '22', '23', '24', '27', '28', '31', '32', '33', '34', '35', '36', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '51', '53', '54', '56', '57', '58'] + exchange_code: ["201", "202", "203", "205", "206", "207", "208", "209", "210", "212", "213", "214", "215", "216", "217", "218", "219", "224", "225", "227", "228", "229", "231", "234", "239", "240", "248", "251", "252", "253", "254", "256", "260", "262", "267", "269", "270", "276", "281", "283", "301", "302", "303", "304", "305", "307", "308", "309", "310", "312", "313", "314", "315", "316", "317", "318", "319", "320", "321", "323", "330", "331", "334", "336", "337", "339", "347", "351", "352", "360", "361", "386", "401", "402", "404", "405", "406", "407", "408", "409", "410", "412", "413", "414", "415", "417", "419", "423", "424", "425", "434", "435", "440", "443", "445", "464", "469", "470", "475", "478", "479", "480", "484", "501", "502", "503", "504", "505", "507", "508", "509", "510", "512", "513", "515", "516", "517", "518", "520", "530", "540", "541", "551", "557", "559", "561", "562", "563", "564", "567", "570", "571", "573", "574", "580", "585", "586", "601", "602", "603", "605", "606", "607", "608", "609", "610", "612", "614", "615", "616", "617", "618", "619", "620", "623", "626", "630", "631", "636", "641", "646", "650", "651", "660", "661", "662", "667", "678", "682", "701", "702", "703", "704", "706", "707", "708", "712", "713", "714", "715", "716", "717", "718", "719", "720", "724", "727", "731", "732", "734", "737", "740", "754", "757", "760", "763", "765", "770", "772", "773", "774", "775", "781", "785", "786", "801", "802", "803", "804", "805", "806", "808", "810", "812", "813", "814", "815", "816", "817", "818", "828", "830", "831", "832", "835", "843", "845", "847", "848", "850", "856", "857", "858", "859", "860", "862", "863", "864", "865", "870", "872", "878", "901", "903", "904", "906", "907", "908", "909", "910", "912", "913", "914", "915", "916", "917", "918", "919", "920", "925", "928", "931", "936", "937", "940", "941", "947", "949", "952", "954", "956", "959", "970", "971", "972", "973", "975", "978", "979", "980", "984", "985", "989"] + formats: + - "0#{PhoneNumber.dial_code}-#{PhoneNumber.exchange_code} ####" + - "(0#{PhoneNumber.dial_code}) #{PhoneNumber.exchange_code}-####" + - "27#{PhoneNumber.dial_code}-#{PhoneNumber.exchange_code} ####" + cell_phone: + formats: + # vodacom + - "+2782 ### ####" + - "+2772 ### ####" + - "+2776 ### ####" + - "+2779 ### ####" + - "+2760 ### ####" + - "+2761 ### ####" + # mtn + - "+2783 ### ####" + - "+2773 ### ####" + - "+2763 ### ####" + # 8ta + - "+2781 ### ####" + - "+2761 ### ####" + # cell-c + - "+2784 ### ####" + - "+2774 ### ####" + name: + last_name: [Dlamini, Zulu, Mabunda, Makhanya, Khoza, Zuma, Zondi] + first_name: [Rapulane, Nthabiseng, Kopano, Mpho, Lungelo, + Ziyanda, Nqobile, Monde] + + id_number: + formats: ["##########08#"] diff --git a/src/main/resources/es-MX.yml b/src/main/resources/es-MX.yml new file mode 100644 index 00000000..fc18cd06 --- /dev/null +++ b/src/main/resources/es-MX.yml @@ -0,0 +1,82 @@ +# encoding: utf-8 +es-MX: + faker: + address: + city_prefix: [Ecatepec, Guadalajara, Puebla, Juárez, Tijuana, León, Zapopan, Monterrey, Nezahualcóyotl, Chihuahua, Naucalpan, Mérida, San Luis Potosí, Aguascalientes, Hermosillo, Saltillo, Mexicali, Culiacán, Guadalupe, Acapulco, Tlalnepantla, Cancún, Querétaro, Chimalhuacán, Torreón, Morelia, Reynosa, Tlaquepaque, Tuxtla, Durango, Toluca, Apodaca, Matamoros, San Nicolás de los Garza, Veracruz, Xalapa, Tonalá, Mazatlán, Irapuato, Nuevo Laredo, Xico, Villahermosa, General Escobedo, Celaya, Cuernavaca, Tepic, Ixtapaluca] + building_number: ['s/n.', '#', '##', '#', '##'] + street_prefix: [Arroyo, Avenida, Bajada, Barranco, Calle, Camino, Carretera, Conjunto, Entrada, Escalinata, Explanada, Glorieta, Grupo, Huerta, Jardines, Lago, Manzana, Mercado, Monte, Muelle, Parque, Pasaje, Paseo, Plaza, Privada, Prolongación, Quinta, Rampa, Rincón, Salida, Sector, Subida, Vía] + secondary_address: ['Depto. ###', 'Interior ###', 'Piso #'] + postcode: ['#####'] + state: [Aguascalientes, Baja California, Baja California Sur, Campeche, Coahuila, Colima, Chiapas, Chihuahua, Ciudad de México, Durango, Guanajuato, Guerrero, Hidalgo, Jalisco, México, Michoacán, Morelos, Nayarit, Nuevo León, Oaxaca, Puebla, Querétaro, Quintana Roo, San Luis Potosí, Sinaloa, Sonora, Tabasco, Tamaulipas, Tlaxcala, Veracruz, Yucatán, Zacatecas] + state_abbr: [AGU, BCN, BCS, CAM, CHP, CHH, COA, COL, DIF, DUR, GUA, GRO, HID, JAL, MEX, MIC, MOR, NAY, NLE, OAX, PUE, QUE, ROO, SLP, SIN, SON, TAB, TAM, TLA, VER, YUC, ZAC] + city: + - "#{city_prefix}" + street_name: + - "#{street_prefix} #{Name.first_name}" + - "#{street_prefix} #{Name.first_name} #{Name.last_name}" + - "#{street_prefix} #{state}" + - "#{street_prefix} #{city_prefix}" + street_address: + - "#{street_name} #{building_number}" + - "#{street_name} #{building_number} #{secondary_address}" + default_country: [México] + + company: + suffix: [S.A., S.A. de C.V., S.R.L, S.A.B., S.C.] + prefix: [Grupo, Sociedad, Grupo Financiero, Colegio, Fondo] + name: + - "#{Name.last_name} #{suffix}" + - "#{prefix} #{Name.last_name} #{suffix}" + - "#{Name.last_name} y #{Name.last_name} #{suffix}" + - "#{Name.last_name} #{Name.last_name} #{suffix}" + - "#{Name.last_name}, #{Name.last_name} y #{Name.last_name} Asociados #{suffix}" + + university: + suffix: [Norte, del Norte, Occidental, Oeste, Del Sur, Sur, Oriental, Oriente, de Graduados, de Administración] + prefix: [Universidad, Instituto, Academia, Colegio] + name: + - "#{University.prefix} #{Name.last_name} #{University.suffix}" + - "#{University.prefix} #{Name.last_name}" + - "#{University.prefix} #{Address.state} #{University.suffix}" + + internet: + free_email: [gmail.com, yahoo.com, hotmail.com, prodigy.net.mx] + domain_suffix: [com, com.mx, mx, info, me, org, org.mx,] + + name: + first_name: [José Luis, Juan, Francisco, José, Antonio, Jesús, Miguel Ángel, Pedro, Alejandro, Manuel, Juan Carlos, Roberto, Jorge, Carlos, Fernando, Ricardo, Miguel, Javier, Martín, Rafael, Raúl, Arturo, Daniel, Eduardo, Enrique, Mario, José Antonio, Sergio, Gerardo, Salvador, Marco Antonio, Alfredo, David, Armando, Alberto, Luis, Óscar, Ramón, Guillermo, Rubén, Jaime, Felipe, Julio César, Andrés, Pablo, Ángel, Gabriel, Héctor, Alfonso, José Guadalupe, Agustín, Ignacio, Víctor, Rogelio, Gustavo, Ernesto, Rodolfo, Luis Alberto, Gilberto, Vicente, Juan Antonio, Tomás, Israel, César, Adrián, Ismael, Santiago, Humberto, Gregorio, Joel, Esteban, José Alfredo, Nicolás, Omar, Moisés, Félix, Lorenzo, Samuel, Carlos Alberto, José Angel, Ramiro, Abel, Jorge Luis, Marcos, Mario Alberto, Rodrigo, Edgar, Isidro, José Alberto, Leonardo, Benjamín, Jorge Alberto, Julio, Raymundo, Víctor Hugo, Saúl, Benito, José Juan, Rigoberto, Hugo, Guadalupe, María, Margarita, Verónica, María Elena, Josefina, Leticia, Teresa, Patricia, Rosa, Martha, Rosa María, Alicia, Yolanda, Francisca, Silvia, Elizabeth, Gloria, Ana María, Gabriela, Alejandra, María Luisa, María de Lourdes, Adriana, Araceli, Antonia, Lucía, Carmen, Irma, Claudia, Beatriz, Isabel, Laura, Maribel, Graciela, Virginia, Catalina, Esperanza, Angélica, Maricela, Cecilia, Susana, Cristina, Julia, Concepción, Victoria, Ofelia, Rocío, Carolina, Raquel, Petra, Lorena, Reyna, Sandra, Paula, Guillermina, Sara, Elvira, Manuela, Marisol, Mónica, Erika, Celia, Luz María, Irene, Magdalena, Estela, Ángela, Rosario, Esther, Eva, Norma, Aurora, Socorro, Consuelo, Lidia, Bertha, Sofía, Dolores, Elena, Rosalba, Liliana, Andrea, Adela, Mariana, Fabiola, Karina, Martina, Marcela, Miriam, Mercedes, Marina, Amalia, Olivia, Angelina, Sonia, Agustina, Edith, Lilia, Micaela] + last_name: [Hernández, García, Martínez, López, González, Rodríguez, Pérez, Sánchez, Ramírez, Cruz, Flores, Gómez, Morales, Vázquez, Reyes, Jímenez, Torres, Díaz, Gutiérrez, Mendoza, Ruiz, Aguilar, Ortiz, Castillo, Moreno, Romero, Álvarez, Chávez, Rivera, Juárez, Ramos, Méndez, Domínguez, Herrera, Medina, Vargas, Castro, Guzmán, Velázquez, Muñoz, Rojas, Contreras, Salazar, Luna, de la Cruz, Ortega, Guerrero, Santiago, Estrada, Bautista, Cortés, Soto, Alvarado, Espinoza, Lara, Ávila, Ríos, Cervantes, Silva, Delgado, Vega, Márquez, Sandoval, Fernández, León, Carrillo, Mejía, Solís, Núñez, Rosas, Valdez, Ibarra, Campos, Santos, Camacho, Peña, Maldonado, Navarro, Rosales, Acosta, Miranda, Trejo, Cabrera, Valencia, Nava, Castañeda, Pacheco, Robles, Molina, Rangel, Fuentes, Huerta, Meza, Aguirre, Cárdenas, Orozco, Padilla, Espinosa, Ayala, Salas, Valenzuela, Zúñiga, Ochoa, Salinas, Mora, Tapia, Serrano, Durán, Olvera, Macías, Zamora, Calderón, Arellano, Suárez, Barrera, Zavala, Villegas, Gallegos, Lozano, Galván, Figueroa, Beltrán, Franco, Villanueva, Sosa, Montes, Andrade, Velasco, Arias, Marín, Corona, Garza, Ponce, Esquivel, Pineda, Alonso, Palacios, Antonio, Vásquez, Trujillo, Cortez, Rocha, Rubio, Bernal, Benítez, Escobar, Villa, Galindo, Cuevas, Bravo, Cano, Osorio, Mata, Carmona, Montoya, de Jesús, Enríquez, Cisneros, Rivas, Parra, Reséndiz, Téllez, Zárate, Salgado, de la Rosa, Vera, Tovar, Arroyo, Córdova, Leyva, Quintero, Becerra, Quiroz, Barajas, Ávalos, Peralta, Román, Esparza, Murillo, Guevara, Olivares, Félix, de León, Castellanos, Villarreal, Villalobos, Lugo, Ángeles, Montiel, Segura, Magaña, Saucedo, Gallardo, Mercado, Navarrete, Reyna, Paredes, Dávila, Leal, Guerra, Saldaña, Guillén, Santana, Uribe, Monroy, Piña, Yáñez, Nieto, Islas, Granados, Escobedo, Zapata, Caballero, del Ángel, Solano, Barron, Zepeda, Acevedo, Arriaga, Barrios, Mondragón, Galicia, Godínez, Ojeda, Duarte, Alfaro, Medrano, Rico, Aguilera, Gil, Ventura, Balderas, Arredondo, Coronado, Escamilla, Nájera, Palma, Amador, Blanco, Ocampo, Garduño, Barragán, Gámez, Francisco, Meléndez, Carbajal, Hurtado, Carrasco, Bonilla, Correa, Sierra, Anaya, Carranza, Romo, Valdés, Armenta, Alcántara, Escalante, Arreola, Quezada, Alarcón, Gaytán, Rentería, Vidal, Báez, de los Santos, Toledo, Colín, May, Carrera, Jaramillo, Santillán, Valle, Varela, Arenas, Rendón, Treviño, Venegas, Soriano, Zaragoza, Morán, Áviles, Aranda, Lira, Quintana, Arteaga, Valadez, Cordero, Sotelo, de la Torre, Muñiz, Hidalgo, Cázares, Covarrubias, Zamudio, Ordoñez, Aparicio, Baltazar, Gálvez, Madrigal] + prefix: [Sr., Sra., Srita., Dr., Ing.] + suffix: [Jr., Sr., I, II, III, IV, V] + title: + descriptor: [Supervisor, Asociado, Ejecutivo, Relacciones, Oficial, Gerente, Ingeniero, Especialista, Director, Coordinador, Administrador, Arquitecto, Analista, Diseñador, Planificador, Técnico, Funcionario, Desarrollador, Productor, Consultor, Asistente, Facilitador, Agente, Representante, Estratega] + level: [de, para] + job: [Soluciones, Programa, Marca, Seguridad, Investigación, Marketing, Normas, Implementación, Integración, Funcionalidad, Respuesta, Paradigma, Tácticas, Identidad, Mercados, Grupo, División, Aplicaciones, Optimización, Operaciones, Infraestructura, Tecnologías de Información, Comunicaciones, Web, Calidad, Seguro, Mobilidad, Cuentas, Datos, Creativo, Configuración, Contabilidad, Interacciones, Factores, Usabilidad, Métricas, Departamento, Región, Supervisión, Planeación] + name: + - "#{prefix} #{first_name} #{last_name} #{last_name}" + - "#{first_name} #{last_name} #{last_name}" + + phone_number: + lada_dos: ["33", "55", "81"] + lada_tres: ["222", "223", "224", "225", "226", "227", "228", "229", "231", "232", "233", "235", "236", "237", "238", "241", "243", "244", "245", "246", "247", "248", "249", "271", "272", "273", "274", "275", "276", "278", "279", "281", "282", "283", "284", "285", "287", "288", "294", "296", "297", "311", "312", "313", "314", "315", "316", "317", "319", "321", "322", "323", "324", "325", "326", "327", "328", "329", "341", "342", "343", "344", "345", "346", "347", "348", "349", "351", "352", "353", "354", "355", "356", "357", "358", "359", "371", "372", "373", "374", "375", "376", "377", "378", "381", "382", "383", "384", "385", "386", "387", "388", "389", "391", "392", "393", "394", "395", "411", "412", "413", "414", "415", "417", "418", "419", "421", "422", "423", "424", "425", "426", "427", "428", "429", "431", "432", "433", "434", "435", "436", "437", "438", "441", "442", "443", "444", "445", "447", "448", "449", "451", "452", "453", "454", "455", "456", "457", "458", "459", "461", "462", "463", "464", "465", "466", "467", "468", "469", "471", "472", "473", "474", "475", "476", "477", "478", "481", "482", "483", "485", "486", "487", "488", "489", "492", "493", "494", "495", "496", "498", "499", "588", "591", "592", "593", "594", "595", "596", "597", "599", "612", "613", "614", "615", "616", "618", "621", "622", "623", "624", "625", "626", "627", "628", "629", "631", "632", "633", "634", "635", "636", "637", "638", "639", "641", "642", "643", "644", "645", "646", "647", "648", "649", "651", "652", "653", "656", "658", "659", "661", "662", "664", "665", "667", "668", "669", "671", "672", "673", "674", "675", "676", "677", "686", "687", "694", "695", "696", "697", "698", "711", "712", "713", "714", "715", "716", "717", "718", "719", "721", "722", "723", "724", "725", "726", "727", "728", "731", "732", "733", "734", "735", "736", "737", "738", "739", "741", "742", "743", "744", "745", "746", "747", "748", "749", "751", "753", "754", "755", "756", "757", "758", "759", "761", "762", "763", "764", "765", "766", "767", "768", "769", "771", "772", "773", "774", "775", "776", "777", "778", "779", "781", "782", "783", "784", "785", "786", "789", "791", "797", "821", "823", "824", "825", "826", "828", "829", "831", "832", "833", "834", "835", "836", "841", "842", "844", "845", "846", "861", "862", "864", "866", "867", "868", "869", "871", "872", "873", "877", "878", "891", "892", "894", "897", "899", "913", "914", "916", "917", "918", "919", "921", "922", "923", "924", "932", "933", "934", "936", "937", "938", "951", "953", "954", "958", "961", "962", "963", "964", "965", "966", "967", "968", "969", "971", "972", "981", "982", "983", "984", "985", "986", "987", "988", "991", "992", "993", "994", "995", "996", "997", "998", "999"] + formats: + - "#{PhoneNumber.lada_dos} #### ####" + - "#{PhoneNumber.lada_tres} ### ####" + - "(#{PhoneNumber.lada_dos}) #### ####" + - "(#{PhoneNumber.lada_tres}) ### ####" + - "#{PhoneNumber.lada_dos}-####-####" + - "#{PhoneNumber.lada_tres}-###-####" + cell_phone: + formats: + - "#{PhoneNumber.lada_dos} #### ####" + - "#{PhoneNumber.lada_tres} ### ####" + - "(#{PhoneNumber.lada_dos}) #### ####" + - "(#{PhoneNumber.lada_tres}) ### ####" + - "#{PhoneNumber.lada_dos}-####-####" + - "#{PhoneNumber.lada_tres}-###-####" + - "044 #{PhoneNumber.lada_dos} #### ####" + - "044 #{PhoneNumber.lada_tres} ### ####" + - "044 (#{PhoneNumber.lada_dos}) #### ####" + - "044 (#{PhoneNumber.lada_tres}) ### ####" + - "044 #{PhoneNumber.lada_dos}-####-####" + - "044 #{PhoneNumber.lada_tres}-###-####" diff --git a/src/test/java/com/github/javafaker/PhoneNumberTest.java b/src/test/java/com/github/javafaker/PhoneNumberTest.java index f7780832..2469c27f 100644 --- a/src/test/java/com/github/javafaker/PhoneNumberTest.java +++ b/src/test/java/com/github/javafaker/PhoneNumberTest.java @@ -14,6 +14,22 @@ public class PhoneNumberTest extends AbstractFakerTest { final Faker f = new Faker(Locale.US); assertThat(f.phoneNumber().cellPhone(), matchesRegularExpression("\\(?\\d+\\)?([- .]\\d+){1,3}")); } + + @Test + public void testPhone_esMx() { + final Faker f = new Faker(new Locale("es_MX")); + for (int i=0;i<100;i++) { + assertThat(f.phoneNumber().cellPhone(), matchesRegularExpression("(044 )?\\(?\\d+\\)?([- .]\\d+){1,3}")); + assertThat(f.phoneNumber().phoneNumber(), matchesRegularExpression("\\(?\\d+\\)?([- .]\\d+){1,3}")); + } + } + @Test + public void testPhone_enZA() { + final Faker f = new Faker(new Locale("en_ZA")); + for (int i=0;i<100;i++) { + assertThat(f.phoneNumber().phoneNumber(), matchesRegularExpression("\\(?\\d+\\)?([- .]\\d+){1,3}")); + } + } @Test public void testCellPhone() {