tobjc22b.pp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. { %target=darwin }
  2. { %cpu=powerpc,powerpc64,i386,x86_64,arm }
  3. { Written by Jonas Maebe in 2009, released into the public domain }
  4. program protocoltest;
  5. {$mode objfpc}{$H+}
  6. {$modeswitch objectivec1}
  7. type
  8. MyProtocolA = objcprotocol
  9. function newMethod: longint; message 'newMethod';
  10. optional
  11. function optionalMethod: longint; message 'optionalMethod';
  12. end;
  13. MyProtocolB = objcprotocol(MyProtocolA)
  14. class function newClassMethod: longint; message 'newClassMethod';
  15. optional
  16. class function optionalClassMethod: longint; message 'optionalClassMethod';
  17. end;
  18. { TMyObject }
  19. TMyObjectA = objcclass(NSObject, MyProtocolA)
  20. function newMethod: longint;
  21. function optionalMethod: longint;
  22. end;
  23. TMyObjectB = objcclass(NSObject,MyProtocolB)
  24. function newMethod: longint;
  25. class function newClassMethod: longint;
  26. class function optionalClassMethod: longint;
  27. end;
  28. { TMyObjectA }
  29. function TMyObjectA.newMethod: longint;
  30. begin
  31. result:=1;
  32. end;
  33. function TMyObjectA.optionalMethod: longint;
  34. begin
  35. result:=2;
  36. end;
  37. { TMyObjectB }
  38. function TMyObjectB.newMethod: longint;
  39. begin
  40. result:=3;
  41. end;
  42. class function TMyObjectB.newClassMethod: longint;
  43. begin
  44. result:=4;
  45. end;
  46. class function TMyObjectB.optionalClassMethod: longint;
  47. begin
  48. result:=5;
  49. end;
  50. var
  51. a : MyProtocolA;
  52. b : MyProtocolB;
  53. begin
  54. a:=TMyObjectA.alloc.init;
  55. b:=TMyObjectB.alloc.init;
  56. if a.newMethod<>1 then
  57. halt(1);
  58. if a.optionalMethod<>2 then
  59. halt(2);
  60. if b.newMethod<>3 then
  61. halt(3);
  62. if b.newclassmethod<>4 then
  63. halt(4);
  64. if b.optionalclassmethod<>5 then
  65. halt(5);
  66. if not id(a).conformsToProtocol_(objcprotocol(MyProtocolA)) then
  67. halt(6);
  68. if not id(b).conformsToProtocol_(objcprotocol(MyProtocolA)) then
  69. halt(7);
  70. if not id(b).conformsToProtocol_(objcprotocol(MyProtocolB)) then
  71. halt(8);
  72. id(a).release;
  73. id(b).release;
  74. end.