//NOTEST
//
// $Id: test_all.prg 9198 2008-08-20 09:56:47Z vszakats $
//

// AutoMatic Test Bank
// Patrick Mast and David G. Holm
// Compiler independent, but not platform independent (creates a DOS style batch file).
// Specify the hbxxx batch file name to use to build with on the command line.
// Defaults to "run_prg".
// The test_all.bat batch file has restart capability. For example, if there is an error
// in testgt.prg, find and fix the problem, then restart by running "TEST_ALL TESTGT".

#include "directry.ch"
#include "fileio.ch"

Function Main( cOption, cCmd )
   LOCAL aDir,f,n,o,p,cRead

   SET DATE ANSI
   SET CENTURY ON

   aDir := Directory("*.prg")
   o := fCreate("test_all.bat")
   IF Empty( cOption )
      cOption:="run_prg"
   ENDIF
   IF Empty( cCmd )
      cCmd := "call "
   ELSE
      cCmd += " /c "
   ENDIF

   fWrite(o,"if not .%1==. goto %1" + Chr(13) + Chr(10))

   FOR f := 1 TO Len(aDir)
      IF TestIt(aDir[f][1])
         p := At(".prg",Lower(aDir[f][1]))
         IF p > 1
            n := Left(aDir[f][1],p-1)
            fWrite(o,":" + n + Chr(13) + Chr(10))
            fWrite(o,cCmd + cOption + " " + n + Chr(13) + Chr(10);
                + "if errorlevel 1 goto end" + Chr(13) + Chr(10) + Chr(13) + Chr(10))
         ENDIF
      ENDIF
   NEXT

   fWrite(o,":END"+Chr(13)+Chr(10))
   fClose(o)

RETURN NIL

Function TestIt(cFile)
LOCAL nH1,lRetu,nH2

   nH1 := fOpen(cFile)
   lRetu := Upper(fReadStr(nH1,8))<>"//NOTEST"
   fClose(nH1)

   IF !lRetu
      IF !File("NotTestd.txt")
         nH2 := fCreate("nottestd.txt")
      ELSE
         nH2 := fOpen("nottestd.txt", FO_WRITE)
      ENDIF
      fSeek(nH2, 0, FS_END)
      fWrite(nH2,DtoC(Date())+"  "+Time()+"  "+cFile+Chr(13)+Chr(10))
      fClose(nH2)
   ENDIF

RETURN lRetu
