123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- unit utcanalytics;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testutils, testregistry, system.analytics;
- type
- { TListener }
- TListener = Class(TInterfacedObject,IApplicationActivityListener)
- private
- FLastActivity: TAppActivity;
- FLastContext: TObject;
- FLastSender: TObject;
- FLastTimeStamp: TDateTime;
- Protected
- procedure TrackAppStart(const TimeStamp: TDateTime);
- procedure TrackAppExit(const TimeStamp: TDateTime);
- procedure TrackControlFocused(const TimeStamp: TDateTime; const Sender: TObject);
- procedure TrackWindowActivated(const TimeStamp: TDateTime; const Sender: TObject);
- procedure TrackEvent(const TimeStamp: TDateTime; const Sender, Context: TObject);
- procedure TrackException(const TimeStamp: TDateTime; const E: Exception);
- Public
- Procedure Reset;
- Property LastTimestamp : TDateTime Read FLastTimeStamp;
- Property LastActivity : TAppActivity Read FLastActivity;
- Property LastSender : TObject Read FLastSender;
- Property LastContext : TObject Read FLastContext;
- end;
- { TTestAnalytics }
- TTestAnalytics= class(TTestCase)
- private
- FListener: TListener;
- FListener2: TListener;
- FListenerIntf : IApplicationActivityListener;
- FListener2Intf : IApplicationActivityListener;
- FManager: TAnalyticsManager;
- FTime: TDateTime;
- protected
- procedure SetUp; override;
- procedure TearDown; override;
- Procedure Register;
- Procedure AssertEquals(const Msg : String; aExpected, aActual : TAppActivity); overload;
- procedure AssertEvent(const Msg: String; aListener: TListener;
- aActivity: TAppActivity; aSender: TObject = Nil; aContext: TObject = Nil);
- property Manager : TAnalyticsManager Read FManager;
- Property Listener : TListener Read FListener;
- Property Listener2 : TListener Read FListener2;
- published
- procedure TestHookUp;
- procedure TestRegister;
- Procedure TestAppStart;
- procedure TestAppExit;
- procedure TestFocused;
- procedure TestWindowActivated;
- procedure TestEvent;
- procedure TestException;
- procedure TestUnRegister;
- end;
- implementation
- uses typinfo;
- { TListener }
- procedure TListener.TrackAppStart(const TimeStamp: TDateTime);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.AppStart;
- end;
- procedure TListener.TrackAppExit(const TimeStamp: TDateTime);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.AppExit;
- end;
- procedure TListener.TrackControlFocused(const TimeStamp: TDateTime;
- const Sender: TObject);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.ControlFocused;
- FLastSender:=Sender;
- FLastContext:=Nil;
- end;
- procedure TListener.TrackWindowActivated(const TimeStamp: TDateTime;
- const Sender: TObject);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.WindowActivated;
- FLastSender:=Sender;
- FLastContext:=Nil;
- end;
- procedure TListener.TrackEvent(const TimeStamp: TDateTime; const Sender,
- Context: TObject);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.Custom;
- FLastSender:=Sender;
- FLastContext:=Context;
- end;
- procedure TListener.TrackException(const TimeStamp: TDateTime;
- const E: Exception);
- begin
- FLastTimeStamp:=TimeStamp;
- FLastActivity:=TAppActivity.Exception;
- FLastSender:=E;
- FLastContext:=Nil;
- end;
- procedure TListener.Reset;
- begin
- FLastActivity:=Default(TAppActivity);
- FLastContext:=Default(TObject);
- FLastSender:=Default(TObject);
- FLastTimeStamp:=Default(TDateTime);
- end;
- procedure TTestAnalytics.TestHookUp;
- begin
- AssertNotNull('Have manager',Manager);
- AssertNotNull('Have listener',Listener);
- end;
- procedure TTestAnalytics.TestRegister;
- begin
- Register;
- AssertTrue('Tracking enabled',Manager.TrackingEnabled);
- end;
- procedure TTestAnalytics.TestAppStart;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.AppStart);
- AssertEvent('Listener 1',Listener,TAppActivity.AppStart);
- AssertEvent('Listener 2',Listener2,TAppActivity.AppStart);
- end;
- procedure TTestAnalytics.TestAppExit;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.AppExit);
- AssertEvent('Listener 1',Listener,TAppActivity.AppExit);
- AssertEvent('Listener 2',Listener2,TAppActivity.AppExit);
- end;
- procedure TTestAnalytics.TestFocused;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.ControlFocused,Self);
- AssertEvent('Listener 1',Listener,TAppActivity.ControlFocused,Self,Nil);
- AssertEvent('Listener 2',Listener2,TAppActivity.ControlFocused,Self,Nil);
- end;
- procedure TTestAnalytics.TestWindowActivated;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.WindowActivated,Self,Nil);
- AssertEvent('Listener 1',Listener,TAppActivity.WindowActivated,Self,Nil);
- AssertEvent('Listener 2',Listener2,TAppActivity.WindowActivated,Self,Nil);
- end;
- procedure TTestAnalytics.TestEvent;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.Custom,Self,Listener);
- AssertEvent('Listener 1',Listener,TAppActivity.Custom,Self,Listener);
- AssertEvent('Listener 2',Listener2,TAppActivity.Custom,Self,Listener);
- end;
- procedure TTestAnalytics.TestException;
- var
- E : Exception;
- begin
- Register;
- E:=Exception.Create('Soso');
- try
- Manager.RecordActivity(TAppActivity.Exception,E);
- AssertEvent('Listener 1',Listener,TAppActivity.Exception,E);
- AssertEvent('Listener 2',Listener2,TAppActivity.Exception,E);
- finally
- E.Free;
- end;
- end;
- procedure TTestAnalytics.TestUnRegister;
- begin
- Register;
- Manager.RecordActivity(TAppActivity.AppExit);
- AssertEvent('Listener 1',Listener,TAppActivity.AppExit);
- AssertEvent('Listener 2',Listener2,TAppActivity.AppExit);
- Manager.UnregisterActivityListener(FListener2Intf);
- Listener2.Reset;
- Manager.RecordActivity(TAppActivity.AppExit);
- AssertEvent('Listener 1',Listener,TAppActivity.AppExit);
- AssertEquals('Listener2',0,Listener2.LastTimestamp);
- end;
- procedure TTestAnalytics.SetUp;
- begin
- FManager:=TAnalyticsManager.Create;
- FListener:=TListener.Create;
- FListenerIntf:=FListener as IApplicationActivityListener;
- FListener2:=TListener.Create;
- FListener2Intf:=FListener2 as IApplicationActivityListener;
- end;
- procedure TTestAnalytics.TearDown;
- begin
- FreeAndNil(FManager);
- // FreeAndNil(FListener);
- FListenerIntf:=Nil; // Will free
- FListener:=nil;
- FListener2Intf:=Nil; // Will free
- FListener2:=nil;
- end;
- procedure TTestAnalytics.Register;
- begin
- Manager.RegisterActivityListener(Listener as IApplicationActivityListener);
- Manager.RegisterActivityListener(Listener2 as IApplicationActivityListener);
- FTime:=Now;
- end;
- procedure TTestAnalytics.AssertEquals(const Msg: String; aExpected, aActual: TAppActivity);
- begin
- AssertEquals(Msg,GetEnumName(TypeInfo(TAppActivity),Ord(aExpected)),
- GetEnumName(TypeInfo(TAppActivity),Ord(aActual)));
- end;
- procedure TTestAnalytics.AssertEvent(const Msg: String; aListener: TListener;
- aActivity: TAppActivity; aSender: TObject; aContext: TObject);
- begin
- AssertEquals(Msg+' activity',aActivity,aListener.LastActivity);
- AssertTrue(Msg+' timestamp',aListener.LastTimestamp>=FTime);
- AssertSame(Msg+' sender',aSender,aListener.LastSender);
- AssertSame(Msg+' context',aContext,aListener.LastContext);
- end;
- initialization
- RegisterTest(TTestAnalytics);
- end.
|