Files
harbour-core/harbour/tests/rddtest/rddtst.prg
Viktor Szakats 45a114e471 2010-06-03 18:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* tests/testsha1.prg
  * tests/longdev.prg
  * tests/clsccast.prg
  * tests/cmphello.prg
  * tests/clsicast.prg
  * tests/testop.prg
  * tests/clsscast.prg
  * tests/objarr.prg
  * tests/rddtest/rddmktst.prg
  * tests/rddtest/adscl52.prg
  * tests/rddtest/adscl53.prg
  * tests/rddtest/ntxcl52.prg
  * tests/rddtest/ntxcl53.prg
  * tests/rddtest/cdxcl52.prg
  * tests/rddtest/rddtst.prg
  * tests/rddtest/cdxcl53.prg
  * tests/transtst.prg
  * tests/output.prg
  * tests/ac_test2.prg
  * tests/clsscope.prg
  * tests/dosshell.prg
  * tests/sbartest.prg
  * tests/speedold.prg
  * tests/sdf_test.prg
  * tests/wcecon.prg
  * tests/debugtst.prg
  * tests/testdyn.c
  * tests/multiarg.prg
  * tests/fornext.prg
  * tests/hbinline.prg
  * tests/foreach2.prg
  * tests/objasign.prg
  * tests/scroll.prg
  * tests/inherit.prg
  * tests/rto_get.prg
  * tests/boxtst2.prg
  * tests/inkeytst.prg
  * tests/overload.prg
  * tests/cpinfo.prg
  * tests/gtwin.prg
  * tests/mt/mttest08.prg
  * tests/mt/mttest09.prg
  * tests/mt/mttest01.prg
  * tests/mt/mttest10.prg
  * tests/mt/mttest02.prg
  * tests/mt/mttest11.prg
  * tests/mt/mttest03.prg
  * tests/mt/mttest12.prg
  * tests/mt/mttest04.prg
  * tests/mt/mttest05.prg
  * tests/mt/mttest06.prg
  * tests/mt/mttest07.prg
  * tests/speedtst.prg
  * tests/testsha2.prg
  * tests/hsxtest.prg
  * tests/arrayidx.prg
  * tests/clsnv.prg
  * tests/rto_tb.prg
  * tests/gtchars.prg
  * tests/disptest.prg
  * tests/funcarr.prg
  * tests/testhtml.prg
  * tests/readhrb.prg
  * tests/tstcolor.prg
  * tests/gtxfnt.prg
  * tests/devtest.prg
  * tests/aliaslck.prg
  * tests/stripem.prg
  * tests/dynobj.prg
  * tests/tb1.prg
  * tests/round.prg
  * tests/longstr.prg
  * tests/testdyn.prg
  * tests/testdyn1.prg
  * tests/delimtst.prg
  * tests/tstdspac.prg
  * tests/version.prg
  * tests/setkeys.prg
  * tests/gtcolors.prg
  * tests/destruct.prg
  * tests/seconds.prg
  * tests/gtkeys.prg
  * tests/usrrdd/exarr.prg
  * doc/en/diskspac.txt
  * doc/en/string.txt
  * doc/en/rdd.txt
  * doc/en/hashes.txt
  * doc/en/hb_apigt.txt
  * doc/en/rddord.txt
  * doc/en/hb_api.txt
  * doc/en/hb_date.txt
  * doc/en/math.txt
  * doc/en/hb_vm.txt
  * doc/en/treport.txt
  * doc/en/terminal.txt
  * doc/en/hb_apiln.txt
  * doc/en/dir.txt
  * doc/en/command.txt
  * doc/en/rddmisc.txt
  * doc/en/errsys.txt
  * doc/en/nation.txt
  * doc/en/var.txt
  * doc/en/dbstrux.txt
  * doc/en/datetime.txt
  * doc/en/memo.txt
  * doc/en/tgetlist.txt
  * doc/en/tlabel.txt
  * doc/en/1stread.txt
  * doc/en/hb_set.txt
  * doc/en/hb_compa.txt
  * doc/en/hb_apier.txt
  * doc/en/hbinet.txt
  * doc/en/hb_macro.txt
  * doc/en/array.txt
  * doc/en/hb_apiit.txt
  * doc/en/rdddb.txt
  * doc/en/dbsdf.txt
  * doc/en/hvm.txt
  * doc/en/input.txt
  * doc/en/dbdelim.txt
  * doc/en/browse.txt
  * doc/en/menu.txt
  * doc/en/hb_apird.txt
  * doc/en/hb_apifs.txt
  * doc/en/file.txt
  * doc/en/lang.txt
  * doc/en/objfunc.txt
  * doc/en/eval.txt
  * doc/en/binnum.txt
  * doc/en/tclass.txt
  * doc/en/misc.txt
  * doc/en/set.txt
  * doc/en/readme.txt
  * doc/man/harbour.1
  * doc/man/hbmk2.1
  * doc/man/hbpp.1
  * doc/man/hbtest.1
  * doc/man/hbrun.1
  * examples/hbextern/hbextern.prg
  * examples/pp/pp.c
  * examples/pp/hbpragma.c
  * examples/pp/hbppcore.c
  * examples/pp/hbppcomp.c
  * examples/pp/hbpptbl.c
  * examples/pp/hbppdef.h
  * examples/superlib/hbsuper.prg
  * examples/hbsqlit2/hbsqlit2.ch
  * examples/misc/mankala.prg
  * examples/misc/guess.prg
  * examples/rddado/adordd.prg
  * examples/rddado/adordd.ch
  * examples/hbapollo/apollo.ch
  * examples/hbapollo/apollo.c
  * examples/hbapollo/apollo1.prg
  * examples/hbdoc2/gentpl.prg
  * examples/hbdoc2/gentxt.prg
  * examples/hbdoc2/tmplates.prg
  * examples/hbdoc2/genxml.prg
  * examples/hbdoc2/genhtml.prg
  * examples/hbdoc2/hbdoc2.prg
  * examples/hbdoc2/hbdoc2.ch
  * examples/guestbk/guestbk.prg
  * examples/httpsrv/uhttpd.ini
  * examples/httpsrv/uhttpd.prg
  * examples/httpsrv/cookie.prg
  * examples/httpsrv/cgifunc.prg
  * examples/httpsrv/session.prg
  * examples/terminal/trm_cli.prg
  * examples/terminal/terminal.prg
  * examples/terminal/trm_srv.prg
  * examples/terminal/trm_app.prg
  * examples/hbbtree/hb_btree.h
  * examples/hbbtree/hb_btree.ch
  * examples/hbbtree/hb_btree.c
  * examples/hbbtree/tbtree.prg
  * examples/hscript/hscript.prg
  * examples/hscript/dir.hs
  * examples/hscript/multiply.hs
  * examples/hscript/ugly.hs
  * examples/hscript/hello.hs
  * examples/gtwvw/hbole.h
  * examples/gtwvw/wvwdraw.c
  * examples/gtwvw/wvwmenu.c
  * examples/gtwvw/gtwvw.c
  * examples/gtwvw/wvwstbar.c
  * examples/gtwvw/wvwcheck.c
  * examples/gtwvw/wvwfuncs.c
  * examples/gtwvw/wvwpush.c
  * examples/gtwvw/wvwedit.c
  * examples/gtwvw/wvwtbar.c
  * examples/gtwvw/hbgtwvw.h
    * Deleted 'www.' from harbour-project.org website name.
      (www.harbour-project.org -> harbour-project.org)
2010-06-03 16:23:36 +00:00

260 lines
5.4 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
#ifdef _TEST_CREATE_
static hMake := -1
#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))==-1
? "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 != -1
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