fpc/tests/test/tchlp54.pp
svenbarth 553d357d64 Completely restructured the test for the helper feature. The tests were split into three categories:
* 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 -
2011-04-03 13:33:23 +00:00

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.