Files
harbour-core/harbour/tests/rddtest/rddtst.prg
Viktor Szakats 2242853a44 2012-07-22 15:55 UTC+0200 Viktor Szakats (vszakats syenar.net)
* contrib/hbide/idestylesheets.prg
  * contrib/hbide/idetags.prg
    ! fixed wrong usage of hb_B*() raw string functions

  * contrib/hbmysql/utils/dbf2mysq.prg
    * formatting

  * contrib/hbpgsql/tests/dbf2pg.prg
  * extras/httpsrv/session.prg
  * extras/hbvpdf/hbvpdf.prg
  * extras/hbvpdf/hbvpdft.prg
  * tests/rddtest/rddtst.prg
    * using F_ERROR instead of -1

  * contrib/hbtip/tests/dnldftp.prg
  * contrib/hbtip/tests/upld_ftp.prg
  * tests/codebloc.prg
  * tests/recursiv.prg
  * tests/test_all.prg
  * tests/testdbf.prg
  * tests/teststr.prg
    * using hb_eol() instead of explict chr() values
2012-07-22 13:59:53 +00:00

262 lines
5.5 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* RDD tests
*
* Copyright 2008 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
* www - http://harbour-project.org
*
*/
//#define _TEST_CREATE_
#ifndef N_LOOP
#define N_LOOP 15
#endif
#ifndef EOL
#define EOL chr(13)+chr(10)
#endif
#command ? => outstd(EOL)
#command ? <xx,...> => outstd(<xx>, EOL)
#command ?? =>
#command ?? <xx,...> => outstd(<xx>)
//#command RDDTEST <x> => rdd_test( <x> )
//#command RDDTEST <f>, <r>, <x> => rdd_test( #<f>, <{f}>, <r>, <x> )
#ifdef _TEST_CREATE_
#command RDDTESTC <*x*> => <x>; rddtst_wr( #<x> )
#command RDDTESTF <x> => rddtst_wr( #<x>, <x> )
#command RDDTEST <*x*> => RDDTESTC <x>
#command RDDTEST <x> => RDDTESTF <x>
#else
#command RDDTESTC <s>, <*x*> => <x>; rddtst_tst( #<x>, <s> )
#command RDDTESTF <r>, <s>, <x> => rddtst_tst( #<x>, <s>, <x>, <r> )
//#command RDDTEST <s>, <*x*> => RDDTESTC <x>
#endif
#define _DBNAME "_tst"
REQUEST DBFCDX
field FSTR, FNUM
#include "fileio.ch"
#ifdef _TEST_CREATE_
static hMake := F_ERROR
#endif
static nTested := 0
static nErrors := 0
/* list of functions which may return unexpected value in Clipper
instead of documented NIL. If you will find others please add them */
static aBadRetFunc:={ "DBSKIP", "DBGOTO", "DBDELETE", "DBRECALL", ;
"DBUNLOCK", "DBCOMMIT" }
#ifdef _TEST_SCOPE_
#include "ord.ch"
#include "dbinfo.ch"
#endif
#ifdef __HARBOUR__
#ifdef _TEST_ADS_
#include "ads.ch"
REQUEST ADS
init proc adstest_init()
rddRegister( "ADS", 1 )
AdsSetServerType( ADS_LOCAL_SERVER )
//__rddSetDefault( "ADS" )
return
#endif
#endif
//REQUEST DBSEEK, DBGOTO, DBGOTOP, DBGOBOTTOM, ORDSETFOCUS, ORDSCOPE
#ifdef _TEST_CREATE_
function main(cOutFile, rdd)
test_init(rdd,cOutFile)
test_main()
test_close()
return nil
#else
function main(rdd)
test_init(rdd)
test_main()
test_close()
return nil
#endif
static function test_init(rdd,cOutFile)
local n, cOut, aDb:={{"FSTR", "C", 10, 0},{"FNUM", "N", 10, 0}}
if empty(rdd)
#ifdef _TESTRDD
rdd:=_TESTRDD
#else
rdd:="DBFCDX"
#endif
endif
rddSetDefault(rdd)
#ifdef _TEST_CREATE_
if empty(cOutFile)
? "Syntax: <outfile.prg> [<rddname>]"
quit
elseif (hMake:=fcreate(cOutFile))==F_ERROR
? "Cannot create file: ", cOutFile
quit
endif
cOut:=""
#ifdef _TEST_ADS_
cOut+='#define _TEST_ADS_'+EOL
#endif
cOut+=;
'REQUEST '+rdd+EOL+;
'#define _TESTRDD "'+rdd+'"'+EOL+;
'#include "rddtst.prg"'+EOL+;
EOL+;
'FUNCTION test_main()'+EOL+;
EOL
if !fwrite(hMake, cOut)==len(cOut)
? "write error."
quit
endif
#endif
aeval(directory("./"+_DBNAME+".??x"),{|x|ferase(x[1])})
aeval(directory("./TG_?.??x"),{|x|ferase(x[1])})
ferase("./"+_DBNAME+".dbf")
? "RDD: "+rdd
? "creating databse and index..."
dbcreate(_DBNAME, aDb)
/*
use _DBNAME shared
for n:=1 to N_LOOP
dbappend()
replace FNUM with int((n+2)/3)
replace FSTR with chr(FNUM+48)
//? FNUM, FSTR, recno(), eof(), bof()
next
dbcommit()
dbunlock()
*/
return nil
static function test_close()
local cOut
#ifdef _TEST_CREATE_
if hMake != F_ERROR
cOut:=EOL+;
'RETURN NIL'+EOL
if !fwrite(hMake, cOut)==len(cOut)
? "write error."
quit
endif
fclose(hMake)
endif
#else
?
? "Number of tests: "+ltrim(str(nTested))
? "Number of errors: "+ltrim(str(nErrors))
#endif
dbclosearea()
aeval(directory("./"+_DBNAME+".??x"),{|x|ferase(x[1])})
aeval(directory("./TG_?.??x"),{|x|ferase(x[1])})
ferase("./"+_DBNAME+".dbf")
?
return nil
static procedure rdd_retval()
return
static function rdd_state()
return {recno(), bof(), eof(), found()}
static function itm2str(itm)
local cStr:="", i
if itm==NIL
cStr+="NIL"
elseif valtype(itm)=="C"
cStr+='"'+strtran(itm,'"','"+chr(34)+"')+'"'
elseif valtype(itm)=="N"
cStr+=ltrim(str(itm))
elseif valtype(itm)=="L"
cStr+=iif(itm,".t.",".f.")
elseif valtype(itm)=="D"
cStr+="CTOD("+DTOC(itm)+")"
elseif valtype(itm)=="B"
cStr+="{||"+itm2str(eval(itm))+"}"
elseif valtype(itm)=="A"
cStr+="{"
for i:=1 to len(itm)
cStr+=iif(i==1,"",",")+itm2str(itm[i])
next
cStr+="}"
endif
return cStr
#ifdef _TEST_CREATE_
static function rddtst_wr(cAction, xRet)
local aState, cOut
if ascan( aBadRetFunc, {|x| upper(cAction) = x + "(" } ) != 0
xRet := NIL
endif
aState:=rdd_state()
if pcount()>1
cOut:="RDDTESTF "+itm2str(xRet)+", "+itm2str(aState)+", "+cAction+EOL
else
cOut:="RDDTESTC "+itm2str(aState)+", "+cAction+EOL
endif
if !fwrite(hMake, cOut)==len(cOut)
? "write error."
quit
endif
return nil
#else
//rddtst_tst( #<x>, <s>, <x>, <r> )
static function rddtst_tst(cAction, aExState, xRet, xExRet)
local aState, lOK:=(.t.), s1, s2, i
aState:=rdd_state()
if pcount()>=4
if ascan( aBadRetFunc, {|x| upper(cAction) = x + "(" } ) != 0
xRet := NIL
endif
if !valtype(xRet)==valtype(xExRet) .or.;
!iif(valtype(xRet)=="B", eval(xRet)==eval(xExRet), xRet==xExRet)
lOK:=(.f.)
endif
s1:=itm2str(xRet)
s2:=itm2str(xExRet)
s1:=padr(s1, max(len(s1),len(s2))+1)
s2:=padr(s2, len(s1))
else
s1:=s2:=""
endif
if !empty(aExState) .and. lOK
for i:=1 to len(aExState)
if !valtype(aState[i])==valtype(aExState[i]) .or. !aState[i]==aExState[i]
lOK:=(.f.)
exit
endif
next
endif
?
?? iif(lOK,"OK ", "ERR ")+cAction+" => "+s1+itm2str(aState)
if !lOK
?
?? " "+cAction+" => "+s2+itm2str(aExState)
nErrors++
endif
nTested++
return nil
#endif