Files
harbour-core/harbour/tests/codebloc.prg
Viktor Szakats fcc1abdd18 2012-07-18 15:35 UTC+0200 Viktor Szakats (harbour syenar.net)
* tests/ac_test2.prg
  * tests/adirtest.prg
  * tests/ainstest.prg
  * tests/altdtest.prg
  * tests/and_or.prg
  * tests/array16.prg
  * tests/arrayidx.prg
  * tests/arrays.prg
  * tests/arreval.prg
  * tests/arrindex.prg
  * tests/atest.prg
  * tests/box.prg
  * tests/boxtst2.prg
  * tests/byref.prg
  * tests/calling.prg
  * tests/clasinit.prg
  * tests/clasname.prg
  * tests/classch.prg
  * tests/classes.prg
  * tests/clsdata.prg
  * tests/cmphello.prg
  * tests/codebl.prg
  * tests/codebloc.prg
  * tests/comments.prg
  * tests/curdirt.prg
  * tests/db_brows.prg
  * tests/dbevalts.prg
  * tests/docase.prg
  * tests/dosshell.prg
  * tests/dupvars.prg
  * tests/dynobj.prg
  * tests/dynsym.prg
  * tests/exittest.prg
  * tests/extend1.prg
  * tests/exthrb.prg
  * tests/fib.prg
  * tests/fornext.prg
  * tests/fortest.prg
  * tests/funcarr.prg
  * tests/gfx.prg
  * tests/gtchars.prg
  * tests/gtcolors.prg
  * tests/gtkeys.prg
  * tests/hello.prg
  * tests/ifelse.prg
  * tests/inherit.prg
  * tests/inhprob.prg
  * tests/inifiles.prg
  * tests/initexit.prg
  * tests/inline.prg
  * tests/iotest.prg
  * tests/iotest2.prg
  * tests/keywords.prg
  * tests/langmsg.prg
  * tests/linecont.prg
  * tests/lnlenli1.prg
  * tests/lnlenli2.prg
  * tests/longdev.prg
  * tests/longstr.prg
  * tests/longstr2.prg
  * tests/mathtest.prg
  * tests/memfile.prg
  * tests/memory.prg
  * tests/readhrb.prg
  * tests/rto_get.prg
  * tests/rto_tb.prg
  * tests/scroll.prg
  * tests/seconds.prg
  * tests/set_test.prg
  * tests/speedold.prg
  * tests/stripem.prg
  * tests/t1.prg
  * tests/test_all.prg
  * tests/testbrw.prg
  * tests/testhtml.prg
  * tests/testid.prg
  * tests/testpre.prg
  * tests/testwarn.prg
  * tests/ticktime.prg
  * tests/tstchbx.prg
  * tests/tstmacro.prg
  * tests/tstprag.prg
  * tests/vec1.prg
  * tests/videotst.prg
  * tests/vidtest.prg
    * cleaning up tests (roughly complete)
2012-07-18 13:41:31 +00:00

128 lines
2.6 KiB
Plaintext

/*
* $Id$
*/
// codeblocks test
PROCEDURE Main()
LOCAL B := "this will never print"
LOCAL a := {| b, c | OutStd( "I am a codeblock" + b + c ) }
LOCAL d
LOCAL de
LOCAL ar := { 1, 2 }
LOCAL crlf := Chr( 13 ) + Chr( 10 )
LOCAL YY, X
LOCAL x1, x2
OutStd( "this should print first" )
OutStd( crlf )
Eval( a, " with parameters", " ... and it works!" )
OutStd( crlf )
d = "with access to local variables"
a = {| b, c | OutStd( "I am a second codeblock " + d + b + ;
IIF( c == NIL, ' empty second parameter ', c ) ), OutStd( crlf ), "WITH return value" }
Eval( a, ", codeblock parameters" )
OutStd( crlf )
Eval( a, ", codeblock parameters ", "and with second parameter" )
OutStd( crlf )
OutStd( MyEval( a ) )
OutStd( crlf )
OtherTest( a )
OutStd( crlf )
AnotherTest( a, "==> Another " )
OutStd( crlf )
a = {| c | IIF( c == NIL, {| a | "First " + a }, {| a | "Second " + a } ) }
a = Eval( a )
OutStd( crlf )
OutStd( Eval( a, "codeblock created in a codeblock" ) )
OutStd( crlf )
OutStd( ar[ 1 ] )
OutStd( crlf )
a := {|| ar[ 1 ] ++ }
Eval( a )
OutStd( ar[ 1 ] )
OutStd( crlf )
yy := 5
x := {| xx | OutStd( LTrim( Str(xx ) ) ), OutStd( "+" ), OutStd( LTrim( Str(yy ) ) ), OutStd( "=" ), xx + yy }
OutStd( Eval( x, 1 ) ) //this is OK
OutStd( CRLF )
OutStd( Eval( x, 1, 2 ) ) //this should ignore unnecesary parameters
QOut( Eval( RetBlock(), 5 ) )
// BugToFix()
OutStd( crlf )
OutStd( "Trying to use detached variable ..." )
OutStd( crlf )
x1 := 5
x2 := 6
de = DetachLocal( x1, x2 )
OutStd( Eval( de ) )
//changing the value of variables
OutStd( crlf )
x1 := 10
x2 := 11
QOut( Eval( de ) )
de = DetachLocal( x1, x2 )
QOut( Eval( de ) )
RETURN
FUNCTION MyEval( bCodeBlock )
LOCAL D := "this is another variable"
RETURN( Eval( bCodeBlock, " from ", "MyEval Function" ) )
PROCEDURE OtherTest( cblock )
LOCAL cb
cb := {| a, b | Eval( cblock, a, b ) }
Eval( cb, "--> with nested ", "EVAL" )
RETURN
PROCEDURE AnotherTest( cb, a )
OutStd( Eval( cb, a ) )
OutStd( Chr( 13 ) + Chr( 10 ) )
OutStd( Eval( cb, a, "again and again" ) )
OutStd( Chr( 13 ) + Chr( 10 ) )
RETURN
FUNCTION DetachLocal( x, y )
//NOTE! this should work
LOCAL z := x + y
LOCAL cb := {|| QOut( "z=x+y=" ), QOut( z ), QOut( "x*x=" ), QOut( x * x ), QOut( "x*x+z=" ), x * x + z }
RETURN( cb )
PROCEDURE BugToFix()
LOCAL b, a := {|| a + b }
b = "bug "
Eval( a )
RETURN
FUNCTION RetBlock()
RETURN( {| x | x * x } )