mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
150 lines
2.5 KiB
ObjectPascal
150 lines
2.5 KiB
ObjectPascal
unit uTest;
|
|
|
|
interface
|
|
|
|
uses
|
|
DUnitX.TestFramework, DDetours;
|
|
|
|
type
|
|
|
|
[TestFixture]
|
|
TDDetours = class(TObject)
|
|
public
|
|
[Setup]
|
|
procedure Setup;
|
|
[TearDown]
|
|
procedure TearDown;
|
|
// Sample Methods
|
|
// Simple single Test
|
|
[Test]
|
|
procedure Test1;
|
|
[Test]
|
|
procedure Test2;
|
|
[Test]
|
|
procedure Test3;
|
|
[Test]
|
|
procedure Test4;
|
|
end;
|
|
|
|
implementation
|
|
|
|
const
|
|
Pi = 3.14;
|
|
|
|
const
|
|
NewPi = 3.14159265359;
|
|
|
|
type
|
|
TAdd = function(a, b: Integer): Integer;
|
|
TSub = function(a, b: Integer): Integer;
|
|
TGetPi = function(): Extended;
|
|
|
|
var
|
|
TrampolineAdd: TAdd = nil;
|
|
TrampolineSub: TSub = nil;
|
|
TrampolineGetPi: TGetPi = nil;
|
|
|
|
FInterceptSub: TIntercept<TSub, Integer>;
|
|
|
|
function Add(a, b: Integer): Integer;
|
|
begin
|
|
Result := a + b;
|
|
end;
|
|
|
|
function Sub(a, b: Integer): Integer;
|
|
begin
|
|
Result := a - b;
|
|
end;
|
|
|
|
function GetPi(): Extended;
|
|
begin
|
|
Result := Pi;
|
|
end;
|
|
|
|
function InterceptAdd(a, b: Integer): Integer;
|
|
begin
|
|
Result := TrampolineAdd(a, b);
|
|
end;
|
|
|
|
function InterceptSub(a, b: Integer): Integer;
|
|
var
|
|
Param: Integer;
|
|
begin
|
|
Param := Integer(GetTrampolineParam(TrampolineSub));
|
|
Result := TrampolineSub(a, Param);
|
|
end;
|
|
|
|
function InterceptSub2(a, b: Integer): Integer;
|
|
begin
|
|
Result := FInterceptSub.TrampoLine(a, FInterceptSub.Param);
|
|
end;
|
|
|
|
function InterceptGetPi(): Extended;
|
|
begin
|
|
Result := NewPi;
|
|
end;
|
|
|
|
procedure TDDetours.Setup;
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TDDetours.TearDown;
|
|
begin
|
|
end;
|
|
|
|
procedure TDDetours.Test1;
|
|
var
|
|
a, b, c: Integer;
|
|
begin
|
|
a := 3;
|
|
b := 2;
|
|
c := a + b;
|
|
TrampolineAdd := InterceptCreate(@Add, @InterceptAdd);
|
|
Assert.AreEqual(Add(a, b), c);
|
|
InterceptRemove(@TrampolineAdd);
|
|
Assert.AreEqual(Add(a, b), c);
|
|
end;
|
|
|
|
procedure TDDetours.Test2;
|
|
var
|
|
a, b, c: Integer;
|
|
Param: Pointer;
|
|
begin
|
|
a := 3;
|
|
b := 2;
|
|
c := a - b;
|
|
Param := Pointer(0);
|
|
TrampolineSub := InterceptCreate(@Sub, @InterceptSub, Param, DefaultInterceptOptions);
|
|
Assert.AreEqual(Sub(a, b), a);
|
|
InterceptRemove(@TrampolineSub);
|
|
Assert.AreEqual(Sub(a, b), c);
|
|
end;
|
|
|
|
procedure TDDetours.Test3;
|
|
begin
|
|
TrampolineAdd := InterceptCreate(@GetPi, @InterceptGetPi);
|
|
Assert.AreEqual(GetPi(), NewPi);
|
|
InterceptRemove(@TrampolineAdd);
|
|
Assert.AreEqual(GetPi(), Pi);
|
|
end;
|
|
|
|
procedure TDDetours.Test4;
|
|
var
|
|
a, b, c: Integer;
|
|
begin
|
|
a := 3;
|
|
b := 2;
|
|
c := a - b;
|
|
FInterceptSub := TIntercept<TSub, Integer>.Create(Sub, InterceptSub2, 0);
|
|
Assert.AreEqual(Sub(a, b), a);
|
|
FInterceptSub.Free();
|
|
Assert.AreEqual(Sub(a, b), c);
|
|
end;
|
|
|
|
initialization
|
|
|
|
TDUnitX.RegisterTestFixture(TDDetours);
|
|
|
|
end.
|