fpc/packages/vcl-compat/tests/utccredentials.pas
2024-02-16 21:48:50 +01:00

205 lines
6.4 KiB
ObjectPascal

unit utccredentials;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, system.credentials, fpcunit, testregistry;
Type
{ TTestCredentials }
TTestCredentials = class(TTestcase)
private
FSuccess : Boolean;
FUser,FPass,FDom : String;
FEventMethod,
FEventMethod2 : TMethod;
procedure DoLoginEvent(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
procedure DoLoginEvent2(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
procedure ReceiveEvent(Sender: TObject; const Username, Password, Domain: string; var Handled: Boolean);
Public
procedure AssertCredentials(const Msg, aUser, aPassword, aDomain: String);
Procedure Setup; override;
Procedure TearDown; override;
Published
Procedure TestHookup;
Procedure TestAddHandler;
Procedure TestRemoveHandler;
Procedure TestGetLoginCredentialEvent;
Procedure TestGetloginCredentials;
procedure TestGetloginCredentials2;
procedure TestGetloginCredentials3;
end;
implementation
{ TTestCredentials }
procedure TTestCredentials.DoLoginEvent(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
begin
CallBack(Sender,FUser,FPass,FDom,Success);
end;
procedure TTestCredentials.DoLoginEvent2(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
begin
CallBack(Sender,FUser+'2',FPass+'2',FDom+'2',Success);
end;
procedure TTestCredentials.AssertCredentials(const Msg, aUser, aPassword, aDomain: String);
begin
AssertEquals(Msg+': User',FUser,aUser);
AssertEquals(Msg+': Password',FPass,aPassword);
AssertEquals(Msg+': Domain',FDom,aDomain);
end;
procedure TTestCredentials.Setup;
begin
inherited Setup;
TLoginCredentialService.Clear;
FEventMethod2:=TMethod(@Self.DoLoginEvent2);
FEventMethod:=TMethod(@Self.DoLoginEvent);
FUser:='U';
FPass:='P';
FDom:='D';
FSuccess:=True;
end;
procedure TTestCredentials.TearDown;
begin
inherited TearDown;
end;
procedure TTestCredentials.TestHookup;
begin
AssertEquals('handler count',0,TLoginCredentialService.HandlerCount);
AssertEquals('Default user','U',FUser);
AssertEquals('Default pwd','P',FPass);
AssertEquals('Default Dom','D',FDom);
end;
procedure TTestCredentials.TestAddHandler;
begin
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent);
AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count c',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent2);
AssertEquals('handler count d',3,TLoginCredentialService.HandlerCount);
end;
procedure TTestCredentials.TestRemoveHandler;
begin
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent);
AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count c',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent2);
AssertEquals('handler count d',3,TLoginCredentialService.HandlerCount);
TLoginCredentialService.UnRegisterLoginHandler('x',@DoLoginEvent2);
AssertEquals('handler count e',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.UnRegisterLoginHandler('z',@DoLoginEvent2);
AssertEquals('handler count f',2,TLoginCredentialService.HandlerCount);
TLoginCredentialService.UnRegisterLoginHandler('y',@DoLoginEvent);
AssertEquals('handler count g',1,TLoginCredentialService.HandlerCount);
TLoginCredentialService.UnRegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count h',0,TLoginCredentialService.HandlerCount);
end;
procedure TTestCredentials.TestGetLoginCredentialEvent;
var
E : TLoginCredentialService.TLoginCredentialEvent;
ME : TMethod;
begin
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent2);
AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
E:=TLoginCredentialService.GetLoginCredentialEvent('y');
ME:=TMethod(E);
AssertTrue('Same method',(ME.Code=FEventMethod2.Code) and (ME.Data=FEventMethod2.Data));
E:=TLoginCredentialService.GetLoginCredentialEvent('x');
ME:=TMethod(E);
AssertTrue('Same method',(ME.Code=FEventMethod.Code) and (ME.Data=FEventMethod.Data));
E:=TLoginCredentialService.GetLoginCredentialEvent('z');
AssertTrue('Same method',E=Nil);
end;
procedure TTestCredentials.TestGetloginCredentials;
var
U,P,D : String;
begin
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertTrue('Getcreds',TLoginCredentialService.GetLoginCredentials('x',U,P,D));
AssertCredentials('Login',U,P,D);
end;
procedure TTestCredentials.ReceiveEvent(Sender: TObject; const Username, Password, Domain: string; var Handled: Boolean) ;
begin
Handled:=FSuccess;
AssertSame('Correct sender ',Sender,Self);
if FSuccess then
AssertCredentials('Login',UserName,Password,Domain);
end;
procedure TTestCredentials.TestGetloginCredentials2;
var
U,P,D : String;
Res : Boolean;
Function DoReceive(const Username, Password, Domain: string): Boolean;
begin
Result:=Res;
if Res then
begin
U:=userName;
P:=Password;
D:=Domain;
end;
end;
begin
Res:=True;
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertTrue('Getcreds success',TLoginCredentialService.GetLoginCredentials('x',@DoReceive));
AssertCredentials('Login',U,P,D);
Res:=False;
AssertFalse('Getcreds fail',TLoginCredentialService.GetLoginCredentials('x',@DoReceive));
end;
procedure TTestCredentials.TestGetloginCredentials3;
begin
TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
AssertTrue('Getcreds success',TLoginCredentialService.GetLoginCredentials('x',Self,@ReceiveEvent));
FSuccess:=False;
AssertFalse('Getcreds fail',TLoginCredentialService.GetLoginCredentials('x',Self,@ReceiveEvent));
end;
initialization
RegisterTest(TTestCredentials);
end.