From 420eb11c5c42268c90e91f3cbb8af4d8192672b5 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 13:43:11 +0200 Subject: [PATCH 1/3] - Implementada la herencia de CFGs entre directorios --- foxbin2prg.prg | 223 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 166 insertions(+), 57 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 32e9048..7dff887 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -569,14 +569,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -640,7 +638,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION DIMENSION a_ProcessedFiles(1, 6) - PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess + PROTECTED n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- n_FB2PRG_Version = 1.19 *-- @@ -664,7 +662,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION lFileMode = .F. n_ExisteCapitalizacion = -1 l_CFG_CachedAccess = .F. - l_ConfigEvaluated = .F. l_Debug = .F. l_Error = .F. c_TextErr = '' @@ -672,7 +669,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION l_ShowErrors = .T. n_ShowProgressbar = 1 n_ForceWriteIfReadOnly = 0 - l_AllowMultiConfig = .T. l_AutoClearProcessedFiles = .T. && Por defecto limpia archivos procesados entre ejecución y ejecución l_ProcessFiles = .T. && Por defecto procesa los archivos. En .F. sirve para obtener sus nombres sin reescribirlos. l_CancelWithEscKey = .T. @@ -780,9 +776,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION ADDPROPERTY(_SCREEN, 'ExitCode', 0) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg INIT' ) + THIS.writeLog( 'FoxBin2Prg INIT -', 2 ) THIS.writeLog( REPLICATE( '*', 100 ) ) - THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' ) + THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ', FoxPro Version: ' + VERSION(4) + ')' ) THIS.ChangeLanguage() THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject") @@ -801,7 +797,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ERASE ( lcFileCDX ) - THIS.writeLog( 'FoxBin2Prg UNLOAD' ) + THIS.writeLog( 'FoxBin2Prg UNLOAD -', 2 ) THIS.writeLog( REPLICATE( '*', 100 ) ) THIS.writeLog( ) THIS.writeLog_Flush() @@ -936,7 +932,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION FUNCTION get_l_ConfigEvaluated - RETURN THIS.l_ConfigEvaluated + RETURN THIS.l_Main_CFG_Loaded ENDFUNC @@ -1531,11 +1527,17 @@ DEFINE CLASS c_foxbin2prg AS SESSION * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp ('1') o no ('0' ó vacío) * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar * tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory, (F)ile, (Q)uerySupport + * toParentCFG (@? IN ) (Uso interno) Si se pasa un valor, el nuevo CFG copiará primero sus valores de aquí para heredarlos *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; - , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type + , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type, toParentCFG + + #IF .F. + LOCAL toParentCFG AS CL_CFG OF 'FOXBIN2PRG.PRG' + #ENDIF LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDirInfo(1,5) ; + , lnDirs, laDirs(1) ; , lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ; , lo_Configuration AS Collection ; , loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ; @@ -1545,11 +1547,19 @@ DEFINE CLASS c_foxbin2prg AS SESSION WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' STORE 0 TO lnKey loLang = _SCREEN.o_FoxBin2Prg_Lang - tcRecompile = EVL(tcRecompile,.c_Recompile) + tcRecompile = EVL(tcRecompile, .c_Recompile) lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = EVL(tc_InputFile, .c_InputFile) - .c_InputFile = tc_InputFile tcInputFile_Type = EVL(tcInputFile_Type,'') + lo_Configuration = .o_Configuration + + IF VARTYPE(toParentCFG) <> 'O' THEN + toParentCFG = NULL + ENDIF + + IF ISNULL(toParentCFG) THEN + .c_InputFile = tc_InputFile + ENDIF *-- Determino el tipo de InputFile (Archivo o Directorio) IF EMPTY(tcInputFile_Type) AND NOT EMPTY(tc_InputFile) @@ -1565,10 +1575,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE ENDIF - IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN - *IF EMPTY(tc_InputFile) - * ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"' - *ENDIF + IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile ) ELSE @@ -1582,14 +1589,49 @@ DEFINE CLASS c_foxbin2prg AS SESSION lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) lo_CFG = THIS - IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0=No hay CFG cacheada, +1=Hay CFG cacheada + *-- Búsqueda del CFG del PATH indicado en la caché + IF .l_Main_CFG_Loaded - IF .n_CFG_Actual > 0 THEN - lo_CFG = lo_Configuration.Item(.n_CFG_Actual) - .l_CFG_CachedAccess = .T. - ELSE - .l_CFG_CachedAccess = .F. + IF lo_Configuration.Count > 0 THEN + .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada + + IF .n_CFG_Actual > 0 THEN + lo_CFG = lo_Configuration.Item(.n_CFG_Actual) + .l_CFG_CachedAccess = .T. + ENDIF + ENDIF + + *-- Si no se pasó un CFG padre y no hay CFGs o no encuentra el del PATH indicado, analizo la jararquía + IF ISNULL(toParentCFG) AND (lo_Configuration.Count = 0 OR .n_CFG_Actual = 0) THEN + toParentCFG = THIS + + IF LEFT( lc_CFG_Path, 2 ) == '\\' THEN + lnDirs = OCCURS( '\', lc_CFG_Path ) - 3 + ELSE + lnDirs = OCCURS( '\', lc_CFG_Path ) + ENDIF + + IF lnDirs > 0 THEN + DIMENSION laDirs(lnDirs) + + *-- Creo el array con los PATH intermedios + FOR I = lnDirs TO 1 STEP -1 + IF I = lnDirs THEN + laDirs(I) = JUSTPATH(lc_CFG_Path) + ELSE + laDirs(I) = JUSTPATH(laDirs(I+1)) + ENDIF + ENDFOR + + *-- Ahora evalúo las configuraciones de los PATH intermedios desde la raíz en adelante + *-- y mantengo la última configuración CFG Padre en toParentCFG para usarla como base. + FOR I = 1 TO lnDirs + .EvaluarConfiguracion( '', '', '', '', '', '', '', '', laDirs(I), C_FILETYPE_DIRECTORY, @toParentCFG) + ENDFOR + + .n_CFG_Actual = 0 + .l_CFG_CachedAccess = .F. + ENDIF ENDIF ENDIF @@ -1609,23 +1651,34 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE + IF .l_Main_CFG_Loaded + IF .l_CFG_CachedAccess THEN + toParentCFG = lo_CFG + .writeLog( '> ' + UPPER(loLang.C_USING_THIS_SETTINGS_LOC) + ': ' + tc_InputFile + ' => (' + lo_CFG.c_Foxbin2prg_ConfigFile + ')' ) + .writeLog() + EXIT + ENDIF + + lo_CFG = CREATEOBJECT('CL_CFG') + lo_Configuration.Add( lo_CFG, lc_CFG_Path ) + + IF NOT ISNULL(toParentCFG) + lo_CFG.CopyFrom(toParentCFG) + toParentCFG = lo_CFG + ENDIF + + ELSE + lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. + ENDIF + *-- NOTA: SOLO LOS QUE NO VENGAN DE PARÁMETROS EXTERNOS DEBEN ASIGNARSE A lo_CFG AQUÍ. IF llExiste_CFG_EnDisco .writeLog( ) .writeLog( '> ' + loLang.C_READING_CFG_VALUES_FROM_DISK_LOC + ':' ) .writeLog( C_TAB + loLang.C_CONFIGFILE_LOC + ' ' + lcConfigFile ) - IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded - lo_CFG = CREATEOBJECT('CL_CFG') - lo_Configuration.Add( lo_CFG, lc_CFG_Path ) - ELSE - lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. - ENDIF - .n_CFG_Actual = lo_Configuration.Count - *lo_CFG.c_Foxbin2prg_FullPath = '' lo_CFG.c_Foxbin2prg_ConfigFile = lcConfigFile - *lo_CFG.c_CurDir = '' FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) .set_Line( @lcConfigLine, @laConfig, I ) @@ -1639,8 +1692,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:') lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) ) lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) ) - IF PEMSTATUS( THIS, lcExt, 5 ) - .ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) + IF PEMSTATUS( lo_CFG, lcExt, 5 ) + lo_CFG.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) *.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ' + loLang.C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) ENDIF @@ -1712,13 +1765,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF - CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') - lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) - IF INLIST( lcValue, '0', '1' ) THEN - lo_CFG.l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) - ENDIF - CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN @@ -1835,9 +1881,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION ENDCASE ENDFOR - *IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0 - * .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) ) - *ENDIF .writeLog( ) ENDIF && llExiste_CFG_EnDisco @@ -1895,7 +1938,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION .l_Main_CFG_Loaded = .T. ENDIF - .l_ConfigEvaluated = .T. .writeLog( ) ENDWITH && THIS @@ -3621,13 +3663,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION LPARAMETERS tcText, tnTimestamp TRY - IF EVL(tnTimestamp,0) = 1 THEN - THIS.c_TextErr = THIS.c_TextErr + TTOC(DATETIME(),3) + ' ' - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF EVL(tnTimestamp,0) = 1 THEN + *-- Format: Timestamp__Text + .c_TextErr = .c_TextErr + TTOC(DATETIME(),3) + ' ' + ENDIF - THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF - THIS.errOut(tcText) - THIS.l_Error = .T. + *-- Format: Text + .c_TextErr = .c_TextErr + EVL(tcText,'') + + IF EVL(tnTimestamp,0) = 2 THEN + *-- Format: Text__Timestamp + .c_TextErr = .c_TextErr + ' ' + TTOC(DATETIME(),3) + ENDIF + + .c_TextErr = .c_TextErr + CR_LF + .errOut(tcText) + .l_Error = .T. + ENDWITH CATCH ENDTRY ENDPROC @@ -3646,11 +3699,22 @@ DEFINE CLASS c_foxbin2prg AS SESSION LPARAMETERS tcText, tnTimestamp TRY - IF EVL(tnTimestamp,0) = 1 THEN - THIS.c_TextLog = THIS.c_TextLog + TTOC(DATETIME(),3) + ' ' - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + IF EVL(tnTimestamp,0) = 1 THEN + *-- Format: Timestamp__Text + .c_TextLog = .c_TextLog + TTOC(DATETIME(),3) + ' ' + ENDIF - THIS.c_TextLog = THIS.c_TextLog + EVL(tcText,'') + CR_LF + *-- Format: Text + .c_TextLog = .c_TextLog + EVL(tcText,'') + + IF EVL(tnTimestamp,0) = 2 THEN + *-- Format: Text__Timestamp + .c_TextLog = .c_TextLog + ' ' + TTOC(DATETIME(),3) + ENDIF + + .c_TextLog = .c_TextLog + CR_LF + ENDWITH CATCH ENDTRY ENDPROC @@ -24518,6 +24582,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -24535,8 +24600,8 @@ DEFINE CLASS CL_CFG AS CUSTOM l_Recompile = NULL l_NoTimestamps = NULL l_ClearUniqueID = NULL - l_ClearDBFLastUpdate = NULL - l_OptimizeByFilestamp = NULL + l_ClearDBFLastUpdate = NULL + l_OptimizeByFilestamp = NULL l_RedirectClassPerFileToMain = NULL n_UseClassPerFile = NULL l_ClassPerFileCheck = NULL @@ -24561,6 +24626,50 @@ DEFINE CLASS CL_CFG AS CUSTOM DBC_Conversion_Support = NULL c_BackgroundImage = NULL + + PROCEDURE CopyFrom + *-- Copia las propiedades del CFG indicado + LPARAMETERS toParentCFG + + WITH THIS AS CL_CFG OF 'FOXBIN2PRG.PRG' + .c_Foxbin2prg_FullPath = toParentCFG.c_Foxbin2prg_FullPath + .c_Foxbin2prg_ConfigFile = toParentCFG.c_Foxbin2prg_ConfigFile + .c_CurDir = toParentCFG.c_CurDir + .l_Debug = toParentCFG.l_Debug + .l_ShowErrors = toParentCFG.l_ShowErrors + .n_ShowProgressbar = toParentCFG.n_ShowProgressbar + .l_Recompile = toParentCFG.l_Recompile + .l_NoTimestamps = toParentCFG.l_NoTimestamps + .l_ClearUniqueID = toParentCFG.l_ClearUniqueID + .l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate + .l_OptimizeByFilestamp = toParentCFG.l_OptimizeByFilestamp + .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain + .n_UseClassPerFile = toParentCFG.n_UseClassPerFile + .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck + .n_ExtraBackupLevels = toParentCFG.n_ExtraBackupLevels + .c_VC2 = toParentCFG.c_VC2 + .c_SC2 = toParentCFG.c_SC2 + .c_PJ2 = toParentCFG.c_PJ2 + .c_FR2 = toParentCFG.c_FR2 + .c_LB2 = toParentCFG.c_LB2 + .c_DB2 = toParentCFG.c_DB2 + .c_DC2 = toParentCFG.c_DC2 + .c_MN2 = toParentCFG.c_MN2 + .PJX_Conversion_Support = toParentCFG.PJX_Conversion_Support + .VCX_Conversion_Support = toParentCFG.VCX_Conversion_Support + .SCX_Conversion_Support = toParentCFG.SCX_Conversion_Support + .FRX_Conversion_Support = toParentCFG.FRX_Conversion_Support + .LBX_Conversion_Support = toParentCFG.LBX_Conversion_Support + .MNX_Conversion_Support = toParentCFG.MNX_Conversion_Support + .DBF_Conversion_Support = toParentCFG.DBF_Conversion_Support + .DBF_Conversion_Included = toParentCFG.DBF_Conversion_Included + .DBF_Conversion_Excluded = toParentCFG.DBF_Conversion_Excluded + .DBC_Conversion_Support = toParentCFG.DBC_Conversion_Support + .c_BackgroundImage = toParentCFG.c_BackgroundImage + ENDWITH + ENDPROC + + ENDDEFINE From eacdb713732db8ad872ea9653b86b38fc3d336d0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 13:55:57 +0200 Subject: [PATCH 2/3] =?UTF-8?q?-=20Actualizaci=C3=B3n=20del=20archivo=20LO?= =?UTF-8?q?G=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 1 + foxbin2prg.prg | 1 + 2 files changed, 2 insertions(+) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 5506bf2..a0ab304 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -45,6 +45,7 @@ Change History ------------------------------------------------------------- - Feature: New property "l_ProcessFiles" that allow setting to .F. when using foxbin2prg as object to get Processing file info with get_Processed method without actual processing - Bug Fix frx/lbx: Trimmed some extra CR,LF,TAB from FR2/LB2 tag that where included in previous versions (Ryan Harris) - Bug Fix scx/vcx/dbc: Delete ERR files when processing with UseClassPerFile switch (Ryan Harris) +- Feature: Implemented CFG inheritance between directories 2015/01/18 v1.19.41 - Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7dff887..655b0a0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -155,6 +155,7 @@ * 23/03/2015 FDBOZZO v1.19.42 Bug Fix mnx: No se mantiene el Pad vacío al regenerar el menú cuando se define un menu con un Pad sin nombre (Lutz Scheffler) * 25/03/2015 FDBOZZO v1.19.42 Mejora: Nueva propiedad l_ProcessFiles que permite obtener la lista de archivos a procesar sin procesarlos realmente usando el valor .F. * 25/03/2015 FDBOZZO v1.19.42 Bug Fix frx/lbx: Arreglo de CR,LF,TAB sobrantes en algunos archivos FR2/LB2 agregados en versiones anteriores (Ryan Harris) +* 02/04/2015 FDBOZZO v1.19.42 Mejora: Herencia de CFGs entre directorios * * *--------------------------------------------------------------------------------------------------- From 8dc145234967334a2718d314ab8666aa0b1c8056 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 2 Apr 2015 15:59:31 +0200 Subject: [PATCH 3/3] =?UTF-8?q?-=20Ajustes=20de=20tests=20unitarios=20para?= =?UTF-8?q?=20comprobar=20la=20funcionalidad=20de=20la=20evaluaci=C3=B3n?= =?UTF-8?q?=20de=20configuraci=C3=B3n=20con=20herencia=20por=20directorio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rg__c_foxbin2prg__EvaluarConfiguracion.prg | 162 +++++++++++++++++- foxbin2prg.prg | 6 +- 2 files changed, 158 insertions(+), 10 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index 9fb53ab..3aea210 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -1805,6 +1805,85 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirArchivo_YDirectorioPadreTengaOtroValor + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; + , loFB2P 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 + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + STRTOFILE( 'DBF_Conversion_Support:0', FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ) ) && Escribe en \TESTS + STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'DBF_Conversion_Support:' + leValorEsperado = 2 + + + *-- TEST + loFB2P.EvaluarConfiguracion() + leValor = loFB2P.DBF_Conversion_Support + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + ERASE (FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' )) + + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirectorioPadre + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; + , loFB2P 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 + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ) + STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'DBF_Conversion_Support:' + leValorEsperado = 2 + + + *-- TEST + loFB2P.EvaluarConfiguracion() + leValor = loFB2P.DBF_Conversion_Support + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + ERASE (loFB2P.c_Foxbin2prg_ConfigFile) + + ENDTRY + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_SetearElSoporte_DBF_Como_1_CuandoNoExistaElArhivo_foxbin2prg_cfg LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ; @@ -2419,7 +2498,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) @@ -2480,7 +2558,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' ) loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) @@ -2546,7 +2623,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) @@ -2561,16 +2637,86 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- TEST - loFB2P.EvaluarConfiguracion() && Carga config.Principal + *loFB2P.EvaluarConfiguracion() && Carga config.Principal + *-- c:\desa\foxbin2prg\foxbin2prg.cfg loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + '..\otro' ) + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + + *-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() + + leValor = loFB2P.LBX_Conversion_Support + + + + CATCH TO loEx + + FINALLY + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ) + + THIS.messageout( 'Configuración Principal: ' + loFB2P.c_Foxbin2prg_ConfigFile ) + THIS.messageout( 'Configuración Secundaria: ' + lcCFG_File ) + + FOR I = 1 TO ALEN(laCFG_CachedAccess_Esperado) + THIS.messageout( 'Configuración cacheada en acceso ' + TRANSFORM(I) + ' esperada: ' + TRANSFORM( laCFG_CachedAccess_Esperado(I) ) ) + THIS.assertequals( laCFG_CachedAccess_Esperado(I), laCFG_CachedAccess(I), 'CONFIGURACIÓN CACHEADA EN ACCESO ' + TRANSFORM(I) ) + ENDFOR + + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_SetearElSoporte_LBX_Como_0_CuandoExista_CFG_Secundario_EnElDirEvaluado_Y_UsarValorCacheadoEnSegundoAcceso + LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor, lcCFG_File ; + , laCFG_CachedAccess(3), laCFG_CachedAccess_Esperado(3), I ; + , loFB2P 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 + loFB2P = THIS.ioFB2P + loFB2P.l_ShowErrors = .F. + lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) + STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File ) + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lcSeteo = 'LBX_Conversion_Support:' + leValorEsperado = 1 + laCFG_CachedAccess_Esperado(1) = .T. + laCFG_CachedAccess_Esperado(2) = .T. + laCFG_CachedAccess_Esperado(3) = .T. + + + *-- TEST + *loFB2P.EvaluarConfiguracion() && Carga config.Principal + + *-- c:\desa\foxbin2prg\foxbin2prg.cfg + loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile + loFB2P.EvaluarConfiguracion() && Carga config.secundaria + laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + + *-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg (DEBE CACHEAR DE CUANDO PROCESÓ EL ANTERIOR) loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() @@ -2611,7 +2757,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O loEx = NULL loFB2P = THIS.ioFB2P loFB2P.l_ShowErrors = .F. - loFB2P.l_AllowMultiConfig = .T. *loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' ) *loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest ) lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest ) @@ -2628,18 +2773,21 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- TEST - loFB2P.EvaluarConfiguracion() && Carga config.Principal + *loFB2P.EvaluarConfiguracion() && Carga config.Principal *loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile - loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' ) + *-- c:\desa\foxbin2prg\foxbin2prg.cfg + loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', loFB2P.c_Foxbin2prg_ConfigFile ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test2.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess() + *-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg loFB2P.c_InputFile = FORCEPATH( 'test3.vcx', oFXU_LIB.cPathDatosTest ) loFB2P.EvaluarConfiguracion() && Carga config.secundaria laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess() diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 655b0a0..953cdf2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1578,16 +1578,16 @@ DEFINE CLASS c_foxbin2prg AS SESSION IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN - lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile ) + lcConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(tc_InputFile) ) ELSE - lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) ) + lcConfigFile = FULLPATH( 'foxbin2prg.cfg', tc_InputFile ) ENDIF ENDIF lo_Configuration = .o_Configuration .n_CFG_Actual = 0 .l_CFG_CachedAccess = .F. - lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) ) + lc_CFG_Path = UPPER( JUSTPATH( FULLPATH( lcConfigFile ) ) ) lo_CFG = THIS *-- Búsqueda del CFG del PATH indicado en la caché