Search code examples
delphidunit

How to make Delphi DUnit test fail when TSQLConnection.Connected = true


When using Delphi IDE, it will silently change SQLConnection.Connected to "true" when populating field or table lists in various properties.

Since I don't want to release with Connected = true, I need my dunit test to fail when TSQLConnection.Connected is left true in dfm.


Solution

  • I solve this in another way. I wrote a little utility that loads a DFM file, and looks for properties that should not be present. Including the database.connected = true values.

    This can be modified to work with any appropriate properties. I have put the core of the code here too.

    To make this really useful, you should use this utility in your build script (I use FinalBuilder). My script starts by looping on .dfm files, stripping any of these properties, and then it compiles and runs the unit tests. If they pass, then it continutes to build the main application. To me, this is a better way than having a unit test fail, as you can start off from a guaranteed known good point.

    nState := 0;
    bFound := False;
    for nFileLoop := 0 to memoFile.Lines.Count - 1 do
    begin
      szLine := memoFile.Lines[nFileLoop];
    
      case nState of      //
      0:
         begin
            if(0 <> Pos('TADOConnection', szLine)) then
            begin
               szSeeking := 'Connected';
               nState := 1;
            end
            else if(0 <> Pos('TADOTable', szLine)) then
            begin
               szSeeking := 'Active';
               nState := 1;
            end
            else if(0 <> Pos('TADOQuery', szLine)) then
            begin
               szSeeking := 'Active';
               nState := 1;
            end
            else if(0 <> Pos('TDBISAMTable', szLine)) then
            begin
               szSeeking := 'Active';
               nState := 1;
            end
            else if(0 <> Pos('TDBISAMDatabase', szLine)) then
            begin
               szSeeking := 'Connected';
               nState := 1;
            end
            else if(0 <> Pos('TDBISAMSession', szLine)) then
            begin
               szSeeking := 'Active';
               nState := 1;
            end
            else if(0 <> Pos('TDBISAMQuery', szLine)) then
            begin
               szSeeking := 'Active';
               nState := 1;
            end;
         end;
      1 :
         begin
            bFound := True;
            if(0 <> Pos('end', szLine)) then
            begin
               nState := 0;
            end
            else if(0 <> Pos(szSeeking, szLine)) then
            begin
               nPos := Pos('=', szLine);
               if nPos > 0 then
               begin
                  memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False';
               end;
            end;
         end;
      end;      // case
    end;