assertType('boolean', ConfIgep::es_desarrollo()); } /** * */ public function testCaracteresNumericos() { $cars = ConfIgep::caracteresNumericos(); $this->assertTrue(array_key_exists('DECIMAL',$cars),'No existe indice DECIMAL'); $this->assertTrue(isset($cars['DECIMAL']) and strlen($cars['DECIMAL'])==1,'valor incorrecto como separador decimal'); $this->assertTrue(array_key_exists('GROUP',$cars),'No existe indice GROUP'); $this->assertTrue(isset($cars['GROUP']) and strlen($cars['GROUP'])==1,'valor incorrecto como separador de miles'); } /** * */ public function testCaracteresNumericosNegocio() { $cars = ConfIgep::caracteresNumericosNegocio(); $this->assertTrue(array_key_exists('DECIMAL',$cars),'No existe indice DECIMAL'); $this->assertTrue(isset($cars['DECIMAL']) and strlen($cars['DECIMAL'])==1,'valor incorrecto como separador decimal'); $this->assertTrue(array_key_exists('GROUP',$cars),'No existe indice GROUP'); $this->assertTrue(isset($cars['GROUP']),'valor incorrecto como separador de miles'); } /** * */ public function testFormatoNumero() { $pant = ConfIgep::caracteresNumericos(); $d = $pant['DECIMAL']; $g = $pant['GROUP']; //$neg = ConfIgep::caracteresNumericosNegocio(); $this->assertTrue(ConfIgep::formatoNumero(123)==123); $this->assertTrue(ConfIgep::formatoNumero('123')==123); $res = "1{$g}234{$d}00"; $res2 = ConfIgep::formatoNumero(1234); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = "1{$g}234{$d}57"; $res2 = ConfIgep::formatoNumero(1234.57); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = "1{$g}234{$d}567"; $res2 = ConfIgep::formatoNumero(1234.567,3); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = "0{$d}567"; $res2 = ConfIgep::formatoNumero(.567, 3); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = "1{$g}567"; $res2 = ConfIgep::formatoNumero(1567, 0); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = "1{$g}000"; $res2 = ConfIgep::formatoNumero(1E3, 0); $this->assertTrue($res2===$res, "resultado '$res2', debe dar '$res'"); // numeros con signo $res = "-1{$g}234{$d}00"; $res2 = ConfIgep::formatoNumero(-1234); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); $res = "-1{$g}234{$d}56"; $res2 = ConfIgep::formatoNumero(-1234.56); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); $res = "-1{$g}234{$d}000"; $res2 = ConfIgep::formatoNumero(-1234.0,3); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); $res = "1{$g}234{$d}00"; $res2 = ConfIgep::formatoNumero(+1234); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); } /** * */ public function testTransformaNumero() { $pant = ConfIgep::caracteresNumericos(); $d = $pant['DECIMAL']; $g = $pant['GROUP']; $res = '1234'; $res2 = ConfIgep::transformaNumero("1{$g}234"); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = '1234567'; $res2 = ConfIgep::transformaNumero("1{$g}234{$g}567"); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = 1234.567; $res2 = ConfIgep::transformaNumero("1{$g}234{$d}567"); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); $res = 0.567; $res2 = ConfIgep::transformaNumero("0{$d}567"); $this->assertTrue($res2==$res, "resultado '$res2', debe dar '$res'"); // numeros con signo $res = '-1234'; $res2 = ConfIgep::transformaNumero("-1{$g}234"); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); $res = '-1234.56'; $res2 = ConfIgep::transformaNumero("-1{$g}234{$d}56"); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); $res = '1234.56'; $res2 = ConfIgep::transformaNumero("+1{$g}234{$d}56"); $this->assertEquals($res2,$res, "resultado '$res2', debe dar '$res'"); } public function testTransformaNegocio() { //TODO: pasar aqui los test de formatoFechaNegocio y transformaNumero $p = ConfIgep::caracteresNumericos(); $pd = $p['DECIMAL']; $pg = $p['GROUP']; $res = '1234'; $res2 = ConfIgep::transformaNegocio("1{$pg}234",TIPO_DECIMAL); $this->assertEquals($res,$res2, "decimal con grupos"); $res = '1234567'; $res2 = ConfIgep::transformaNegocio("1{$pg}234{$pg}567",TIPO_ENTERO); $this->assertEquals($res, $res2, "entero con grupos"); $this->assertTrue(ConfIgep::transformaNegocio('fecha invalida', TIPO_FECHA) === false); $errores = ConfIgep::getTransformErrors(); $this->assertEquals(1, count($errores), 'no defecta fecha invalida - '.var_export($errores,true)); $this->assertTrue(ConfIgep::transformaNegocio('fechainvalida', TIPO_FECHA) === false); $errores = ConfIgep::getTransformErrors(); $this->assertEquals(1, count($errores), 'no defecta fecha invalida (1 palabra) - '.var_export($errores,true)); if ($this->valida) $this->assertTrue(ConfIgep::transformaNegocio('numeroinvalido', TIPO_ENTERO) === false); else $this->assertEquals(0, ConfIgep::transformaNegocio('numeroinvalido', TIPO_ENTERO)); $errores = ConfIgep::getTransformErrors(); $this->assertEquals(1, count($errores), 'no defecta numero invalido - '.var_export($errores,true)); } /** * */ public function testMascaraRepresentacionFechas() { $masc = ConfIgep::mascaraRepresentacionFechas(); $this->assertType('string', $masc); $this->assertTrue(!empty($masc),'no tiene valor'); $this->assertEquals(strlen($masc), 5, 'longitud de mascara incorrecta'); $this->assertEquals(substr($masc,1,1), substr($masc,3,1), 'usando dos caracteres separadores'); $letras = array('d','m','Y','j','n'); $this->assertTrue(in_array(substr($masc,0,1),$letras), "no soportado caracter de formato en posicion 1: ".substr($masc,0,1)); $this->assertTrue(in_array(substr($masc,2,1),$letras), "no soportado caracter de formato en posicion 2: ".substr($masc,2,1)); $this->assertTrue(in_array(substr($masc,4,1),$letras), "no soportado caracter de formato en posicion 3: ".substr($masc,4,1)); } /** * */ public function testMascaraFechasNegocio() { $masc = ConfIgep::mascaraFechasNegocio(); $this->assertType('string', $masc); $this->assertFalse(empty($masc),'no tiene valor'); } /** * */ public function testFormatoFecha() { $cambios = array( array('j','d'), array('n','m'), ); $pe = ConfIgep::mascaraRepresentacionFechas(); $n = ConfIgep::mascaraFechasNegocio(); // obtengo formato salida $po = $pe; foreach ($cambios as $fila=>$val) { $po = str_replace($val[0], $val[1], $po); } // fecha en negocio como timestamp $fnegocio = mktime(0, 0, 0, 12, 24, 1995); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHA'); $fnegocio2 = ConfIgep::formatoFechaNegocio($factualpantalla); $this->assertEquals($fnegocio, $fnegocio2, "ts1-resultado (pantalla '$factualpantalla')"); $fnegocio = mktime(15, 24, 56, 12, 24, 1995); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHAHORA'); $fnegocio2 = ConfIgep::formatoFechaNegocio($factualpantalla); $this->assertEquals($fnegocio, $fnegocio2, "ts2-resultado (pantalla '$factualpantalla')"); $fnegocio = mktime(0, 0, 0, 6, 4, 1995); // 4-jun $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHA'); $this->assertEquals(date($po,$fnegocio), $factualpantalla, "ts3-dia y mes menor de 10"); // fecha en negocio como string $f = mktime(0, 0, 0, 12, 24, 1995); $fnegocio = date($n, $f); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHA'); $fnegocio2 = date($n, ConfIgep::formatoFechaNegocio($factualpantalla)); $this->assertEquals($fnegocio, $fnegocio2, "st1-resultado (pantalla '$factualpantalla')"); $fnegocio = mktime(15, 24, 56, 12, 24, 1995); $f = $fnegocio; $fnegocio = date($n.' H:i:s', $f); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHAHORA'); $fnegocio2 = date($n.' H:i:s', ConfIgep::formatoFechaNegocio($factualpantalla)); $this->assertEquals($fnegocio, $fnegocio2, "st2-resultado (pantalla '$factualpantalla')"); $f = mktime(0, 0, 0, 6, 4, 1995); // 4-jun $fnegocio = date($n, $f); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHA'); $this->assertEquals(date($po, $f), $factualpantalla, "st3-dia y mes menor de 10"); } /** * */ public function testFormatoFechaNegocio() { $n = ConfIgep::mascaraFechasNegocio(); $p = ConfIgep::mascaraRepresentacionFechas(); $this->assertTrue(is_null(ConfIgep::formatoFechaNegocio(''))); $this->assertTrue(is_null(ConfIgep::formatoFechaNegocio(null))); $var_unset = ''; unset($var_unset); $this->assertTrue(is_null(ConfIgep::formatoFechaNegocio($var_unset))); $this->assertTrue(ConfIgep::formatoFechaNegocio('fecha invalida') === false); // fecha en negocio como timestamp $fnegocio = mktime(0, 0, 0, 12, 24, 1995); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHA'); $fnegocio2 = ConfIgep::formatoFechaNegocio($factualpantalla); $this->assertTrue($fnegocio == $fnegocio2, "ts1-resultado '$fnegocio2' (pantalla '$factualpantalla'), debe dar '$fnegocio'"); $fnegocio = mktime(15, 24, 56, 12, 24, 1995); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHAHORA'); $fnegocio2 = ConfIgep::formatoFechaNegocio($factualpantalla); $this->assertTrue($fnegocio == $fnegocio2, "ts2-resultado '$fnegocio2' (pantalla '$factualpantalla'), debe dar '$fnegocio'"); // fecha en negocio como string $ts = mktime(0, 0, 0, 12, 24, 1995); $fs = date($n, $ts); $this->assertEquals(date($p,$ts), ConfIgep::formatoFecha($fs,'FECHA'),'convirtiendo fecha en texto'); $ts = mktime(15, 24, 56, 12, 24, 1995); $fs = date($n.' H:i:s', $ts); $this->assertEquals(date($p.' H:i:s',$ts), ConfIgep::formatoFecha($fs,'FECHAHORA'),'convirtiendo fecha-hora en texto'); if ($p == 'j/n/Y') { $this->assertFalse(ConfIgep::formatoFechaNegocio('34'), "numero"); $this->assertFalse(ConfIgep::formatoFechaNegocio('-34'), "numero negativo"); $this->assertFalse(ConfIgep::formatoFechaNegocio('34.2'), "numero decimal"); $this->assertFalse(ConfIgep::formatoFechaNegocio('12/11'), "fecha incompleta"); $this->assertFalse(ConfIgep::formatoFechaNegocio('12/11/2007 18'), "fecha con hora incompleta"); $this->assertFalse(ConfIgep::formatoFechaNegocio('12/11/2007 18:163'), "fecha con minuto erroneo"); $fnegocio = ConfIgep::formatoFechaNegocio('4/12/2007'); $fnegocio2 = ConfIgep::formatoFechaNegocio('04/12/2007'); $this->assertEquals($fnegocio, $fnegocio2, "no convierte dia sin 0's delante"); $fnegocio = ConfIgep::formatoFechaNegocio('04/2/2007'); $fnegocio2 = ConfIgep::formatoFechaNegocio('04/02/2007'); $this->assertEquals($fnegocio, $fnegocio2, "no convierte mes sin 0's delante"); $this->assertTrue(ConfIgep::formatoFechaNegocio('30/02/2008') === false, 'no valida fecha incorrecta'); } } /** * */ public function testComparaFechas() { $fnegocio = mktime(15, 24, 56, 12, 24, 1995); $factualpantalla = ConfIgep::formatoFecha($fnegocio,'FECHAHORA'); $fnegocio2 = mktime(15, 24, 56, 12, 24, 1995); $factualpantalla2 = ConfIgep::formatoFecha($fnegocio2,'FECHAHORA'); $this->assertTrue(ConfIgep::comparaFechas($factualpantalla,$factualpantalla2)==0, "fechas con hora iguales"); $fnegocio2 = mktime(16, 24, 56, 12, 24, 1995); $factualpantalla2 = ConfIgep::formatoFecha($fnegocio2,'FECHAHORA'); $this->assertTrue(ConfIgep::comparaFechas($factualpantalla,$factualpantalla2)>0, "fechas con hora con un seg. de diferencia"); $fnegocio2 = mktime(16, 24, 56, 12, 24, 1995); $factualpantalla2 = ConfIgep::formatoFecha($fnegocio2,'FECHA'); $this->assertTrue(ConfIgep::comparaFechas($factualpantalla,$factualpantalla2)<0, "fechas con hora con un seg. de diferencia y una de ellas sin hora menos"); $fnegocio2 = mktime(16, 24, 56, 12, 25, 1995); $factualpantalla2 = ConfIgep::formatoFecha($fnegocio2,'FECHA'); $this->assertTrue(ConfIgep::comparaFechas($factualpantalla,$factualpantalla2)>0, "fechas con hora con un seg. de diferencia y una de ellas sin hora mayor"); if (ConfIgep::mascaraRepresentacionFechas() == 'j/n/Y') { $this->assertTrue(ConfIgep::comparaFechas('03/12/2007','3/12/2007')==0, "fechas iguales"); //TODO: comparaciones con nulos no muy coherentes $this->assertTrue(ConfIgep::comparaFechas('03/12/2007',null)<0, "comparacion con nulos 1"); $this->assertTrue(ConfIgep::comparaFechas(null,'03/12/2007')>0, "comparacion con nulos 2"); $this->assertTrue(ConfIgep::comparaFechas('03/12/2007 11:42','3/12/2007 11:43')>0, "fechas con hora-min"); $this->assertTrue(ConfIgep::comparaFechas('03/12/2007 11:42:23','3/12/2007 11:42:22')<0, "fechas con hora-min-seg"); } } /** * de bd a interfaz */ public function testPrepararPresentacion() { $dbs = IgepDB::supportedDBMS(); $p = ConfIgep::caracteresNumericos(); $pd = $p['DECIMAL']; $pg = $p['GROUP']; foreach ($dbs as $db) { $dsn_virtual = array('phptype'=>$db); $b = IgepDB::caracteresNumericos($dsn_virtual); $bd = $b['DECIMAL']; $bg = $b['GROUP']; $v = "12{$bg}345{$bd}56"; $valor = ConfIgep::prepararPresentacion($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "12{$pg}345{$pd}56", $db.": convirtiendo numero"); $v = "12{$bg}345{$bd}561"; $valor = ConfIgep::prepararPresentacion($v,TIPO_DECIMAL,$dsn_virtual,4); $this->assertEquals($valor, "12{$pg}345{$pd}5610", $db.": convirtiendo numero con 3 decimales"); $v = "12{$bg}345"; $valor = ConfIgep::prepararPresentacion($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "12{$pg}345{$pd}00", $db.": convirtiendo numero sin decimales"); $v = "12{$bd}345e7"; $valor = ConfIgep::prepararPresentacion($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "123{$pg}450{$pg}000{$pd}00", $db.": convirtiendo numero con decimales y exponente"); $v = "12{$bg}345"; $valor = ConfIgep::prepararPresentacion($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12{$pg}345", $db.": convirtiendo entero"); $v = "12"; $valor = ConfIgep::prepararPresentacion($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12", $db.": convirtiendo entero sin grupos"); $v = "12E-5"; $valor = ConfIgep::prepararPresentacion($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "0{$pd}00012", $db.": convirtiendo entero con exponente"); $v = "-12"; $valor = ConfIgep::prepararPresentacion($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "-12", $db.": convirtiendo entero con signo -"); $v = "+12"; $valor = ConfIgep::prepararPresentacion($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12", $db.": convirtiendo entero con signo +"); $v = "abc"; $valor = ConfIgep::prepararPresentacion($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, "abc", $db.": convirtiendo texto sin caracteres especiales"); $v = "ab'c"; $valor = ConfIgep::prepararPresentacion($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, "ab'c", $db.": convirtiendo texto con comilla simple"); $v = 'ab"c'; $valor = ConfIgep::prepararPresentacion($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, 'ab"c', $db.": convirtiendo texto con comilla doble"); $v = 'ab\c'; $valor = ConfIgep::prepararPresentacion($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, 'ab\c', $db.": convirtiendo texto con barra invertida"); // repito las operaciones anteriores pero ahora dentro de un array $datos = array( array('edad'=>"12{$bg}345", 'importe'=>"12{$bg}345{$bd}56", 'nom'=>"abc", 'saldo'=>"-12",), array('edad'=>"12", 'importe'=>"12{$bg}345", 'nom'=>"ab'c", 'saldo'=>"+12",), ); $tipos = array('edad'=>array('tipo'=>TIPO_ENTERO), 'importe'=>array('tipo'=>TIPO_DECIMAL, 'parteDecimal'=>2), 'saldo'=>array('tipo'=>TIPO_ENTERO),); $datos_clone = $datos; $valor = ConfIgep::prepararPresentacion($datos_clone,$tipos,$dsn_virtual); $this->assertEquals($valor[0]['importe'], "12{$pg}345{$pd}56", $db.": convirtiendo numero (array)"); $this->assertEquals($valor[1]['importe'], "12{$pg}345{$pd}00", $db.": convirtiendo numero sin decimales (array)"); $this->assertEquals($valor[0]['edad'], "12{$pg}345", $db.": convirtiendo entero (array)"); $this->assertEquals($valor[1]['edad'], "12", $db.": convirtiendo entero sin grupos (array)"); $this->assertEquals($valor[0]['saldo'], "-12", $db.": convirtiendo entero con signo - (array)"); $this->assertEquals($valor[1]['saldo'], "12", $db.": convirtiendo entero con signo + (array)"); // ahora el ejemplo con 4 decimales $datos[] = array('edad'=>"12E-5", 'importe'=>"12{$bg}345{$bd}561", 'nom'=>'ab"c',); $datos[] = array('edad'=>"", 'importe'=>"12{$bd}345e7", 'nom'=>'ab\c',); $tipos = array('importe'=>array('tipo'=>TIPO_DECIMAL, 'parteDecimal'=>4), 'edad'=>array('tipo'=>TIPO_ENTERO),); $datos_clone = $datos; $valor = ConfIgep::prepararPresentacion($datos_clone,$tipos,$dsn_virtual); $this->assertEquals($valor[2]['importe'], "12{$pg}345{$pd}5610", $db.": convirtiendo numero con 3 decimales (array)"); $this->assertEquals($valor[3]['importe'], "123{$pg}450{$pg}000{$pd}0000", $db.": convirtiendo numero con decimales y exponente (array)"); $this->assertEquals($valor[2]['edad'], "0{$pd}00012", $db.": convirtiendo entero con exponente (array)"); // transforma texto $this->assertEquals($valor[0]['nom'], "abc", $db.": convirtiendo texto (sin tipo) sin caracteres especiales (array)"); $this->assertEquals($valor[1]['nom'], "ab'c", $db.": convirtiendo texto (sin tipo) con comilla simple (array)"); $this->assertEquals($valor[2]['nom'], 'ab"c', $db.": convirtiendo texto (sin tipo) con comilla doble (array)"); $this->assertEquals($valor[3]['nom'], 'ab\c', $db.": convirtiendo texto (sin tipo) con barra invertida (array)"); $tipos = array('nom'=>array('tipo'=>TIPO_CARACTER,)); $datos_clone = $datos; $valor = ConfIgep::prepararPresentacion($datos_clone,$tipos,$dsn_virtual); $this->assertEquals($valor[0]['nom'], "abc", $db.": convirtiendo texto (con tipo) sin caracteres especiales (array)"); $this->assertEquals($valor[1]['nom'], "ab'c", $db.": convirtiendo texto (con tipo) con comilla simple (array)"); $this->assertEquals($valor[2]['nom'], 'ab"c', $db.": convirtiendo texto (con tipo) con comilla doble (array)"); $this->assertEquals($valor[3]['nom'], 'ab\c', $db.": convirtiendo texto (con tipo) con barra invertida (array)"); //TODO: testear fechas, individuales y array } } /** * de bd a negocio */ public function testPrepararNegocio() { $dbs = IgepDB::supportedDBMS(); $n = ConfIgep::caracteresNumericosNegocio(); $nd = $n['DECIMAL']; $ng = $n['GROUP']; foreach ($dbs as $db) { $dsn_virtual = array('phptype'=>$db); $b = IgepDB::caracteresNumericos($dsn_virtual); $bd = $b['DECIMAL']; $bg = $b['GROUP']; $v = "12{$bg}345{$bd}56"; $valor = ConfIgep::prepararNegocio($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "12{$ng}345{$nd}56", $db.": convirtiendo numero"); $v = "12{$bg}345{$bd}561000"; $valor = ConfIgep::prepararNegocio($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "12{$ng}345{$nd}561000", $db.": convirtiendo numero con 3 decimales y ceros al final"); $this->assertEquals($valor, "12{$ng}345{$nd}561", $db.": convirtiendo numero con 3 decimales sin ceros al final"); $v = "12{$bg}345"; $valor = ConfIgep::prepararNegocio($v,TIPO_DECIMAL,$dsn_virtual); $this->assertEquals($valor, "12{$ng}345", $db.": convirtiendo numero sin decimales"); $v = "12{$bg}345"; $valor = ConfIgep::prepararNegocio($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12{$ng}345", $db.": convirtiendo numero entero"); $v = "12"; $valor = ConfIgep::prepararNegocio($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12", $db.": convirtiendo numero entero sin grupos"); $v = "-12"; $valor = ConfIgep::prepararNegocio($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "-12", $db.": convirtiendo numero entero con signo -"); $v = "+12"; $valor = ConfIgep::prepararNegocio($v,TIPO_ENTERO,$dsn_virtual); $this->assertEquals($valor, "12", $db.": convirtiendo numero entero con signo +"); $v = "12"; $valor = ConfIgep::prepararNegocio($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, "12", $db.": convirtiendo texto sin caracteres especiales"); $v = "1'2"; $valor = ConfIgep::prepararNegocio($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, "1'2", $db.": convirtiendo texto con comilla simple"); $v = '1"2'; $valor = ConfIgep::prepararNegocio($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, '1"2', $db.": convirtiendo texto con comilla doble"); $v = '1\2'; $valor = ConfIgep::prepararNegocio($v,TIPO_CARACTER,$dsn_virtual); $this->assertEquals($valor, '1\2', $db.": convirtiendo texto con barra invertida"); // repito las operaciones anteriores pero ahora dentro de un array // en los decimales no afecta la longitud de decimales $datos = array( array('edad'=>"12{$bg}345", 'importe'=>"12{$bg}345{$bd}56", 'nom'=>"12", 'saldo'=>"-12",), array('edad'=>"12", 'importe'=>"12{$bg}345{$bd}561000", 'nom'=>"1'2", 'saldo'=>"+12",), array('edad'=>"", 'importe'=>"12{$bg}345", 'nom'=>'1"2',), array('edad'=>"", 'importe'=>"", 'nom'=>'1\2',), ); $tipos = array('edad'=>array('tipo'=>TIPO_ENTERO), 'importe'=>array('tipo'=>TIPO_DECIMAL), 'saldo'=>array('tipo'=>TIPO_ENTERO),); $datos_clone = $datos; $valor = ConfIgep::prepararNegocio($datos_clone,$tipos,$dsn_virtual); $this->assertEquals($valor[0]['importe'], "12{$ng}345{$nd}56", $db.": convirtiendo numero (array)"); $this->assertEquals($valor[1]['importe'], "12{$ng}345{$nd}561000", $db.": convirtiendo numero con 3 decimales y ceros al final (array)"); $this->assertEquals($valor[1]['importe'], "12{$ng}345{$nd}561", $db.": convirtiendo numero con 3 decimales sin ceros al final (array)"); $this->assertEquals($valor[2]['importe'], "12{$ng}345", $db.": convirtiendo numero sin decimales (array)"); $this->assertEquals($valor[0]['edad'], "12{$ng}345", $db.": convirtiendo numero entero (array)"); $this->assertEquals($valor[1]['edad'], "12", $db.": convirtiendo numero entero sin grupos (array)"); $this->assertEquals($valor[0]['saldo'], "-12", $db.": convirtiendo numero entero con signo - (array)"); $this->assertEquals($valor[1]['saldo'], "12", $db.": convirtiendo numero entero con signo + (array)"); $this->assertEquals($valor[0]['nom'], "12", $db.": convirtiendo texto (sin tipo) sin caracteres especiales (array)"); $this->assertEquals($valor[1]['nom'], "1'2", $db.": convirtiendo texto (sin tipo) con comilla simple (array)"); $this->assertEquals($valor[2]['nom'], '1"2', $db.": convirtiendo texto (sin tipo) con comilla doble (array)"); $this->assertEquals($valor[3]['nom'], '1\2', $db.": convirtiendo texto (sin tipo) con barra invertida (array)"); $tipos = array('nom'=>array('tipo'=>TIPO_CARACTER,)); $datos_clone = $datos; $valor = ConfIgep::prepararNegocio($datos_clone,$tipos,$dsn_virtual); $this->assertEquals($valor[0]['nom'], "12", $db.": convirtiendo texto (con tipo) sin caracteres especiales (array)"); $this->assertEquals($valor[1]['nom'], "1'2", $db.": convirtiendo texto (con tipo) con comilla simple (array)"); $this->assertEquals($valor[2]['nom'], '1"2', $db.": convirtiendo texto (con tipo) con comilla doble (array)"); $this->assertEquals($valor[3]['nom'], '1\2', $db.": convirtiendo texto (con tipo) con barra invertida (array)"); //TODO: testear fechas, individuales y array } } /** * de negocio a bd */ public function testPrepararDatos() { $dbs = IgepDB::supportedDBMS(); $n = ConfIgep::caracteresNumericosNegocio(); $nd = $n['DECIMAL']; $ng = $n['GROUP']; $nf = ConfIgep::mascaraFechasNegocio(); $fhora = ' H:i:s'; foreach ($dbs as $db) { $dsn_virtual = array('phptype'=>$db); $d = IgepDB::caracteresNumericos($dsn_virtual); $dd = $d['DECIMAL']; $dg = $d['GROUP']; $df = IgepDB::mascaraFechas($dsn_virtual); // cadenas $this->assertEquals("abc",ConfIgep::prepararDatos("abc",TIPO_CARACTER,$dsn_virtual), $db.': prepararDatos- conversion de cadena'); $this->assertEquals("a''bc",ConfIgep::prepararDatos("a'bc",TIPO_CARACTER,$dsn_virtual), $db.': prepararDatos- conversion de cadena con comilla simple'); $this->assertEquals("a'bc",ConfIgep::prepararDatos("a'bc",TIPO_CARACTER,$dsn_virtual,false), $db.': prepararDatos- conversion de cadena con comilla simple pero sin escapar'); $this->assertEquals('a"bc',ConfIgep::prepararDatos('a"bc',TIPO_CARACTER,$dsn_virtual), $db.': prepararDatos- conversion de cadena con comilla doble - escapando'); $this->assertEquals('a"bc',ConfIgep::prepararDatos('a"bc',TIPO_CARACTER,$dsn_virtual,false), $db.': prepararDatos- conversion de cadena con comilla doble - sin escapar'); $this->assertEquals("a\\\\bc",ConfIgep::prepararDatos("a\\bc",TIPO_CARACTER,$dsn_virtual), $db.': prepararDatos- conversion de cadena con barra invertida'); $this->assertEquals("a\\bc",ConfIgep::prepararDatos("a\\bc",TIPO_CARACTER,$dsn_virtual,false), $db.': prepararDatos- conversion de cadena con barra invertida - sin escapar'); // numeros $this->assertEquals("1{$dg}234{$dg}567{$dd}8",ConfIgep::prepararDatos("1{$ng}234{$ng}567{$nd}8",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con grupos y decimales (1) a bd'); $this->assertEquals("1{$dg}234{$dg}567{$dd}89",ConfIgep::prepararDatos("1{$ng}234{$ng}567{$nd}89",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con grupos y decimales (2) a bd'); $this->assertEquals("0",ConfIgep::prepararDatos("0",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero 0 en cadena'); $this->assertEquals("0",ConfIgep::prepararDatos(0,TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero 0 en numero'); $this->assertEquals("100{$dg}000",ConfIgep::prepararDatos("1e5",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con exponente a bd'); $this->assertEquals("0{$dd}00001",ConfIgep::prepararDatos("1e-5",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con exponente negativo a bd'); $this->assertEquals("100{$dg}000",ConfIgep::prepararDatos("1e5",TIPO_ENTERO,$dsn_virtual), $db.': prepararDatos- conversion de numero entero con exponente a bd'); $this->assertEquals("-1{$dg}234{$dg}567{$dd}8",ConfIgep::prepararDatos("-1{$ng}234{$ng}567{$nd}8",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con signo - a bd'); $this->assertEquals("1{$dg}234{$dg}567{$dd}8",ConfIgep::prepararDatos("+1{$ng}234{$ng}567{$nd}8",TIPO_DECIMAL,$dsn_virtual), $db.': prepararDatos- conversion de numero con signo + a bd'); $this->assertEquals("",ConfIgep::prepararDatos("",TIPO_ENTERO,$dsn_virtual), $db.': prepararDatos- conversion de numero con cadena vacia'); $this->assertTrue(is_null(ConfIgep::prepararDatos(null,TIPO_ENTERO,$dsn_virtual)), $db.': prepararDatos- conversion de numero con null'); // fechas $fnegocio = mktime(0, 0, 0, 12, 24, 1995); $fbd = ConfIgep::prepararDatos($fnegocio,TIPO_FECHA,$dsn_virtual); $this->assertEquals($fbd, date($df,$fnegocio), $db.': fecha num sin hora'); $fbd = ConfIgep::prepararDatos(date($nf,$fnegocio),TIPO_FECHA,$dsn_virtual); $this->assertEquals($fbd, date($df,$fnegocio), $db.': fecha txt sin hora'); $fnegocio = mktime(18, 34, 56, 12, 24, 1995); $fbd = ConfIgep::prepararDatos($fnegocio,TIPO_FECHAHORA,$dsn_virtual); $this->assertEquals($fbd, date($df.$fhora,$fnegocio), $db.': fecha num con hora'); $fbd = ConfIgep::prepararDatos(date($nf.$fhora,$fnegocio),TIPO_FECHAHORA,$dsn_virtual); $this->assertEquals($fbd, date($df.$fhora,$fnegocio), $db.': fecha txt con hora'); // repito las operaciones anteriores pero ahora dentro de un array $datos = array( array('edad'=>"1e5", 'importe'=>"1{$ng}234{$ng}567{$nd}8", 'nom'=>"abc", 'saldo'=>"-12", 'ffirma'=>mktime(0, 0, 0, 12, 24, 1995), 'nombre'=>"abc", ), array('edad'=>"-1{$ng}234{$ng}567", 'importe'=>"1{$ng}234{$ng}567{$nd}89", 'nom'=>"", 'saldo'=>"+12", 'ffirma'=>"se asigna abajo!!!", 'nombre'=>"a'bc", ), array('edad'=>"+1{$ng}234{$ng}567", 'importe'=>"0", 'nom'=>"", 'saldo'=>"", 'factu'=>mktime(18, 34, 56, 12, 24, 1995), 'nombre'=>'a"bc', ), array('edad'=>"", 'importe'=>0, 'nom'=>"", 'saldo'=>"", 'factu'=>"se asigna abajo!!!", 'nombre'=>"a\\bc", ), array('edad'=>null, 'importe'=>"1e5", 'nom'=>"", 'saldo'=>"", 'nombre'=>"a'bc", ), array('edad'=>"", 'importe'=>"1e-5", 'nom'=>"", 'saldo'=>"", 'nombre'=>'a"bc', ), array('nombre'=>"a\\bc", 'otroTexto'=>"a'bc",), ); $datos[1]['ffirma'] = date($nf,$datos[0]['ffirma']); $datos[3]['factu'] = date($nf.$fhora,$datos[2]['factu']); $tipos = array('edad'=>array('tipo'=>TIPO_ENTERO), 'importe'=>array('tipo'=>TIPO_DECIMAL, 'parteDecimal'=>2), 'saldo'=>array('tipo'=>TIPO_ENTERO), 'ffirma'=>array('tipo'=>TIPO_FECHA), 'factu'=>array('tipo'=>TIPO_FECHAHORA), 'nombre'=>array('tipo'=>TIPO_CARACTER), ); $seg_datos = $datos; $valor = ConfIgep::prepararDatos($datos,$tipos,$dsn_virtual); // cadenas $this->assertEquals($valor[0]['nombre'],"abc", $db.': prepararDatos- conversion de cadena (array)'); $this->assertEquals($valor[1]['nombre'],"a''bc", $db.': prepararDatos- conversion de cadena con comilla simple (array)'); $this->assertEquals($valor[2]['nombre'],'a"bc', $db.': prepararDatos- conversion de cadena con comilla doble - escapando (array)'); $this->assertEquals($valor[3]['nombre'],"a\\\\bc", $db.': prepararDatos- conversion de cadena con barra invertida (array)'); $this->assertEquals($valor[6]['otroTexto'],"a''bc", $db.': prepararDatos- conversion de cadena sin definir con comilla simple (array)'); // numeros $this->assertEquals($valor[0]['importe'],"1{$dg}234{$dg}567{$dd}8", $db.': prepararDatos- conversion de numero con grupos y decimales (1) a bd (array)'); $this->assertEquals($valor[1]['importe'],"1{$dg}234{$dg}567{$dd}89", $db.': prepararDatos- conversion de numero con grupos y decimales (2) a bd (array)'); $this->assertEquals($valor[2]['importe'],"0", $db.': prepararDatos- conversion de numero 0 en cadena (array)'); $this->assertEquals($valor[3]['importe'],"0", $db.': prepararDatos- conversion de numero 0 en numero (array)'); $this->assertEquals($valor[4]['importe'],"100{$dg}000", $db.': prepararDatos- conversion de numero con exponente a bd (array)'); $this->assertEquals($valor[5]['importe'],"0{$dd}00001", $db.': prepararDatos- conversion de numero con exponente negativo a bd (array)'); $this->assertEquals($valor[0]['edad'],"100{$dg}000", $db.': prepararDatos- conversion de numero entero con exponente a bd (array)'); $this->assertEquals($valor[1]['edad'],"-1{$dg}234{$dg}567", $db.': prepararDatos- conversion de numero con signo - a bd (array)'); $this->assertEquals($valor[2]['edad'],"1{$dg}234{$dg}567", $db.': prepararDatos- conversion de numero con signo + a bd (array)'); $this->assertEquals($valor[3]['edad'],"", $db.': prepararDatos- conversion de numero con cadena vacia (array)'); $this->assertTrue(is_null($valor[4]['edad']), $db.': prepararDatos- conversion de numero con null (array)'); // fechas $this->assertEquals($valor[0]['ffirma'], date($df,$datos[0]['ffirma']), $db.': fecha num sin hora (array)'); $this->assertEquals($valor[1]['ffirma'], date($df,$datos[0]['ffirma']), $db.': fecha txt sin hora (array)'); $this->assertEquals($valor[2]['factu'], date($df.$fhora,$datos[2]['factu']), $db.': fecha num con hora (array)'); $this->assertEquals($valor[3]['factu'], date($df.$fhora,$datos[2]['factu']), $db.': fecha txt con hora (array)'); $datos = $seg_datos; // cadenas sin escapar $valor = ConfIgep::prepararDatos($datos,$tipos,$dsn_virtual,false); $this->assertEquals($valor[4]['nombre'],"a'bc", $db.': prepararDatos- conversion de cadena con comilla simple pero sin escapar (array)'); $this->assertEquals($valor[5]['nombre'],'a"bc', $db.': prepararDatos- conversion de cadena con comilla doble - sin escapar (array)'); $this->assertEquals($valor[6]['nombre'],"a\\bc", $db.': prepararDatos- conversion de cadena con barra invertida - sin escapar (array)'); } } /** * @todo Implement testObtenerDefVentanaGeneral(). */ // public function testObtenerDefVentanaGeneral() { // // Remove the following line when you implement this test. // $this->markTestIncomplete( // "This test has not been implemented yet." // ); // } /** * @todo Implement testObtenerDefListaGeneral(). */ // public function testObtenerDefListaGeneral() { // // Remove the following line when you implement this test. // $this->markTestIncomplete( // "This test has not been implemented yet." // ); // } } // Call ConfIgepTest::main() if this source file is executed directly. if (PHPUnit_MAIN_METHOD == "ConfIgepTest::main") { ConfIgepTest::main(); } ?>