diff --git a/harbour/tests/broken/dynobj.prg b/harbour/tests/broken/dynobj.prg new file mode 100644 index 0000000000..09ce87a315 --- /dev/null +++ b/harbour/tests/broken/dynobj.prg @@ -0,0 +1,95 @@ +#define MET_METHOD 0 +#define MET_DATA 1 +#define MET_CLASSDATA 2 +#define MET_INLINE 3 +#define MET_VIRTUAL 4 + +// +// DynObj +// +// Implementation of dynamic objects in Harbour +// +// Warning : Test version only. Definitively not ready for use. +// +// Date : 1999/05/12 +// +#define DATA_SYMBOL 1 +#define DATA_VAL 2 + +function Main() + + local oForm := TForm():New() + + QOut( "What methods are in the class :") + HBDebug( aoMethod(oForm) ) + +/* Let's add an inline at run-time. Should already be possible */ + + QOut( "Let's add inline 'CalcArea' at run-time to an already instanced class" ) + + ClassAdd( oForm:ClassH, "CalcArea", ; + {|self| (::nRight - ::nLeft) * (::nBottom - ::nTop) }, MET_INLINE ) + + QOut( "What methods are in the class :") + HBDebug( aoMethod( oForm ) ) + + QOut( "What is the Form area ?") + QOut( oForm:CalcArea() ) + + QOut( "Let's add method 'Smile' at run-time to an already instanced class" ) + + ClassAdd( oForm:ClassH, "Smile", @Smile(), MET_METHOD ) + + QOut( "What methods are in the class :") + HBDebug( aoMethod( oForm ) ) + + QOut( "Smile please " ) + oForm:Smile() +return nil + +function TForm() + + static oClass + + if oClass == nil + oClass = TClass():New( "TFORM" ) // starts a new class definition + + oClass:AddData( "cText" ) // define this class objects datas + oClass:AddData( "nTop" ) + oClass:AddData( "nLeft" ) + oClass:AddData( "nBottom" ) + oClass:AddData( "nRight" ) + + oClass:AddMethod( "New", @New() ) // define this class objects methods + oClass:AddInline( "Show", {|self| ::cText } ) + + oClass:Create() // builds this class + endif + +return oClass:Instance() // builds an object of this class + +static function New() + + local Self := QSelf() + + ::nTop = 10 + ::nLeft = 10 + ::nBottom = 20 + ::nRight = 40 + +return Self + + +static function Smile() + + local self := QSelf() + + if ::CalcArea() == 300 + QOut( ":-)" ) + else + QOut( ":-(" ) + endif +return self + + +