|
@@ -10,7 +10,7 @@ uses
|
|
type
|
|
type
|
|
|
|
|
|
{ TTestClassType }
|
|
{ TTestClassType }
|
|
-
|
|
|
|
|
|
+ TClassDeclType = (cdtClass,cdtObjCClass,cdtObjCCategory);
|
|
TTestClassType = Class(TBaseTestTypeParser)
|
|
TTestClassType = Class(TBaseTestTypeParser)
|
|
Private
|
|
Private
|
|
FDecl : TStrings;
|
|
FDecl : TStrings;
|
|
@@ -30,7 +30,7 @@ type
|
|
function GetP2: TPasProperty;
|
|
function GetP2: TPasProperty;
|
|
function GetT(AIndex : Integer) : TPasType;
|
|
function GetT(AIndex : Integer) : TPasType;
|
|
protected
|
|
protected
|
|
- Procedure StartClass (AncestorName : String = 'TObject'; InterfaceList : String = ''; UseObjcClass : Boolean = False);
|
|
|
|
|
|
+ Procedure StartClass (AncestorName : String = 'TObject'; InterfaceList : String = ''; aClassType : TClassDeclType = cdtClass);
|
|
Procedure StartExternalClass (AParent : String; AExternalName,AExternalNameSpace : String );
|
|
Procedure StartExternalClass (AParent : String; AExternalName,AExternalNameSpace : String );
|
|
Procedure StartClassHelper (ForType : String = 'TOriginal'; AParent : String = 'TObject');
|
|
Procedure StartClassHelper (ForType : String = 'TOriginal'; AParent : String = 'TObject');
|
|
Procedure StartInterface (AParent : String = 'IInterface'; UUID : String = ''; Disp : Boolean = False; UseObjcClass : Boolean = False);
|
|
Procedure StartInterface (AParent : String = 'IInterface'; UUID : String = ''; Disp : Boolean = False; UseObjcClass : Boolean = False);
|
|
@@ -70,6 +70,7 @@ type
|
|
procedure TestEmptyEnd;
|
|
procedure TestEmptyEnd;
|
|
procedure TestEmptyEndNoParent;
|
|
procedure TestEmptyEndNoParent;
|
|
procedure TestEmptyObjC;
|
|
procedure TestEmptyObjC;
|
|
|
|
+ procedure TestEmptyObjCCategory;
|
|
Procedure TestOneInterface;
|
|
Procedure TestOneInterface;
|
|
Procedure TestTwoInterfaces;
|
|
Procedure TestTwoInterfaces;
|
|
procedure TestOneSpecializedClass;
|
|
procedure TestOneSpecializedClass;
|
|
@@ -254,7 +255,7 @@ begin
|
|
Result:=TPasConst(Members[AIndex]);
|
|
Result:=TPasConst(Members[AIndex]);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TTestClassType.StartClass(AncestorName: String; InterfaceList: String = ''; UseObjcClass: Boolean = false);
|
|
|
|
|
|
+procedure TTestClassType.StartClass(AncestorName: String; InterfaceList: String = ''; aClassType : TClassDeclType = cdtClass);
|
|
|
|
|
|
Var
|
|
Var
|
|
S : String;
|
|
S : String;
|
|
@@ -262,13 +263,20 @@ begin
|
|
if FStarted then
|
|
if FStarted then
|
|
Fail('TTestClassType.StartClass already started');
|
|
Fail('TTestClassType.StartClass already started');
|
|
FStarted:=True;
|
|
FStarted:=True;
|
|
- if UseObjcClass then
|
|
|
|
|
|
+ case aClassType of
|
|
|
|
+ cdtObjCClass:
|
|
begin
|
|
begin
|
|
FDecl.Add('{$modeswitch objectivec1}');
|
|
FDecl.Add('{$modeswitch objectivec1}');
|
|
S:='TMyClass = ObjCClass';
|
|
S:='TMyClass = ObjCClass';
|
|
- end
|
|
|
|
|
|
+ end;
|
|
|
|
+ cdtObjCCategory:
|
|
|
|
+ begin
|
|
|
|
+ FDecl.Add('{$modeswitch objectivec1}');
|
|
|
|
+ S:='TMyClass = ObjCCategory(aParent)';
|
|
|
|
+ end;
|
|
else
|
|
else
|
|
S:='TMyClass = Class';
|
|
S:='TMyClass = Class';
|
|
|
|
+ end;
|
|
if (AncestorName<>'') then
|
|
if (AncestorName<>'') then
|
|
begin
|
|
begin
|
|
S:=S+'('+AncestorName;
|
|
S:=S+'('+AncestorName;
|
|
@@ -533,12 +541,21 @@ end;
|
|
|
|
|
|
procedure TTestClassType.TestEmptyObjC;
|
|
procedure TTestClassType.TestEmptyObjC;
|
|
begin
|
|
begin
|
|
- StartClass('','',True);
|
|
|
|
|
|
+ StartClass('','',cdtObjCClass);
|
|
ParseClass;
|
|
ParseClass;
|
|
AssertEquals('No members',0,TheClass.Members.Count);
|
|
AssertEquals('No members',0,TheClass.Members.Count);
|
|
AssertTrue('Is objectivec',TheClass.IsObjCClass);
|
|
AssertTrue('Is objectivec',TheClass.IsObjCClass);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestClassType.TestEmptyObjCCategory;
|
|
|
|
+begin
|
|
|
|
+ StartClass('','',cdtObjCCategory);
|
|
|
|
+ ParseClass;
|
|
|
|
+ AssertEquals('No members',0,TheClass.Members.Count);
|
|
|
|
+ AssertEquals('Is interface',okObjcCategory,TheClass.ObjKind);
|
|
|
|
+ AssertTrue('Is objectivec',TheClass.IsObjCClass);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestClassType.TestOneInterface;
|
|
procedure TTestClassType.TestOneInterface;
|
|
begin
|
|
begin
|
|
StartClass('TObject','ISomething');
|
|
StartClass('TObject','ISomething');
|
|
@@ -1906,7 +1923,7 @@ begin
|
|
StartInterface('','',False,True);
|
|
StartInterface('','',False,True);
|
|
EndClass();
|
|
EndClass();
|
|
ParseClass;
|
|
ParseClass;
|
|
- AssertEquals('Is interface',okInterface,TheClass.ObjKind);
|
|
|
|
|
|
+ AssertEquals('Is interface',okObjcProtocol,TheClass.ObjKind);
|
|
AssertTrue('Is objectivec',TheClass.IsObjCClass);
|
|
AssertTrue('Is objectivec',TheClass.IsObjCClass);
|
|
AssertEquals('No members',0,TheClass.Members.Count);
|
|
AssertEquals('No members',0,TheClass.Members.Count);
|
|
AssertNull('No UUID',TheClass.GUIDExpr);
|
|
AssertNull('No UUID',TheClass.GUIDExpr);
|