From dba083f66b05c4593b02cb0f9dc2bdcca3aaeabf Mon Sep 17 00:00:00 2001 From: Trever Shick Date: Mon, 31 Oct 2016 20:14:45 -0400 Subject: [PATCH] Add es-MX and en-ZA yml files. (#154) * Add es-MX and en-ZA yml files. Fixes DiUS/java-faker#153 The problem was with a fix in de89bf74 . The fix used a simple toLowerCase on the directive which didn't adequetly transform it. This manifested itself in an unresolved directive value in the en-ZA an es-MX file. The es-MX file contained #{PhoneNumber.lada_tres} as a directive and did contain phone_number > lada_tres but when the FakeValueService attempted to transform the directive it transformed it to phonenumber.lada_tres erroneously. The fix in this commit properly converts PhoneNumber.lada_tres > phone_number.lada_tres which then properly resolves as a simple reference within the yml file. * Add locale specific tests for phone es-MX and en-ZA --- .../javafaker/service/FakeValuesService.java | 17 +++- src/main/resources/en-ZA.yml | 51 ++++++++++++ src/main/resources/es-MX.yml | 82 +++++++++++++++++++ .../com/github/javafaker/PhoneNumberTest.java | 16 ++++ 4 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/en-ZA.yml create mode 100644 src/main/resources/es-MX.yml 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() {