mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 16:47:53 +02:00
93 lines
1.9 KiB
ObjectPascal
93 lines
1.9 KiB
ObjectPascal
{ %target=darwin }
|
|
{ %cpu=powerpc,powerpc64,i386,x86_64,arm,aarch64 }
|
|
|
|
{ Written by Jonas Maebe in 2009, released into the public domain }
|
|
|
|
program protocoltest;
|
|
|
|
{$mode objfpc}{$H+}
|
|
{$modeswitch objectivec1}
|
|
|
|
type
|
|
MyProtocolA = objcprotocol
|
|
function newMethod: longint; message 'newMethod';
|
|
optional
|
|
function optionalMethod: longint; message 'optionalMethod';
|
|
end;
|
|
|
|
MyProtocolB = objcprotocol(MyProtocolA)
|
|
class function newClassMethod: longint; message 'newClassMethod';
|
|
optional
|
|
class function optionalClassMethod: longint; message 'optionalClassMethod';
|
|
end;
|
|
|
|
|
|
{ TMyObject }
|
|
|
|
TMyObjectA = objcclass(NSObject, MyProtocolA)
|
|
function newMethod: longint;
|
|
function optionalMethod: longint;
|
|
end;
|
|
|
|
TMyObjectB = objcclass(NSObject,MyProtocolB)
|
|
function newMethod: longint;
|
|
class function newClassMethod: longint;
|
|
class function optionalClassMethod: longint;
|
|
end;
|
|
|
|
{ TMyObjectA }
|
|
|
|
function TMyObjectA.newMethod: longint;
|
|
begin
|
|
result:=1;
|
|
end;
|
|
|
|
function TMyObjectA.optionalMethod: longint;
|
|
begin
|
|
result:=2;
|
|
end;
|
|
|
|
{ TMyObjectB }
|
|
|
|
function TMyObjectB.newMethod: longint;
|
|
begin
|
|
result:=3;
|
|
end;
|
|
|
|
class function TMyObjectB.newClassMethod: longint;
|
|
begin
|
|
result:=4;
|
|
end;
|
|
|
|
class function TMyObjectB.optionalClassMethod: longint;
|
|
begin
|
|
result:=5;
|
|
end;
|
|
|
|
var
|
|
a : MyProtocolA;
|
|
b : MyProtocolB;
|
|
begin
|
|
a:=TMyObjectA.alloc.init;
|
|
b:=TMyObjectB.alloc.init;
|
|
if a.newMethod<>1 then
|
|
halt(1);
|
|
if a.optionalMethod<>2 then
|
|
halt(2);
|
|
if b.newMethod<>3 then
|
|
halt(3);
|
|
if b.newclassmethod<>4 then
|
|
halt(4);
|
|
if b.optionalclassmethod<>5 then
|
|
halt(5);
|
|
if not id(a).conformsToProtocol_(objcprotocol(MyProtocolA)) then
|
|
halt(6);
|
|
if not id(b).conformsToProtocol_(objcprotocol(MyProtocolA)) then
|
|
halt(7);
|
|
if not id(b).conformsToProtocol_(objcprotocol(MyProtocolB)) then
|
|
halt(8);
|
|
id(a).release;
|
|
id(b).release;
|
|
end.
|
|
|