[fpc-pascal] Class constructor called unconditionally

Graeme Geldenhuys mailinglists at geldenhuys.co.uk
Thu Mar 31 18:13:07 CEST 2016


On 2016-03-31 16:46, Dmitry Boyarintsev wrote:
> One could use an alternative approach and have "binding" units.
> The unit would consist of initialization section only, that does the
> necessary binding code.

tiOPF's TestSuite project has a tiTestDependencies.pas unit which
primarily consists of a large uses clause and a procedure called
tiRegisterTests

eg:

procedure tiRegisterTests;
begin
  ...snip...
  GTIOPFManager.DefaultOIDGenerator:= TtiOIDGeneratorForTesting.Create;

  tiBaseObject_TST.RegisterTests;
  tiUtils_TST.RegisterTests;
  tiRTTI_TST.RegisterTests;

  ...snip...
end;

Each *_TST.pas unit defines a global RegisterTests() method than needs
to be called before that unit is activated.


In the framework side we have a unit that registers various logging
output formats. Again a tiLogReg.pas unit is used, but this time its
inititialization section activates all the dependency logging classes.
This whereas with the test framework the tiRegisterTests procedure
needed to be called, with the tiLogReg you just need to have it
somewhere in your program unit's uses clause.

========================
unit tiLogReg;

{$I tiDefines.inc}

interface

implementation
uses
   tiLog
//  ,tiConstants    { ToDo: We should move log constant to this unit. }
  ,tiCommandLineParams
  ,tiLogToFile
  ,tiLogToGUI
  ,tiLogToConsole
 ;


initialization

  if gCommandLineParams.IsParam(csLog)
  or gCommandLineParams.IsParam(csLogVisual) then
    GLog.RegisterLog(TtiLogToFile.Create);

  if gCommandLineParams.IsParam(csLogVisual) then
    GLog.RegisterLog(TtiLogToGUI.Create);

  if gCommandLineParams.IsParam(csLogConsole) then
    GLog.RegisterLog(TtiLogToConsole.Create);

========================
Regards,
  - Graeme -

-- 
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/

My public PGP key:  http://tinyurl.com/graeme-pgp



More information about the fpc-pascal mailing list