Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483'' Copyright 2011 Jacek Caban for CodeWeavers'' This library is free software; you can redistribute it and/or' modify it under the terms of the GNU Lesser General Public' License as published by the Free Software Foundation; either' version 2.1 of the License, or (at your option) any later version.'' This library is distributed in the hope that it will be useful,' but WITHOUT ANY WARRANTY; without even the implied warranty of' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU' Lesser General Public License for more details.'' You should have received a copy of the GNU Lesser General Public' License along with this library; if not, write to the Free Software' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA'
OPTION EXPLICIT : : DIM W
dim x, y, zDim obj
call ok(true, "true is not true?")ok true, "true is not true?"call ok((true), "true is not true?")
ok not false, "not false but not true?"ok not not true, "not not true but not true?"
Call ok(true = true, "true = true is false")Call ok(false = false, "false = false is false")Call ok(not (true = false), "true = false is true")Call ok("x" = "x", """x"" = ""x"" is false")Call ok(empty = empty, "empty = empty is false")Call ok(empty = "", "empty = """" is false")Call ok(0 = 0.0, "0 <> 0.0")Call ok(16 = &h10&, "16 <> &h10&")Call ok(010 = 10, "010 <> 10")Call ok(10. = 10, "10. <> 10")Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")Call ok(34e5 = 3400000, "34e5 <> 3400000")Call ok(34e+5 = 3400000, "34e+5 <> 3400000")Call ok(56.789e5 = 5678900, "56.789e5 = 5678900")Call ok(56.789e-2 = 0.56789, "56.789e-2 <> 0.56789")Call ok(1e-94938484 = 0, "1e-... <> 0")Call ok(34e0 = 34, "34e0 <> 34")Call ok(34E1 = 340, "34E0 <> 340")Call ok(--1 = 1, "--1 = " & --1)Call ok(-empty = 0, "-empty = " & (-empty))Call ok(true = -1, "! true = -1")Call ok(false = 0, "false <> 0")Call ok(&hff = 255, "&hff <> 255")Call ok(&Hff = 255, "&Hff <> 255")
W = 5Call ok(W = 5, "W = " & W & " expected " & 5)
x = "xx"Call ok(x = "xx", "x = " & x & " expected ""xx""")
Call ok(true <> false, "true <> false is false")Call ok(not (true <> true), "true <> true is true")Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")Call ok(not (empty <> empty), "empty <> empty is true")Call ok(x <> "x", "x = ""x""")Call ok("true" <> true, """true"" = true is true")
Call ok("" = true = false, """"" = true = false is false")Call ok(not(false = true = ""), "false = true = """" is true")Call ok(not (false = false <> false = false), "false = false <> false = false is true")Call ok(not ("" <> false = false), """"" <> false = false is true")
Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")Call ok(getVT(Empty) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")Call ok(getVT(null) = "VT_NULL", "getVT(null) is not VT_NULL")Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")Call ok(getVT(&h10&) = "VT_I2", "getVT(&h10&) is not VT_I2")Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")Call ok(getVT(1e2) = "VT_R8", "getVT(1e2) is not VT_R8")Call ok(getVT(1e0) = "VT_R8", "getVT(1e0) is not VT_R8")Call ok(getVT(0.1e2) = "VT_R8", "getVT(0.1e2) is not VT_R8")Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y))Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))set x = nothingCall ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))x = trueCall ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")x = "x"Call ok(getVT(x) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")x = 0.0Call ok(getVT(x) = "VT_R8*", "getVT(x) = " & getVT(x))
Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
x = "xx"Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))Call ok("ab " & empty = "ab ", """ab"" & empty = " & ("ab " & empty))Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))Call ok("ab" & x = "abxx", """ab"" & x = " & ("ab"&x))
if(isEnglishLang) then Call ok("" & true = "True", """"" & true = " & true) Call ok(true & false = "TrueFalse", "true & false = " & (true & false))end if
call ok(true and true, "true and true is not true")call ok(true and not false, "true and not false is not true")call ok(not (false and true), "not (false and true) is not true")call ok(getVT(null and true) = "VT_NULL", "getVT(null and true) = " & getVT(null and true))
call ok(false or true, "false or uie is false?")call ok(not (false or false), "false or false is not false?")call ok(false and false or true, "false and false or true is false?")call ok(true or false and false, "true or false and false is false?")call ok(null or true, "null or true is false")
call ok(true xor false, "true xor false is false?")call ok(not (false xor false), "false xor false is true?")call ok(not (true or false xor true), "true or false xor true is true?")call ok(not (true xor false or true), "true xor false or true is true?")
call ok(false eqv false, "false does not equal false?")call ok(not (false eqv true), "false equals true?")call ok(getVT(false eqv null) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null))
call ok(true imp true, "true does not imp true?")call ok(false imp false, "false does not imp false?")call ok(not (true imp false), "true imp false?")call ok(false imp null, "false imp null is false?")
Call ok(2 >= 1, "! 2 >= 1")Call ok(2 >= 2, "! 2 >= 2")Call ok(not(true >= 2), "true >= 2 ?")Call ok(2 > 1, "! 2 > 1")Call ok(false > true, "! false < true")Call ok(0 > true, "! 0 > true")Call ok(not (true > 0), "true > 0")Call ok(not (0 > 1 = 1), "0 > 1 = 1")Call ok(1 < 2, "! 1 < 2")Call ok(1 = 1 < 0, "! 1 = 1 < 0")Call ok(1 <= 2, "! 1 <= 2")Call ok(2 <= 2, "! 2 <= 2")
Call ok(isNull(0 = null), "'(0 = null)' is not null")Call ok(isNull(null = 1), "'(null = 1)' is not null")Call ok(isNull(0 > null), "'(0 > null)' is not null")Call ok(isNull(null > 1), "'(null > 1)' is not null")Call ok(isNull(0 < null), "'(0 < null)' is not null")Call ok(isNull(null < 1), "'(null < 1)' is not null")Call ok(isNull(0 <> null), "'(0 <> null)' is not null")Call ok(isNull(null <> 1), "'(null <> 1)' is not null")Call ok(isNull(0 >= null), "'(0 >= null)' is not null")Call ok(isNull(null >= 1), "'(null >= 1)' is not null")Call ok(isNull(0 <= null), "'(0 <= null)' is not null")Call ok(isNull(null <= 1), "'(null <= 1)' is not null")
x = 3Call ok(2+2 = 4, "2+2 = " & (2+2))Call ok(false + 6 + true = 5, "false + 6 + true <> 5")Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))Call ok(2+empty = 2, "2+empty = " & (2+empty))Call ok(x+x = 6, "x+x = " & (x+x))
Call ok(5-1 = 4, "5-1 = " & (5-1))Call ok(3+5-true = 9, "3+5-true <> 9")Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))Call ok(2-empty = 2, "2-empty = " & (2-empty))Call ok(2-x = -1, "2-x = " & (2-x))
Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
Call ok(2*3 = 6, "2*3 = " & (2*3))Call ok(3/2 = 1.5, "3/2 = " & (3/2))Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))Call ok(5/1000000 = 0.000005, "5/1000000 = " & (5/1000000))
Call ok(2^3 = 8, "2^3 = " & (2^3))Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))Call ok(-3^2 = 9, "-3^2 = " & (-3^2))Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
x =_ 3x _ = 3
x = 3
if true then y = true : x = yok x, "x is false"
x = true : if false then x = falseok x, "x is false, if false called?"
if not false then x = trueok x, "x is false, if not false not called?"
if not false then x = "test" : x = trueok x, "x is false, if not false not called?"
if false then x = y : call ok(false, "if false .. : called")
if false then x = y : call ok(false, "if false .. : called") else x = "else"Call ok(x = "else", "else not called?")
if true then x = y else y = x : Call ok(false, "in else?")
if false then :
if false then x = y : if true then call ok(false, "embedded if called")
if false then x=1 else x=2 end ifif true then x=1 end if
x = falseif false then x = true : x = trueCall ok(x = false, "x <> false")
if false then ok false, "if false called"end if
x = trueif x then x = falseend ifCall ok(not x, "x is false, if not evaluated?")
x = falseIf false Then Call ok(false, "inside if false")Else x = trueEnd IfCall ok(x, "else not called?")
x = falseIf false Then Call ok(false, "inside if false")ElseIf not True Then Call ok(false, "inside elseif not true")Else x = trueEnd IfCall ok(x, "else not called?")
x = falseIf false Then Call ok(false, "inside if false") x = 1 y = 10+xElseIf not False Then x = trueElse Call ok(false, "inside else not true")End IfCall ok(x, "elseif not called?")
x = falseIf false Then Call ok(false, "inside if false")ElseIf not False Then x = trueEnd IfCall ok(x, "elseif not called?")
x = falseif 1 then x = trueCall ok(x, "if 1 not run?")
x = falseif &h10000& then x = trueCall ok(x, "if &h10000& not run?")
x = falsey = falsewhile not (x and y) if x then y = true end if x = truewendcall ok((x and y), "x or y is false after while")
if false then' empty bodyend if
if false then x = falseelseif true then' empty bodyend if
if false then x = falseelse' empty bodyend if
while falsewend
x = 0WHILE x < 3 : x = x + 1WendCall ok(x = 3, "x not equal to 3")
z = 2while z > -4 :
z = z -2wend
x = falsey = falsedo while not (x and y) if x then y = true end if x = trueloopcall ok((x and y), "x or y is false after while")
do while falseloop
do while true exit do ok false, "exit do didn't work"loop
x = 0Do While x < 2 : x = x + 1LoopCall ok(x = 2, "x not equal to 2")
x = 0Do While x >= -2 :x = x - 1LoopCall ok(x = -3, "x not equal to -3")
x = falsey = falsedo until x and y if x then y = true end if x = trueloopcall ok((x and y), "x or y is false after do until")
do until trueloop
do until false exit do ok false, "exit do didn't work"loop
x = 0Do: :: x = x + 2Loop Until x = 4Call ok(x = 4, "x not equal to 4")
x = 5Do: :
: x = x * 2Loop Until x = 40Call ok(x = 40, "x not equal to 40")
x = falsedo if x then exit do x = trueloopcall ok(x, "x is false after do..loop?")
x = 0Do :If x = 6 Then Exit Do End If x = x + 3LoopCall ok(x = 6, "x not equal to 6")
x = falsey = falsedo if x then y = true end if x = trueloop until x and ycall ok((x and y), "x or y is false after while")
doloop until true
do exit do ok false, "exit do didn't work"loop until false
x = falsey = falsedo if x then y = true end if x = trueloop while not (x and y)call ok((x and y), "x or y is false after while")
doloop while false
do exit do ok false, "exit do didn't work"loop while true
y = "for1:"for x = 5 to 8 y = y & " " & xnextCall ok(y = "for1: 5 6 7 8", "y = " & y)
y = "for2:"for x = 5 to 8 step 2 y = y & " " & xnextCall ok(y = "for2: 5 7", "y = " & y)
y = "for3:"x = 2for x = x+3 to 8 y = y & " " & xnextCall ok(y = "for3: 5 6 7 8", "y = " & y)
y = "for4:"for x = 5 to 4 y = y & " " & xnextCall ok(y = "for4:", "y = " & y)
y = "for5:"for x = 5 to 3 step true y = y & " " & xnextCall ok(y = "for5: 5 4 3", "y = " & y)
y = "for6:"z = 4for x = 5 to z step 3-4 y = y & " " & x z = 0nextCall ok(y = "for6: 5 4", "y = " & y)
y = "for7:"z = 1for x = 5 to 8 step z y = y & " " & x z = 2nextCall ok(y = "for7: 5 6 7 8", "y = " & y)
z = 0For x = 10 To 18 Step 2 : : z = z + 1NextCall ok(z = 5, "z not equal to 5")
y = "for8:"for x = 5 to 8 y = y & " " & x x = x+1nextCall ok(y = "for8: 5 7", "y = " & y)
for x = 1.5 to 1 Call ok(false, "for..to called when unexpected")next
for x = 1 to 100 exit for Call ok(false, "exit for not escaped the loop?")next
for x = 1 to 5 ::: :exit for Call ok(false, "exit for not escaped the loop?")next
do while true for x = 1 to 100 exit do nextloop
if null then call ok(false, "if null evaluated")
while null call ok(false, "while null evaluated")wend
Call collectionObj.reset()y = 0for each x in collectionObj :
:y = y + 3nextCall ok(y = 9, "y = " & y)
Call collectionObj.reset()y = 0x = 10z = 0for each x in collectionObj : z = z + 2 y = y+1 Call ok(x = y, "x <> y")nextCall ok(y = 3, "y = " & y)Call ok(z = 6, "z = " & z)Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
Call collectionObj.reset()y = falsefor each x in collectionObj if x = 2 then exit for y = 1nextCall ok(y = 1, "y = " & y)Call ok(x = 2, "x = " & x)
Set obj = collectionObjCall obj.reset()y = 0x = 10for each x in obj y = y+1 Call ok(x = y, "x <> y")nextCall ok(y = 3, "y = " & y)Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
x = falseselect case 3 case 2 Call ok(false, "unexpected case") case 2 Call ok(false, "unexpected case") case 4 Call ok(false, "unexpected case") case "test" case "another case" Call ok(false, "unexpected case") case 0, false, 2+1, 10 x = true case ok(false, "unexpected case") Call ok(false, "unexpected case") case else Call ok(false, "unexpected case")end selectCall ok(x, "wrong case")
x = falseselect case 3 case 3 x = trueend selectCall ok(x, "wrong case")
x = falseselect case 2+2 case 3 Call ok(false, "unexpected case") case else x = trueend selectCall ok(x, "wrong case")
y = "3"x = falseselect case y case "3" x = true case 3 Call ok(false, "unexpected case")end selectCall ok(x, "wrong case")
select case 0 case 1 Call ok(false, "unexpected case") case "2" Call ok(false, "unexpected case")end select
select case 0end select
x = falseselect case 2 case 3,1,2,4: x = true case 5,6,7 Call ok(false, "unexpected case")end selectCall ok(x, "wrong case")
x = falseselect case 2: case 5,6,7: Call ok(false, "unexpected case") case 2,1,2,4 x = true case else: Call ok(false, "unexpected case else")end selectCall ok(x, "wrong case")
x = Falseselect case 1 :
:case 3, 4 :
case 5: Call ok(false, "unexpected case") : Case Else:
x = Trueend selectCall ok(x, "wrong case")
if false thenSub testsub x = trueEnd Subend if
x = falseCall testsubCall ok(x, "x is false, testsub not called?")
Sub SubSetTrue(v) Call ok(not v, "v is not true") v = trueEnd Sub
x = falseSubSetTrue xCall ok(x, "x was not set by SubSetTrue")
SubSetTrue falseCall ok(not false, "false is no longer false?")
Sub SubSetTrue2(ByRef v) Call ok(not v, "v is not true") v = trueEnd Sub
x = falseSubSetTrue2 xCall ok(x, "x was not set by SubSetTrue")
Sub TestSubArgVal(ByVal v) Call ok(not v, "v is not false") v = true Call ok(v, "v is not true?")End Sub
x = falseCall TestSubArgVal(x)Call ok(not x, "x is true after TestSubArgVal call?")
Sub TestSubMultiArgs(a,b,c,d,e) Call ok(a=1, "a = " & a) Call ok(b=2, "b = " & b) Call ok(c=3, "c = " & c) Call ok(d=4, "d = " & d) Call ok(e=5, "e = " & e)End Sub
Sub TestSubExit(ByRef a) If a Then Exit Sub End If Call ok(false, "Exit Sub not called?")End Sub
Call TestSubExit(true)
Sub TestSubExit2 for x = 1 to 100 Exit Sub nextEnd SubCall TestSubExit2
TestSubMultiArgs 1, 2, 3, 4, 5Call TestSubMultiArgs(1, 2, 3, 4, 5)
Sub TestSubLocalVal x = false Call ok(not x, "local x is not false?") Dim x Dim a,b, cEnd Sub
x = truey = trueCall TestSubLocalValCall ok(x, "global x is not true?")
Public Sub TestPublicSubEnd SubCall TestPublicSub
Private Sub TestPrivateSubEnd SubCall TestPrivateSub
Public Sub TestSeparatorSub : ::End SubCall TestSeparatorSub
if false thenFunction testfunc x = trueEnd Functionend if
x = falseCall TestFuncCall ok(x, "x is false, testfunc not called?")
Function FuncSetTrue(v) Call ok(not v, "v is not true") v = trueEnd Function
x = falseFuncSetTrue xCall ok(x, "x was not set by FuncSetTrue")
FuncSetTrue falseCall ok(not false, "false is no longer false?")
Function FuncSetTrue2(ByRef v) Call ok(not v, "v is not true") v = trueEnd Function
x = falseFuncSetTrue2 xCall ok(x, "x was not set by FuncSetTrue")
Function TestFuncArgVal(ByVal v) Call ok(not v, "v is not false") v = true Call ok(v, "v is not true?")End Function
x = falseCall TestFuncArgVal(x)Call ok(not x, "x is true after TestFuncArgVal call?")
Function TestFuncMultiArgs(a,b,c,d,e) Call ok(a=1, "a = " & a) Call ok(b=2, "b = " & b) Call ok(c=3, "c = " & c) Call ok(d=4, "d = " & d) Call ok(e=5, "e = " & e)End Function
TestFuncMultiArgs 1, 2, 3, 4, 5Call TestFuncMultiArgs(1, 2, 3, 4, 5)
Function TestFuncLocalVal x = false Call ok(not x, "local x is not false?") Dim xEnd Function
x = truey = trueCall TestFuncLocalValCall ok(x, "global x is not true?")
Function TestFuncExit(ByRef a) If a Then Exit Function End If Call ok(false, "Exit Function not called?")End Function
Call TestFuncExit(true)
Function TestFuncExit2(ByRef a) For x = 1 to 100 For y = 1 to 100 Exit Function Next Next Call ok(false, "Exit Function not called?")End Function
Call TestFuncExit2(true)
Sub SubParseTestEnd Sub : x = falseCall SubParseTest
Function FuncParseTestEnd Function : x = false
Function ReturnTrue ReturnTrue = false ReturnTrue = trueEnd Function
Call ok(ReturnTrue(), "ReturnTrue returned false?")
Function SetVal(ByRef x, ByVal v) x = v SetVal = x Exit FunctionEnd Function
x = falseok SetVal(x, true), "SetVal returned false?"Call ok(x, "x is not set to true by SetVal?")
Public Function TestPublicFuncEnd FunctionCall TestPublicFunc
Private Function TestPrivateFuncEnd FunctionCall TestPrivateFunc
Public Function TestSepFunc(ByVal a) : :: TestSepFunc = aEnd FunctionCall ok(TestSepFunc(1) = 1, "Function did not return 1")
' Stop has an effect only in debugging modeStop
set x = testObjCall ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
Set obj = New EmptyClassCall ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
Class EmptyClassEnd Class
Set x = objCall ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
Class TestClass Public publicProp
Private privateProp
Public Function publicFunction() privateSub() publicFunction = 4 End Function
Public Property Get gsProp() gsProp = privateProp funcCalled = "gsProp get" exit property Call ok(false, "exit property not returned?") End Property
Public Default Property Get DefValGet DefValGet = privateProp funcCalled = "GetDefVal" End Property
Public Property Let DefValGet(x) End Property
Public publicProp2
Public Sub publicSub End Sub
Public Property Let gsProp(val) privateProp = val funcCalled = "gsProp let" exit property Call ok(false, "exit property not returned?") End Property
Public Property Set gsProp(val) funcCalled = "gsProp set" exit property Call ok(false, "exit property not returned?") End Property
Public Sub setPrivateProp(x) privateProp = x End Sub
Function getPrivateProp getPrivateProp = privateProp End Function
Private Sub privateSub End Sub
Public Sub Class_Initialize publicProp2 = 2 privateProp = true Call ok(getVT(privateProp) = "VT_BOOL*", "getVT(privateProp) = " & getVT(privateProp)) Call ok(getVT(publicProp2) = "VT_I2*", "getVT(publicProp2) = " & getVT(publicProp2)) Call ok(getVT(Me.publicProp2) = "VT_I2", "getVT(Me.publicProp2) = " & getVT(Me.publicProp2)) End Sub
Property Get gsGetProp(x) gsGetProp = x End PropertyEnd Class
Call testDisp(new testClass)
Set obj = New TestClass
Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
obj.publicSub()Call obj.publicSubCall obj.publicFunction()
Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))obj.publicProp = 3Call ok(getVT(obj.publicProp) = "VT_I2", "getVT(obj.publicProp) = " & getVT(obj.publicProp))Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)obj.publicProp() = 3
Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())Call obj.setPrivateProp(6)Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
Dim funcCalledfuncCalled = ""Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)obj.gsProp = 3Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)Set obj.gsProp = New testclassCall ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
x = objCall ok(x = 3, "(x = obj) = " & x)Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)funcCalled = ""Call ok(obj = 3, "(x = obj) = " & obj)Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
Call obj.Class_InitializeCall ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
x = (New testclass).publicProp
Class TermTest Public Sub Class_Terminate() funcCalled = "terminate" End SubEnd Class
Set obj = New TermTestfuncCalled = ""Set obj = NothingCall ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
Set obj = New TermTestfuncCalled = ""Call obj.Class_TerminateCall ok(funcCalled = "terminate", "funcCalled = " & funcCalled)funcCalled = ""Set obj = NothingCall ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
Call (New testclass).publicSub()Call (New testclass).publicSub
class PropTest property get prop0() prop0 = 1 end property
property get prop1(x) prop1 = x+1 end property
property get prop2(x, y) prop2 = x+y end propertyend class
set obj = new PropTest
call ok(obj.prop0 = 1, "obj.prop0 = " & obj.prop0)call ok(obj.prop1(3) = 4, "obj.prop1(3) = " & obj.prop1(3))call ok(obj.prop2(3,4) = 7, "obj.prop2(3,4) = " & obj.prop2(3,4))call obj.prop0()call obj.prop1(2)call obj.prop2(3,4)
x = "following ':' is correct syntax" :x = "following ':' is correct syntax" :: ::: x = "also correct syntax"rem another ugly way for commentsx = "rem as simplestatement" : rem rem comment:
Set obj = new EmptyClassSet x = objSet y = new EmptyClass
Call ok(obj is x, "obj is not x")Call ok(x is obj, "x is not obj")Call ok(not (obj is y), "obj is not y")Call ok(not obj is y, "obj is not y")Call ok(not (x is Nothing), "x is 1")Call ok(Nothing is Nothing, "Nothing is not Nothing")Call ok(x is obj and true, "x is obj and true is false")
Class TestMe Public Sub Test(MyMe) Call ok(Me is MyMe, "Me is not MyMe") End SubEnd Class
Set obj = New TestMeCall obj.test(obj)
Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))Call ok(Me is Test, "Me is not Test")
Const c1 = 1, c2 = 2, c3 = -3Call ok(c1 = 1, "c1 = " & c1)Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))Call ok(c3 = -3, "c3 = " & c3)Call ok(getVT(c3) = "VT_I2", "getVT(c3) = " & getVT(c3))
Const cb = True, cs = "test", cnull = nullCall ok(cb, "cb = " & cb)Call ok(getVT(cb) = "VT_BOOL", "getVT(cb) = " & getVT(cb))Call ok(cs = "test", "cs = " & cs)Call ok(getVT(cs) = "VT_BSTR", "getVT(cs) = " & getVT(cs))Call ok(isNull(cnull), "cnull = " & cnull)Call ok(getVT(cnull) = "VT_NULL", "getVT(cnull) = " & getVT(cnull))
Call ok(+1 = 1, "+1 != 1")Call ok(+true = true, "+1 != 1")Call ok(getVT(+true) = "VT_BOOL", "getVT(+true) = " & getVT(+true))Call ok(+"true" = "true", """+true"" != true")Call ok(getVT(+"true") = "VT_BSTR", "getVT(+""true"") = " & getVT(+"true"))Call ok(+obj is obj, "+obj != obj")Call ok(+--+-+1 = -1, "+--+-+1 != -1")
if false then Const conststr = "str"Call ok(conststr = "str", "conststr = " & conststr)Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))Call ok(conststr = "str", "conststr = " & conststr)
Sub ConstTestSub Const funcconst = 1 Call ok(c1 = 1, "c1 = " & c1) Call ok(funcconst = 1, "funcconst = " & funcconst)End Sub
Call ConstTestSubDim funcconst
' Property may be used as an identifier (although it's a keyword)Sub TestProperty Dim Property PROPERTY = true Call ok(property, "property = " & property)
for property = 1 to 2 nextEnd Sub
Call TestProperty
Class Property Public Sub Property() End Sub
Sub Test(byref property) End SubEnd Class
Class Property2 Function Property() End Function
Sub Test(property) End Sub
Sub Test2(byval property) End SubEnd Class
Class SeparatorTest : : Dim varTest1: Private Sub Class_Initialize : varTest1 = 1 End Sub ::
Property Get Test1() : Test1 = varTest1 End Property ::: : Property Let Test1(a) : varTest1 = a End Property :
Public Function AddToTest1(ByVal a) :: : varTest1 = varTest1 + a AddToTest1 = varTest1 End Function : End Class : :: Set obj = New SeparatorTest
Call ok(obj.Test1 = 1, "obj.Test1 is not 1")obj.Test1 = 6Call ok(obj.Test1 = 6, "obj.Test1 is not 6")obj.AddToTest1(5)Call ok(obj.Test1 = 11, "obj.Test1 is not 11")
' Array tests
Call ok(getVT(arr) = "VT_EMPTY*", "getVT(arr) = " & getVT(arr))
Dim arr(3)Dim arr2(4,3), arr3(5,4,3), arr0(0), noarr()
Call ok(getVT(arr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr) = " & getVT(arr))Call ok(getVT(arr2) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr2) = " & getVT(arr2))Call ok(getVT(arr0) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr0) = " & getVT(arr0))Call ok(getVT(noarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(noarr) = " & getVT(noarr))
Call testArray(1, arr)Call testArray(2, arr2)Call testArray(3, arr3)Call testArray(0, arr0)Call testArray(-1, noarr)
Call ok(getVT(arr(1)) = "VT_EMPTY*", "getVT(arr(1)) = " & getVT(arr(1)))Call ok(getVT(arr2(1,2)) = "VT_EMPTY*", "getVT(arr2(1,2)) = " & getVT(arr2(1,2)))Call ok(getVT(arr3(1,2,2)) = "VT_EMPTY*", "getVT(arr3(1,2,3)) = " & getVT(arr3(1,2,2)))Call ok(getVT(arr(0)) = "VT_EMPTY*", "getVT(arr(0)) = " & getVT(arr(0)))Call ok(getVT(arr(3)) = "VT_EMPTY*", "getVT(arr(3)) = " & getVT(arr(3)))Call ok(getVT(arr0(0)) = "VT_EMPTY*", "getVT(arr0(0)) = " & getVT(arr0(0)))
arr(2) = 3Call ok(arr(2) = 3, "arr(2) = " & arr(2))Call ok(getVT(arr(2)) = "VT_I2*", "getVT(arr(2)) = " & getVT(arr(2)))
arr3(3,2,1) = 1arr3(1,2,3) = 2Call ok(arr3(3,2,1) = 1, "arr3(3,2,1) = " & arr3(3,2,1))Call ok(arr3(1,2,3) = 2, "arr3(1,2,3) = " & arr3(1,2,3))arr2(4,3) = 1Call ok(arr2(4,3) = 1, "arr2(4,3) = " & arr2(4,3))
x = arr3Call ok(x(3,2,1) = 1, "x(3,2,1) = " & x(3,2,1))
Function getarr() Dim arr(3) arr(2) = 2 getarr = arr arr(3) = 3End Function
x = getarr()Call ok(getVT(x) = "VT_ARRAY|VT_VARIANT*", "getVT(x) = " & getVT(x))Call ok(x(2) = 2, "x(2) = " & x(2))Call ok(getVT(x(3)) = "VT_EMPTY*", "getVT(x(3)) = " & getVT(x(3)))
x(1) = 1Call ok(x(1) = 1, "x(1) = " & x(1))x = getarr()Call ok(getVT(x(1)) = "VT_EMPTY*", "getVT(x(1)) = " & getVT(x(1)))Call ok(x(2) = 2, "x(2) = " & x(2))
x(1) = 1y = xx(1) = 2Call ok(y(1) = 1, "y(1) = " & y(1))
for x=1 to 1 Dim forarr(3) if x=1 then Call ok(getVT(forarr(1)) = "VT_EMPTY*", "getVT(forarr(1)) = " & getVT(forarr(1))) else Call ok(forarr(1) = x, "forarr(1) = " & forarr(1)) end if forarr(1) = x+1next
x=1Call ok(forarr(x) = 2, "forarr(x) = " & forarr(x))
Class ArrClass Dim classarr(3) Dim classnoarr() Dim var
Private Sub Class_Initialize Call ok(getVT(classarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(classarr) = " & getVT(classarr)) Call testArray(-1, classnoarr) classarr(0) = 1 classarr(1) = 2 classarr(2) = 3 classarr(3) = 4 End Sub
Public Sub testVarVT Call ok(getVT(var) = "VT_ARRAY|VT_VARIANT*", "getVT(var) = " & getVT(var)) End SubEnd Class
Set obj = new ArrClassCall ok(getVT(obj.classarr) = "VT_ARRAY|VT_VARIANT", "getVT(obj.classarr) = " & getVT(obj.classarr))'todo_wine Call ok(obj.classarr(1) = 2, "obj.classarr(1) = " & obj.classarr(1))
obj.var = arrCall ok(getVT(obj.var) = "VT_ARRAY|VT_VARIANT", "getVT(obj.var) = " & getVT(obj.var))Call obj.testVarVT
Sub arrarg(byref refarr, byval valarr, byref refarr2, byval valarr2) Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr)) Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr)) Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2)) Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))End Sub
Call arrarg(arr, arr, obj.classarr, obj.classarr)
Sub arrarg2(byref refarr(), byval valarr(), byref refarr2(), byval valarr2()) Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr)) Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr)) Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2)) Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))End Sub
Call arrarg2(arr, arr, obj.classarr, obj.classarr)
Sub testarrarg(arg(), vt) Call ok(getVT(arg) = vt, "getVT() = " & getVT(arg) & " expected " & vt)End Sub
Call testarrarg(1, "VT_I2*")Call testarrarg(false, "VT_BOOL*")Call testarrarg(Empty, "VT_EMPTY*")
Sub modifyarr(arr) 'Following test crashes on wine 'Call ok(arr(0) = "not modified", "arr(0) = " & arr(0)) arr(0) = "modified"End Sub
arr(0) = "not modified"Call modifyarr(arr)Call ok(arr(0) = "modified", "arr(0) = " & arr(0))
arr(0) = "not modified"modifyarr(arr)Call todo_wine_ok(arr(0) = "not modified", "arr(0) = " & arr(0))
for x = 0 to UBound(arr) arr(x) = xnexty = 0for each x in arr Call ok(x = y, "x = " & x & ", expected " & y) Call ok(arr(y) = y, "arr(" & y & ") = " & arr(y)) arr(y) = 1 x = 1 y = y+1nextCall ok(y = 4, "y = " & y & " after array enumeration")
for x=0 to UBound(arr2, 1) for y=0 to UBound(arr2, 2) arr2(x, y) = x + y*(UBound(arr2, 1)+1) nextnexty = 0for each x in arr2 Call ok(x = y, "x = " & x & ", expected " & y) y = y+1nextCall ok(y = 20, "y = " & y & " after array enumeration")
for each x in noarr Call ok(false, "Empty array contains: " & x)next
' It's allowed to declare non-builtin RegExp class...class RegExp public property get Global() Call ok(false, "Global called") Global = "fail" end propertyend class
' ...but there is no way to use it because builtin instance is always createdset x = new RegExpCall ok(x.Global = false, "x.Global = " & x.Global)
sub test_nothing_errors dim x on error resume next
x = 1 err.clear x = nothing call ok(err.number = 91, "err.number = " & err.number) call ok(x = 1, "x = " & x)
err.clear x = not nothing call ok(err.number = 91, "err.number = " & err.number) call ok(x = 1, "x = " & x)
err.clear x = "" & nothing call ok(err.number = 91, "err.number = " & err.number) call ok(x = 1, "x = " & x)end subcall test_nothing_errors()
sub test_identifiers ' test keywords that can also be a declared identifier Dim default default = "xx" Call ok(default = "xx", "default = " & default & " expected ""xx""")
Dim error error = "xx" Call ok(error = "xx", "error = " & error & " expected ""xx""")
Dim explicit explicit = "xx" Call ok(explicit = "xx", "explicit = " & explicit & " expected ""xx""")
Dim step step = "xx" Call ok(step = "xx", "step = " & step & " expected ""xx""")end subcall test_identifiers()
sub test_dotIdentifiers ' test keywords that can also be an identifier after a dot ' Call ok(testObj.rem = 10, "testObj.rem = " & testObj.rem & " expected 10") Call ok(testObj.true = 10, "testObj.true = " & testObj.true & " expected 10") Call ok(testObj.false = 10, "testObj.false = " & testObj.false & " expected 10") Call ok(testObj.not = 10, "testObj.not = " & testObj.not & " expected 10") Call ok(testObj.and = 10, "testObj.and = " & testObj.and & " expected 10") Call ok(testObj.or = 10, "testObj.or = " & testObj.or & " expected 10") Call ok(testObj.xor = 10, "testObj.xor = " & testObj.xor & " expected 10") Call ok(testObj.eqv = 10, "testObj.eqv = " & testObj.eqv & " expected 10") Call ok(testObj.imp = 10, "testObj.imp = " & testObj.imp & " expected 10") Call ok(testObj.is = 10, "testObj.is = " & testObj.is & " expected 10") Call ok(testObj.mod = 10, "testObj.mod = " & testObj.mod & " expected 10") Call ok(testObj.call = 10, "testObj.call = " & testObj.call & " expected 10") Call ok(testObj.dim = 10, "testObj.dim = " & testObj.dim & " expected 10") Call ok(testObj.sub = 10, "testObj.sub = " & testObj.sub & " expected 10") Call ok(testObj.function = 10, "testObj.function = " & testObj.function & " expected 10") Call ok(testObj.get = 10, "testObj.get = " & testObj.get & " expected 10") Call ok(testObj.let = 10, "testObj.let = " & testObj.let & " expected 10") Call ok(testObj.const = 10, "testObj.const = " & testObj.const & " expected 10") Call ok(testObj.if = 10, "testObj.if = " & testObj.if & " expected 10") Call ok(testObj.else = 10, "testObj.else = " & testObj.else & " expected 10") Call ok(testObj.elseif = 10, "testObj.elseif = " & testObj.elseif & " expected 10") Call ok(testObj.end = 10, "testObj.end = " & testObj.end & " expected 10") Call ok(testObj.then = 10, "testObj.then = " & testObj.then & " expected 10") Call ok(testObj.exit = 10, "testObj.exit = " & testObj.exit & " expected 10") Call ok(testObj.while = 10, "testObj.while = " & testObj.while & " expected 10") Call ok(testObj.wend = 10, "testObj.wend = " & testObj.wend & " expected 10") Call ok(testObj.do = 10, "testObj.do = " & testObj.do & " expected 10") Call ok(testObj.loop = 10, "testObj.loop = " & testObj.loop & " expected 10") Call ok(testObj.until = 10, "testObj.until = " & testObj.until & " expected 10") Call ok(testObj.for = 10, "testObj.for = " & testObj.for & " expected 10") Call ok(testObj.to = 10, "testObj.to = " & testObj.to & " expected 10") Call ok(testObj.each = 10, "testObj.each = " & testObj.each & " expected 10") Call ok(testObj.in = 10, "testObj.in = " & testObj.in & " expected 10") Call ok(testObj.select = 10, "testObj.select = " & testObj.select & " expected 10") Call ok(testObj.case = 10, "testObj.case = " & testObj.case & " expected 10") Call ok(testObj.byref = 10, "testObj.byref = " & testObj.byref & " expected 10") Call ok(testObj.byval = 10, "testObj.byval = " & testObj.byval & " expected 10") Call ok(testObj.option = 10, "testObj.option = " & testObj.option & " expected 10") Call ok(testObj.nothing = 10, "testObj.nothing = " & testObj.nothing & " expected 10") Call ok(testObj.empty = 10, "testObj.empty = " & testObj.empty & " expected 10") Call ok(testObj.null = 10, "testObj.null = " & testObj.null & " expected 10") Call ok(testObj.class = 10, "testObj.class = " & testObj.class & " expected 10") Call ok(testObj.set = 10, "testObj.set = " & testObj.set & " expected 10") Call ok(testObj.new = 10, "testObj.new = " & testObj.new & " expected 10") Call ok(testObj.public = 10, "testObj.public = " & testObj.public & " expected 10") Call ok(testObj.private = 10, "testObj.private = " & testObj.private & " expected 10") Call ok(testObj.next = 10, "testObj.next = " & testObj.next & " expected 10") Call ok(testObj.on = 10, "testObj.on = " & testObj.on & " expected 10") Call ok(testObj.resume = 10, "testObj.resume = " & testObj.resume & " expected 10") Call ok(testObj.goto = 10, "testObj.goto = " & testObj.goto & " expected 10")end subcall test_dotIdentifiers
' Test End statements not required to be preceeded by a newline or separatorSub EndTestSub x = 1 End Sub
Sub EndTestSubWithCall x = 1 Call ok(x = 1, "x = " & x)End SubCall EndTestSubWithCall()
Function EndTestFunc(x) Call ok(x > 0, "x = " & x)End FunctionEndTestFunc(1)
Class EndTestClassWithStorageId Public x End Class
Class EndTestClassWithDim Dim x End Class
Class EndTestClassWithFunc Function test(ByVal x) x = 0 End Function End Class
Class EndTestClassWithProperty Public x Public default Property Get defprop defprop = x End Property End Class
reportSuccess()