|
@@ -162,12 +162,15 @@ type
|
|
Procedure TestAlias2Type;
|
|
Procedure TestAlias2Type;
|
|
Procedure TestAliasTypeRefs;
|
|
Procedure TestAliasTypeRefs;
|
|
Procedure TestAliasOfVarFail;
|
|
Procedure TestAliasOfVarFail;
|
|
|
|
+ Procedure TestAliasType_UnitPrefix;
|
|
|
|
+ Procedure TestAliasType_UnitPrefix_CycleFail;
|
|
Procedure TestTypeAliasType; // ToDo
|
|
Procedure TestTypeAliasType; // ToDo
|
|
|
|
|
|
// var, const
|
|
// var, const
|
|
Procedure TestVarLongint;
|
|
Procedure TestVarLongint;
|
|
Procedure TestVarInteger;
|
|
Procedure TestVarInteger;
|
|
Procedure TestConstInteger;
|
|
Procedure TestConstInteger;
|
|
|
|
+ Procedure TestConstInteger2;
|
|
Procedure TestDuplicateVar;
|
|
Procedure TestDuplicateVar;
|
|
Procedure TestVarInitConst;
|
|
Procedure TestVarInitConst;
|
|
Procedure TestVarOfVarFail;
|
|
Procedure TestVarOfVarFail;
|
|
@@ -196,6 +199,7 @@ type
|
|
// enums
|
|
// enums
|
|
Procedure TestEnums;
|
|
Procedure TestEnums;
|
|
Procedure TestSets;
|
|
Procedure TestSets;
|
|
|
|
+ Procedure TestSetConstRange;
|
|
Procedure TestSetOperators;
|
|
Procedure TestSetOperators;
|
|
Procedure TestEnumParams;
|
|
Procedure TestEnumParams;
|
|
Procedure TestSetParams;
|
|
Procedure TestSetParams;
|
|
@@ -230,6 +234,7 @@ type
|
|
Procedure TestTypeCastBooleanToDoubleFail;
|
|
Procedure TestTypeCastBooleanToDoubleFail;
|
|
Procedure TestHighLow;
|
|
Procedure TestHighLow;
|
|
Procedure TestAssign_Access;
|
|
Procedure TestAssign_Access;
|
|
|
|
+ Procedure TestAssignedIntFail;
|
|
|
|
|
|
// statements
|
|
// statements
|
|
Procedure TestForLoop;
|
|
Procedure TestForLoop;
|
|
@@ -268,6 +273,7 @@ type
|
|
Procedure TestProcOverloadWithClassTypes;
|
|
Procedure TestProcOverloadWithClassTypes;
|
|
Procedure TestProcOverloadWithInhClassTypes;
|
|
Procedure TestProcOverloadWithInhClassTypes;
|
|
Procedure TestProcOverloadWithInhAliasClassTypes;
|
|
Procedure TestProcOverloadWithInhAliasClassTypes;
|
|
|
|
+ Procedure TestProcOverloadBaseTypeOtherUnit;
|
|
Procedure TestProcDuplicate;
|
|
Procedure TestProcDuplicate;
|
|
Procedure TestNestedProc;
|
|
Procedure TestNestedProc;
|
|
Procedure TestForwardProc;
|
|
Procedure TestForwardProc;
|
|
@@ -281,6 +287,7 @@ type
|
|
Procedure TestUnitIntfMismatchArgName;
|
|
Procedure TestUnitIntfMismatchArgName;
|
|
Procedure TestProcOverloadIsNotFunc;
|
|
Procedure TestProcOverloadIsNotFunc;
|
|
Procedure TestProcCallMissingParams;
|
|
Procedure TestProcCallMissingParams;
|
|
|
|
+ Procedure TestProcArgDefaultValue;
|
|
Procedure TestProcArgDefaultValueTypeMismatch;
|
|
Procedure TestProcArgDefaultValueTypeMismatch;
|
|
Procedure TestProcPassConstToVar;
|
|
Procedure TestProcPassConstToVar;
|
|
Procedure TestBuiltInProcCallMissingParams;
|
|
Procedure TestBuiltInProcCallMissingParams;
|
|
@@ -311,7 +318,8 @@ type
|
|
Procedure TestClass_Method;
|
|
Procedure TestClass_Method;
|
|
Procedure TestClass_MethodWithoutClassFail;
|
|
Procedure TestClass_MethodWithoutClassFail;
|
|
Procedure TestClass_MethodWithParams;
|
|
Procedure TestClass_MethodWithParams;
|
|
- Procedure TestClass_MethodUnresolved;
|
|
|
|
|
|
+ Procedure TestClass_MethodUnresolvedPrg;
|
|
|
|
+ Procedure TestClass_MethodUnresolvedUnit;
|
|
Procedure TestClass_MethodAbstract;
|
|
Procedure TestClass_MethodAbstract;
|
|
Procedure TestClass_MethodAbstractWithoutVirtualFail;
|
|
Procedure TestClass_MethodAbstractWithoutVirtualFail;
|
|
Procedure TestClass_MethodAbstractHasBodyFail;
|
|
Procedure TestClass_MethodAbstractHasBodyFail;
|
|
@@ -443,7 +451,8 @@ type
|
|
Procedure TestStaticArray;
|
|
Procedure TestStaticArray;
|
|
Procedure TestArrayOfArray;
|
|
Procedure TestArrayOfArray;
|
|
Procedure TestFunctionReturningArray;
|
|
Procedure TestFunctionReturningArray;
|
|
- Procedure TestLowHighArray;
|
|
|
|
|
|
+ Procedure TestArray_LowHigh;
|
|
|
|
+ Procedure TestArray_Assigned;
|
|
Procedure TestPropertyOfTypeArray;
|
|
Procedure TestPropertyOfTypeArray;
|
|
Procedure TestArrayElementFromFuncResult_AsParams;
|
|
Procedure TestArrayElementFromFuncResult_AsParams;
|
|
Procedure TestArrayEnumTypeRange;
|
|
Procedure TestArrayEnumTypeRange;
|
|
@@ -457,6 +466,7 @@ type
|
|
Procedure TestArray_PassArrayElementToVarParam;
|
|
Procedure TestArray_PassArrayElementToVarParam;
|
|
Procedure TestArray_OpenArrayOfString;
|
|
Procedure TestArray_OpenArrayOfString;
|
|
Procedure TestArray_OpenArrayOfString_IntFail;
|
|
Procedure TestArray_OpenArrayOfString_IntFail;
|
|
|
|
+ Procedure TestArray_OpenArrayOverride;
|
|
|
|
|
|
// procedure types
|
|
// procedure types
|
|
Procedure TestProcTypesAssignObjFPC;
|
|
Procedure TestProcTypesAssignObjFPC;
|
|
@@ -476,6 +486,7 @@ type
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail1;
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail1;
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail2;
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail2;
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail3;
|
|
Procedure TestProcType_TNotifyEvent_NoAtFPC_Fail3;
|
|
|
|
+ Procedure TestProcType_WhileListCompare;
|
|
end;
|
|
end;
|
|
|
|
|
|
function LinesToStr(Args: array of const): string;
|
|
function LinesToStr(Args: array of const): string;
|
|
@@ -1736,6 +1747,30 @@ begin
|
|
CheckParserException('Expected type, but got variable',PParser.nParserExpectedTypeButGot);
|
|
CheckParserException('Expected type, but got variable',PParser.nParserExpectedTypeButGot);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestAliasType_UnitPrefix;
|
|
|
|
+begin
|
|
|
|
+ StartUnit(false);
|
|
|
|
+ Add('interface');
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' {#a}a=longint;');
|
|
|
|
+ Add(' {#b}{=a}b=afile.a;');
|
|
|
|
+ Add('var');
|
|
|
|
+ Add(' {=a}c: a;');
|
|
|
|
+ Add(' {=b}d: b;');
|
|
|
|
+ Add('implementation');
|
|
|
|
+ ParseUnit;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TTestResolver.TestAliasType_UnitPrefix_CycleFail;
|
|
|
|
+begin
|
|
|
|
+ StartUnit(false);
|
|
|
|
+ Add('interface');
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' {#a}a=afile.a;');
|
|
|
|
+ Add('implementation');
|
|
|
|
+ CheckResolverException('identifier not found "a"',nIdentifierNotFound);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestTypeAliasType;
|
|
procedure TTestResolver.TestTypeAliasType;
|
|
begin
|
|
begin
|
|
// ToDo
|
|
// ToDo
|
|
@@ -1809,7 +1844,7 @@ var
|
|
begin
|
|
begin
|
|
StartProgram(true);
|
|
StartProgram(true);
|
|
Add('const');
|
|
Add('const');
|
|
- Add(' c1:integer=3;'); // defined in system.pp
|
|
|
|
|
|
+ Add(' c1: integer=3;'); // defined in system.pp
|
|
Add('begin');
|
|
Add('begin');
|
|
ParseProgram;
|
|
ParseProgram;
|
|
AssertEquals('1 declaration',1,PasProgram.ProgramSection.Declarations.Count);
|
|
AssertEquals('1 declaration',1,PasProgram.ProgramSection.Declarations.Count);
|
|
@@ -1828,6 +1863,15 @@ begin
|
|
AssertEquals('c1 expr value','3',ExprC1.Value);
|
|
AssertEquals('c1 expr value','3',ExprC1.Value);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestConstInteger2;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('const');
|
|
|
|
+ Add(' c1 = 3');
|
|
|
|
+ Add(' c2: longint=c1;'); // defined in system.pp
|
|
|
|
+ Add('begin');
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestDuplicateVar;
|
|
procedure TTestResolver.TestDuplicateVar;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -2163,6 +2207,16 @@ begin
|
|
ParseProgram;
|
|
ParseProgram;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestSetConstRange;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('const');
|
|
|
|
+ Add(' MinInt = -1;');
|
|
|
|
+ Add(' MaxInt = +1;');
|
|
|
|
+ Add(' {#TMyInt}TMyInt = MinInt..MaxInt;');
|
|
|
|
+ Add('begin');
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestSetOperators;
|
|
procedure TTestResolver.TestSetOperators;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -2862,6 +2916,16 @@ begin
|
|
CheckAccessMarkers;
|
|
CheckAccessMarkers;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestAssignedIntFail;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('var i: longint;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ Add(' if Assigned(i) then ;');
|
|
|
|
+ CheckResolverException('Incompatible type arg no. 1: Got "Longint", expected "class or array"',
|
|
|
|
+ nIncompatibleTypeArgNo);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestForLoop;
|
|
procedure TTestResolver.TestForLoop;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -3343,7 +3407,9 @@ end;
|
|
procedure TTestResolver.TestProcParam;
|
|
procedure TTestResolver.TestProcParam;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
- Add('procedure Proc1(a: longint);');
|
|
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' integer = longint;');
|
|
|
|
+ Add('procedure Proc1(a: integer);');
|
|
Add('begin');
|
|
Add('begin');
|
|
Add(' a:=3;');
|
|
Add(' a:=3;');
|
|
Add('end;');
|
|
Add('end;');
|
|
@@ -3354,8 +3420,10 @@ end;
|
|
procedure TTestResolver.TestProcParamAccess;
|
|
procedure TTestResolver.TestProcParamAccess;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
- Add('procedure DoIt(vI: longint; const vJ: longint; var vK: longint);');
|
|
|
|
- Add('var vL: longint;');
|
|
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' integer = longint;');
|
|
|
|
+ Add('procedure DoIt(vI: integer; const vJ: integer; var vK: integer);');
|
|
|
|
+ Add('var vL: integer;');
|
|
Add('begin');
|
|
Add('begin');
|
|
Add(' vi:=vi+1;');
|
|
Add(' vi:=vi+1;');
|
|
Add(' vl:=vj+1;');
|
|
Add(' vl:=vj+1;');
|
|
@@ -3366,7 +3434,7 @@ begin
|
|
Add(' DoIt(vk,vk,vk);');
|
|
Add(' DoIt(vk,vk,vk);');
|
|
Add(' DoIt(vl,vl,vl);');
|
|
Add(' DoIt(vl,vl,vl);');
|
|
Add('end;');
|
|
Add('end;');
|
|
- Add('var i: longint;');
|
|
|
|
|
|
+ Add('var i: integer;');
|
|
Add('begin');
|
|
Add('begin');
|
|
Add(' DoIt(i,i,i);');
|
|
Add(' DoIt(i,i,i);');
|
|
ParseProgram;
|
|
ParseProgram;
|
|
@@ -3495,6 +3563,29 @@ begin
|
|
ParseProgram;
|
|
ParseProgram;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestProcOverloadBaseTypeOtherUnit;
|
|
|
|
+begin
|
|
|
|
+ AddModuleWithIntfImplSrc('unit2.pp',
|
|
|
|
+ LinesToStr([
|
|
|
|
+ 'procedure Val(var d: double);',
|
|
|
|
+ //'procedure Val(var i: integer);',
|
|
|
|
+ '']),
|
|
|
|
+ LinesToStr([
|
|
|
|
+ 'procedure Val(var d: double); begin end;',
|
|
|
|
+ 'procedure Val(var i: integer); begin end;',
|
|
|
|
+ '']));
|
|
|
|
+
|
|
|
|
+ StartProgram(true);
|
|
|
|
+ Add('uses unit2;');
|
|
|
|
+ Add('var');
|
|
|
|
+ Add(' d: double;');
|
|
|
|
+ Add(' i: integer;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ //Add(' Val(i);');
|
|
|
|
+ Add(' Val(d);');
|
|
|
|
+ ParseProgram;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestProcDuplicate;
|
|
procedure TTestResolver.TestProcDuplicate;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -3674,6 +3765,17 @@ begin
|
|
PasResolver.nWrongNumberOfParametersForCallTo);
|
|
PasResolver.nWrongNumberOfParametersForCallTo);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestProcArgDefaultValue;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('const {#DefA}DefA = 3;');
|
|
|
|
+ Add('procedure Proc1(a: longint = {@DefA}DefA);');
|
|
|
|
+ Add('begin');
|
|
|
|
+ Add('end;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ ParseProgram;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestProcArgDefaultValueTypeMismatch;
|
|
procedure TTestResolver.TestProcArgDefaultValueTypeMismatch;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -4177,7 +4279,7 @@ begin
|
|
ParseProgram;
|
|
ParseProgram;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TTestResolver.TestClass_MethodUnresolved;
|
|
|
|
|
|
+procedure TTestResolver.TestClass_MethodUnresolvedPrg;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
Add('type');
|
|
Add('type');
|
|
@@ -4190,6 +4292,20 @@ begin
|
|
CheckResolverException('forward proc not resolved',PasResolver.nForwardProcNotResolved);
|
|
CheckResolverException('forward proc not resolved',PasResolver.nForwardProcNotResolved);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestClass_MethodUnresolvedUnit;
|
|
|
|
+begin
|
|
|
|
+ StartUnit(false);
|
|
|
|
+ Add('interface');
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' TObject = class');
|
|
|
|
+ Add(' end;');
|
|
|
|
+ Add(' TClassA = class');
|
|
|
|
+ Add(' procedure ProcA;');
|
|
|
|
+ Add(' end;');
|
|
|
|
+ Add('implementation');
|
|
|
|
+ CheckResolverException('forward proc not resolved',PasResolver.nForwardProcNotResolved);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestClass_MethodAbstract;
|
|
procedure TTestResolver.TestClass_MethodAbstract;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -6214,7 +6330,8 @@ begin
|
|
Add(' property B: longint read FB;');
|
|
Add(' property B: longint read FB;');
|
|
Add(' end;');
|
|
Add(' end;');
|
|
Add('begin');
|
|
Add('begin');
|
|
- CheckResolverException('Longint expected, but String found',PasResolver.nXExpectedButYFound);
|
|
|
|
|
|
+ CheckResolverException('Incompatible types: got "Longint" expected "String"',
|
|
|
|
+ PasResolver.nIncompatibleTypesGotExpected);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TTestResolver.TestPropertyReadAccessorProcNotFunc;
|
|
procedure TTestResolver.TestPropertyReadAccessorProcNotFunc;
|
|
@@ -6280,7 +6397,8 @@ begin
|
|
Add(' property B: longint write FB;');
|
|
Add(' property B: longint write FB;');
|
|
Add(' end;');
|
|
Add(' end;');
|
|
Add('begin');
|
|
Add('begin');
|
|
- CheckResolverException('Longint expected, but String found',PasResolver.nXExpectedButYFound);
|
|
|
|
|
|
+ CheckResolverException('Incompatible types: got "Longint" expected "String"',
|
|
|
|
+ PasResolver.nIncompatibleTypesGotExpected);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TTestResolver.TestPropertyWriteAccessorFuncNotProc;
|
|
procedure TTestResolver.TestPropertyWriteAccessorFuncNotProc;
|
|
@@ -6851,7 +6969,7 @@ begin
|
|
ParseProgram;
|
|
ParseProgram;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TTestResolver.TestLowHighArray;
|
|
|
|
|
|
+procedure TTestResolver.TestArray_LowHigh;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
Add('type');
|
|
Add('type');
|
|
@@ -6866,6 +6984,15 @@ begin
|
|
ParseProgram;
|
|
ParseProgram;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestArray_Assigned;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('var a: array of longint;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ Add(' if Assigned(a) then ;');
|
|
|
|
+ ParseProgram;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestPropertyOfTypeArray;
|
|
procedure TTestResolver.TestPropertyOfTypeArray;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -7101,6 +7228,28 @@ begin
|
|
CheckResolverException('Incompatible types: got "Longint" expected "String"',nIncompatibleTypesGotExpected);
|
|
CheckResolverException('Incompatible types: got "Longint" expected "String"',nIncompatibleTypesGotExpected);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestArray_OpenArrayOverride;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' TObject = class');
|
|
|
|
+ Add(' end;');
|
|
|
|
+ Add(' Exception = class');
|
|
|
|
+ Add(' constructor CreateFmt(const Msg: string; const Args: array of string); virtual;');
|
|
|
|
+ Add(' end;');
|
|
|
|
+ Add(' ESome = class(Exception)');
|
|
|
|
+ Add(' constructor CreateFmt(const Msg: string; const Args: array of string); override;');
|
|
|
|
+ Add(' end;');
|
|
|
|
+ Add('constructor Exception.CreateFmt(const Msg: string; const Args: array of string);');
|
|
|
|
+ Add('begin end;');
|
|
|
|
+ Add('constructor ESome.CreateFmt(const Msg: string; const Args: array of string);');
|
|
|
|
+ Add('begin');
|
|
|
|
+ Add(' inherited CreateFmt(Msg,Args);');
|
|
|
|
+ Add('end;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ ParseProgram;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestResolver.TestProcTypesAssignObjFPC;
|
|
procedure TTestResolver.TestProcTypesAssignObjFPC;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -7599,6 +7748,21 @@ begin
|
|
nWrongNumberOfParametersForCallTo);
|
|
nWrongNumberOfParametersForCallTo);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestResolver.TestProcType_WhileListCompare;
|
|
|
|
+begin
|
|
|
|
+ StartProgram(false);
|
|
|
|
+ Add('type');
|
|
|
|
+ Add(' integer = longint;');
|
|
|
|
+ Add(' TArrInt = array of Integer;');
|
|
|
|
+ Add(' TListCompare = function(Item1, Item2: Integer): integer;');
|
|
|
|
+ Add('procedure Sort(P: Integer; const List: TArrInt; const Compare: TListCompare);');
|
|
|
|
+ Add('begin');
|
|
|
|
+ Add(' while Compare(P,List[0])>0 do ;');
|
|
|
|
+ Add('end;');
|
|
|
|
+ Add('begin');
|
|
|
|
+ ParseProgram;
|
|
|
|
+end;
|
|
|
|
+
|
|
initialization
|
|
initialization
|
|
RegisterTests([TTestResolver]);
|
|
RegisterTests([TTestResolver]);
|
|
|
|
|