mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 11:08:02 +02:00
169 lines
4.9 KiB
ObjectPascal
169 lines
4.9 KiB
ObjectPascal
unit uexrttiutil;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, TypInfo;
|
|
|
|
// Low level tests
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : Boolean);
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : Integer);
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : String);
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : TVisibilityClass);
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : TTypeKind);
|
|
Procedure AssertNotNull(Msg : String; aPointer : Pointer);
|
|
Procedure AssertNull(Msg : String; aPointer : Pointer);
|
|
Procedure AssertSame(Msg : String; aExpected,aActual : Pointer);
|
|
|
|
// Combined tests
|
|
Procedure CheckProperty(aIdx : Integer; aData: TPropInfoEx; aName : String; aKind : TTypeKind; aVisibility : TVisibilityClass; isStrict : Boolean = False);
|
|
Procedure CheckField(aIdx : Integer; aData: PExtendedVmtFieldEntry; aName : String; aKind : TTypeKind; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
Procedure CheckMethod(aPrefix : string; aIdx : Integer; aData: PVmtMethodExEntry; aName : String; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
Procedure CheckMethod(aPrefix : string; aIdx : Integer; aData: PRecMethodExEntry; aName : String; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
|
|
implementation
|
|
|
|
Procedure CheckMethod(aPrefix : string; aIdx : Integer; aData: PRecMethodExEntry; aName : String; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
|
|
Var
|
|
Msg : String;
|
|
|
|
begin
|
|
Msg:=aPrefix+': Checking method '+IntToStr(aIdx)+' ('+aName+') ';
|
|
AssertEquals(Msg+'name',aData^.Name,aName);
|
|
AssertEquals(Msg+'visibility',aVisibility,aData^.MethodVisibility);
|
|
AssertEquals(Msg+'strict',aData^.StrictVisibility,aStrict);
|
|
end;
|
|
|
|
|
|
Procedure CheckMethod(aPrefix : string; aIdx : Integer; aData: PVmtMethodExEntry; aName : String; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
|
|
Var
|
|
Msg : String;
|
|
|
|
begin
|
|
Msg:=aPrefix+': Checking method '+IntToStr(aIdx)+' ('+aName+') ';
|
|
AssertEquals(Msg+'name',aData^.Name,aName);
|
|
AssertEquals(Msg+'visibility',aVisibility,aData^.MethodVisibility);
|
|
AssertEquals(Msg+'strict',aData^.StrictVisibility,aStrict);
|
|
end;
|
|
|
|
Procedure CheckProperty(aIdx : Integer; aData: TPropInfoEx; aName : String; aKind : TTypeKind; aVisibility : TVisibilityClass; isStrict : Boolean = False);
|
|
|
|
Var
|
|
Msg : String;
|
|
|
|
begin
|
|
Msg:='Checking prop '+IntToStr(aIdx)+' ('+aName+') ';
|
|
AssertEquals(Msg+'name',aName, aData.Info^.Name);
|
|
AssertEquals(Msg+'kind',aKind, aData.Info^.PropType^.Kind);
|
|
AssertEquals(Msg+'visibility',aVisibility,aData.Visibility);
|
|
AssertEquals(Msg+'strict',isStrict,aData.StrictVisibility);
|
|
end;
|
|
|
|
|
|
Procedure CheckField(aIdx : Integer; aData: PExtendedVmtFieldEntry; aName : String; aKind : TTypeKind; aVisibility : TVisibilityClass; aStrict : Boolean = False);
|
|
|
|
Var
|
|
Msg : String;
|
|
|
|
begin
|
|
Msg:='Checking field '+IntToStr(aIdx)+' ('+aName+') ';
|
|
AssertEquals(Msg+'name',aName,aData^.Name^);
|
|
AssertEquals(Msg+'kind',aKind,PPTypeInfo(aData^.FieldType)^^.Kind);
|
|
AssertEquals(Msg+'visibility',aVisibility,aData^.FieldVisibility);
|
|
AssertEquals(Msg+'strict',aStrict,aData^.StrictVisibility);
|
|
end;
|
|
|
|
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : Integer);
|
|
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: '+IntToStr(aExpected)+' got: '+IntToStr(aActual);
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : String);
|
|
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: <'+aExpected+'> got: <'+aActual+'>';
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : TVisibilityClass);
|
|
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: '+IntToStr(Ord(aExpected))+' got: '+IntToStr(Ord(aActual));
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : TTypeKind);
|
|
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: '+IntToStr(Ord(aExpected))+' got: '+IntToStr(Ord(aActual));
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
procedure AssertNotNull(Msg: String; aPointer: Pointer);
|
|
begin
|
|
if aPointer=Nil then
|
|
begin
|
|
Msg:=Msg+': expected not Nil pointer, but got Nil.';
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
procedure AssertNull(Msg: String; aPointer: Pointer);
|
|
begin
|
|
if aPointer<>Nil then
|
|
begin
|
|
Msg:=Msg+': expected Nil pointer, but got '+HexStr(aPointer);
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
procedure AssertSame(Msg: String; aExpected, aActual: Pointer);
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: '+HexStr(aExpected)+' got: '+HexStr(aActual);
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
Procedure AssertEquals(Msg : String; aExpected,aActual : Boolean);
|
|
|
|
begin
|
|
If AExpected<>aActual then
|
|
begin
|
|
Msg:=Msg+': expected: '+BoolToStr(aExpected,True)+' got: '+BoolToStr(aActual,True);
|
|
Writeln(Msg);
|
|
Halt(1);
|
|
end;
|
|
end;
|
|
|
|
|
|
end.
|
|
|