Changeset: 650 - Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten más niveles (Lutz Scheffler)

This commit is contained in:
fdbozzo
2015-03-01 17:50:10 +01:00
2 changed files with 132 additions and 21 deletions

View File

@@ -11,9 +11,11 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
#DEFINE C_IF_F '#IF'
#DEFINE C_ENDIF '#ENDIF'
icObj = NULL
icFB = NULL
*******************************************************************************************************************************************
FUNCTION Setup
THIS.icFB = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
THIS.icObj = NEWOBJECT("c_conversor_prg_a_bin", "FOXBIN2PRG.PRG")
ENDFUNC
@@ -22,6 +24,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
*******************************************************************************************************************************************
FUNCTION TearDown
THIS.icObj = NULL
THIS.icFB = NULL
ENDFUNC
@@ -85,7 +88,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
laLineasExclusion_Esperadas( 3) = .T.
laLineasExclusion_Esperadas( 4) = .T.
laLineasExclusion_Esperadas( 5) = .T.
laLineasExclusion_Esperadas( 7) = .T.
laLineasExclusion_Esperadas( 6) = .T.
laLineasExclusion_Esperadas( 8) = .T.
laLineasExclusion_Esperadas( 9) = .T.
laLineasExclusion_Esperadas(10) = .T.
@@ -117,6 +120,56 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_externo_CuandoOtros_IF_ENDIF_internos_sonEvaluados
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ;
, laLineasExclusion(14), laLineasExclusion_Esperadas(14)
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
loObj = THIS.icObj
*-- Input and expected params
STORE '' TO lcMethod
laExpected_Pos(1,1) = 3
laExpected_Pos(1,2) = 13
laLineasExclusion_Esperadas( 3) = .T.
laLineasExclusion_Esperadas( 4) = .T.
laLineasExclusion_Esperadas( 5) = .T.
laLineasExclusion_Esperadas( 7) = .T.
laLineasExclusion_Esperadas( 8) = .T.
laLineasExclusion_Esperadas( 9) = .T.
laLineasExclusion_Esperadas(10) = .T.
laLineasExclusion_Esperadas(11) = .T.
laLineasExclusion_Esperadas(12) = .T.
laLineasExclusion_Esperadas(13) = .T.
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2
<<C_PROC>> myMethod_B
*-- Code Block
<<C_IF_F>>
<<C_IF_F>>
<<C_TEXT>>
value ;
<<C_ENDIF>>
*-- Code Block
<<C_IF_F>>
value ,
<<C_ENDTEXT>>
<<C_ENDIF>>
<<C_ENDIF>>
<<C_ENDPROC>>
ENDTEXT
lnLineas = ALINES( laLineas, lcMethod )
*-- Test
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
*-- Evaluaci<63>n de resultados
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_Externo_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) ;
@@ -208,6 +261,59 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoConteniendo_TEXT_esEvaluado
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(3,2) ;
, laLineasExclusion(14), laLineasExclusion_Esperadas(14)
LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG"
loObj = THIS.icObj
*-- Input and expected params
STORE '' TO lcMethod
laExpected_Pos(1,1) = 3
laExpected_Pos(1,2) = 5
laExpected_Pos(2,1) = 7
laExpected_Pos(2,2) = 9
laExpected_Pos(3,1) = 11
laExpected_Pos(3,2) = 13
laLineasExclusion_Esperadas( 3) = .T.
laLineasExclusion_Esperadas( 4) = .T.
laLineasExclusion_Esperadas( 5) = .T.
laLineasExclusion_Esperadas( 7) = .T.
laLineasExclusion_Esperadas( 8) = .T.
laLineasExclusion_Esperadas( 9) = .T.
laLineasExclusion_Esperadas(11) = .T.
laLineasExclusion_Esperadas(12) = .T.
laLineasExclusion_Esperadas(13) = .T.
TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2
<<C_PROC>> myMethod_B
*-- Code Block
<<C_TEXT>>
<<C_TEXT>>
<<C_ENDTEXT>>
*-- Code Block
<<C_TEXT>>
<<C_TEXT>> ;
<<C_ENDTEXT>>
*-- Code Block
<<C_TEXT>>
<<C_TEXT>> ,
<<C_ENDTEXT>>
<<C_ENDPROC>>
ENDTEXT
lnLineas = ALINES( laLineas, lcMethod )
*-- Test
loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laLineasExclusion, @lnPos_Count, @laPos )
*-- Evaluaci<63>n de resultados
THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count, @laLineasExclusion_Esperadas, @laLineasExclusion )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_NoEncontrarBloque_TEXT_ENDTEXT_CuandoEvaluaUnaLineaQueComienzaConUnCampoLlamado_Text_YLineaAnteriorTerminaEn_PuntoYComa
LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2)

