* Fix redeclaration of property which is default

git-svn-id: trunk@27132 -
This commit is contained in:
michael 2014-03-14 08:33:57 +00:00
parent 848e650189
commit e3cdbbe099
2 changed files with 77 additions and 1 deletions

View File

@ -2993,7 +2993,7 @@ begin
NextToken;
if CurTokenIsIdentifier('DEFAULT') then
begin
if not isArray then
if (Result.VarType<>Nil) and (not isArray) then
ParseExc('The default property must be an array property');
NextToken;
if CurToken = tkSemicolon then

View File

@ -84,6 +84,10 @@ type
procedure TestHintFieldUninmplemented;
Procedure TestMethodSimple;
Procedure TestClassMethodSimple;
Procedure TestConstructor;
Procedure TestClassConstructor;
Procedure TestDestructor;
Procedure TestClassDestructor;
Procedure TestFunctionMethodSimple;
Procedure TestClassFunctionMethodSimple;
Procedure TestMethodOneArg;
@ -104,6 +108,7 @@ type
Procedure Test2Methods;
Procedure Test2MethodsDifferentVisibility;
Procedure TestPropertyRedeclare;
Procedure TestPropertyRedeclareDefault;
Procedure TestPropertyReadOnly;
Procedure TestPropertyReadWrite;
Procedure TestPropertyWriteOnly;
@ -649,6 +654,62 @@ begin
AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
end;
Procedure TTestClassType.TestConstructor;
begin
AddMember('Constructor Create');
ParseClass;
AssertEquals('1 members',1,TheClass.members.Count);
AssertEquals('1 class procedure',TPasConstructor,members[0].ClassType);
AssertEquals('Default visibility',visDefault,Members[0].Visibility);
AssertMemberName('Create');
AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
AssertNotNull('Method proc type',TPasClassProcedure(Members[0]).ProcType);
AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
end;
Procedure TTestClassType.TestClassConstructor;
begin
AddMember('Class Constructor Create');
ParseClass;
AssertEquals('1 members',1,TheClass.members.Count);
AssertEquals('1 class procedure',TPasClassConstructor,members[0].ClassType);
AssertEquals('Default visibility',visDefault,Members[0].Visibility);
AssertMemberName('Create');
AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
AssertNotNull('Method proc type',TPasClassProcedure(Members[0]).ProcType);
AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
end;
Procedure TTestClassType.TestDestructor;
begin
AddMember('Destructor Destroy');
ParseClass;
AssertEquals('1 members',1,TheClass.members.Count);
AssertEquals('1 class procedure',TPasDestructor,members[0].ClassType);
AssertEquals('Default visibility',visDefault,Members[0].Visibility);
AssertMemberName('Destroy');
AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
AssertNotNull('Method proc type',TPasClassProcedure(Members[0]).ProcType);
AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
end;
Procedure TTestClassType.TestClassDestructor;
begin
AddMember('Class Destructor Destroy');
ParseClass;
AssertEquals('1 members',1,TheClass.members.Count);
AssertEquals('1 class procedure',TPasClassDestructor,members[0].ClassType);
AssertEquals('Default visibility',visDefault,Members[0].Visibility);
AssertMemberName('Destroy');
AssertEquals('No modifiers',[],TPasClassProcedure(Members[0]).Modifiers);
AssertEquals('Default calling convention',ccDefault, TPasClassProcedure(Members[0]).ProcType.CallingConvention);
AssertNotNull('Method proc type',TPasClassProcedure(Members[0]).ProcType);
AssertEquals('No arguments',0,TPasClassProcedure(Members[0]).ProcType.Args.Count)
end;
Procedure TTestClassType.TestFunctionMethodSimple;
begin
AddMember('Function DoSomething : integer');
@ -906,6 +967,21 @@ begin
Assertequals('No default value','',Property1.DefaultValue);
end;
Procedure TTestClassType.TestPropertyRedeclareDefault;
begin
StartVisibility(visPublic);
AddMember('Property Something; default;');
ParseClass;
AssertProperty(Property1,visPublic,'Something','','','','',0,True,False);
AssertNull('No type',Property1.VarType);
Assertequals('No index','',Property1.IndexValue);
AssertNull('No Index expression',Property1.IndexExpr);
AssertNull('No Default expression',Property1.DefaultExpr);
Assertequals('No default value','',Property1.DefaultValue);
// Actually, already tested in AssertProperty
AssertEquals('Is default property',True, Property1.IsDefault);
end;
Procedure TTestClassType.TestPropertyReadOnly;
begin
StartVisibility(visPublished);