diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_commandgroup.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_commandgroup.vc2
new file mode 100644
index 0000000..5e083e2
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_commandgroup.vc2
@@ -0,0 +1,34 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_commandgroup AS commandgroup && Descripción de cl_CommandGroup
+ *< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ #INCLUDE "..\..\include\principal.h"
+ *
+ *p: una_prop_cmgroup && Con comentario, pero sin valor
+ *
+
+ ButtonCount = 2
+ Height = 66
+ Name = "cl_commandgroup"
+ una_prop_cmgroup = .F. && Con comentario, pero sin valor
+ Value = 1
+ Width = 94
+ Command1.Caption = "Command1"
+ Command1.Height = 27
+ Command1.Left = 5
+ Command1.Name = "Command1"
+ Command1.Top = 5
+ Command1.Width = 84
+ Command2.Caption = "Command2"
+ Command2.Height = 27
+ Command2.Left = 5
+ Command2.Name = "Command2"
+ Command2.Top = 34
+ Command2.Width = 84
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_form.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_form.vc2
new file mode 100644
index 0000000..650a9f1
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_form.vc2
@@ -0,0 +1,121 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
+ *< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
+
+ *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
+ *< OBJECTDATA: ObjPath="Cl_optiongroup1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_commandgroup1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_imagen1" UniqueID="" Timestamp="" />
+ *< OBJECTDATA: ObjPath="Cl_imagen2" UniqueID="" Timestamp="" />
+
+ *
+ *p: chidden && Prop.Hidden
+ *p: cprotected && Prop.Protegida
+ *a: ahidden[1,0] && Array Oculto
+ *a: aprotected[1,0] && Array Protegido
+ *p: _memberdata && XML Metadata for customizable properties
+ *
+
+ HIDDEN ahidden,chidden
+ PROTECTED aprotected,cprotected
+ Caption = "Form"
+ chidden = && Prop.Hidden
+ cprotected = && Prop.Protegida
+ DoCreate = .T.
+ Height = 345
+ Left = 0
+ Name = "cl_form"
+ Picture = bmps\scccheckout.bmp
+ Top = 0
+ Width = 570
+ _memberdata =
+
+
+
+
+ && XML Metadata for customizable properties
+
+ ADD OBJECT 'Cl_commandgroup1' AS cl_commandgroup WITH ;
+ BackColor = 255,128,192, ;
+ Height = 66, ;
+ Left = 8, ;
+ Name = "Cl_commandgroup1", ;
+ Top = 88, ;
+ Width = 244, ;
+ Command1.Caption = "Abrir", ;
+ Command1.Height = 52, ;
+ Command1.Left = 8, ;
+ Command1.Name = "Command1", ;
+ Command1.Picture = bmps\carpetaabierta.bmp, ;
+ Command1.Top = 4, ;
+ Command1.Width = 104, ;
+ Command2.Caption = "Cerrar", ;
+ Command2.Height = 52, ;
+ Command2.Left = 124, ;
+ Command2.Name = "Command2", ;
+ Command2.Picture = bmps\carpetacerrada.bmp, ;
+ Command2.Top = 4, ;
+ Command2.Width = 104
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" />
+
+ ADD OBJECT 'Cl_imagen1' AS cl_imagen WITH ;
+ Height = 34, ;
+ Left = 452, ;
+ Name = "Cl_imagen1", ;
+ Picture = bmps\sobrepostal.bmp, ;
+ Stretch = 1, ;
+ Top = 276, ;
+ Width = 38
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
+
+ ADD OBJECT 'Cl_imagen2' AS cl_imagen WITH ;
+ Height = 34, ;
+ Left = 500, ;
+ Name = "Cl_imagen2", ;
+ Picture = bmps\treeview.bmp, ;
+ Stretch = 1, ;
+ Top = 276, ;
+ Width = 38
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
+
+ ADD OBJECT 'Cl_optiongroup1' AS cl_optiongroup WITH ;
+ BackColor = 0,128,255, ;
+ Height = 68, ;
+ Left = 8, ;
+ Name = "Cl_optiongroup1", ;
+ Top = 12, ;
+ Width = 244, ;
+ Option1.Height = 52, ;
+ Option1.Left = 8, ;
+ Option1.Name = "Option1", ;
+ Option1.Picture = bmps\scccheckout.bmp, ;
+ Option1.Style = 1, ;
+ Option1.Top = 8, ;
+ Option1.Width = 104, ;
+ Option2.Height = 52, ;
+ Option2.Left = 124, ;
+ Option2.Name = "Option2", ;
+ Option2.Picture = bmps\scccheckout.bmp, ;
+ Option2.Style = 1, ;
+ Option2.Top = 8, ;
+ Option2.Width = 104
+ *< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" />
+
+ PROCEDURE Cl_optiongroup1.Init
+ *-- Prueba para comprobar que respeta espacios y TABS del código
+ TEXT TO xx
+ * TAB a la izquierda del asterisco
+ * 2 TAB a la izquierda del asterisco
+ * 1 ESPACIO a la izquierda del asterisco
+ * 2 ESPACIOS a la izquierda del asterisco
+ 1 TAB a la derecha del asterisco *
+ 1 ESPACIO a la derecha del asterisco *
+ ENDTEXT && Esto termina sin ENTER
+ ENDPROC
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_imagen.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_imagen.vc2
new file mode 100644
index 0000000..5947af3
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_imagen.vc2
@@ -0,0 +1,23 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
+ *< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ *
+ *m: un_metodo_de_clase && Para testear si el código se va a la clase cl_form
+ *
+
+ Height = 16
+ Name = "cl_imagen"
+ Picture = bmps\sobrepostal.bmp
+ Width = 17
+
+ PROCEDURE un_metodo_de_clase && Para testear si el código se va a la clase cl_form
+ * ESTE CODIGO ES DE "cl_imagen::un_metodo_de_clase"
+ ENDPROC
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olebound.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olebound.vc2
new file mode 100644
index 0000000..3a4bd63
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olebound.vc2
@@ -0,0 +1,14 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_olebound AS oleboundcontrol
+ *< CLASSDATA: Baseclass="oleboundcontrol" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ Height = 100
+ Name = "cl_olebound"
+ Width = 100
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olecontrol.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olecontrol.vc2
new file mode 100644
index 0000000..57fd5f8
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_olecontrol.vc2
@@ -0,0 +1,14 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_olecontrol AS olecontrol
+ *< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCpJ18M8c8BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYArAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGRlZmYwe1xmb250dGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABibHtcZjBcZm5pbFxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
+
+ Height = 67
+ Name = "cl_olecontrol"
+ Width = 131
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_optiongroup.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_optiongroup.vc2
new file mode 100644
index 0000000..f7b6562
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.cl_optiongroup.vc2
@@ -0,0 +1,51 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
+ *< CLASSDATA: Baseclass="optiongroup" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ *
+ *m: propiedad_de_clase_con_valor_access
+ *m: propiedad_de_clase_con_valor_assign
+ *p: propiedad_de_clase_con_valor && Tiene un valor por defecto
+ *p: propiedad_de_clase_sin_valor && Una propiedad sin valor para heredar
+ *
+
+ ButtonCount = 2
+ Height = 46
+ Name = "cl_optiongroup"
+ propiedad_de_clase_con_valor = UN VALOR DE LA CLASE && Tiene un valor por defecto
+ propiedad_de_clase_sin_valor = .F. && Una propiedad sin valor para heredar
+ Value = 1
+ Width = 71
+ Option1.Caption = "Option1"
+ Option1.Height = 17
+ Option1.Left = 5
+ Option1.Name = "Option1"
+ Option1.Top = 5
+ Option1.Value = 1
+ Option1.Width = 61
+ Option2.Caption = "Option2"
+ Option2.Height = 17
+ Option2.Left = 5
+ Option2.Name = "Option2"
+ Option2.Top = 24
+ Option2.Width = 61
+
+ PROCEDURE propiedad_de_clase_con_valor_access
+ *To do: Modify this routine for the Access method
+ RETURN THIS.propiedad_de_clase_con_valor
+
+ ENDPROC
+
+ PROCEDURE propiedad_de_clase_con_valor_assign
+ LPARAMETERS vNewVal
+ *To do: Modify this routine for the Assign method
+ THIS.propiedad_de_clase_con_valor = m.vNewVal
+
+ ENDPROC
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.proj_hook.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.proj_hook.vc2
new file mode 100644
index 0000000..84d9a31
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.proj_hook.vc2
@@ -0,0 +1,14 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+DEFINE CLASS proj_hook AS projecthook
+ *< CLASSDATA: Baseclass="projecthook" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ Height = 22
+ Name = "proj_hook"
+ Width = 23
+
+ENDDEFINE
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.vc2 b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vc2
new file mode 100644
index 0000000..a5f8752
--- /dev/null
+++ b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vc2
@@ -0,0 +1,18 @@
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
+* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
+*--------------------------------------------------------------------------------------------------------------------------------------------------------
+*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
+*
+*-- EXTERNAL_CLASS identify external member Class names / EXTERNAL_CLASS identifica los nombres de las Clases externas
+*< EXTERNAL_CLASS: Name="cl_commandgroup" Baseclass="commandgroup" />
+*< EXTERNAL_CLASS: Name="cl_form" Baseclass="form" />
+*< EXTERNAL_CLASS: Name="cl_imagen" Baseclass="image" />
+*< EXTERNAL_CLASS: Name="cl_olebound" Baseclass="oleboundcontrol" />
+*< EXTERNAL_CLASS: Name="cl_olecontrol" Baseclass="olecontrol" />
+*< EXTERNAL_CLASS: Name="cl_optiongroup" Baseclass="optiongroup" />
+*< EXTERNAL_CLASS: Name="proj_hook" Baseclass="projecthook" />
+
+*
+*< LIBCOMMENT: Comentario principal de "fb2p_test.vcx" />
+*
\ No newline at end of file
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.vct b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vct
new file mode 100644
index 0000000..30bcaa6
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vct differ
diff --git a/TESTS/DATOS_READONLY/fb2p_classperfile_text.vcx b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vcx
new file mode 100644
index 0000000..aa7fd97
Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_classperfile_text.vcx differ
diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg
index 7e87011..d446bd2 100644
--- a/TESTS/ut__foxbin2prg.prg
+++ b/TESTS/ut__foxbin2prg.prg
@@ -1709,6 +1709,119 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
ENDFUNC
+ *******************************************************************************************************************************************
+ FUNCTION Evaluate_TX2_Output_Test_from_ClassPerFile_VCX
+ LPARAMETERS tcFileName
+
+ IF PCOUNT() = 0
+ THIS.messageout( "* Support method, not a valid test." )
+ RETURN .T.
+ ENDIF
+
+ LOCAL lnCodError, lnCodError_Esperado ;
+ , lc_File, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileTx2s, lc_OutputFileBak, lcExt2, lcCFG, laFiles(1,5) ;
+ , lcParent, lcClass, lcObjName, loReg_Esperado ;
+ , loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ;
+ , 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
+ TEXT TO lcCFG TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4
+ UseClassPerFile:1
+ RedirectClassPerFileToMain:1
+ ClassPerFileCheck:1
+ ENDTEXT
+ STRTOFILE(lcCFG, FORCEPATH('foxbin2prg.cfg', oFXU_LIB.cPathDatosTest))
+ loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", 'TESTS\DATOS_TEST\foxbin2prg.cfg')
+ *loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
+ *loCnv.evaluateConfiguration( '1', '1', '1', '0', '1', '4', '1', '0' )
+ *loCnv.l_Test = .T.
+
+
+ *-- DATOS DE ENTRADA
+ STORE 0 TO lnCodError, lnCodError_Esperado
+
+ *-- Copio la librería en DATOS_TEST
+ lc_File = UPPER(tcFileName)
+ lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( tcFileName ) )
+ lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest )
+ lc_OutputFileTx2 = FORCEPATH( FORCEEXT( lc_File, lcExt2 ), oFXU_LIB.cPathDatosTest )
+ lc_OutputFileTx2s = FORCEPATH( JUSTSTEM(lc_File) + '*.' + lcExt2, oFXU_LIB.cPathDatosTest )
+ lc_OutputFileBak = lc_OutputFileTx2 + '.bak'
+
+ * Copio los .??2
+ *oFXU_LIB.copiarArchivosParaTest( lc_OutputFileTx2s )
+ FOR I = 1 TO ADIR(laFiles, FORCEPATH(lc_OutputFileTx2s, oFXU_LIB.cPathDatosReadOnly))
+ COPY FILE (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosReadOnly )) TO (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest ))
+ ENDFOR
+
+ * Creo los .??2.BAK correspondientes
+ FOR I = 1 TO ADIR(laFiles, lc_OutputFileTx2s)
+ COPY FILE (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest )) TO (FORCEPATH( laFiles(I,1) + '.bak', oFXU_LIB.cPathDatosTest ))
+ ENDFOR
+
+ *-- Genero TX2
+ *loCnv.execute( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
+
+ *-- Genero BIN
+ loCnv.execute( lc_OutputFileTx2, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
+
+ *-- Genero TX2
+ loCnv.execute( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
+
+ *-- Comparo resultados
+ THIS.messageout( "Se compara el archivo de texto generado con el original luego de 2 regeneraciones, para saber si hay cambios" )
+ *THIS.messageout( "OutputFileTx2 = " + lc_OutputFileTx2 )
+ *THIS.messageout( "OutputFileBak = " + lc_OutputFileBak )
+ *THIS.asserttrue( FILETOSTR( lc_OutputFileTx2 ) == FILETOSTR( lc_OutputFileBak ), "COMPARACIÓN DE ARCHIVOS TX2" )
+
+ FOR I = 1 TO ALEN(laFiles, 1)
+ THIS.messageout( "--------------------" )
+ THIS.messageout( "OutputFileTx2 = " + laFiles(I,1) )
+ THIS.messageout( "OutputFileBak = " + laFiles(I,1) + '.bak' )
+ THIS.asserttrue( FILETOSTR( FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest ) ) == FILETOSTR( FORCEPATH( laFiles(I,1) + '.bak', oFXU_LIB.cPathDatosTest ) ), "COMPARACIÓN DE ARCHIVOS TX2" )
+ ENDFOR
+
+
+ CATCH TO loEx
+ THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado )
+
+ FINALLY
+ * USE IN (SELECT("ARCHIVOBIN_IN"))
+ * USE IN (SELECT("TABLABIN"))
+ STORE NULL TO loCnv, loCtl
+ RELEASE loCnv, loCtl
+ ENDTRY
+
+ ENDFUNC
+
+
+ *******************************************************************************************************************************************
+ FUNCTION Deberia_Ejecutar_FOXBIN2PRG_Para_generar_un__VCX__con_ClassPerFile_ValidarEl_VC2_GeneradoConElOriginal_Y_NoEncontrarDiferencias
+ LOCAL lnCodError, lnCodError_Esperado ;
+ , lc_File, lcFileName, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2 ;
+ , lcParent, lcClass, lcObjName, loReg_Esperado ;
+ , loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ;
+ , 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
+
+ PUBLIC goFXU AS ut__foxbin2prg OF ut__foxbin2prg.prg
+ goFXU = THIS
+ loEx = NULL
+
+ *-- Comparo resultados
+ THIS.Evaluate_TX2_Output_Test_from_ClassPerFile_VCX( 'fb2p_classperfile_text.vcx' )
+
+ ENDFUNC
+
+
ENDDEFINE