View File

@@ -132,6 +132,7 @@
* 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detecci<63>n err<72>nea de estructuras PROCEDURE/ENDPROC cuando se usan como par<61>metros en LPARAMETERS (Ryan Harris)
* 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detecci<63>n err<72>nea de tabla inv<6E>lida cuando el tama<6D>o es inferior a 328 bytes. L<>mite m<>nimo cambiado a 65 bytes.
* 20/01/2015 FDBOZZO v1.19.42 Mejora: Validaci<63>n de versi<73>n de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg
* 25/02/2015 FDBOZZO v1.19.42 Bug Fix scx/vcx: Procesar solo un nivel de text/endtext, ya que no se admiten m<>s niveles (Lutz Scheffler)
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -192,6 +193,7 @@
* 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan m<>ltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40)
* 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40)
* 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detecci<63>n err<72>nea de estructuras PROCEDURE/ENDPROC cuando se usan como par<61>metros LPARAMETERS en l<>nea aparte (Arreglado en v1.19.41)
* 25/02/2015 Lutz Scheffler Reporte de Bug scx/vcx v1.19.41: Procesar solo un nivel de text/endtext, ya que no se admiten m<>s niveles (Arreglado en v1.19.42)
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
*
*---------------------------------------------------------------------------------------------------
@@ -1925,7 +1927,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
*ENDIF
IF VERSION(5) < 900 OR INT( VAL( SUBSTR( VERSION(4), RAT('.', VERSION(4)) + 1 ) ) ) < 3504
ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC
ERROR C_INCORRECT_VFP9_VERSION__MISSING_SP1_LOC
ENDIF
*-- Determino el tipo de InputFile (Archivo o Directorio)
@@ -2501,7 +2503,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
*-- VERIFICO SI HAY ARCHIVO DE CONFIGURACI<43>N SECUNDARIO
.EvaluarConfiguracion()
IF .n_ForceWriteIfReadOnly = 1 THEN
lcForceAttribs = lcForceAttribs + '-R'
ENDIF
@@ -4075,7 +4077,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
IF tnIniFin = 1
*-- TOKENS DE INICIO
IF UPPER( LEFT( lcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1)
IF UPPER( LEFT( lcLine, ta_ID_Bloques(X,3) ) ) == ta_ID_Bloques(X,1)
*-- Evaluar casos especiales
lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) )
@@ -4096,7 +4098,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
ENDIF
ELSE
*-- TOKENS DE FIN
IF LEFT( UPPER( lcLine ), tnLen_IDFinBQ ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
IF LEFT( UPPER( lcLine ), ta_ID_Bloques(X,4) ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc)
*-- Evaluar casos especiales
lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) )
@@ -4284,7 +4286,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tnTimeStamp (v! IN ) Timestamp en formato num<75>rico
*---------------------------------------------------------------------------------------------------
LPARAMETERS tnTimeStamp
LPARAMETERS tnTimestamp
*-- CONVIERTE UN DATO TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. EN TIPO DATETIME
TRY
LOCAL lcTimeStamp,lnYear,lnMonth,lnDay,lnHour,lnMinutes,lnSeconds,lcTime,lnHour,ltTimeStamp,lnResto ;
@@ -4292,7 +4294,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
lcTimeStamp_Ret = ''
IF EMPTY(tnTimeStamp)
IF EMPTY(tnTimestamp)
IF THIS.lFileMode
IF ADIR(laDirInfo,THIS.c_InputFile)=0
EXIT
@@ -4310,15 +4312,15 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
EXIT
ENDIF
tnTimeStamp = THIS.n_ClassTimeStamp
tnTimestamp = THIS.n_ClassTimeStamp
IF EMPTY(tnTimeStamp)
IF EMPTY(tnTimestamp)
EXIT
ENDIF
ENDIF
*-- YYYY YYYM MMMD DDDD HHHH HMMM MMMS SSSS
lnResto = tnTimeStamp
lnResto = tnTimestamp
lnYear = INT( lnResto / 2**25 + 1980)
lnResto = lnResto % 2**25
lnMonth = INT( lnResto / 2**21 )
@@ -4524,15 +4526,19 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
loLang = _SCREEN.o_FoxBin2Prg_Lang
DIMENSION taLineasExclusion(tnCodeLines), taBloquesExclusion(1,2)
STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ
STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X
IF tnCodeLines > 1
IF EMPTY(ta_ID_Bloques)
DIMENSION ta_ID_Bloques(2,2)
DIMENSION ta_ID_Bloques(2,4)
ta_ID_Bloques(1,1) = '#IF'
ta_ID_Bloques(1,2) = '#ENDI'
ta_ID_Bloques(1,3) = LEN( ta_ID_Bloques(1,1) )
ta_ID_Bloques(1,4) = LEN( ta_ID_Bloques(1,2) )
ta_ID_Bloques(2,1) = 'TEXT'
ta_ID_Bloques(2,2) = 'ENDT'
ta_ID_Bloques(2,3) = LEN( ta_ID_Bloques(2,1) )
ta_ID_Bloques(2,4) = LEN( ta_ID_Bloques(2,2) )
lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 )
ENDIF
@@ -4563,7 +4569,6 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente
tnBloquesExclusion = tnBloquesExclusion + 1
lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) )
DIMENSION taBloquesExclusion(tnBloquesExclusion,2)
taBloquesExclusion(tnBloquesExclusion,1) = I
taLineasExclusion(I) = .T.
@@ -4579,12 +4584,12 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
ENDIF
DO CASE
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ;
CASE lnPrimerID = 1 AND .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, 0, X, 1 ) ;
AND NOT .currentLineIsPreviousLineContinuation( @taCodeLines, I )
*-- Busca el primer marcador (#IF o TEXT)
*-- Busca el primer marcador (#IF) NOTA: No busco [TEXT] porque no se pueden anidar.
lnAnidamientos = lnAnidamientos + 1
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 )
CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, 0, X, 2 )
*-- Busca el segundo marcador (#ENDIF o ENDTEXT)
lnAnidamientos = lnAnidamientos - 1
@@ -4616,7 +4621,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
FINALLY
RELEASE taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion, loLang ;
, lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine
, lnBloques, I, X, lnPrimerID, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine
ENDTRY
RETURN
@@ -4732,11 +4737,11 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
FUNCTION RowTimeStamp(ltDateTime)
* Generate a FoxPro 3.0-style row timestamp
*-- CONVIERTE UN DATO TIPO DATETIME EN TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc.
LOCAL lcTimeValue, tnTimeStamp
LOCAL lcTimeValue, tnTimestamp
TRY
IF EMPTY(ltDateTime)
tnTimeStamp = 0
tnTimestamp = 0
EXIT
ENDIF
@@ -4744,7 +4749,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
m.ltDateTime = DATETIME()
ENDIF
tnTimeStamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ;
tnTimestamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ;
+ MONTH(m.ltDateTime) * 2^21 ;
+ DAY(m.ltDateTime) * 2^16 ;
+ HOUR(m.ltDateTime) * 2^11 ;
@@ -4752,7 +4757,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION
+ SEC(m.ltDateTime)
ENDTRY
RETURN INT(tnTimeStamp)
RETURN INT(tnTimestamp)
ENDFUNC