Bug Fix mnx: Cuando se usa '&&' en los textos de las opciones, se corrompe el binario del menú al regenerarlo (Walter Nichols)

This commit is contained in:
fdbozzo
2015-09-01 16:46:39 +02:00
parent c79ddb7cb4
commit 842dd4638f
8 changed files with 406 additions and 77 deletions

View File

@@ -45,7 +45,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS
*******************************************************************************************************************************************
FUNCTION Evaluate_results
LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado ;
, tcLinea, tcComentario, tlRetorno, tcLinea_Esperada, tcComentario_Esperado, tlRetorno_Esperado
, tcLinea, tcComentario, tlRetorno, tcLinea_Esperada, tcComentario_Esperado, tlRetorno_Esperado, tcLineaOriginal
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
@@ -64,12 +64,14 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS
tcLinea_Esperada = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLinea_Esperada )
tcComentario = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario )
tcComentario_Esperado = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcComentario_Esperado )
tcLineaOriginal = oFXU_LIB.mejorarPresentacionCaracteresEspeciales( tcLineaOriginal )
*-- Visualizaci<63>n de valores
THIS.messageout( ' L<>nea original = [' + tcLineaOriginal + ']' )
THIS.messageout( ' Linea = [' + TRANSFORM(tcLinea) + ']' )
THIS.messageout( ' Comentario = [' + TRANSFORM(tcComentario) + ']' )
THIS.messageout( ' tlRetorno = [' + TRANSFORM(tlRetorno) + ']' )
THIS.messageout( ' OnlyCommentAndNoMetadata? = [' + TRANSFORM(tlRetorno) + ']' )
*-- Evaluaci<63>n de valores
@@ -99,20 +101,22 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcComentario = ' ' + CHR(9) + CHR(9) + 'con algunos comentarios '
lcLinea = ' ' + CHR(9) + CHR(9) + ' esta es una linea de c<>digo ' + CHR(9) + ' '
lcComentario = ' ' + CHR(9) + CHR(9) + 'con algunos comentarios '
lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
lcLineaOriginal = LTRIM(lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
lcLinea_Esperada = lcLinea
lcLinea_Esperada = ALLTRIM(lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = LTRIM(lcComentario)
llRetorno_Esperado = .F.
lcLinea = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- TEST
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLinea, @lcComentario )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado, @lcLineaOriginal )
ENDFUNC
@@ -128,27 +132,29 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcLinea = ' *<TAG> esta es una linea de c<>digo ' && Empieza con "*<", por lo que es metadata la l<>nea
lcComentario = ' con algunos comentarios '
lcLinea = ' *<TAG> esta es una linea de c<>digo '
lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
lcLineaOriginal = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' )
lcLineaOriginal = LTRIM(lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
lcLinea_Esperada = ALLTRIM( lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = lcLinea_Esperada
*lcLinea_Esperada = LTRIM(lcLineaOriginal, 0, CHR(9), ' ' ) &&ALLTRIM( lcLinea, 0, CHR(9), ' ' )
lcLinea_Esperada = ALLTRIM(lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = lcLinea_Esperada && Se espera la l<>nea, porque es todo comentario
llRetorno_Esperado = .F.
lcLinea = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- TEST
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLinea, @lcComentario )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLineaOriginal, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado, @lcLineaOriginal )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_DevolverSeparados_LineaDeCodigo_y_Valor_y_Retornar_True
FUNCTION Deberia_DevolverLaLineaDeCodigoComoComentario_y_Retornar_True
LOCAL lnCodError, lcMenError, lnCodError_Esperado ;
, lcLinea, lcLineaOriginal, lcComentario, lcLinea_Esperada, lcComentario_Esperado, llRetorno, llRetorno_Esperado ;
, loEx AS EXCEPTION
@@ -158,21 +164,84 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__lineIsOnlyCommentAndNoMetadata AS
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcLinea = ' * esta es una linea de c<>digo ' && Empieza con "*", por lo que es solo comentario la l<>nea
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
lcLinea_Esperada = ALLTRIM(lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = LTRIM(lcComentario)
llRetorno_Esperado = .T.
lcLinea = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- TEST
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLineaOriginal, @lcComentario )
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLinea, @lcComentario )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado )
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado, @lcLineaOriginal )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_DevolverSeparados_LineaDeCodigoQueIncluye_DobleAmpersand_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
lcLinea = [DEFINE BAR 2 OF Opci<63>nAsub PROMPT ""+var+'aa'+]+'["bb]'+[+"Opci<63>n A&]+[&2"] && No debe confundir el '&&' del c<>digo con comentarios
lcComentario = [ Comentario Opci<63>n A-2]
lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
lcLineaOriginal = LTRIM(lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
lcLinea_Esperada = ALLTRIM(lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = LTRIM(lcComentario)
llRetorno_Esperado = .F.
lcLinea = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- TEST
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLinea, @lcComentario, .F., .T. ) && Activando Deep Comment Analysis
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado, @lcLineaOriginal )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_DevolverSeparados_LineaDeCodigoQueIncluye_DobleAmpersand_y_ComentarioConComillas_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
lcLinea = [DEFINE BAR 2 OF Opci<63>nAsub PROMPT ""+var+'aa'+]+'["bb]'+[+"Opci<63>n A&]+[&2"] && No debe confundir el '&&' del c<>digo con comentarios
lcComentario = [ Comentario's Opci<63>n A-2]
lcLineaOriginal = lcLinea + '&' + '&' + lcComentario
lcLineaOriginal = LTRIM(lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- DATOS ESPERADOS
STORE 0 TO lnCodError_Esperado
lcLinea_Esperada = ALLTRIM(lcLinea, 0, CHR(9), ' ' )
lcComentario_Esperado = LTRIM(lcComentario)
llRetorno_Esperado = .F.
lcLinea = LTRIM( lcLineaOriginal, 0, CHR(9), ' ' ) && Este tratamiento lo hace set_Line normalmente
*-- TEST
llRetorno = loObj.lineIsOnlyCommentAndNoMetadata( @lcLinea, @lcComentario, .F., .T. ) && Activando Deep Comment Analysis
THIS.Evaluate_results( loEx, lnCodError_Esperado, @lcLinea, @lcComentario, @llRetorno, @lcLinea_Esperada, @lcComentario_Esperado, @llRetorno_Esperado, @lcLineaOriginal )
ENDFUNC