
unit VerifyDxInterface;

{
  Diese Datei ist nur zur Information, nicht als Unit einbinden !!!
}

interface

type
  tVerifyMode      = ( vmAll,            // ggf  Compare, auch  positive Ergebnisse melden
                       vmNegative,       // ggf  Compare, nur   negative Ergebnisse melden
                       vmErrors,         // kein Compare, nur   Fehler              melden
                       vmSilent          // kein Compare, keine Ergebnisse          melden
                     );

  (* Verifikation auf Compare-Basis, findet lokal im Client statt *)
  VerifyDx = record
        type  tVerifyCmpResult = ( vrNone, vrNew, vrEqual, vrNotEqual, vrCancel, vrError );
        const cVerifyCmpResult : array[VerifyDx.tVerifyCmpResult] of string 
		                       = ( 'None', 'New', 'Equal', 'NotEqual', 'Cancel', 'Error' );


        (* VerifyProc deklarieren *)
        class procedure DefineProc ( const ProcName: string; ProcAdr: TProcedure );

        (* Gruppe von VerifyProcs deklarieren *)
        (* Der Parameter "List" enthält Paare von "vName: string" und "vAdr: TProcedure"    *)
        (* Dabei muss vAdr als "@ProcName" angegeben werden                                 *)
        class procedure DefineGroup( const GroupName: string; ProcAdrList: array of const );

        (* VerifyProc starten über Tastatur. *)
        class procedure DefineShortCut( Proc: TProcedure; const Shortcut: string );

        (* Aktueller Testfall vergleicht nach dem Trace-Protokoll zusätzlich diese Datei              *)
        (* UseDataDir   = true: Die Soll-Datei wird ins Dir des DataFile gelegt mit Extension ".ok"   *)
        (* DataFileOnly = true: Keine VerifyDx-Datei erzeugen, nur DataFile                           *)
        (* KillDataIfEqual = true: DataFile war nur für Test. Nach erfolgreichem Test löschen          *)
        class procedure SetDataFile( const FileName: string; UseDataDir: boolean = false; KillDataIfEqual: boolean = false ); static;

        (* Deklarierte VerifyProc oder -Gruppe deaktivieren *)
        class procedure DisableProc ( Proc: TProcedure        );
        class procedure DisableProc ( const ProcName:  string );
        class procedure DisableGroup( const GroupName: string );

        (* Aktionen ohne Aufzeichnung vor/nach Verify-Durchgang (einzeln oder Gruppe)  *)
        class procedure DefinePrePostAll ( PreProc: TProcedure; PostProc: TProcedure = nil );
        (* Aktionen ohne Aufzeichnung vor/nach jedem Testfall *)
        class procedure DefinePrePostEach( PreProc: TProcedure; PostProc: TProcedure = nil );

        (* Trace-Ausgaben pausieren, z.B. für Vorbereitungen für einzelnen Testfall *)
        class procedure IncHide;
        class procedure DecHide;

        type tVerifyCmpResult = ( vrNone, vrNew, vrEqual, vrNotEqual, vrCancel, vrError );
        (* manueller Aufruf eines Testfalls. Dem Namen kann ein SubDirectory zum Speichern voranstehen *)
        (* WriteVerifyFile = false: Falls nur das SetDataFile() gebraucht wird                         *)
        class function  CompareStart( const ATestName: string; WriteVerifyFile: boolean = true ): boolean;
        class procedure CompareBreak;
        class function  CompareEnd: tVerifyCmpResult;

        (* Plapperigkeit des Vergleichs *)
        class property  Mode: TVerifyMode;
        
        (* Hier kann der Client Adressen privater Prozeduren oder Variablen für VerifyDx hinterlegen *)		
        type TExport = pointer;
        class property  Exported[i: integer]: TExport;

        (* true wenn ein Verify-Fall läuft (zwischen CompareStart() und CompareEnd()    *)
        class property  Running: boolean;

        (* Vom User ungleich 0 zu setzen wenn Verify aus User-Sicht fehlerhaft *)
        class var       Error: integer;
      end;

end.
