fpc/tests/test/tthlp23.pp
2017-08-18 15:32:28 +00:00

175 lines
3.2 KiB
ObjectPascal

{ type helpers in mode ObjFPC can also be used in place of record and class
helpers }
program tthlp23;
{$mode objfpc}
{$modeswitch advancedrecords}
{$modeswitch typehelpers}
type
TTest = record
function Test: LongInt;
class function TestStatic: LongInt; static;
end;
TTestHelper = type helper for TTest
function Test: LongInt;
class function TestStatic: LongInt; static;
end;
TTestHelperSub = type helper(TTestHelper) for TTest
function Test: LongInt;
class function TestStatic: LongInt; static;
end;
TObjectHelper = type helper for TObject
function Test: LongInt;
class function TestClass: LongInt;
class function TestStatic: LongInt; static;
end;
TObjectHelperSub = type helper(TObjectHelper) for TObject
function Test: LongInt;
class function TestClass: LongInt;
class function TestStatic: LongInt; static;
end;
TObjectSub = class(TObject)
function Test: LongInt;
class function TestClass: LongInt;
class function TestStatic: LongInt; static;
end;
TObjectSubHelperSub = type helper(TObjectHelper) for TObjectSub
function Test: LongInt;
class function TestClass: LongInt;
class function TestStatic: LongInt; static;
end;
function TTest.Test: LongInt;
begin
Result := 1;
end;
class function TTest.TestStatic: LongInt;
begin
Result := 2;
end;
function TTestHelper.Test: LongInt;
begin
Result := 3;
end;
class function TTestHelper.TestStatic: LongInt;
begin
Result := 4;
end;
function TTestHelperSub.Test: LongInt;
begin
Result := 5;
end;
class function TTestHelperSub.TestStatic: LongInt;
begin
Result := 6;
end;
function TObjectHelper.Test: LongInt;
begin
Result := 7;
end;
class function TObjectHelper.TestClass: LongInt;
begin
Result := 8;
end;
class function TObjectHelper.TestStatic: LongInt;
begin
Result := 9;
end;
function TObjectHelperSub.Test: LongInt;
begin
Result := 10;
end;
class function TObjectHelperSub.TestClass: LongInt;
begin
Result := 11;
end;
class function TObjectHelperSub.TestStatic: LongInt;
begin
Result := 12;
end;
function TObjectSub.Test: LongInt;
begin
Result := 13;
end;
class function TObjectSub.TestClass: LongInt;
begin
Result := 14;
end;
class function TObjectSub.TestStatic: LongInt;
begin
Result := 15;
end;
function TObjectSubHelperSub.Test: LongInt;
begin
Result := 16;
end;
class function TObjectSubHelperSub.TestClass: LongInt;
begin
Result := 17;
end;
class function TObjectSubHelperSub.TestStatic: LongInt;
begin
Result := 18;
end;
var
t: TTest;
o: TObject;
os: TObjectSub;
begin
if t.Test <> 5 then
Halt(1);
if t.TestStatic <> 6 then
Halt(2);
if TTest.TestStatic <> 6 then
Halt(3);
o := TObject.Create;
if o.Test <> 10 then
Halt(4);
if o.TestClass <> 11 then
Halt(5);
if o.TestStatic <> 12 then
Halt(6);
if TObject.TestClass <> 11 then
Halt(7);
if TObject.TestStatic <> 12 then
Halt(8);
os := TObjectSub.Create;
if os.Test <> 16 then
Halt(9);
if os.TestClass <> 17 then
Halt(10);
if os.TestStatic <> 18 then
Halt(11);
if TObjectSub.TestClass <> 17 then
Halt(12);
if TObjectSub.TestStatic <> 18 then
Halt(13);
Writeln('ok');
end.