diff --git a/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp b/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp
new file mode 100644
index 0000000..9db1f07
Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp differ
diff --git a/TESTS/DATOS_READONLY/bmps/TreeView.bmp b/TESTS/DATOS_READONLY/bmps/TreeView.bmp
new file mode 100644
index 0000000..80e969a
Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/TreeView.bmp differ
diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.frt b/TESTS/DATOS_READONLY/fb2p_foxuser.frt
new file mode 100644
index 0000000..34e1caa
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.frt differ
diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.frx b/TESTS/DATOS_READONLY/fb2p_foxuser.frx
new file mode 100644
index 0000000..60a4c26
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.frx differ
diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbt b/TESTS/DATOS_READONLY/fb2p_foxuser.lbt
new file mode 100644
index 0000000..2b2ad07
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.lbt differ
diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbx b/TESTS/DATOS_READONLY/fb2p_foxuser.lbx
new file mode 100644
index 0000000..94baf42
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.lbx differ
diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg
index c27a768..ac937ce 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, tnRecno
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
@@ -66,184 +67,186 @@ 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"
+ DO CASE
+ CASE INLIST(tcTipoBinario, 'FRX', 'LBX')
+ *--------------------------------------------
+ *-- REPORTES
+ *--------------------------------------------
+ LOCAL I, laProps(1)
- *-- Algunos ajustes para mejor visualización de caracteres especiales
- *tcPropValue = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcPropValue )
- loObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG")
+ *-- Visualización de valores
+ THIS.messageout( LOWER(PROGRAM(PROGRAM(-1)-1)) )
- *-- 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( 'Recno#' + TRANSFORM(tnRecno) + ' UniqueID="' + toReg_Esperado.UniqueID + '" ObjType=' + TRANSFORM(toReg_Esperado.ObjType) ;
+ + ' ObjCode=' + TRANSFORM(toReg_Esperado.ObjCode) + ' Expr=[' + LEFT(toReg_Esperado.Expr,20) ;
+ + IIF(LEN(toReg_Esperado.Expr)>20,'...]',']') ;
+ + ' vpos=' + TRANSFORM(toReg_Esperado.VPOS) + ' hpos=' + TRANSFORM(toReg_Esperado.HPOS) ;
+ + ' height=' + TRANSFORM(toReg_Esperado.HEIGHT) + ' width=' + TRANSFORM(toReg_Esperado.WIDTH) )
- *-- Properties
- loObj.get_PropsAndValuesFrom_PROPERTIES( toReg.PROPERTIES, 0, @laPropsAndValues, @lnPropsAndValues_Count, '' )
- loObj.get_PropsAndValuesFrom_PROPERTIES( toReg_Esperado.PROPERTIES, 0, @laPropsAndValues_Esperado, @lnPropsAndValues_Count_Esperado, '' )
+ *-- 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)) ) ) + ']' )
- *-- Protected
- loObj.get_PropsFrom_PROTECTED( toReg.PROTECTED, .F., @laProtected, @lnProtected_Count, '' )
- loObj.get_PropsFrom_PROTECTED( toReg_Esperado.PROTECTED, .F., @laProtected_Esperado, @lnProtected_Count_Esperado, '' )
+ ADDPROPERTY( toReg, laProps(I) ;
+ , '[' + oFXU_LIB.mejorarPresentacionCaracteresEspeciales( TRANSFORM( EVALUATE('toReg.'+laProps(I)) ) ) + ']' )
- *-- 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 )
+ *-- 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) )
- lcExtraData = tcParent + '.' + tcObjName + ' (' + tcClass + ')'
+ 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
- *-- Visualización de valores
- THIS.messageout( LOWER(PROGRAM(PROGRAM(-1)-1)) )
+ 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 ;
+ , 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 +264,158 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
ENDFUNC
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_FRX_YValidarLosCamposDelRegistro
+ *-- REPORTES (FRX)
+ 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.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
+ 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
+ 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
+ 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 +436,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 +446,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 +454,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 +486,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
FINALLY
USE IN (SELECT("ARCHIBOBIN_IN"))
+ USE IN (SELECT("TABLABIN"))
ENDTRY
ENDFUNC
@@ -318,7 +495,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 +518,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 +528,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 +536,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 +568,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
FINALLY
USE IN (SELECT("ARCHIBOBIN_IN"))
+ USE IN (SELECT("TABLABIN"))
ENDTRY
ENDFUNC
@@ -374,7 +577,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 +600,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 +610,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 +618,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 +650,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
FINALLY
USE IN (SELECT("ARCHIBOBIN_IN"))
+ USE IN (SELECT("TABLABIN"))
ENDTRY
ENDFUNC
@@ -430,7 +659,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 +682,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 +692,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 +700,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 77bb2d0..c6ead22 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -49,6 +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)
+* 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX)
*
*---------------------------------------------------------------------------------------------------
* TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)
@@ -331,6 +332,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -357,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'
@@ -436,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' )
@@ -452,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'
@@ -463,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
@@ -624,6 +637,7 @@ DEFINE CLASS c_conversor_base AS SESSION
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ []
@@ -640,6 +654,7 @@ DEFINE CLASS c_conversor_base AS SESSION
c_LogFile = ''
l_MethodSort_Enabled = .T.
l_PropSort_Enabled = .T.
+ l_ReportSort_Enabled = .T.
*******************************************************************************************************************
@@ -928,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!'
@@ -1977,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 ;
@@ -2247,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
@@ -4479,7 +4488,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 ;
@@ -4527,15 +4537,55 @@ 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
+
+ ENDFOR
+
INSERT INTO TABLABIN FROM NAME loReg
ENDFOR
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
@@ -4616,6 +4666,114 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
ENDPROC
+ *******************************************************************************************************************
+ PROCEDURE analizarBloque_CDATA_inline
+ *------------------------------------------------------
+ *-- Analiza el bloque
+ *------------------------------------------------------
+ LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName
+
+ #IF .F.
+ LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ LOCAL llBloqueEncontrado, lcValue, loEx as Exception
+
+ IF LEFT(tcLine, 1 + LEN(tcPropName) + 1 + 9) == '<' + tcPropName + '>' + C_DATA_I
+ llBloqueEncontrado = .T.
+
+ IF C_DATA_F $ tcLine
+ lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F )
+ ADDPROPERTY( toReg, tcPropName, lcValue )
+ EXIT
+ ENDIF
+
+ *-- 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 && Fin del valor
+ lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F )
+ ADDPROPERTY( toReg, tcPropName, lcValue )
+ EXIT
+
+ ELSE && Otra fracción del valor
+ lcValue = lcValue + CR_LF + tcLine
+ 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
+
+ THROW
+
+ ENDTRY
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
+ *******************************************************************************************************************
+ PROCEDURE analizarBloque_platform
+ *------------------------------------------------------
+ *-- Analiza el bloque
+ *------------------------------------------------------
+ LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg
+
+ #IF .F.
+ LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
+ #ENDIF
+
+ TRY
+ LOCAL llBloqueEncontrado, X, lnPos, lnPos2, lcValue, lnLenPropName, laProps(1) ;
+ , lcComment, lcMetadatos, luValor ;
+ , laPropsAndValues(1,2), lnPropsAndValues_Count
+
+ IF LOWER( LEFT(tcLine, 10) ) == 'platform="'
+ llBloqueEncontrado = .T.
+ lnLastPos = 1
+ tcLine = ' ' + tcLine
+
+ FOR X = 1 TO AMEMBERS( laProps, toReg, 0 )
+ 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
+
+ ENDIF
+
+ CATCH TO loEx
+ IF THIS.l_Debug AND _VFP.STARTMODE = 0
+ SET STEP ON
+ ENDIF
+
+ THROW
+
+ ENDTRY
+
+ RETURN llBloqueEncontrado
+ ENDPROC
+
+
*******************************************************************************************************************
PROCEDURE analizarBloque_Reportes
*------------------------------------------------------
@@ -4649,26 +4807,35 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
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' )
+ *-- 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' )
- *CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'style' )
+ 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, 'expr' )
CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'user' )
ENDCASE
+
ENDFOR
ENDWITH && THIS
@@ -4689,90 +4856,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
ENDPROC
- *******************************************************************************************************************
- PROCEDURE analizarBloque_platform
- *------------------------------------------------------
- *-- Analiza el bloque
- *------------------------------------------------------
- LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg
-
- #IF .F.
- LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
- #ENDIF
-
- TRY
- LOCAL llBloqueEncontrado, X, lnPos, lnPos2, lcValue, lnLenPropName, laProps(1) ;
- , lcComment, lcMetadatos, luValor ;
- , laPropsAndValues(1,2), lnPropsAndValues_Count
-
- IF LOWER( LEFT(tcLine, 10) ) == 'platform="'
- llBloqueEncontrado = .T.
- lnLastPos = 1
-
- FOR X = 1 TO AMEMBERS( laProps, toReg, 0 )
- 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
-
- ENDIF
-
- CATCH TO loEx
- IF THIS.l_Debug AND _VFP.STARTMODE = 0
- SET STEP ON
- ENDIF
-
- THROW
-
- ENDTRY
-
- RETURN llBloqueEncontrado
- ENDPROC
-
-
- *******************************************************************************************************************
- PROCEDURE analizarBloque_CDATA_inline
- *------------------------------------------------------
- *-- Analiza el bloque
- *------------------------------------------------------
- LPARAMETERS toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName
-
- #IF .F.
- LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG'
- #ENDIF
-
- TRY
- LOCAL llBloqueEncontrado, lcValue, loEx as Exception
-
- IF LEFT(tcLine, 9) == '<' + tcPropName + '>'
- llBloqueEncontrado = .T.
-
- lcValue = STREXTRACT( tcLine, C_DATA_I, C_DATA_F )
- ADDPROPERTY( toReg, tcPropName, lcValue )
- 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
-
- THROW
-
- ENDTRY
-
- RETURN llBloqueEncontrado
- ENDPROC
-
-
ENDDEFINE
@@ -5812,7 +5895,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
@@ -5925,7 +6008,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
@@ -6038,7 +6121,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
@@ -6879,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"))
@@ -6903,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 )
@@ -6914,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