Created by
Stefan Glienke
last modified
| program ARMCrash;
uses
TestFramework,
TestInsight.DUnit,
Rtti;
type
TTestObject = class
class procedure DoSomething(const Value: TGUID); static;
end;
TTestEvent = class(TTestCase)
const
MyGUID: TGUID = '{CCD21A05-9527-411F-AB44-AAF44C0E0DAF}';
private
procedure DoInvoke(UserData: Pointer;
const Args: TArray<TValue>; out Result: TValue);
published
procedure TestInvoke;
end;
{ TTestObject}
class procedure TTestObject.DoSomething(const Value: TGUID);
begin
end;
{ TTestEvent }
procedure TTestEvent.DoInvoke(UserData: Pointer; const Args: TArray<TValue>;
out Result: TValue);
begin
CheckTrue(Args[0].AsType<TGuid> = MyGUID);
end;
procedure TTestEvent.TestInvoke;
var
ctx: TRttiContext;
mi: TMethodImplementation;
e: procedure(const Value: TGUID);
begin
mi := ctx.GetType(TTestObject).GetMethod('DoSomething').CreateImplementation(nil, DoInvoke);
e := mi.CodeAddress;
try
e(MyGUID);
finally
mi.Free;
end;
end;
begin
RegisterTest(TTestEvent.Suite);
RunRegisteredTests;
ReportMemoryLeaksOnShutdown := True;
end.
|