From 2e9922cc37795f22112196341240634afc5480e8 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 7 Dec 2013 01:56:07 +0100 Subject: [PATCH 1/3] Changeset: 42 Changeset: 42 Soporte inicial de FRX/FR2 --- foxbin2prg.prg | 192 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 131 insertions(+), 61 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 41538f9..11ed45a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -46,7 +46,8 @@ * 01/12/2013 FDBOZZO v1.6 Refactorización completa generación BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit * 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin parámetros, verificación y logueo de archivos READONLY con debug activa * 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad -* 03/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior +* 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior +* 06/12/2013 FDBOZZO v1.10 Agregado soporte preliminar de conversión de reportes (FRX/FR2) * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -350,7 +351,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias lFileMode = .F. nClassTimeStamp = '' - n_FB2PRG_Version = 1.9 + n_FB2PRG_Version = 1.10 o_Conversor = NULL c_VC2 = 'VC2' c_SC2 = 'SC2' @@ -4441,7 +4442,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE Convertir - DODEFAULT() + LPARAMETERS toModulo, toEx AS EXCEPTION + DODEFAULT( @toModulo, @toEx ) TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; @@ -4489,10 +4491,62 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL loReg, lnCodError, loEx AS EXCEPTION + LOCAL loReg, I, lcFieldType, lnFieldLen, lnFieldDec, lnNumCampo, laFieldTypes(1,18) ; + , luValor, lnCodError, loEx AS EXCEPTION + SELECT TABLABIN + AFIELDS( laFieldTypes ) - *-- Agrego los ARCHIVOS + *-- Agrego los registros FOR EACH loReg IN toReport FOXOBJECT + + *-- Ajuste de los tipos de dato + FOR I = 1 TO AMEMBERS(laProps, loReg, 0) + lnNumCampo = ASCAN( laFieldTypes, laProps(I), 1, -1, 1, 1+2+4+8 ) + + IF lnNumCampo = 0 + ERROR 'No se encontró el campo [' + laProps(I) + '] en la estructura del archivo ' + DBF("TABLABIN") + ENDIF + + lcFieldType = laFieldTypes(lnNumCampo,2) + lnFieldLen = laFieldTypes(lnNumCampo,3) + lnFieldDec = laFieldTypes(lnNumCampo,4) + luValor = EVALUATE('loReg.' + laProps(I)) + + DO CASE + CASE INLIST(lcFieldType, 'B') && Double + STORE CAST( luValor AS &lcFieldType. (lnFieldPrec) ) TO ('loReg.' + laProps(I)) + + CASE INLIST(lcFieldType, 'F', 'N', 'Y') && Float, Numeric, Currency + STORE CAST( luValor AS &lcFieldType. (lnFieldLen, lnFieldDec) ) TO ('loReg.' + laProps(I)) + + CASE INLIST(lcFieldType, 'W', 'G', 'M', 'Q', 'V') && Blob, General, Memo, Varbinary, Barchar + STORE CAST( luValor AS &lcFieldType. ) TO ('loReg.' + laProps(I)) + + OTHERWISE && Demás tipos + STORE CAST( luValor AS &lcFieldType. (lnFieldLen) ) TO ('loReg.' + laProps(I)) + + ENDCASE + + *-- ARREGLO ALGUNOS VALORES + DO CASE + CASE TRANSFORM(loReg.ObjType) = "1" && Header + loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) + loReg.tag2 = STRCONV( loReg.tag2,14 ) + + CASE TRANSFORM(loReg.ObjType) = "25" && Dataenvironment (footer) + IF NOT EMPTY(loReg.tag) + loReg.tag = SUBSTR( loReg.tag, 3 ) && Le quito el CR+LF que le agregué al TEXTualizar + ENDIF + loReg.tag2 = STRCONV( loReg.tag2,14 ) + + OTHERWISE && Resto + loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) + loReg.tag2 = STRCONV( loReg.tag2,14 ) + + ENDCASE + + ENDFOR + INSERT INTO TABLABIN FROM NAME loReg ENDFOR @@ -4579,66 +4633,50 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ******************************************************************************************************************* - PROCEDURE analizarBloque_Reportes + PROCEDURE analizarBloque_CDATA_inline *------------------------------------------------------ - *-- Analiza el bloque + *-- Analiza el bloque *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL llBloqueEncontrado, lcComment, lcMetadatos, luValor ; - , laPropsAndValues(1,2), lnPropsAndValues_Count ; - , loReg + LOCAL llBloqueEncontrado, lcValue, loEx as Exception - IF LEFT( tcLine, LEN(C_TAG_REPORTE) + 1 ) == '<' + C_TAG_REPORTE + '' + IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I llBloqueEncontrado = .T. - loReg = THIS.emptyRecord() - WITH THIS - FOR I = I + 1 TO tnCodeLines - lcComment = '' - .set_Line( @tcLine, @taCodeLines, I ) + IF C_DATA_F $ tcLine + lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) + ADDPROPERTY( toReg, tcPropName, lcValue ) + EXIT + ENDIF + + lcValue = STREXTRACT( tcLine, C_DATA_I ) + CR_LF + + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) + + IF C_DATA_F $ tcLine + lcValue = lcValue + STREXTRACT( tcLine, '', C_DATA_F ) + CR_LF + ADDPROPERTY( toReg, tcPropName, lcValue ) + EXIT - DO CASE - CASE LEFT( tcLine, LEN(C_TAG_REPORTE_F) ) == C_TAG_REPORTE_F - I = I + 1 - EXIT - - CASE .lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios - - *CASE UPPER( LEFT( tcLine, 14 ) ) == 'BUILD PROJECT ' - * LOOP - - CASE .analizarBloque_platform( toReport, @tcLine, @taCodeLines, @I, @tnCodeLines, @loReg ) - - CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'picture' ) - - CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag' ) - - CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag2' ) - - CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'penred' ) - - *CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'style' ) - - *CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'expr' ) - - CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'user' ) - - ENDCASE - ENDFOR - ENDWITH && THIS - - I = I - 1 - toReport.Add( loReg ) + ELSE + lcValue = lcValue + tcLine + CR_LF + ENDIF + ENDFOR + ENDIF CATCH TO loEx + IF loEx.ErrorNo = 1470 && Incorrect property name. + loEx.UserValue = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' + ENDIF + IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -4698,31 +4736,63 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ******************************************************************************************************************* - PROCEDURE analizarBloque_CDATA_inline + PROCEDURE analizarBloque_Reportes *------------------------------------------------------ - *-- Analiza el bloque + *-- Analiza el bloque *------------------------------------------------------ - LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName + LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL llBloqueEncontrado, lcValue, loEx as Exception + LOCAL llBloqueEncontrado, lcComment, lcMetadatos, luValor ; + , laPropsAndValues(1,2), lnPropsAndValues_Count ; + , loReg - IF LEFT(tcLine, 9) == '<' + tcPropName + '>' + IF LEFT( tcLine, LEN(C_TAG_REPORTE) + 1 ) == '<' + C_TAG_REPORTE + '' llBloqueEncontrado = .T. + loReg = THIS.emptyRecord() - lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F ) - ADDPROPERTY( toReg, tcPropName, lcValue ) + WITH THIS + FOR I = I + 1 TO tnCodeLines + lcComment = '' + .set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE LEFT( tcLine, LEN(C_TAG_REPORTE_F) ) == C_TAG_REPORTE_F + I = I + 1 + EXIT + + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios + + CASE .analizarBloque_platform( toReport, @tcLine, @taCodeLines, @I, @tnCodeLines, @loReg ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'picture' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag2' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'penred' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'style' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'expr' ) + + CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'user' ) + + ENDCASE + ENDFOR + ENDWITH && THIS + + I = I - 1 + toReport.Add( loReg ) ENDIF CATCH TO loEx - IF loEx.ErrorNo = 1470 && Incorrect property name. - loEx.UserValue = 'PropName=[' + TRANSFORM(tcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF From 896bac3c1ac8ab1b12f5bd270fd76875591d6996 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 7 Dec 2013 20:00:19 +0100 Subject: [PATCH 2/3] Changeset: 56 Changeset: 56 En desarrollo FRX --- TESTS/ut__foxbin2prg.prg | 479 +++++++++++++++++++++++++-------------- foxbin2prg.prg | 9 +- 2 files changed, 316 insertions(+), 172 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index c27a768..3125c76 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -54,7 +54,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Evaluate_results - LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tc_OutputFile, tcParent, tcClass, tcObjName, toReg_Esperado + LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tc_OutputFile, tcParent, tcClass, tcObjName, toReg_Esperado ; + , toReg, tcTipoBinario #IF .F. PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' @@ -66,184 +67,149 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDIF - LOCAL lnCodError, lcTipoBinario, toReg ; - , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; - , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" - - *-- TEST - IF ISNULL(toEx) && Respetar errores previos - TRY - lcTipoBinario = UPPER( JUSTEXT( tc_OutputFile ) ) - - IF FILE(tc_OutputFile) - SELECT 0 - USE (tc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN - ELSE - ERROR 'No se encontró el archivo "' + tc_OutputFile + '"' - ENDIF - - IF EMPTY(tcParent) AND EMPTY(tcClass) AND EMPTY(tcObjName) - DO CASE - CASE lcTipoBinario = 'SCX' - LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Screen " - CASE lcTipoBinario = 'VCX' - LOCATE FOR PLATFORM=="COMMENT " AND UniqueID=="Class " - ENDCASE - IF NOT FOUND() - ERROR 'No se encontró el registro de cabecera "' + UniqueID + '"' - ENDIF - ELSE - LOCATE FOR CLASS==tcClass AND PARENT==tcParent AND objName==tcObjName - IF NOT FOUND() - ERROR 'No se encontró el registro para CLASS=="' + tcClass + '" AND PARENT=="' + tcParent + '" AND objName=="' + tcObjName + '"' - ENDIF - ENDIF - - SCATTER MEMO NAME toReg - - CATCH TO toEx - FINALLY - USE IN (SELECT("TABLABIN")) - ENDTRY - ENDIF - - IF ISNULL(toEx) - LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado ; - , lnPropsAndComments_Count, lnPropsAndComments_Count_Esperado, laPropsAndComments(1,2), laPropsAndComments_Esperado(1,2) ; - , laProtected(1), lnProtected_Count, laProtected_Esperado(1), lnProtected_Count_Esperado ; - , laMethods(1,2), lnMethods_Count, laMethods_Esperado(1,2), lnMethods_Count_Esperado, lcExtraData - LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" - - *-- Algunos ajustes para mejor visualización de caracteres especiales - *tcPropValue = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcPropValue ) - loObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") - - *-- Reserved3 - loObj.get_PropsAndCommentsFrom_RESERVED3( toReg.RESERVED3, .F., @laPropsAndComments, @lnPropsAndComments_Count, '' ) - loObj.get_PropsAndCommentsFrom_RESERVED3( toReg_Esperado.RESERVED3, .F., @laPropsAndComments_Esperado, @lnPropsAndComments_Count_Esperado, '' ) - - *-- Properties - loObj.get_PropsAndValuesFrom_PROPERTIES( toReg.PROPERTIES, 0, @laPropsAndValues, @lnPropsAndValues_Count, '' ) - loObj.get_PropsAndValuesFrom_PROPERTIES( toReg_Esperado.PROPERTIES, 0, @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, '' ) - - *-- Protected - loObj.get_PropsFrom_PROTECTED( toReg.PROTECTED, .F., @laProtected, @lnProtected_Count, '' ) - loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' ) - - *-- Methods - loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count ) - loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado ) - - lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')' + DO CASE + CASE INLIST(tcTipoBinario, 'FRX') - *-- Visualización de valores - THIS.messageout( LOWER(PROGRAM(PROGRAM(-1)-1)) ) + CASE INLIST(tcTipoBinario, 'VCX', 'SCX') + LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado ; + , lnPropsAndComments_Count, lnPropsAndComments_Count_Esperado, laPropsAndComments(1,2), laPropsAndComments_Esperado(1,2) ; + , laProtected(1), lnProtected_Count, laProtected_Esperado(1), lnProtected_Count_Esperado ; + , laMethods(1,2), lnMethods_Count, laMethods_Esperado(1,2), lnMethods_Count_Esperado, lcExtraData + LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" - THIS.messageout( 'PROPERTIES esperadas para ' + lcExtraData + ': ' ; - + TRANSFORM(lnPropsAndValues_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.PROPERTIES)) + ' bytes)' ) - *THIS.messageout( REPLICATE('-',80) ) - *FOR I = 1 TO lnPropsAndValues_Count_Esperado - * THIS.messageout( 'PropName = ' + TRANSFORM(laPropsAndValues_Esperado(I,1)) ) - *ENDFOR + *-- Algunos ajustes para mejor visualización de caracteres especiales + *tcPropValue = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcPropValue ) + loObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") - THIS.messageout( 'PROTECTED esperadas para ' + lcExtraData + ': ' ; - + TRANSFORM(lnProtected_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.PROTECTED)) + ' bytes)' ) - *THIS.messageout( REPLICATE('-',80) ) - *FOR I = 1 TO lnProtected_Count_Esperado - * THIS.messageout( 'PropName = ' + TRANSFORM(laProtected_Esperado(I,1)) ) - *ENDFOR + *-- Reserved3 + loObj.get_PropsAndCommentsFrom_RESERVED3( toReg.RESERVED3, .F., @laPropsAndComments, @lnPropsAndComments_Count, '' ) + loObj.get_PropsAndCommentsFrom_RESERVED3( toReg_Esperado.RESERVED3, .F., @laPropsAndComments_Esperado, @lnPropsAndComments_Count_Esperado, '' ) - THIS.messageout( 'RESERVED3 esperadas para ' + lcExtraData + ': ' ; - + TRANSFORM(lnPropsAndComments_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.RESERVED3)) + ' bytes)' ) - *THIS.messageout( REPLICATE('-',80) ) - *FOR I = 1 TO lnPropsAndComments_Count_Esperado - * THIS.messageout( 'PropName = ' + TRANSFORM(laPropsAndComments_Esperado(I,1)) ) - *ENDFOR + *-- Properties + loObj.get_PropsAndValuesFrom_PROPERTIES( toReg.PROPERTIES, 0, @laPropsAndValues, @lnPropsAndValues_Count, '' ) + loObj.get_PropsAndValuesFrom_PROPERTIES( toReg_Esperado.PROPERTIES, 0, @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, '' ) - THIS.messageout( 'METHODS esperadas para ' + lcExtraData + ': ' ; - + TRANSFORM(lnMethods_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.METHODS)) + ' bytes)' ) - *THIS.messageout( REPLICATE('-',80) ) - *FOR I = 1 TO lnMethods_Count_Esperado - * THIS.messageout( 'Name = ' + TRANSFORM(laMethods_Esperado(I,1)) ) - *ENDFOR + *-- Protected + loObj.get_PropsFrom_PROTECTED( toReg.PROTECTED, .F., @laProtected, @lnProtected_Count, '' ) + loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' ) - THIS.messageout( 'OLE2 esperado para ' + lcExtraData + ': ' + TRANSFORM(toReg_Esperado.OLE2) ) + *-- Methods + loObj.get_ADD_OBJECT_METHODS( toReg, toReg, '', @laMethods, '', @lnMethods_Count ) + loObj.get_ADD_OBJECT_METHODS( toReg_Esperado, toReg_Esperado, '', @laMethods_Esperado, '', @lnMethods_Count_Esperado ) - THIS.messageout( 'Checksum OLE esperado para ' + lcExtraData + ': ' + TRANSFORM(SYS(2007, toReg_Esperado.OLE)) ) + lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')' - *-- Evaluación de valores - THIS.assertequals( toReg_Esperado.Reserved1, toReg.Reserved1, "Valor de RESERVED1 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved1), LEN(toReg.Reserved1), "Tamaño de RESERVED1 para " + lcExtraData ) + *-- Visualización de valores + THIS.messageout( LOWER(PROGRAM(PROGRAM(-1)-1)) ) - THIS.assertequals( toReg_Esperado.Reserved2, toReg.Reserved2, "Valor de RESERVED2 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved2), LEN(toReg.Reserved2), "Tamaño de RESERVED2 para " + lcExtraData ) + THIS.messageout( 'PROPERTIES esperadas para ' + lcExtraData + ': ' ; + + TRANSFORM(lnPropsAndValues_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.PROPERTIES)) + ' bytes)' ) + *THIS.messageout( REPLICATE('-',80) ) + *FOR I = 1 TO lnPropsAndValues_Count_Esperado + * THIS.messageout( 'PropName = ' + TRANSFORM(laPropsAndValues_Esperado(I,1)) ) + *ENDFOR - THIS.assertequals( toReg_Esperado.Reserved4, toReg.Reserved4, "Valor de RESERVED4 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved4), LEN(toReg.Reserved4), "Tamaño de RESERVED4 para " + lcExtraData ) + THIS.messageout( 'PROTECTED esperadas para ' + lcExtraData + ': ' ; + + TRANSFORM(lnProtected_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.PROTECTED)) + ' bytes)' ) + *THIS.messageout( REPLICATE('-',80) ) + *FOR I = 1 TO lnProtected_Count_Esperado + * THIS.messageout( 'PropName = ' + TRANSFORM(laProtected_Esperado(I,1)) ) + *ENDFOR - THIS.assertequals( toReg_Esperado.Reserved5, toReg.Reserved5, "Valor de RESERVED5 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved5), LEN(toReg.Reserved5), "Tamaño de RESERVED5 para " + lcExtraData ) + THIS.messageout( 'RESERVED3 esperadas para ' + lcExtraData + ': ' ; + + TRANSFORM(lnPropsAndComments_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.RESERVED3)) + ' bytes)' ) + *THIS.messageout( REPLICATE('-',80) ) + *FOR I = 1 TO lnPropsAndComments_Count_Esperado + * THIS.messageout( 'PropName = ' + TRANSFORM(laPropsAndComments_Esperado(I,1)) ) + *ENDFOR - THIS.assertequals( toReg_Esperado.Reserved6, toReg.Reserved6, "Valor de RESERVED6 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved6), LEN(toReg.Reserved6), "Tamaño de RESERVED6 para " + lcExtraData ) + THIS.messageout( 'METHODS esperadas para ' + lcExtraData + ': ' ; + + TRANSFORM(lnMethods_Count_Esperado) + ' (Tamaño = ' + TRANSFORM(LEN(toReg_Esperado.METHODS)) + ' bytes)' ) + *THIS.messageout( REPLICATE('-',80) ) + *FOR I = 1 TO lnMethods_Count_Esperado + * THIS.messageout( 'Name = ' + TRANSFORM(laMethods_Esperado(I,1)) ) + *ENDFOR - THIS.assertequals( toReg_Esperado.Reserved7, toReg.Reserved7, "Valor de RESERVED7 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved7), LEN(toReg.Reserved7), "Tamaño de RESERVED7 para " + lcExtraData ) + THIS.messageout( 'OLE2 esperado para ' + lcExtraData + ': ' + TRANSFORM(toReg_Esperado.OLE2) ) - THIS.assertequals( toReg_Esperado.Reserved8, toReg.Reserved8, "Valor de RESERVED8 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.Reserved8), LEN(toReg.Reserved8), "Tamaño de RESERVED8 para " + lcExtraData ) + THIS.messageout( 'Checksum OLE esperado para ' + lcExtraData + ': ' + TRANSFORM(SYS(2007, toReg_Esperado.OLE)) ) - THIS.assertequals( toReg_Esperado.OLE2, toReg.OLE2, "Valor de OLE2 para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.OLE2), LEN(toReg.OLE2), "Tamaño de OLE2 para " + lcExtraData ) - THIS.assertequals( SYS(2007, toReg_Esperado.OLE), SYS(2007, toReg.OLE), "Valor de OLE (Checksum) para " + lcExtraData ) - THIS.assertequals( LEN(toReg_Esperado.OLE), LEN(toReg.OLE), "Tamaño de OLE para " + lcExtraData ) + *-- Evaluación de valores + THIS.assertequals( toReg_Esperado.Reserved1, toReg.Reserved1, "Valor de RESERVED1 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved1), LEN(toReg.Reserved1), "Tamaño de RESERVED1 para " + lcExtraData ) - *-- PROPERTIES - THIS.assertequals( LEN(toReg_Esperado.PROPERTIES), LEN(toReg.PROPERTIES), "Tamaño de PROPERTIES para " + lcExtraData ) - THIS.assertequals( lnPropsAndValues_Count_Esperado, lnPropsAndValues_Count, "Cantidad de PROPERTIES para " + lcExtraData ) - FOR I = 1 TO lnPropsAndValues_Count_Esperado - THIS.asserttrue( ASCAN( laPropsAndValues, laPropsAndValues_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; - , ' Comprobación de que existe la Property "' + TRANSFORM(laPropsAndValues_Esperado(I,1)) + '"' + " para " + lcExtraData ) - ENDFOR + THIS.assertequals( toReg_Esperado.Reserved2, toReg.Reserved2, "Valor de RESERVED2 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved2), LEN(toReg.Reserved2), "Tamaño de RESERVED2 para " + lcExtraData ) - *-- RESERVED3 - THIS.assertequals( LEN(toReg_Esperado.RESERVED3), LEN(toReg.RESERVED3), "Tamaño de RESERVED3 para " + lcExtraData ) - THIS.assertequals( lnPropsAndComments_Count_Esperado, lnPropsAndComments_Count, "Cantidad de RESERVED3 para " + lcExtraData ) - FOR I = 1 TO lnPropsAndComments_Count_Esperado - THIS.asserttrue( ASCAN( laPropsAndComments, laPropsAndComments_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; - , ' Comprobación de que existe la Reserved3 "' + TRANSFORM(laPropsAndComments_Esperado(I,1)) + '"' + " para " + lcExtraData ) - ENDFOR + THIS.assertequals( toReg_Esperado.Reserved4, toReg.Reserved4, "Valor de RESERVED4 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved4), LEN(toReg.Reserved4), "Tamaño de RESERVED4 para " + lcExtraData ) - *-- PROTECTED - THIS.assertequals( LEN(toReg_Esperado.PROTECTED), LEN(toReg.PROTECTED), "Tamaño de PROTECTED para " + lcExtraData ) - THIS.assertequals( lnProtected_Count_Esperado, lnProtected_Count, "Cantidad de PROTECTED para " + lcExtraData ) - FOR I = 1 TO lnProtected_Count_Esperado - THIS.asserttrue( ASCAN( laProtected, laProtected_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; - , ' Comprobación de que existe la Protected "' + TRANSFORM(laProtected_Esperado(I,1)) + '"' + " para " + lcExtraData ) - ENDFOR + THIS.assertequals( toReg_Esperado.Reserved5, toReg.Reserved5, "Valor de RESERVED5 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved5), LEN(toReg.Reserved5), "Tamaño de RESERVED5 para " + lcExtraData ) - *-- METHODS - lcMensaje = "Tamaño de METHODS para " + lcExtraData - * COMPROBAR "BUG DEL MÉTODO MOVIDO" - IF LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) <> LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ) - IF "BUG DEL MÉTODO MOVIDO" $ toReg.METHODS AND NOT "BUG DEL MÉTODO MOVIDO" $ toReg_Esperado.METHODS - lcMensaje = lcMensaje + ' >>> ATENCIÓN!! - COMPROBAR "BUG DEL MÉTODO MOVIDO"' + THIS.assertequals( toReg_Esperado.Reserved6, toReg.Reserved6, "Valor de RESERVED6 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved6), LEN(toReg.Reserved6), "Tamaño de RESERVED6 para " + lcExtraData ) + + THIS.assertequals( toReg_Esperado.Reserved7, toReg.Reserved7, "Valor de RESERVED7 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved7), LEN(toReg.Reserved7), "Tamaño de RESERVED7 para " + lcExtraData ) + + THIS.assertequals( toReg_Esperado.Reserved8, toReg.Reserved8, "Valor de RESERVED8 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.Reserved8), LEN(toReg.Reserved8), "Tamaño de RESERVED8 para " + lcExtraData ) + + THIS.assertequals( toReg_Esperado.OLE2, toReg.OLE2, "Valor de OLE2 para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.OLE2), LEN(toReg.OLE2), "Tamaño de OLE2 para " + lcExtraData ) + + THIS.assertequals( SYS(2007, toReg_Esperado.OLE), SYS(2007, toReg.OLE), "Valor de OLE (Checksum) para " + lcExtraData ) + THIS.assertequals( LEN(toReg_Esperado.OLE), LEN(toReg.OLE), "Tamaño de OLE para " + lcExtraData ) + + *-- PROPERTIES + THIS.assertequals( LEN(toReg_Esperado.PROPERTIES), LEN(toReg.PROPERTIES), "Tamaño de PROPERTIES para " + lcExtraData ) + THIS.assertequals( lnPropsAndValues_Count_Esperado, lnPropsAndValues_Count, "Cantidad de PROPERTIES para " + lcExtraData ) + FOR I = 1 TO lnPropsAndValues_Count_Esperado + THIS.asserttrue( ASCAN( laPropsAndValues, laPropsAndValues_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; + , ' Comprobación de que existe la Property "' + TRANSFORM(laPropsAndValues_Esperado(I,1)) + '"' + " para " + lcExtraData ) + ENDFOR + + *-- RESERVED3 + THIS.assertequals( LEN(toReg_Esperado.RESERVED3), LEN(toReg.RESERVED3), "Tamaño de RESERVED3 para " + lcExtraData ) + THIS.assertequals( lnPropsAndComments_Count_Esperado, lnPropsAndComments_Count, "Cantidad de RESERVED3 para " + lcExtraData ) + FOR I = 1 TO lnPropsAndComments_Count_Esperado + THIS.asserttrue( ASCAN( laPropsAndComments, laPropsAndComments_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; + , ' Comprobación de que existe la Reserved3 "' + TRANSFORM(laPropsAndComments_Esperado(I,1)) + '"' + " para " + lcExtraData ) + ENDFOR + + *-- PROTECTED + THIS.assertequals( LEN(toReg_Esperado.PROTECTED), LEN(toReg.PROTECTED), "Tamaño de PROTECTED para " + lcExtraData ) + THIS.assertequals( lnProtected_Count_Esperado, lnProtected_Count, "Cantidad de PROTECTED para " + lcExtraData ) + FOR I = 1 TO lnProtected_Count_Esperado + THIS.asserttrue( ASCAN( laProtected, laProtected_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; + , ' Comprobación de que existe la Protected "' + TRANSFORM(laProtected_Esperado(I,1)) + '"' + " para " + lcExtraData ) + ENDFOR + + *-- METHODS + lcMensaje = "Tamaño de METHODS para " + lcExtraData + * COMPROBAR "BUG DEL MÉTODO MOVIDO" + IF LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) <> LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ) + IF "BUG DEL MÉTODO MOVIDO" $ toReg.METHODS AND NOT "BUG DEL MÉTODO MOVIDO" $ toReg_Esperado.METHODS + lcMensaje = lcMensaje + ' >>> ATENCIÓN!! - COMPROBAR "BUG DEL MÉTODO MOVIDO"' + ENDIF ENDIF - ENDIF - *-- Fin comprobación - - THIS.assertequals( LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) ; - , LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ), lcMensaje ) - - THIS.assertequals( lnMethods_Count_Esperado, lnMethods_Count, "Cantidad de METHODS para " + lcExtraData ) - FOR I = 1 TO lnMethods_Count_Esperado - THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; - , ' Comprobación de que existe el Method "' + TRANSFORM(laMethods_Esperado(I,1)) + '"' + " para " + lcExtraData ) - ENDFOR + *-- Fin comprobación + + THIS.assertequals( LEN( STRTRAN( toReg_Esperado.METHODS, CHR(13)+CHR(10), CHR(13) ) ) ; + , LEN( STRTRAN( toReg.METHODS, CHR(13)+CHR(10), CHR(13) ) ), lcMensaje ) + + THIS.assertequals( lnMethods_Count_Esperado, lnMethods_Count, "Cantidad de METHODS para " + lcExtraData ) + FOR I = 1 TO lnMethods_Count_Esperado + THIS.asserttrue( ASCAN( laMethods, laMethods_Esperado(I,1), 1, -1, 1, 0+2+4) > 0 ; + , ' Comprobación de que existe el Method "' + TRANSFORM(laMethods_Esperado(I,1)) + '"' + " para " + lcExtraData ) + ENDFOR + + ENDCASE ELSE *-- Evaluación de errores @@ -261,10 +227,82 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_FRX_YValidarLosCamposDelRegistro + *-- REPORTE (FRX) + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'fb2p_foxuser.frx' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + SELECT 0 + USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN + + SCAN ALL FOR NOT DELETED() + *-- DATOS ESPERADOS + STORE 0 TO lnCodError_Esperado + SCATTER MEMO NAME loReg_Esperado + lcUniqueID = loReg_Esperado.UNIQUEID + + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + LOCATE FOR UNIQUEID==lcUniqueID + + IF NOT FOUND() + ERROR 'No se encontró el registro con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) + ENDSCAN + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIBOBIN_IN")) + ENDTRY + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElForm_FB2P_SCX_YValidarLosCamposDelRegistro LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -285,6 +323,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_File = 'fb2p_frm_1.scx' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) @@ -294,7 +333,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN - SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Form',10) OR PLATFORM==PADR("WINDOWS",8) ) + SCAN ALL FOR NOT DELETED() AND ( UNIQUEID==PADR('Form',10) OR PLATFORM==PADR("WINDOWS",8) ) *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado SCATTER MEMO NAME loReg_Esperado @@ -302,7 +341,31 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lcParent = loReg_Esperado.PARENT lcObjName = loReg_Esperado.objName - THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + IF EMPTY(lcParent) AND EMPTY(lcClass) AND EMPTY(lcObjName) + LOCATE FOR PLATFORM==PADR("COMMENT",8) AND UNIQUEID==PADR("Screen",10) + IF NOT FOUND() + ERROR 'No se encontró el registro de cabecera "' + UNIQUEID + '"' + ENDIF + ELSE + LOCATE FOR CLASS==lcClass AND PARENT==lcParent AND objName==lcObjName + IF NOT FOUND() + ERROR 'No se encontró el registro para CLASS=="' + lcClass + '" AND PARENT=="' + lcParent + '" AND objName=="' + lcObjName + '"' + ENDIF + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) ENDSCAN CATCH TO loEx @@ -310,6 +373,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg FINALLY USE IN (SELECT("ARCHIBOBIN_IN")) + USE IN (SELECT("TABLABIN")) ENDTRY ENDFUNC @@ -318,7 +382,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarLosCamposDelRegistro LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -341,6 +405,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_File = 'fb2p_test.vcx' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) @@ -350,7 +415,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN - SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) + SCAN ALL FOR NOT DELETED() AND ( UNIQUEID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado SCATTER MEMO NAME loReg_Esperado @@ -358,7 +423,31 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lcParent = loReg_Esperado.PARENT lcObjName = loReg_Esperado.objName - THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + IF EMPTY(lcParent) AND EMPTY(lcClass) AND EMPTY(lcObjName) + LOCATE FOR PLATFORM==PADR("COMMENT",8) AND UNIQUEID==PADR("Class",10) + IF NOT FOUND() + ERROR 'No se encontró el registro de cabecera "' + UNIQUEID + '"' + ENDIF + ELSE + LOCATE FOR CLASS==lcClass AND PARENT==lcParent AND objName==lcObjName + IF NOT FOUND() + ERROR 'No se encontró el registro para CLASS=="' + lcClass + '" AND PARENT=="' + lcParent + '" AND objName=="' + lcObjName + '"' + ENDIF + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) ENDSCAN CATCH TO loEx @@ -366,6 +455,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg FINALLY USE IN (SELECT("ARCHIBOBIN_IN")) + USE IN (SELECT("TABLABIN")) ENDTRY ENDFUNC @@ -374,7 +464,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarEl_BUG_DelMetodoMovidoEntreClases LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -397,6 +487,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_File = 'fb2p_test_bug_metodo_movido.vcx' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) @@ -406,7 +497,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN - SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) + SCAN ALL FOR NOT DELETED() AND ( UNIQUEID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado SCATTER MEMO NAME loReg_Esperado @@ -414,7 +505,31 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lcParent = loReg_Esperado.PARENT lcObjName = loReg_Esperado.objName - THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + IF EMPTY(lcParent) AND EMPTY(lcClass) AND EMPTY(lcObjName) + LOCATE FOR PLATFORM==PADR("COMMENT",8) AND UNIQUEID==PADR("Class",10) + IF NOT FOUND() + ERROR 'No se encontró el registro de cabecera "' + UNIQUEID + '"' + ENDIF + ELSE + LOCATE FOR CLASS==lcClass AND PARENT==lcParent AND objName==lcObjName + IF NOT FOUND() + ERROR 'No se encontró el registro para CLASS=="' + lcClass + '" AND PARENT=="' + lcParent + '" AND objName=="' + lcObjName + '"' + ENDIF + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) ENDSCAN CATCH TO loEx @@ -422,6 +537,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg FINALLY USE IN (SELECT("ARCHIBOBIN_IN")) + USE IN (SELECT("TABLABIN")) ENDTRY ENDFUNC @@ -430,7 +546,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_FB2P_TEST_VCX_YValidarEl_BUG_Del_PROCEDURE_SIN_ENDPROC LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -453,6 +569,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_File = 'fb2p_test_bug_estructural.vcx' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) @@ -462,7 +579,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN - SCAN ALL FOR NOT DELETED() AND ( UniqueID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) + SCAN ALL FOR NOT DELETED() AND ( UNIQUEID==PADR('Class',10) OR PLATFORM==PADR("WINDOWS",8) ) *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado SCATTER MEMO NAME loReg_Esperado @@ -470,14 +587,40 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lcParent = loReg_Esperado.PARENT lcObjName = loReg_Esperado.objName - THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + IF EMPTY(lcParent) AND EMPTY(lcClass) AND EMPTY(lcObjName) + LOCATE FOR PLATFORM==PADR("COMMENT",8) AND UNIQUEID==PADR("Class",10) + IF NOT FOUND() + ERROR 'No se encontró el registro de cabecera "' + UNIQUEID + '"' + ENDIF + ELSE + LOCATE FOR CLASS==lcClass AND PARENT==lcParent AND objName==lcObjName + IF NOT FOUND() + ERROR 'No se encontró el registro para CLASS=="' + lcClass + '" AND PARENT=="' + lcParent + '" AND objName=="' + lcObjName + '"' + ENDIF + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) ENDSCAN CATCH TO loEx - THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario ) FINALLY USE IN (SELECT("ARCHIBOBIN_IN")) + USE IN (SELECT("TABLABIN")) ENDTRY ENDFUNC diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3b5c4d1..93e0321 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -48,6 +48,7 @@ * 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad * 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior * 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente y agregado soporte preliminar de conversión de reportes (FRX/FR2) +* 07/12/2013 FDBOZZO v1.11 * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -56,7 +57,7 @@ * 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la última (arreglado en v.1.7) * 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementación defectuosa del arreglo anterior (arreglado en v.1.8) * 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementación defectuosa de una mejora anterior (arreglado en v.1.9) -* 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay métodos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden +* 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay métodos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden (arreglado en v.1.10) * *--------------------------------------------------------------------------------------------------- * TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES: @@ -5854,7 +5855,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> + <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -5967,7 +5968,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> + <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -6080,7 +6081,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> + <>platform="WINDOWS " uniqueid="<>" timestamp="<>" objtype="<>" <<>> ENDTEXT TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 From 7b0792c681f78d8d2a53848cd556cb6484b5ac08 Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 8 Dec 2013 13:09:20 +0100 Subject: [PATCH 3/3] Changeset: 60 Changeset: 60 Soporte inicial de Reportes y Etiquetas --- TESTS/DATOS_READONLY/bmps/SobrePostal.bmp | Bin 0 -> 886 bytes TESTS/DATOS_READONLY/bmps/TreeView.bmp | Bin 0 -> 822 bytes TESTS/DATOS_READONLY/fb2p_foxuser.frt | Bin 0 -> 10432 bytes TESTS/DATOS_READONLY/fb2p_foxuser.frx | Bin 0 -> 12544 bytes TESTS/DATOS_READONLY/fb2p_foxuser.lbt | Bin 0 -> 1216 bytes TESTS/DATOS_READONLY/fb2p_foxuser.lbx | Bin 0 -> 5216 bytes TESTS/ut__foxbin2prg.prg | 127 +++++++++++++- foxbin2prg.prg | 195 +++++++++++++--------- 8 files changed, 235 insertions(+), 87 deletions(-) create mode 100644 TESTS/DATOS_READONLY/bmps/SobrePostal.bmp create mode 100644 TESTS/DATOS_READONLY/bmps/TreeView.bmp create mode 100644 TESTS/DATOS_READONLY/fb2p_foxuser.frt create mode 100644 TESTS/DATOS_READONLY/fb2p_foxuser.frx create mode 100644 TESTS/DATOS_READONLY/fb2p_foxuser.lbt create mode 100644 TESTS/DATOS_READONLY/fb2p_foxuser.lbx diff --git a/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp b/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9db1f07c37542b1abc6af772709d798f4ec33e1c GIT binary patch literal 886 zcmb7?u}TCn5QZbZfObBDPhevsRyKm2jo<@V+1T3Hh_#K+APTk?2Z9PBL^weNS=d4r z6qNPw*1K@VFEcT_cc^&FWSGh3`zI4-ad~Uf$Tx?dWlgiDSQBOjZ_GmcFG+OX_nr4+ znenay^TXKRLS}b;rL{UgmYG4B0~~H|{vQhrRvhnvU2H7JEfWqwPX3YQuF?oy_NUG11=T&`^ddyr&3w vkE*|oZ&r8MHS$|eWdUTC^(ln7Z|$t;``MAE`Jd>t)bms4t^!i83f_k|G|u!=aSPQ@UlB}+p{|xk=Kt#*_!>%( zfk^-W?(`gB;__-(w`n7O_MZi4klBXZ@6gC*KLT303%`ANwBumy2{g90uw?%MgrnO4 z=E<1j>|rGv&B~AXU@`TGa^2!#FQa51!=Hcu8%%Z1GoLC}~3drnc)#Tvm9K=yn6=!NS;Rn=>w zvjgx%5ETV1-wjB}YO;?9lSk}<>tBLet%BUOFNyh~N8ptvy{r)j)WF3v%#K{@gQn`H zF32WSsOQ-ciHGPUq+UPnS9`1|foAteV7Nm9ie#FS&h%+eqYieljGSAxrg(ZgCyd=Z8kOO=F(b9k_bL8-zW94 zeM#VN$>LJJ-lmiUevYr(-A(4dF4Q)e|2(e~+o8VqVf8(bMErMjNf6b#(!4Ff3uFvG z%Qsgyd^~Rw_J6@w-VJQ;UN$6w|ETi%L{Jt4YEC!9FYw35$KQ|N6}?Ep{*9l18$N%( zJ*&_@{;urMfO~T=^)Wm+d;Vrl=0@Tq;{Vl|Nh90iVk;Kl%^H&g{x`gaw^WYj4miAy z)(v*U-9Oiamr`9_bSp{%f8F~-I)1(T`xCr;+Qc8Y0reTdGP}m^YP0+|P1@ti9C9BD zL9QmQow`o+c2xa|xR-CoViA!H+7H?U`-*i-QHq5;`}$*(XPuv!!7sz5F#KG*AB6Ny zW?-%hZ2VC0TsveIbm&z-Bmp9;fkOf&dhZVHz&S6WtP;aqn_p}d3vcwj63{-*p{%Aeg>8OsUS`dRn>zMb-CDSwvoXUlE487;Q|QvPhc-_I$3 pmhxvQe>QWlEZI!r`@in}VbkLuI{)_Tn*7^{g>y(~xBg!$?mth%z@GpB literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.frx b/TESTS/DATOS_READONLY/fb2p_foxuser.frx new file mode 100644 index 0000000000000000000000000000000000000000..60a4c26d42f3c4c4f335f0491a3810e835ae64ad GIT binary patch literal 12544 zcmeHNNsr`66*dD%J);>e+>n4^fMM;zOQtiE-I?jE$|^hTb~>xNn!^AG4qUi!;lhQ> zT)1%IfP{p^BE$}2k&xIyLPA0aX;=h@In4jydoLoKVOOLxE4xeT8u8Q}5#=woFW!sy z!r}CvdHT+KJkNXKsh5$q<%w5&UYRBJqNs8pvsWRx)2`yJuDzzN`wGnU_6} zq}zU4+@GB!JcHTC9r$9IWxB%b6Arvij`5Tw|0J^R_`pMhe~R&TjWU&0I_Dbl)5u<{ zE1L}Xah0Y-Kz_!JPqQ_zul%e7r}^svp!Ty*?-@5;ESx#%j;#|0p6Y8 zs;<&{#yw=;-Hz8q>1E$@-~?#NzVE=NMO_!4mx+0Ps}_fMUm{m&ivaVpa) z$$)tB7f8DHw@pH-E6a0Vgz*p-$PpV5GUiJqEp3LV-woE8SWq)+w#bN;k z0>JwH2}yVTV1MZUnC2k=?7(4v4gMDgUKe$eDGQW;1>Us})-PA`cyW$Rd;$EQZoDdCq=4kV-1u=-tZ9?Ve%R z11)xvtSpjPRwnr@jmgHzB;$|+hA;{gvF2|GQm#qP%rhuxhbAqOZ$&Fu3@dg!$ja$0IA00oT3aMRsELySOp=^4i}@mtEnXX&FcquWdQ8S+81%pTgZh) z(m0;yFlGQnsyD30y9VQt@<0Y6UPc5Jgt&&|F>^%z4sHwYipgIgsR$u$ljO&EJKM+c z+_y;DjwkfB0ymp;fK90)XW$Pgx)3iTf(n=~Wh5x>@UG0pj+1CYRFIKCj~z{_=bV~K z>JcjT$H_~Jq%qfb(j<+!1}0#L#$1gDVm3Mvlw(ZFNKovM>@nAOaRabE%v|eT=K8=Q zY0Q-Eo@8ZO=GwC-&wPud z(_F(QVBT7D#XIxnj>nkmdud^fxkgZ%Iu$hL+M`Kae$k-RZ;eIJvA0p5_gMixn@xemfu`BHIv&2?arH0DYtkj7jG(MSi(##|#j zqf-H@H6o}48>Nf{#r?f2o$GGWT!$7(W3KcGwlPU8r^ank-wU^F?wn2jdG z3Ef1}+w*2mVg;^$tm`@Pyq`%PeB#*|LM9GPegI=OnhasK>cz6rB;HS&J0ALF3W?xE z=ns;ln69~YtrsukHBtLQ}$v`0N zsq2rvW8Kt2@}n3tn&@{9%kkV8$>ea7(CKcHGY82j#%wgXxvewi+PrF_S|fr=hdLf| zS6y?(Mx$3Px8u2{xy~IV=NPlmH@bX!74H+9*ux&APF(m#>^X}i$xsHi4?PTyW_8=^lxH&eHMGoVObY+80nhK7rdP@ZC#^+NUpwFUM8Uo^k{AnSdHzQ+ATP+;n(_q~W$P*U*?N7nqGs1m)<9G7{=`Z<6@Y z8yZ08xEVM=c9MLs>GTRovlTZajR8ljWM-oiK{@)OjD)(~n>|0c zy1hcO$6R@rG8>%;$}u&{NNAROlcZl*n!^A!yr%3VY59c^Zy|ibF7zaKjYVXP2r6JS x%1Cy#ZQ<8$&}xm}FR}2rG<4UyuCUvUgg6X{d#F`W%{|2QO1a?Vu^{<|{{d+*J&FJT literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbt b/TESTS/DATOS_READONLY/fb2p_foxuser.lbt new file mode 100644 index 0000000000000000000000000000000000000000..2b2ad077789085e67ab447b95f999de3105cd4c0 GIT binary patch literal 1216 zcmZQzU=U_tU~mB9Q7|$?fD!0zZs+{cqRiAH1;5mCQbPfx-`CN{CqyHpvLIDc8_e`f z(bV?zbkhh*O-#wp%c;~+k5t!D_fyx@_6Z5{^wkIs3DR)RE=$bOG1D>7)YNtf@psk; zEl5c$Nlnot%>^L)SsjZq6LUz@2UATA|5Iu|KhWcesd;6YMfrKTsd*(Zw-G~w+%M&q zn479#tDxk9YK{^w7eOOH`q`38i;DA$2&%=V0Hi;~zbFNmdVmfng~TDyV#l1!#A1+8 vT7E@oacWU~T1rxWRaHJv${B21Ffh#}gItZKKrbaJjh74NBZ$ikarguPTz*zd literal 0 HcmV?d00001 diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbx b/TESTS/DATOS_READONLY/fb2p_foxuser.lbx new file mode 100644 index 0000000000000000000000000000000000000000..94baf42f2713cc659e980403d0c5ea64e529f82c GIT binary patch literal 5216 zcmeI0%Zuei6voR@p=X@&fjdDAE?fvUdE8ESgPYu>a&N{;RZJ><`}QnGUAS=L#*G^{ zZf4`gjSE2#d?3CRA0YTv5Cjpy7rJoa|KWEkm1`%rZaXdnM?6iRRO)w5Ree>JO1k}X zXSc3nj9ohOJN(d2UCme}5}m8M1WB)g+Zu+jRu=cRyvT^3hC4Ijx+r<0ld@t=-t6FN zdR{LpPFeC+xKmU*X5gvHI({4KF{FXXq%;tfa{k2pAu z-*zA$-N0=J^05uvb|4>jaEz}hj=KIYxp|e?{q=-{)A($FeA300)OnIp2jx?6!`Wjj z2e*4rJ`FzF{vGcID4%ig(mtF(@>vJ3ThZ@N`5gFo{}?U`$r~o0cko$l&K3|RUf95C z-^1jKaO3lX^84rSB?r%iveV1N%i!bjHM-_HH7$r&Hgl~iCSG-L0@lQ94n9>{D>_}F z?{x=n+G=$^zTxII4p_>UZ#uYCHLtjlDBf~#By(L?)PQ^&ZajZgGUL;lC--1{?>O>P zB`jv*T?aSqQzOWK&%tM0@;VV9Oui2{-hWM%q=htRg#5t4Gu2M*0V+NOUt7OLQq6fn zhotyu1J9Mx#6Na$ex9d#%JB+h;*(80$xZ&J4vzO{VNOrz|IERgwk(r+3BttZ4xVIL zB8r6GQQ`{+S9y*F1i<`#2{)cU>_42VYyiwo1ezSz-dj4{ojw@DMM+e{}P@!X^chKe_p=RxLfG z@@KfQK0JR13Ep7Xg5noot+kx)QmM9w>@z*i3)dsm0xzNY5tG zg{;rGtg9;lBS$x++LTu9I8-CzWRXWhk^T1^TQxc;T$v(Ee<*Tdmch9av|F!Gk-<=8 zyjdhI=@lw69E#liPl}9=iQL0dkx2Uc-P?W=E@#{`^kx20,'...]',']') ; + + ' vpos=' + TRANSFORM(toReg_Esperado.VPOS) + ' hpos=' + TRANSFORM(toReg_Esperado.HPOS) ; + + ' height=' + TRANSFORM(toReg_Esperado.HEIGHT) + ' width=' + TRANSFORM(toReg_Esperado.WIDTH) ) + + *-- Evaluación de valores + FOR I = 1 TO AMEMBERS( laProps, toReg_Esperado, 0 ) + *-- Formateo + ADDPROPERTY( toReg_Esperado, laProps(I) ; + , '[' + oFXU_LIB.mejorarPresentacionCaracteresEspeciales( TRANSFORM( EVALUATE('toReg_Esperado.'+laProps(I)) ) ) + ']' ) + + ADDPROPERTY( toReg, laProps(I) ; + , '[' + oFXU_LIB.mejorarPresentacionCaracteresEspeciales( TRANSFORM( EVALUATE('toReg.'+laProps(I)) ) ) + ']' ) + + *-- COMPARO + THIS.assertequals( LEN(EVALUATE('toReg_Esperado.'+laProps(I))) ; + , LEN(EVALUATE('toReg.'+laProps(I))) ; + , 'Longitud de ' + laProps(I) + ' para el reg#' + TRANSFORM(tnRecno) ; + + ' UniqueID="' + toReg.UniqueID + '" ObjType=' + TRANSFORM(toReg.ObjType) ) + + THIS.assertequals( (EVALUATE('toReg_Esperado.'+laProps(I))) ; + , (EVALUATE('toReg.'+laProps(I))) ; + , 'Valor de ' + laProps(I) + ' para el reg#' + TRANSFORM(tnRecno) ; + + ' UniqueID="' + toReg.UniqueID + '" ObjType=' + TRANSFORM(toReg.ObjType) ) + ENDFOR CASE INLIST(tcTipoBinario, 'VCX', 'SCX') + *-------------------------------------------- + *-- FORMS / CLASES + *-------------------------------------------- LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado ; , lnPropsAndComments_Count, lnPropsAndComments_Count_Esperado, laPropsAndComments(1,2), laPropsAndComments_Esperado(1,2) ; , laProtected(1), lnProtected_Count, laProtected_Esperado(1), lnProtected_Count_Esperado ; @@ -229,9 +266,9 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_FRX_YValidarLosCamposDelRegistro - *-- REPORTE (FRX) + *-- REPORTES (FRX) LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario, lnRecno ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -245,6 +282,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *loCnv.l_Debug = .F. loCnv.l_ShowErrors = .F. *loCnv.l_Test = .T. + *loCnv.l_ReportSort_Enabled = .F. *-- DATOS DE ENTRADA @@ -265,8 +303,9 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SCAN ALL FOR NOT DELETED() *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado + lnRecno = RECNO() SCATTER MEMO NAME loReg_Esperado - lcUniqueID = loReg_Esperado.UNIQUEID + lcUniqueID = loReg_Esperado.UNIQUEID *-- TEST IF FILE(lc_OutputFile) @@ -279,14 +318,88 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg LOCATE FOR UNIQUEID==lcUniqueID IF NOT FOUND() - ERROR 'No se encontró el registro con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' + ERROR 'No se encontró el registro #' + TRANSFORM(RECNO('ARCHIBOBIN_IN')) + ' con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' ENDIF SCATTER MEMO NAME loReg USE IN (SELECT("TABLABIN")) THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; - , loReg_Esperado, loReg, lcTipoBinario ) + , loReg_Esperado, loReg, lcTipoBinario, lnRecno ) + ENDSCAN + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIBOBIN_IN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_LBX_YValidarLosCamposDelRegistro + *-- ETIQUETAS (LBX) + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario, lnRecno ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + *loCnv.l_ReportSort_Enabled = .F. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'fb2p_foxuser.lbx' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + SELECT 0 + USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN + + SCAN ALL FOR NOT DELETED() + *-- DATOS ESPERADOS + STORE 0 TO lnCodError_Esperado + lnRecno = RECNO() + SCATTER MEMO NAME loReg_Esperado + lcUniqueID = loReg_Esperado.UNIQUEID + + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + LOCATE FOR UNIQUEID==lcUniqueID + + IF NOT FOUND() + ERROR 'No se encontró el registro #' + TRANSFORM(RECNO('ARCHIBOBIN_IN')) + ' con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario, lnRecno ) ENDSCAN CATCH TO loEx diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3c92211..c6ead22 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -49,7 +49,7 @@ * 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior * 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente * 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html) -* 06/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes (FRX/FR2) +* 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX) * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -332,6 +332,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -358,9 +359,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_ShowErrors = .F. l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias + l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias lFileMode = .F. nClassTimeStamp = '' - n_FB2PRG_Version = 1.11 + n_FB2PRG_Version = 1.12 o_Conversor = NULL c_VC2 = 'VC2' c_SC2 = 'SC2' @@ -437,6 +439,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_FR2 ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = 'LBX' + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_LB2 ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_VC2 THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'VCX' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) @@ -453,6 +459,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'FRX' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_LB2 + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'LBX' ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + OTHERWISE ERROR 'El archivo [' + THIS.c_InputFile + '] no está soportado' @@ -464,9 +474,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.o_Conversor.l_Debug = THIS.l_Debug THIS.o_Conversor.l_Test = THIS.l_Test THIS.o_Conversor.n_FB2PRG_Version = THIS.n_FB2PRG_Version - THIS.o_Conversor.Convertir( @toModulo ) THIS.o_Conversor.l_MethodSort_Enabled = THIS.l_MethodSort_Enabled THIS.o_Conversor.l_PropSort_Enabled = THIS.l_PropSort_Enabled + THIS.o_Conversor.l_ReportSort_Enabled = THIS.l_ReportSort_Enabled + *-- + THIS.o_Conversor.Convertir( @toModulo ) THIS.o_Conversor = NULL CATCH TO toEx @@ -625,6 +637,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -641,6 +654,7 @@ DEFINE CLASS c_conversor_base AS SESSION c_LogFile = '' l_MethodSort_Enabled = .T. l_PropSort_Enabled = .T. + l_ReportSort_Enabled = .T. ******************************************************************************************************************* @@ -929,51 +943,23 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup - LOCAL lcNext_Bak + LOCAL lcNext_Bak, lcExt_X, lcExt_T lcNext_Bak = THIS.getNext_BAK( THIS.c_OutputFile ) + lcExt_X = JUSTEXT( THIS.c_OutputFile ) + lcExt_T = LEFT(lcExt_X,2) + 'T' DO CASE - CASE JUSTEXT( THIS.c_OutputFile ) = 'VCX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'VCX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'VCX') + '/VCT' ) + CASE JUSTEXT( THIS.c_OutputFile ) = lcExt_X + IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_X) ) + THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,lcExt_X) + '/' + lcExt_T ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'VCX')) TO (FORCEEXT(THIS.c_OutputFile, 'VCX' + lcNext_Bak)) + COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_X)) TO (FORCEEXT(THIS.c_OutputFile, lcExt_X + lcNext_Bak)) - IF FILE( FORCEEXT(THIS.c_OutputFile,'VCT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'VCT')) TO (FORCEEXT(THIS.c_OutputFile,'VCT' + lcNext_Bak)) + IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_T) ) + COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_T)) TO (FORCEEXT(THIS.c_OutputFile,lcExt_T + lcNext_Bak)) ENDIF ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'SCX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'SCX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'SCX') + '/SCT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'SCX')) TO (FORCEEXT(THIS.c_OutputFile,'SCX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'SCT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'SCT')) TO (FORCEEXT(THIS.c_OutputFile,'SCT' + lcNext_Bak)) - ENDIF - ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'PJX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'PJX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'PJX') + '/PJT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'PJX')) TO (FORCEEXT(THIS.c_OutputFile,'PJX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'PJT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'PJT')) TO (FORCEEXT(THIS.c_OutputFile,'PJT' + lcNext_Bak)) - ENDIF - ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'FRX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'FRX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'FRX') + '/FRT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'FRX')) TO (FORCEEXT(THIS.c_OutputFile,'FRX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'FRT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'FRT')) TO (FORCEEXT(THIS.c_OutputFile,'FRT' + lcNext_Bak)) - ENDIF - ENDIF - + OTHERWISE ERROR 'Tipo de archivo [' + JUSTFNAME(THIS.c_OutputFile) + '] no soportado para backup!' @@ -1978,7 +1964,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , 'BOTMARGIN' N(3) ; , 'TOTALTYPE' N(2) ; , 'RESETTOTAL' N(2) ; - , 'RESOID' N(2) ; + , 'RESOID' N(3) ; , 'CURPOS' L ; , 'SUPALWAYS' L ; , 'SUPOVFLOW' L ; @@ -2248,6 +2234,28 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE getTextFrom_BIN_FileStructure + TRY + LOCAL lcStructure, lnSelect + lnSelect = SELECT() + SELECT 0 + USE (THIS.c_InputFile) AGAIN SHARED ALIAS _TABLABIN + COPY STRUCTURE EXTENDED TO ( FORCEPATH( '_FRX_STRUC.DBF', ADDBS( SYS(2023) ) ) ) + **** CONTINUAR SI ES NECESARIO - SIN USO POR AHORA + + CATCH TO loEx + THROW + + FINALLY + USE IN (SELECT("_TABLABIN")) + SELECT (lnSelect) + ENDTRY + + RETURN lcStructure + ENDPROC + + ******************************************************************************************************************* PROCEDURE defined_PAM2Memo LPARAMETERS toClase @@ -4565,24 +4573,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ENDCASE - *-- ARREGLO ALGUNOS VALORES - DO CASE - CASE TRANSFORM(loReg.ObjType) = "1" && Header - loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - CASE TRANSFORM(loReg.ObjType) = "25" && Dataenvironment (footer) - IF NOT EMPTY(loReg.tag) - loReg.tag = SUBSTR( loReg.tag, 3 ) && Le quito el CR+LF que le agregué al TEXTualizar - ENDIF - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - OTHERWISE && Resto - loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - ENDCASE - ENDFOR INSERT INTO TABLABIN FROM NAME loReg @@ -4590,6 +4580,12 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) + IF THIS.c_Type = 'FRX' + COMPILE REPORT (THIS.c_OutputFile) + ELSE + COMPILE LABEL (THIS.c_OutputFile) + ENDIF + CATCH TO loEx lnCodError = loEx.ERRORNO @@ -4693,21 +4689,23 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin EXIT ENDIF - lcValue = STREXTRACT( tcLine, C_DATA_I ) + CR_LF + *-- Tomo la primera parte del valor + lcValue = STREXTRACT( tcLine, C_DATA_I ) + *-- Recorro las fracciones del valor FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) - IF C_DATA_F $ tcLine - lcValue = lcValue + STREXTRACT( tcLine, '', C_DATA_F ) + CR_LF + IF C_DATA_F $ tcLine && Fin del valor + lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) ADDPROPERTY( toReg, tcPropName, lcValue ) EXIT - ELSE - lcValue = lcValue + tcLine + CR_LF + ELSE && Otra fracción del valor + lcValue = lcValue + CR_LF + tcLine ENDIF ENDFOR - + ENDIF CATCH TO loEx @@ -4745,15 +4743,18 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin IF LOWER( LEFT(tcLine, 10) ) == 'platform="' llBloqueEncontrado = .T. - lnLastPos = 1 + lnLastPos = 1 + tcLine = ' ' + tcLine FOR X = 1 TO AMEMBERS( laProps, toReg, 0 ) - lnPos = AT( LOWER(laProps(X)) + '="', tcLine ) + laProps(X) = ' ' + laProps(X) + lnPos = AT( LOWER(laProps(X)) + '="', tcLine ) IF lnPos > 0 lnLenPropName = LEN(laProps(X)) lnPos2 = AT( '"', SUBSTR( tcLine, lnPos + lnLenPropName + 2 ) ) lcValue = SUBSTR( tcLine, lnPos + lnLenPropName + 2, lnPos2 - 1 ) + ADDPROPERTY( toReg, laProps(X), lcValue ) ENDIF ENDFOR @@ -4811,8 +4812,19 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'picture' ) CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag' ) + *-- ARREGLO ALGUNOS VALORES CAMBIADOS AL TEXTUALIZAR + DO CASE + CASE loReg.ObjType == "1" + loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.tag ) + CASE loReg.ObjType == "25" + loReg.TAG = SUBSTR(loReg.TAG,3) + OTHERWISE + loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.tag ) + ENDCASE CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag2' ) + *-- ARREGLO ALGUNOS VALORES CAMBIADOS AL TEXTUALIZAR + loReg.TAG2 = STRCONV( loReg.TAG2,14 ) CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'penred' ) @@ -4823,6 +4835,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'user' ) ENDCASE + ENDFOR ENDWITH && THIS @@ -6949,23 +6962,44 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, loRegCab, loRegDataEnv, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; + LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) STORE 0 TO lnCodError, lnLastClass STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) - STORE NULL TO loRegObj, loRegCab, loRegDataEnv + STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN_0 - GO TOP && Tiene que ser objType = 1 - SCATTER MEMO NAME loRegCab - GOTO BOTTOM && Tiene que ser objType = 25 - SCATTER MEMO NAME loRegDataEnv + *-- Header + LOCATE FOR objType = 1 + IF FOUND() + SCATTER MEMO NAME loRegCab + ENDIF - SELECT * FROM TABLABIN_0 ; - WHERE objType NOT IN (1,25) ; - ORDER BY vpos,hpos ; - INTO CURSOR TABLABIN READWRITE + *-- Dataenvironment + LOCATE FOR objType = 25 + IF FOUND() + SCATTER MEMO NAME loRegDataEnv + ENDIF + + *-- Cursor1 (¿puede haber más de 1 cursor?) + LOCATE FOR objType = 26 + IF FOUND() + SCATTER MEMO NAME loRegCur + ENDIF + + IF THIS.l_ReportSort_Enabled + *-- ORDENADO + SELECT * FROM TABLABIN_0 ; + WHERE objType NOT IN (1,25,26) ; + ORDER BY vpos,hpos ; + INTO CURSOR TABLABIN READWRITE + ELSE + *-- SIN ORDENAR (Sólo para poder comparar con el original) + SELECT * FROM TABLABIN_0 ; + WHERE objType NOT IN (1,25,26) ; + INTO CURSOR TABLABIN + ENDIF loRegObj = NULL USE IN (SELECT("TABLABIN_0")) @@ -6973,7 +7007,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg THIS.write_PROGRAM_HEADER() - *---------------------------------------------- + *-- Recorro los registros y genero el texto SELECT TABLABIN GOTO TOP THIS.write_CABECERA_REPORTE( @loRegCab ) @@ -6984,8 +7018,9 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDSCAN THIS.write_DATAENVIRONMENT_REPORTE( @loRegDataEnv ) + THIS.write_DETALLE_REPORTE( @loRegCur ) - *-- Genero el SC2 + *-- Genero el FR2 IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE