mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 17:28:14 +02:00
175 lines
3.2 KiB
ObjectPascal
175 lines
3.2 KiB
ObjectPascal
program tthlp24;
|
|
|
|
{$mode objfpc}
|
|
{$modeswitch typehelpers}
|
|
|
|
type
|
|
ITestIntf = interface
|
|
function Blubb: LongInt;
|
|
function Foobar: LongInt;
|
|
end;
|
|
|
|
ITestIntfSub = interface(ITestIntf)
|
|
function Something: LongInt;
|
|
end;
|
|
|
|
ITestIntfSubSub = interface(ITestIntfSub)
|
|
function SomethingElse: LongInt;
|
|
end;
|
|
|
|
TTest = class(TInterfacedObject, ITestIntf)
|
|
function Blubb: LongInt;
|
|
function Foobar: LongInt;
|
|
end;
|
|
|
|
TTestSub = class(TTest, ITestIntfSub)
|
|
function Something: LongInt;
|
|
end;
|
|
|
|
TTestSubSub = class(TTestSub, ITestIntfSubSub)
|
|
function SomethingElse: LongInt;
|
|
end;
|
|
|
|
TTestIntfHelper = type helper for ITestIntf
|
|
function Blubb: LongInt;
|
|
function Foobar(aArg: LongInt): LongInt; overload;
|
|
function Test: LongInt;
|
|
function Calculate: LongInt;
|
|
function CalculateBase: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TTestIntfSubSubHelper = type helper(TTestIntfHelper) for ITestIntfSubSub
|
|
function SomethingElse: LongInt;
|
|
function Calculate: LongInt;
|
|
function CalculateBase: LongInt;
|
|
function CalculateBase2: LongInt;
|
|
end;
|
|
|
|
{ TTestSubSub }
|
|
|
|
function TTestSubSub.SomethingElse: LongInt;
|
|
begin
|
|
Result := 9;
|
|
end;
|
|
|
|
{ TTestSub }
|
|
|
|
function TTestSub.Something: LongInt;
|
|
begin
|
|
Result := 8;
|
|
end;
|
|
|
|
{ TTestIntfSubSubHelper }
|
|
|
|
function TTestIntfSubSubHelper.SomethingElse: LongInt;
|
|
begin
|
|
Result := 7;
|
|
end;
|
|
|
|
function TTestIntfSubSubHelper.Calculate: LongInt;
|
|
begin
|
|
Result := 100 * SomethingElse + inherited Calculate;
|
|
end;
|
|
|
|
function TTestIntfSubSubHelper.CalculateBase: LongInt;
|
|
begin
|
|
Result := 100 * inherited SomethingElse + inherited CalculateBase;
|
|
end;
|
|
|
|
function TTestIntfSubSubHelper.CalculateBase2: LongInt;
|
|
begin
|
|
Result := 100 * inherited SomethingElse + inherited Calculate;
|
|
end;
|
|
|
|
{ TTest }
|
|
|
|
function TTest.Blubb: LongInt;
|
|
begin
|
|
Result := 4;
|
|
end;
|
|
|
|
function TTest.Foobar: LongInt;
|
|
begin
|
|
Result := 5;
|
|
end;
|
|
|
|
{ TTestIntfHelper }
|
|
|
|
function TTestIntfHelper.Blubb: LongInt;
|
|
begin
|
|
Result := 3;
|
|
end;
|
|
|
|
function TTestIntfHelper.Foobar(aArg: LongInt): LongInt;
|
|
begin
|
|
Result := aArg;
|
|
end;
|
|
|
|
function TTestIntfHelper.Test: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
function TTestIntfHelper.Calculate: LongInt;
|
|
begin
|
|
Result := 10 * Blubb + Foobar;
|
|
end;
|
|
|
|
function TTestIntfHelper.CalculateBase: LongInt;
|
|
begin
|
|
Result := 10 * inherited Blubb + inherited Foobar;
|
|
end;
|
|
|
|
class function TTestIntfHelper.TestStatic: LongInt;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
var
|
|
i: ITestIntf;
|
|
_is: ITestIntfSub;
|
|
iss: ITestIntfSubSub;
|
|
begin
|
|
i := TTest.Create;
|
|
if i.Test <> 1 then
|
|
Halt(1);
|
|
if i.TestStatic <> 2 then
|
|
Halt(2);
|
|
if ITestIntf.TestStatic <> 2 then
|
|
Halt(3);
|
|
if i.Blubb <> 3 then
|
|
Halt(4);
|
|
if i.Foobar <> 5 then
|
|
Halt(5);
|
|
if i.Foobar(6) <> 6 then
|
|
Halt(6);
|
|
if i.Calculate <> 35 then
|
|
Halt(7);
|
|
if i.CalculateBase <> 45 then
|
|
Halt(8);
|
|
i := Nil;
|
|
|
|
_is := TTestSub.Create;
|
|
if _is.Blubb <> 3 then
|
|
Halt(9);
|
|
if _is.Foobar(8) <> 8 then
|
|
Halt(10);
|
|
_is := Nil;
|
|
|
|
iss := TTestSubSub.Create;
|
|
if iss.SomethingElse <> 7 then
|
|
Halt(11);
|
|
if iss.Blubb <> 3 then
|
|
Halt(12);
|
|
if iss.Calculate <> 735 then
|
|
Halt(13);
|
|
if iss.CalculateBase <> 945 then
|
|
Halt(14);
|
|
if iss.CalculateBase2 <> 935 then
|
|
Halt(15);
|
|
iss := Nil;
|
|
|
|
Writeln('ok');
|
|
end.
|