* 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)
260 lines
5.4 KiB
Plaintext
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
|