mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 15:28:08 +02:00

* general tests for the helper feature (thlp*) * tests for class helpers (tchlp*) * tests for record helpers (trhlp*) With my current yet-to-be-commited implementation nearly all tests pass, but some fail because of missing FPC features: * thlp30.pp currently fails because of generic constraints, but should fail despite the constraints * thlp29.pp fails, because generic methods are not yet supported * trhlp8.pp, trhlp9.pp, trhlp10.pp fail, because one can't use default properties using the abbreviated syntax * trhlp17.pp, trhlp18.pp, trhlp19.pp fail, because nested types are not supported for records git-svn-id: branches/svenbarth/classhelpers@17237 -
124 lines
2.1 KiB
ObjectPascal
124 lines
2.1 KiB
ObjectPascal
{ this example tests combinations of class and helpers hierarchies }
|
|
program tchlp54;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
{$apptype console}
|
|
|
|
type
|
|
TTest1 = class
|
|
end;
|
|
|
|
TTest2 = class(TTest1)
|
|
class function Test3: Integer;
|
|
end;
|
|
|
|
TTest3 = class(TTest2)
|
|
class function Test1: Integer;
|
|
class function Test2: Integer;
|
|
end;
|
|
|
|
TTest4 = class(TTest3)
|
|
end;
|
|
|
|
TTest1Helper = class helper for TTest1
|
|
class function Test1: Integer;
|
|
class function Test3: Integer;
|
|
class function Test4: Integer;
|
|
end;
|
|
|
|
TTest3Helper = class helper for TTest3
|
|
class function Test2: Integer;
|
|
class function Test4: Integer;
|
|
end;
|
|
|
|
TTest4Helper = class helper(TTest1Helper) for TTest4
|
|
class function DoTest1: Integer;
|
|
class function DoTest2: Integer;
|
|
class function DoTest3: Integer;
|
|
class function DoTest4: Integer;
|
|
end;
|
|
|
|
class function TTest2.Test3: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TTest3.Test1: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TTest3.Test2: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TTest1Helper.Test1: Integer;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
class function TTest1Helper.Test3: Integer;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
class function TTest1Helper.Test4: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TTest3Helper.Test2: Integer;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
class function TTest3Helper.Test4: Integer;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
class function TTest4Helper.DoTest1: Integer;
|
|
begin
|
|
Result := Test1;
|
|
end;
|
|
|
|
class function TTest4Helper.DoTest2: Integer;
|
|
begin
|
|
Result := Test2;
|
|
end;
|
|
|
|
class function TTest4Helper.DoTest3: Integer;
|
|
begin
|
|
Result := Test3;
|
|
end;
|
|
|
|
class function TTest4Helper.DoTest4: Integer;
|
|
begin
|
|
Result := Test4;
|
|
end;
|
|
|
|
var
|
|
res: Integer;
|
|
begin
|
|
res := TTest4.DoTest1;
|
|
Writeln('TTest4.DoTest1: ', res);
|
|
if res <> 2 then
|
|
Halt(1);
|
|
res := TTest4.DoTest2;
|
|
Writeln('TTest4.DoTest2: ', res);
|
|
if res <> 2 then
|
|
Halt(2);
|
|
res := TTest4.DoTest3;
|
|
Writeln('TTest4.DoTest3: ', res);
|
|
if res <> 2 then
|
|
Halt(3);
|
|
res := TTest4.DoTest4;
|
|
Writeln('TTest4.DoTest4: ', res);
|
|
if res <> 1 then
|
|
Halt(4);
|
|
Writeln('ok');
|
|
end.
|