diff --git a/TESTS/ft__foxbin2prg__c_conversor_bin_a_prg.prg b/TESTS/ft__foxbin2prg__c_conversor_bin_a_prg.prg
new file mode 100644
index 0000000..c7c3759
--- /dev/null
+++ b/TESTS/ft__foxbin2prg__c_conversor_bin_a_prg.prg
@@ -0,0 +1,139 @@
+DEFINE CLASS ft__foxbin2prg__c_conversor_bin_a_prg AS FxuTestCase OF FxuTestCase.prg
+
+ #IF .F.
+ LOCAL THIS AS ft__foxbin2prg__c_conversor_bin_a_prg OF ft__foxbin2prg__c_conversor_bin_a_prg.PRG
+ #ENDIF
+
+ #DEFINE C_FB2P_VALUE_I ''
+ #DEFINE C_FB2P_VALUE_F ''
+ #DEFINE CR_LF CHR(13) + CHR(10)
+ #DEFINE C_CR CHR(13)
+ #DEFINE C_LF CHR(10)
+ #DEFINE C_TAB CHR(9)
+ #DEFINE C_PROC 'PROCEDURE'
+ #DEFINE C_ENDPROC 'ENDPROC'
+ #DEFINE C_TEXT 'TEXT'
+ #DEFINE C_ENDTEXT 'ENDTEXT'
+ #DEFINE C_IF_F '#IF .F.'
+ #DEFINE C_ENDIF '#ENDIF'
+ #DEFINE C_DEFINE_CLASS 'DEFINE CLASS'
+ #DEFINE C_ENDDEFINE_CLASS 'ENDDEFINE'
+ icObj = NULL
+
+
+ *******************************************************************************************************************************************
+ FUNCTION SETUP
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ *LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ *DOEVENTS FORCE
+ SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
+ oFXU_LIB.setup_comun()
+
+ *THIS.icObj = NEWOBJECT("c_conversor_base", "FOXBIN2PRG.PRG")
+ *loObj = THIS.icObj
+ *loObj.l_Test = .F.
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION TearDown
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ THIS.icObj = NULL
+
+ IF VARTYPE(oFXU_LIB) = "O"
+ oFXU_LIB.teardown_comun()
+ oFXU_LIB = NULL
+ ENDIF
+ RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ RELEASE oFXU_LIB
+ CLOSE PROCEDURES
+ CLEAR RESOURCES
+ SYS(1104)
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Evaluate_results
+ LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado
+
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+
+ IF PCOUNT() = 0
+ THIS.messageout( "* Support method, not a valid test." )
+ RETURN .T.
+ ENDIF
+
+ IF ISNULL(toEx)
+ *-- Visualización de valores
+ THIS.messageout( ' CodError: ' + TRANSFORM(tnCodError_Esperado) )
+
+
+ *-- Evaluación de valores
+ *THIS.assertequals( '[' + tcMemo_Esperado + ']', '[' + tcMemo_Salida + ']', "Contenido del Memo de PROCEDURE" )
+
+ ELSE
+ *-- Evaluación de errores
+ THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) )
+ THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) )
+ THIS.messageout( TRANSFORM(toEx.LINECONTENTS) )
+
+ THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' )
+ ENDIF
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_PROCEDURE_IN_LPARAMETERS_VCX_y_NoDevolverErrores
+ 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 = 'PROCEDURE_IN_LPARAMETERS.VCX'
+ lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
+ lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
+ lnCodError_Esperado = 0
+
+ oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) )
+
+ loCnv.Ejecutar( lc_OutputFile, '', '', '', '1', '0', '0', '', '', .T. )
+ *loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. )
+ THIS.Evaluate_results( loEx, lnCodError_Esperado )
+
+ CATCH TO loEx
+ THIS.Evaluate_results( loEx, lnCodError_Esperado )
+
+ FINALLY
+ USE IN (SELECT("ARCHIVOBIN_IN"))
+ USE IN (SELECT("TABLABIN"))
+ STORE NULL TO loModulo, loCnv
+ RELEASE loModulo, loCnv
+ ENDTRY
+
+ ENDFUNC
+
+
+ENDDEFINE
diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_bin.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_bin.prg
new file mode 100644
index 0000000..4855bcf
--- /dev/null
+++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_bin.prg
@@ -0,0 +1,129 @@
+DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_bin AS FxuTestCase OF FxuTestCase.prg
+
+ #IF .F.
+ LOCAL THIS AS ft__foxbin2prg__c_conversor_prg_a_bin OF ft__foxbin2prg__c_conversor_prg_a_bin.PRG
+ #ENDIF
+
+ #DEFINE CR_LF CHR(13) + CHR(10)
+ #DEFINE C_CR CHR(13)
+ #DEFINE C_LF CHR(10)
+ #DEFINE C_TAB CHR(9)
+ icObj = NULL
+
+
+ *******************************************************************************************************************************************
+ FUNCTION SETUP
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ *LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ *DOEVENTS FORCE
+ SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
+ oFXU_LIB.setup_comun()
+
+ *THIS.icObj = NEWOBJECT("c_conversor_base", "FOXBIN2PRG.PRG")
+ *loObj = THIS.icObj
+ *loObj.l_Test = .F.
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION TearDown
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ THIS.icObj = NULL
+
+ IF VARTYPE(oFXU_LIB) = "O"
+ oFXU_LIB.teardown_comun()
+ oFXU_LIB = NULL
+ ENDIF
+ RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ RELEASE oFXU_LIB
+ CLOSE PROCEDURES
+ CLEAR RESOURCES
+ SYS(1104)
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Evaluate_results
+ LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado
+
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+
+ IF PCOUNT() = 0
+ THIS.messageout( "* Support method, not a valid test." )
+ RETURN .T.
+ ENDIF
+
+ IF ISNULL(toEx)
+ *-- Visualización de valores
+ THIS.messageout( ' CodError: ' + TRANSFORM(tnCodError_Esperado) )
+
+
+ *-- Evaluación de valores
+ *THIS.assertequals( '[' + tcMemo_Esperado + ']', '[' + tcMemo_Salida + ']', "Contenido del Memo de PROCEDURE" )
+
+ ELSE
+ *-- Evaluación de errores
+ THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) )
+ THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) )
+ THIS.messageout( TRANSFORM(toEx.LINECONTENTS) )
+
+ THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' )
+ ENDIF
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaLaLibreria_PROCEDURE_IN_LPARAMETERS_VC2_y_NoDevolverErrores
+ 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 = 'PROCEDURE_IN_LPARAMETERS.VC2'
+ lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' )
+ lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' )
+ lnCodError_Esperado = 0
+
+ oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) )
+
+ loCnv.Ejecutar( lc_OutputFile, '', '', '', '1', '0', '0', '', '', .T. )
+ *loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. )
+ THIS.Evaluate_results( loEx, lnCodError_Esperado )
+
+ CATCH TO loEx
+ THIS.Evaluate_results( loEx, lnCodError_Esperado )
+
+ FINALLY
+ USE IN (SELECT("ARCHIVOBIN_IN"))
+ USE IN (SELECT("TABLABIN"))
+ STORE NULL TO loModulo, loCnv
+ RELEASE loModulo, loCnv
+ ENDTRY
+
+ ENDFUNC
+
+
+ENDDEFINE
diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment.prg b/TESTS/ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment.prg
new file mode 100644
index 0000000..1b2416d
--- /dev/null
+++ b/TESTS/ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment.prg
@@ -0,0 +1,127 @@
+DEFINE CLASS ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment AS FxuTestCase OF FxuTestCase.prg
+
+ #IF .F.
+ LOCAL THIS AS ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment OF ut__foxbin2prg__c_conversor_base__get_SeparatedLineAndComment.PRG
+ #ENDIF
+
+ #DEFINE C_FB2P_VALUE_I ''
+ #DEFINE C_FB2P_VALUE_F ''
+ #DEFINE CR_LF CHR(13) + CHR(10)
+ #DEFINE C_CR CHR(13)
+ #DEFINE C_LF CHR(10)
+ #DEFINE C_TAB CHR(9)
+ #DEFINE C_PROC 'PROCEDURE'
+ #DEFINE C_ENDPROC 'ENDPROC'
+ #DEFINE C_TEXT 'TEXT'
+ #DEFINE C_ENDTEXT 'ENDTEXT'
+ #DEFINE C_IF_F '#IF .F.'
+ #DEFINE C_ENDIF '#ENDIF'
+ #DEFINE C_DEFINE_CLASS 'DEFINE CLASS'
+ #DEFINE C_ENDDEFINE_CLASS 'ENDDEFINE'
+ icObj = NULL
+
+
+ *******************************************************************************************************************************************
+ FUNCTION SETUP
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
+ oFXU_LIB.setup_comun()
+
+ THIS.icObj = NEWOBJECT("c_conversor_base", "FOXBIN2PRG.PRG")
+ loObj = THIS.icObj
+ loObj.l_Test = .T.
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION TearDown
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ THIS.icObj = NULL
+
+ IF VARTYPE(oFXU_LIB) = "O"
+ oFXU_LIB.teardown_comun()
+ oFXU_LIB = NULL
+ ENDIF
+ RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Evaluate_results
+ LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado ;
+ , tcLinea, tcComentario, tcLinea_Esperada, tcComentario_Esperado
+
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+
+ IF PCOUNT() = 0
+ THIS.messageout( "* Support method, not a valid test." )
+ RETURN .T.
+ ENDIF
+
+ IF ISNULL(toEx)
+ *-- Algunos ajustes para mejor visualización de caracteres especiales
+ tcLinea = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLinea )
+ tcLinea_Esperada = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLinea_Esperada )
+ tcComentario = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario )
+ tcComentario_Esperado = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario_Esperado )
+
+
+ *-- Visualización de valores
+ THIS.messageout( ' Linea = [' + TRANSFORM(tcLinea) + ']' )
+ THIS.messageout( ' Comentario = [' + TRANSFORM(tcComentario) + ']' )
+
+
+ *-- Evaluación de valores
+ THIS.assertequals( tcLinea_Esperada, tcLinea, "Línea de código" )
+ THIS.assertequals( tcComentario_Esperado, tcComentario, "Comentario" )
+
+ ELSE
+ *-- Evaluación de errores
+ THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) )
+ THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) )
+ THIS.messageout( TRANSFORM(toEx.LINECONTENTS) )
+
+ THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' )
+ ENDIF
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_DevolverSeparados_LineaDeCodigo_y_Valor
+ LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
+ , lcLinea, lcLineaOriginal, lcComentario, lcLinea_Esperada, lcComentario_Esperado ;
+ , loEx AS EXCEPTION
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+ loEx = NULL
+
+ *-- DATOS DE ENTRADA
+ STORE 0 TO lnCodError
+ lcComentario = ' con algunos comentarios '
+ lcLinea = ' esta es una linea de código '
+ lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
+
+ *-- DATOS ESPERADOS
+ STORE 0 TO lnCodError_Esperado
+ lcLinea_Esperada = lcLinea
+ lcComentario_Esperado = lcComentario
+
+ *-- TEST
+ loObj.get_SeparatedLineAndComment( @lcLineaOriginal, @lcComentario )
+
+ THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @lcLinea_Esperada, @lcComentario_Esperado )
+
+ ENDFUNC
+
+
+ENDDEFINE
diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata.prg b/TESTS/ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata.prg
new file mode 100644
index 0000000..5f9d2a7
--- /dev/null
+++ b/TESTS/ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata.prg
@@ -0,0 +1,180 @@
+DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS FxuTestCase OF FxuTestCase.prg
+
+ #IF .F.
+ LOCAL THIS AS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata OF ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata.PRG
+ #ENDIF
+
+ #DEFINE CR_LF CHR(13) + CHR(10)
+ #DEFINE C_CR CHR(13)
+ #DEFINE C_LF CHR(10)
+ #DEFINE C_TAB CHR(9)
+ icObj = NULL
+
+
+ *******************************************************************************************************************************************
+ FUNCTION SETUP
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
+ oFXU_LIB.setup_comun()
+
+ THIS.icObj = NEWOBJECT("c_conversor_base", "FOXBIN2PRG.PRG")
+ loObj = THIS.icObj
+ loObj.l_Test = .T.
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION TearDown
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ THIS.icObj = NULL
+
+ IF VARTYPE(oFXU_LIB) = "O"
+ oFXU_LIB.teardown_comun()
+ oFXU_LIB = NULL
+ ENDIF
+ RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Evaluate_results
+ LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado ;
+ , tcLinea, tcComentario, tlRetorno, tcLinea_Esperada, tcComentario_Esperado, tlRetorno_Esperado
+
+ #IF .F.
+ PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
+ #ENDIF
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+
+ IF PCOUNT() = 0
+ THIS.messageout( "* Support method, not a valid test." )
+ RETURN .T.
+ ENDIF
+
+ IF ISNULL(toEx)
+ *-- Algunos ajustes para mejor visualización de caracteres especiales
+ tcLinea = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLinea )
+ tcLinea_Esperada = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLinea_Esperada )
+ tcComentario = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario )
+ tcComentario_Esperado = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario_Esperado )
+
+
+ *-- Visualización de valores
+ THIS.messageout( ' Linea = [' + TRANSFORM(tcLinea) + ']' )
+ THIS.messageout( ' Comentario = [' + TRANSFORM(tcComentario) + ']' )
+ THIS.messageout( ' tlRetorno = [' + TRANSFORM(tlRetorno) + ']' )
+
+
+ *-- Evaluación de valores
+ THIS.assertequals( tcLinea_Esperada, tcLinea, "Línea de código" )
+ THIS.assertequals( tcComentario_Esperado, tcComentario, "Comentario" )
+ THIS.assertequals( tlRetorno_Esperado, tlRetorno, "Retorno" )
+
+ ELSE
+ *-- Evaluación de errores
+ THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) )
+ THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) )
+ THIS.messageout( TRANSFORM(toEx.LINECONTENTS) )
+
+ THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' )
+ ENDIF
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_DevolverSeparados_LineaDeCodigo_y_Valor_y_Retornar_False
+ LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
+ , lcLinea, lcLineaOriginal, lcComentario, lcLinea_Esperada, lcComentario_Esperado, llRetorno, llRetorno_Esperado ;
+ , loEx AS EXCEPTION
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+ loEx = NULL
+
+ *-- DATOS DE ENTRADA
+ STORE 0 TO lnCodError
+ lcComentario = ' con algunos comentarios '
+ lcLinea = ' esta es una linea de código '
+ lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
+
+ *-- DATOS ESPERADOS
+ STORE 0 TO lnCodError_Esperado
+ lcLinea_Esperada = lcLinea
+ lcComentario_Esperado = lcComentario
+ llRetorno_Esperado = .F.
+
+ *-- TEST
+ llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
+
+ THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_DevolverSeparados_LineaDeTAG_y_Valor_y_Retornar_False
+ LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
+ , lcLinea, lcLineaOriginal, lcComentario, lcLinea_Esperada, lcComentario_Esperado, llRetorno, llRetorno_Esperado ;
+ , loEx AS EXCEPTION
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+ loEx = NULL
+
+ *-- DATOS DE ENTRADA
+ STORE 0 TO lnCodError
+ lcComentario = ' con algunos comentarios '
+ lcLinea = ' * esta es una linea de código '
+ lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
+ lcLineaOriginal = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' )
+
+ *-- DATOS ESPERADOS
+ STORE 0 TO lnCodError_Esperado
+ lcLinea_Esperada = ALLTRIM( lcLinea, 0, CHR(9), ' ' )
+ lcComentario_Esperado = lcLinea_Esperada
+ llRetorno_Esperado = .F.
+
+ *-- TEST
+ llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
+
+ THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLineaOriginal, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_DevolverSeparados_LineaDeCodigo_y_Valor_y_Retornar_True
+ LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
+ , lcLinea, lcLineaOriginal, lcComentario, lcLinea_Esperada, lcComentario_Esperado, llRetorno, llRetorno_Esperado ;
+ , loEx AS EXCEPTION
+ LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
+ loObj = THIS.icObj
+ loEx = NULL
+
+ *-- DATOS DE ENTRADA
+ STORE 0 TO lnCodError
+ lcComentario = ' con algunos comentarios '
+ lcLinea = ' * esta es una linea de código '
+ lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
+ lcLineaOriginal = LTRIM(lcLineaOriginal, 0, CHR(9), ' ')
+
+ *-- DATOS ESPERADOS
+ STORE 0 TO lnCodError_Esperado
+ lcLinea_Esperada = lcLinea
+ lcComentario_Esperado = LTRIM(lcComentario)
+ llRetorno_Esperado = .T.
+
+ *-- TEST
+ llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
+
+ THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
+
+ ENDFUNC
+
+
+ENDDEFINE
diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg
index e8ae7fc..7dc304e 100644
--- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg
+++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg
@@ -87,7 +87,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
THIS.messageout( 'l_Recompile: ' + TRANSFORM(loFB2P_Esperado.l_Recompile) )
THIS.messageout( 'l_NoTimestamps: ' + TRANSFORM(loFB2P_Esperado.l_NoTimestamps) )
THIS.messageout( 'l_ClearUniqueID: ' + TRANSFORM(loFB2P_Esperado.l_ClearUniqueID) )
- THIS.messageout( 'l_Debug: ' + TRANSFORM(loFB2P_Esperado.l_Debug) )
+ THIS.messageout( 'n_Debug: ' + TRANSFORM(loFB2P_Esperado.n_Debug) )
THIS.messageout( 'n_ExtraBackupLevels: ' + TRANSFORM(loFB2P_Esperado.n_ExtraBackupLevels) )
THIS.messageout( 'l_OptimizeByFilestamp: ' + TRANSFORM(loFB2P_Esperado.l_OptimizeByFilestamp) )
@@ -105,7 +105,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
THIS.assertequals( TRANSFORM(loFB2P_Esperado.l_Recompile), TRANSFORM(loFB2P.l_Recompile), '> l_Recompile' )
THIS.assertequals( TRANSFORM(loFB2P_Esperado.l_NoTimestamps), TRANSFORM(loFB2P.l_NoTimestamps), '> l_NoTimestamps' )
THIS.assertequals( TRANSFORM(loFB2P_Esperado.l_ClearUniqueID), TRANSFORM(loFB2P.l_ClearUniqueID), '> l_ClearUniqueID' )
- THIS.assertequals( TRANSFORM(loFB2P_Esperado.l_Debug), TRANSFORM(loFB2P.l_Debug), '> l_Debug' )
+ THIS.assertequals( TRANSFORM(loFB2P_Esperado.n_Debug), TRANSFORM(loFB2P.n_Debug), '> n_Debug' )
THIS.assertequals( TRANSFORM(loFB2P_Esperado.n_ExtraBackupLevels), TRANSFORM(loFB2P.n_ExtraBackupLevels), '> n_ExtraBackupLevels' )
THIS.assertequals( TRANSFORM(loFB2P_Esperado.l_OptimizeByFilestamp), TRANSFORM(loFB2P.l_OptimizeByFilestamp), '> l_OptimizeByFilestamp' )
@@ -173,7 +173,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. )
ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .T. )
ADDPROPERTY( loFB2P_Esperado, 'l_ClearUniqueID', .T. )
- ADDPROPERTY( loFB2P_Esperado, 'l_Debug', .F. )
+ ADDPROPERTY( loFB2P_Esperado, 'n_Debug', 0 )
ADDPROPERTY( loFB2P_Esperado, 'n_ExtraBackupLevels', 1 )
ADDPROPERTY( loFB2P_Esperado, 'l_OptimizeByFilestamp', .F. )
*STRTOFILE('', 'TESTS\DATOS_TEST\foxbin2prg.cfg')
@@ -226,7 +226,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. )
ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .F. )
ADDPROPERTY( loFB2P_Esperado, 'l_ClearUniqueID', .F. )
- ADDPROPERTY( loFB2P_Esperado, 'l_Debug', .F. )
+ ADDPROPERTY( loFB2P_Esperado, 'n_Debug', 0 )
ADDPROPERTY( loFB2P_Esperado, 'n_ExtraBackupLevels', 0 )
ADDPROPERTY( loFB2P_Esperado, 'l_OptimizeByFilestamp', .F. )
*--
@@ -296,7 +296,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. )
ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .T. )
ADDPROPERTY( loFB2P_Esperado, 'l_ClearUniqueID', .T. )
- ADDPROPERTY( loFB2P_Esperado, 'l_Debug', .T. )
+ ADDPROPERTY( loFB2P_Esperado, 'n_Debug', 1 )
ADDPROPERTY( loFB2P_Esperado, 'n_ExtraBackupLevels', 1 )
ADDPROPERTY( loFB2P_Esperado, 'l_OptimizeByFilestamp', .T. )
*--
@@ -661,13 +661,13 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
- lcSeteo = 'l_Debug'
- leValorEsperado = .F.
+ lcSeteo = 'n_Debug'
+ leValorEsperado = 0
*-- TEST
loFB2P.EvaluarConfiguracion()
- leValor = loFB2P.l_Debug
+ leValor = loFB2P.n_Debug
CATCH TO loEx
@@ -699,13 +699,13 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
- lcSeteo = 'l_Debug'
- leValorEsperado = .F.
+ lcSeteo = 'n_Debug'
+ leValorEsperado = 0
*-- TEST
loFB2P.EvaluarConfiguracion()
- leValor = loFB2P.l_Debug
+ leValor = loFB2P.n_Debug
CATCH TO loEx
@@ -737,13 +737,13 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
- lcSeteo = 'l_Debug'
- leValorEsperado = .T.
+ lcSeteo = 'n_Debug'
+ leValorEsperado = 1
*-- TEST
loFB2P.EvaluarConfiguracion()
- leValor = loFB2P.l_Debug
+ leValor = loFB2P.n_Debug
CATCH TO loEx
diff --git a/foxbin2prg.exe b/foxbin2prg.exe
index cd9127a..c5c2cf8 100644
Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index 1cc567e..1d47dd7 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -5113,8 +5113,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
ln_AT_Cmt = AT( '&'+'&', tcLine)
IF ln_AT_Cmt > 0
- *tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
- tcComment = SUBSTR( tcLine, ln_AT_Cmt + 2 )
+ tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios de la derecha de la línea de código
ENDIF
@@ -5340,11 +5339,10 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
* NOTA: Recordar que esta función suele usarse junto a Set_Line(), que quita TABS y espacios a la izquierda.
*---------------------------------------------------------------------------------------------------
LPARAMETERS tcLine, tcComment
- LOCAL lllineIsOnlyCommentAndNoMetadata, ln_AT_Cmt, lcStr
+ LOCAL lllineIsOnlyCommentAndNoMetadata, ln_AT_Cmt
WITH THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG'
.get_SeparatedLineAndComment( @tcLine, @tcComment )
- *lcStr = LTRIM( tcLine, 0, CHR(9), ' ' )
DO CASE
CASE LEFT(tcLine,2) == '*<'
@@ -5356,7 +5354,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
ENDCASE
ENDWITH
- RELEASE tcLine, tcComment, ln_AT_Cmt, lcStr
+ RELEASE tcLine, tcComment, ln_AT_Cmt
RETURN lllineIsOnlyCommentAndNoMetadata
ENDPROC
@@ -15333,8 +15331,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM
ln_AT_Cmt = AT( '&'+'&', tcLine)
IF ln_AT_Cmt > 0
- *tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
- tcComment = SUBSTR( tcLine, ln_AT_Cmt + 2 )
+ tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios de la derecha de la línea de código
ENDIF
@@ -15421,8 +15418,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION
ln_AT_Cmt = AT( '&'+'&', tcLine)
IF ln_AT_Cmt > 0
- *tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
- tcComment = SUBSTR( tcLine, ln_AT_Cmt + 2 )
+ tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) )
tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios de la derecha de la línea de código
ENDIF