From: <mie...@us...> - 2008-10-31 12:21:28
|
Revision: 3642 http://oorexx.svn.sourceforge.net/oorexx/?rev=3642&view=rev Author: miesfeld Date: 2008-10-31 12:21:21 +0000 (Fri, 31 Oct 2008) Log Message: ----------- A few more AIX updates. Thanks Rainer Modified Paths: -------------- test/trunk/building.frm test/trunk/framework/FileUtils.cls Modified: test/trunk/building.frm =================================================================== --- test/trunk/building.frm 2008-10-31 11:52:52 UTC (rev 3641) +++ test/trunk/building.frm 2008-10-31 12:21:21 UTC (rev 3642) @@ -144,36 +144,27 @@ oldHomeVal = argTable["oldHomeVal"] oldBuildVal = argTable["oldBuildVal"] currentDir = directory() + os = .ooRexxUnit.OSName makeDir = .ooTest.dir"/external/API" - makeFile = "Makefile." || .ooRexxUnit.OSName~lower + makeFile = "Makefile." || os~lower makeLocation = makeDir"/"makefile - oldBinVal = replaceEnvValue("OOTEST_BIN_DIR", .ooTest.dir"/bin/" || .ooRexxUnit.OSName) + oldBinVal = replaceEnvValue("OOTEST_BIN_DIR", .ooTest.dir"/bin/" || os) j = directory(makeDir) -- For now we have to use GNU make from the AIX Toolbox because the AIX -- make does not support "ifdef" + if os == "AIX" then baseCmd = "/opt/freeware/bin/make -f" makeFile + else baseCmd = "make -f" makeFile + if force then do - if os == "AIX" then do - cmd = "/opt/freeware/bin/make -f" makeFile "clean" - end - else do - cmd = "make -f" makeFile "clean" - end + cmd = baseCmd "clean" rCode = doMake(testResult, cmd, makeLocation, "Issuing make clean", fileSpec) end - -- For now we have to use GNU make from the AIX Toolbox because the AIX - -- make does not support "ifdef" if rCode == .ooTestConstants~SUCCESS_RC then do - if os == "AIX" then do - cmd = "/opt/freeware/bin/make -f" makeFile - end - else do - cmd = "make -f" makeFile - end - rCode = doMake(testResult, cmd, makeLocation, "Issuing make", fileSpec) + rCode = doMake(testResult, baseCmd, makeLocation, "Issuing make", fileSpec) end if oldHomeVal \== .nil then j = replaceEnvValue("REXX_HOME", oldHomeVal) Modified: test/trunk/framework/FileUtils.cls =================================================================== --- test/trunk/framework/FileUtils.cls 2008-10-31 11:52:52 UTC (rev 3641) +++ test/trunk/framework/FileUtils.cls 2008-10-31 12:21:21 UTC (rev 3642) @@ -404,10 +404,9 @@ if ret == 0 then return .true else return .false -/* AIX TODO Is this code correct for lpp ? */ ::routine haveLpp public cmdOut = .array~new - ret = issueCmd('which lpp', cmdOut) + ret = issueCmd('which lslpp', cmdOut) if ret == 0 then return .true else return .false @@ -459,7 +458,7 @@ if ret == 0 then do cmdOut = .array~new - -- Escape the dot(s) in the sample program name + -- Escape the dot(s) in the name escName = escapeDots(name) ret = issueCmd('dpkg -L oorexx | grep' escName, cmdOut) @@ -469,7 +468,7 @@ /** checkLppForInstalledFile() * - * AIX TODO code this function for lpp. + * We use lslpp to get the list of installed files. * * @param name The file name to check for. * @@ -481,8 +480,18 @@ fileName = .nil - -- ... ? + cmdOut = .array~new + ret = issueCmd('lslpp -L ooRexx.rte', cmdOut) + if ret == 0 then do + cmdOut = .array~new + + -- Escape the dot(s) in the name + escName = escapeDots(name) + + ret = issueCmd('lslpp -f ooRexx.rte | grep' escName, cmdOut) + if cmdOut~items == 1 then fileName = strip(cmdOut[1]) + end return fileName ::routine escapeDots This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-02 00:45:09
|
Revision: 3649 http://oorexx.svn.sourceforge.net/oorexx/?rev=3649&view=rev Author: bigrixx Date: 2008-11-02 00:45:06 +0000 (Sun, 02 Nov 2008) Log Message: ----------- more api test work Modified Paths: -------------- test/trunk/external/API/orxinvocation.cpp Added Paths: ----------- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls test/trunk/ooRexx/base/bif/FILESPEC.testGroup Modified: test/trunk/external/API/orxinvocation.cpp =================================================================== --- test/trunk/external/API/orxinvocation.cpp 2008-11-01 21:33:49 UTC (rev 3648) +++ test/trunk/external/API/orxinvocation.cpp 2008-11-02 00:45:06 UTC (rev 3649) @@ -413,7 +413,6 @@ REXX_METHOD(setTermExit, setTermExit), REXX_METHOD(setScriptingExit, setScriptingExit), REXX_METHOD(setObjectFunctionExit, setObjectFunctionExit), - REXX_METHOD(setObjectFunctionExit, setObjectFunctionExit), REXX_METHOD(setNovalueExit, setNovalueExit), REXX_METHOD(setValueExit, setValueExit), REXX_METHOD(getFunctionExit, getFunctionExit), @@ -426,7 +425,6 @@ REXX_METHOD(getTermExit, getTermExit), REXX_METHOD(getScriptingExit, getScriptingExit), REXX_METHOD(getObjectFunctionExit, getObjectFunctionExit), - REXX_METHOD(getObjectFunctionExit, getObjectFunctionExit), REXX_METHOD(getNovalueExit, getNovalueExit), REXX_METHOD(getValueExit, getValueExit), REXX_METHOD(getRC, getRC), Added: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls (rev 0) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-02 00:45:06 UTC (rev 3649) @@ -0,0 +1,109 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + + +::class 'INVOCATIONtester' public + +::method init EXTERNAL 'LIBRARY orxinvocation init' +::method setExitType EXTERNAL 'LIBRARY orxinvocation setExitType' +::method getExitType EXTERNAL 'LIBRARY orxinvocation getExitType' +::method !setProgramName PRIVATE EXTERNAL 'LIBRARY orxinvocation setProgramName' +::attribute programName GET +::attribute programName SET + expose programName + use arg programName + self~!setProgramName(programName) + +::method !setInitialAddress PRIVATE EXTERNAL 'LIBRARY orxinvocation setInitialAddress' +::attribute initialAddress GET +::attribute initialAddress SET + expose initialAddress + use arg initialAddress + self~!setInitialAddress(initialAddress) + +::method !setSearchPath PRIVATE EXTERNAL 'LIBRARY orxinvocation setSearchPath' +::attribute SearchPath GET +::attribute SearchPath SET + expose SearchPath + use arg SearchPath + self~!setSearchPath(SearchPath) + + +::method !setExtensions PRIVATE EXTERNAL 'LIBRARY orxinvocation setExtensions' +::attribute Extensions GET +::attribute Extensions SET + expose Extensions + use arg Extensions + self~!setExtensions(Extensions) + +::method !setLoadLibrary PRIVATE EXTERNAL 'LIBRARY orxinvocation setLoadLibrary' +::attribute LoadLibrary GET +::attribute LoadLibrary SET + expose LoadLibrary + use arg LoadLibrary + self~!setLoadLibrary(LoadLibrary) + +::attribute FunctionExit SET EXTERNAL 'LIBRARY orxinvocation setFunctionExit' +::attribute CommandExit SET EXTERNAL 'LIBRARY orxinvocation setCommandExit' +::attribute QueueExit SET EXTERNAL 'LIBRARY orxinvocation setQueueExit' +::attribute IOExit SET EXTERNAL 'LIBRARY orxinvocation setIOExit' +::attribute TraceExit SET EXTERNAL 'LIBRARY orxinvocation setTraceExit' +::attribute HaltExit SET EXTERNAL 'LIBRARY orxinvocation setHaltExit' +::attribute InitExit SET EXTERNAL 'LIBRARY orxinvocation setInitExit' +::attribute TermExit SET EXTERNAL 'LIBRARY orxinvocation setTermExit' +::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' +::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' +::attribute ObjectFunctionExit SET EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' +::attribute NovalueExit SET EXTERNAL 'LIBRARY orxinvocation setNovalueExit' +::attribute ValueExit SET EXTERNAL 'LIBRARY orxinvocation setValueExit' + +::attribute FunctionExit GET EXTERNAL 'LIBRARY orxinvocation getFunctionExit' +::attribute CommandExit GET EXTERNAL 'LIBRARY orxinvocation getCommandExit' +::attribute QueueExit GET EXTERNAL 'LIBRARY orxinvocation getQueueExit' +::attribute IOExit GET EXTERNAL 'LIBRARY orxinvocation getIOExit' +::attribute TraceExit GET EXTERNAL 'LIBRARY orxinvocation getTraceExit' +::attribute HaltExit GET EXTERNAL 'LIBRARY orxinvocation getHaltExit' +::attribute InitExit GET EXTERNAL 'LIBRARY orxinvocation getInitExit' +::attribute TermExit GET EXTERNAL 'LIBRARY orxinvocation getTermExit' +::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' +::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' +::attribute ObjectFunctionExit GET EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' +::attribute NovalueExit GET EXTERNAL 'LIBRARY orxinvocation getNovalueExit' +::attribute ValueExit GET EXTERNAL 'LIBRARY orxinvocation getValueExit' + +::method getRC EXTERNAL 'LIBRARY orxinvocation getRC' +::method getCode EXTERNAL 'LIBRARY orxinvocation getCode' Property changes on: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls ___________________________________________________________________ Added: svn:eol-style + native Added: test/trunk/ooRexx/base/bif/FILESPEC.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/FILESPEC.testGroup (rev 0) +++ test/trunk/ooRexx/base/bif/FILESPEC.testGroup 2008-11-02 00:45:06 UTC (rev 3649) @@ -0,0 +1,188 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev: 3371 $ + Change Date: $Date: 2008-09-21 00:33:29 -0400 (Sun, 21 Sep 2008) $ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2005-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + parse source . . fileSpec + group = .TestGroup~new(fileSpec) + + group~add(.FILESPEC.testGroup) + + if group~isAutomatedTest then return group + + testResult = group~suite~execute~~print + +return testResult + +::requires 'ooTest.frm' -- load the ooRexxUnit classes + +::class "FILESPEC.testGroup" subclass ooTestCase public + +::method testPath01 + if .ooRexxUnit.OSName == "WINDOWS" then do + self~assertSame("", filespec("P", "Foo.bar")) + self~assertSame("a\b\", filespec("P", "a\b\Foo.bar")) + self~assertSame("\a\b c\", filespec("p", "\a\b c\Foo.bar")) + self~assertSame("\a\b\", filespec("p", "\a\b\Foo.bar")) + self~assertSame("\a\b\", filespec("p", "\a\b\Foo Bar.dat")) + self~assertSame("\a\b\", filespec("P", "c:\a\b\Foo.bar")) + self~assertSame("..\b\", filespec("P", "..\b\Foo.bar")) + self~assertSame(".\b\", filespec("P", ".\b\Foo.bar")) + self~assertSame("", filespec("P", "")) + end + else do + self~assertSame("", filespec("P", "Foo.bar")) + self~assertSame("a/b/", filespec("p", "a/b/Foo.bar")) + self~assertSame("/a/b/", filespec("P", "/a/b/Foo.bar")) + self~assertSame("../b/", filespec("P", "../b/Foo.bar")) + self~assertSame("./b/", filespec("P", "./b/Foo.bar")) + self~assertSame("", filespec("P", "")) + end + +::method testLocation01 + if .ooRexxUnit.OSName == "WINDOWS" then do + self~assertSame("", filespec("L", "Foo.bar")) + self~assertSame("a\b\", filespec("L", "a\b\Foo.bar")) + self~assertSame("\a\b\", filespec("l", "\a\b\Foo.bar")) + self~assertSame("c:\a\b\", filespec("L", "c:\a\b\Foo.bar")) + self~assertSame("\a\b\", filespec("l", "\a\b\Foo Bar.dat")) + self~assertSame("\a\b c\", filespec("l", "\a\b c\Foo.bar")) + self~assertSame("", filespec("l", "")) + end + else do + self~assertSame("", filespec("L", "Foo.bar")) + self~assertSame("a/b/", filespec("l", "a/b/Foo.bar")) + self~assertSame("/a/b/", filespec("L", "/a/b/Foo.bar")) + self~assertSame("", filespec("l", "")) + end + +::method testExtension01 + if .ooRexxUnit.OSName == "WINDOWS" then do + self~assertSame("", filespec("E", "Foobar")) + self~assertSame("bar", filespec("E", "Foo.bar")) + self~assertSame("bar", filespec("E", "a\b\Foo.bar")) + self~assertSame("bar", filespec("E", "a\b.c\Foo.bar")) + self~assertSame("", filespec("E", "a\b.c\Foobar")) + self~assertSame("", filespec("E", "a\b.c\Foo bar")) + self~assertSame("bar", filespec("e", "..\b\Foo.bar")) + self~assertSame("bar", filespec("e", "..\b\Foo Bar.bar")) + self~assertSame("", filespec("e", "..\b\Foobar")) + self~assertSame("bar", filespec("e", ".\b\Foo.bar")) + self~assertSame("", filespec("e", ".\b\Foobar")) + self~assertSame("", filespec("e", "")) + end + else do + self~assertSame("", filespec("E", "Foobar")) + self~assertSame("bar", filespec("E", "Foo.bar")) + self~assertSame("bar", filespec("E", "a/b/Foo.bar")) + self~assertSame("bar", filespec("E", "a/b.c/Foo.bar")) + self~assertSame("", filespec("E", "a/b.c/Foobar")) + self~assertSame("bar", filespec("e", "../b/Foo.bar")) + self~assertSame("", filespec("e", "../b/Foobar")) + self~assertSame("bar", filespec("e", "./b/Foo.bar")) + self~assertSame("", filespec("e", "./b/Foobar")) + self~assertSame("", filespec("e", "")) + end + +::method testName01 + if .ooRexxUnit.OSName == "WINDOWS" then do + self~assertSame("Foobar", filespec("n", "Foobar")) + self~assertSame("Foo.bar", filespec("n", "Foo.bar")) + self~assertSame("Foo.bar", filespec("N", "a\b\Foo.bar")) + self~assertSame("Foo.bar", filespec("n", "a\b.c\Foo.bar")) + self~assertSame("Foo Bar.bar", filespec("n", "a\b.c\Foo Bar.bar")) + self~assertSame("Foo Bar", filespec("n", "a\b.c\Foo Bar")) + self~assertSame("", filespec("n", "a\b.c\")) + self~assertSame("Foo.bar", filespec("n", "..\b\Foo.bar")) + self~assertSame("", filespec("n", "..\b\")) + self~assertSame("", filespec("n", "c:")) + self~assertSame("Foo.bar", filespec("n", "c:Foo.bar")) + self~assertSame("", filespec("n", "")) + end + else do + self~assertSame("Foobar", filespec("n", "Foobar")) + self~assertSame("Foo.bar", filespec("n", "Foo.bar")) + self~assertSame("Foo.bar", filespec("N", "a/b/Foo.bar")) + self~assertSame("Foo.bar", filespec("n", "a/b.c/Foo.bar")) + self~assertSame("", filespec("n", "a/b.c/")) + self~assertSame("Foo.bar", filespec("n", "../b/Foo.bar")) + self~assertSame("", filespec("n", "../b/")) + self~assertSame("", filespec("n", "")) + end + +::method testDrive01 + if .ooRexxUnit.OSName == "WINDOWS" then do + self~assertSame("", filespec("d", "Foobar")) + self~assertSame("", filespec("D", "a\b\Foo.bar")) + self~assertSame("d:", filespec("D", "d:\a\b\Foo.bar")) + self~assertSame("c:", filespec("d", "c:")) + self~assertSame("C:", filespec("d", "C:")) + self~assertSame("c:", filespec("d", "c:Foo.bar")) + self~assertSame("", filespec("d", "")) + end + +::method testSyntax01 + self~expectSyntax(88.901) + x = filespec() + +::method testSyntax02 + self~expectSyntax(88.901) + x = filespec('E') + +::method testSyntax03 + self~expectSyntax(88.901) + x = filespec(,'a.b') + +::method testSyntax04 + self~expectSyntax(88.922) + x = filespec('e', 'a.b', 'x') + +::method testSyntax05 + self~expectSyntax(40.904) + x = filespec('', 'a.b') + +::method testSyntax06 + self~expectSyntax(40.904) + x = filespec('x', 'a.b') + +::method testSyntax07 + if .ooRexxUnit.OSName != "WINDOWS" then do + self~expectSyntax(40.1) + x = filespec('d', 'a.b') + end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-09 19:23:36
|
Revision: 3669 http://oorexx.svn.sourceforge.net/oorexx/?rev=3669&view=rev Author: bigrixx Date: 2008-11-09 19:23:27 +0000 (Sun, 09 Nov 2008) Log Message: ----------- Some real RexxCreateInterpreter() tests Modified Paths: -------------- test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/external/API/orxinvocation.cpp test/trunk/ooRexx/API/oo/INVOCATIONTester.cls Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/ test/trunk/ooRexx/API/oo/tests/callReturn.rex test/trunk/ooRexx/API/oo/tests/callType.rex test/trunk/ooRexx/API/oo/tests/initialAddress.rex Modified: test/trunk/external/API/orxexits.hpp =================================================================== --- test/trunk/external/API/orxexits.hpp 2008-11-09 19:22:20 UTC (rev 3668) +++ test/trunk/external/API/orxexits.hpp 2008-11-09 19:23:27 UTC (rev 3669) @@ -171,6 +171,10 @@ ExitAction action; }; + InstanceInfo() : exitStyle(NONE), programName(NULL), extensionPath(NULL), initialAddress(NULL), + extensions(NULL), loadLibrary(NULL), fnc(), cmd(), msq(), sio(), hlt(), trc(), ini(), + ter(), exf(), var(), val(), ofnc(), code(0), rc(0), argCount(0) { } + // the type of exit use ExitType exitStyle; // the program name Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-09 19:22:20 UTC (rev 3668) +++ test/trunk/external/API/orxinstance.cpp 2008-11-09 19:23:27 UTC (rev 3669) @@ -791,7 +791,10 @@ } else { - CSTRING resultString = context->CString(result); - strncpy(instanceInfo->returnResult, resultString, sizeof(instanceInfo->returnResult)); + if (result != NULLOBJECT) + { + CSTRING resultString = context->CString(result); + strncpy(instanceInfo->returnResult, resultString, sizeof(instanceInfo->returnResult)); + } } } Modified: test/trunk/external/API/orxinvocation.cpp =================================================================== --- test/trunk/external/API/orxinvocation.cpp 2008-11-09 19:22:20 UTC (rev 3668) +++ test/trunk/external/API/orxinvocation.cpp 2008-11-09 19:23:27 UTC (rev 3669) @@ -45,7 +45,7 @@ InstanceInfo *instanceInfo = new (context->BufferData(buffer)) InstanceInfo(); instanceInfo->exitStyle = InstanceInfo::NONE; instanceInfo->programName = ""; - instanceInfo->initialAddress = ""; + instanceInfo->initialAddress = NULL; context->SetObjectVariable("CSELF", buffer); return 0; } Modified: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-09 19:22:20 UTC (rev 3668) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-09 19:23:27 UTC (rev 3669) @@ -77,33 +77,60 @@ use arg LoadLibrary self~!setLoadLibrary(LoadLibrary) -::attribute FunctionExit SET EXTERNAL 'LIBRARY orxinvocation setFunctionExit' -::attribute CommandExit SET EXTERNAL 'LIBRARY orxinvocation setCommandExit' -::attribute QueueExit SET EXTERNAL 'LIBRARY orxinvocation setQueueExit' -::attribute IOExit SET EXTERNAL 'LIBRARY orxinvocation setIOExit' -::attribute TraceExit SET EXTERNAL 'LIBRARY orxinvocation setTraceExit' -::attribute HaltExit SET EXTERNAL 'LIBRARY orxinvocation setHaltExit' -::attribute InitExit SET EXTERNAL 'LIBRARY orxinvocation setInitExit' -::attribute TermExit SET EXTERNAL 'LIBRARY orxinvocation setTermExit' -::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' -::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' -::attribute ObjectFunctionExit SET EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' -::attribute NovalueExit SET EXTERNAL 'LIBRARY orxinvocation setNovalueExit' -::attribute ValueExit SET EXTERNAL 'LIBRARY orxinvocation setValueExit' +-- ::attribute FunctionExit SET EXTERNAL 'LIBRARY orxinvocation setFunctionExit' +-- ::attribute CommandExit SET EXTERNAL 'LIBRARY orxinvocation setCommandExit' +-- ::attribute QueueExit SET EXTERNAL 'LIBRARY orxinvocation setQueueExit' +-- ::attribute IOExit SET EXTERNAL 'LIBRARY orxinvocation setIOExit' +-- ::attribute TraceExit SET EXTERNAL 'LIBRARY orxinvocation setTraceExit' +-- ::attribute HaltExit SET EXTERNAL 'LIBRARY orxinvocation setHaltExit' +-- ::attribute InitExit SET EXTERNAL 'LIBRARY orxinvocation setInitExit' +-- ::attribute TermExit SET EXTERNAL 'LIBRARY orxinvocation setTermExit' +-- ::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' +-- ::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' +-- ::attribute ObjectFunctionExit SET EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' +-- ::attribute NovalueExit SET EXTERNAL 'LIBRARY orxinvocation setNovalueExit' +-- ::attribute ValueExit SET EXTERNAL 'LIBRARY orxinvocation setValueExit' -::attribute FunctionExit GET EXTERNAL 'LIBRARY orxinvocation getFunctionExit' -::attribute CommandExit GET EXTERNAL 'LIBRARY orxinvocation getCommandExit' -::attribute QueueExit GET EXTERNAL 'LIBRARY orxinvocation getQueueExit' -::attribute IOExit GET EXTERNAL 'LIBRARY orxinvocation getIOExit' -::attribute TraceExit GET EXTERNAL 'LIBRARY orxinvocation getTraceExit' -::attribute HaltExit GET EXTERNAL 'LIBRARY orxinvocation getHaltExit' -::attribute InitExit GET EXTERNAL 'LIBRARY orxinvocation getInitExit' -::attribute TermExit GET EXTERNAL 'LIBRARY orxinvocation getTermExit' -::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' -::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' -::attribute ObjectFunctionExit GET EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' -::attribute NovalueExit GET EXTERNAL 'LIBRARY orxinvocation getNovalueExit' -::attribute ValueExit GET EXTERNAL 'LIBRARY orxinvocation getValueExit' +-- ::attribute FunctionExit GET EXTERNAL 'LIBRARY orxinvocation getFunctionExit' +-- ::attribute CommandExit GET EXTERNAL 'LIBRARY orxinvocation getCommandExit' +-- ::attribute QueueExit GET EXTERNAL 'LIBRARY orxinvocation getQueueExit' +-- ::attribute IOExit GET EXTERNAL 'LIBRARY orxinvocation getIOExit' +-- ::attribute TraceExit GET EXTERNAL 'LIBRARY orxinvocation getTraceExit' +-- ::attribute HaltExit GET EXTERNAL 'LIBRARY orxinvocation getHaltExit' +-- ::attribute InitExit GET EXTERNAL 'LIBRARY orxinvocation getInitExit' +-- ::attribute TermExit GET EXTERNAL 'LIBRARY orxinvocation getTermExit' +-- ::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' +-- ::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' +-- ::attribute ObjectFunctionExit GET EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' +-- ::attribute NovalueExit GET EXTERNAL 'LIBRARY orxinvocation getNovalueExit' +-- ::attribute ValueExit GET EXTERNAL 'LIBRARY orxinvocation getValueExit' +::method 'FunctionExit=' EXTERNAL 'LIBRARY orxinvocation setFunctionExit' +::method 'CommandExit=' EXTERNAL 'LIBRARY orxinvocation setCommandExit' +::method 'QueueExit=' EXTERNAL 'LIBRARY orxinvocation setQueueExit' +::method 'IOExit=' EXTERNAL 'LIBRARY orxinvocation setIOExit' +::method 'TraceExit=' EXTERNAL 'LIBRARY orxinvocation setTraceExit' +::method 'HaltExit=' EXTERNAL 'LIBRARY orxinvocation setHaltExit' +::method 'InitExit=' EXTERNAL 'LIBRARY orxinvocation setInitExit' +::method 'TermExit=' EXTERNAL 'LIBRARY orxinvocation setTermExit' +::method 'ScriptingExit=' EXTERNAL 'LIBRARY orxinvocation setScriptingExit' +::method 'ObjectFunctionExit=' EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' +::method 'NovalueExit=' EXTERNAL 'LIBRARY orxinvocation setNovalueExit' +::method 'ValueExit=' EXTERNAL 'LIBRARY orxinvocation setValueExit' + +::method FunctionExit EXTERNAL 'LIBRARY orxinvocation getFunctionExit' +::method CommandExit EXTERNAL 'LIBRARY orxinvocation getCommandExit' +::method QueueExit EXTERNAL 'LIBRARY orxinvocation getQueueExit' +::method IOExit EXTERNAL 'LIBRARY orxinvocation getIOExit' +::method TraceExit EXTERNAL 'LIBRARY orxinvocation getTraceExit' +::method HaltExit EXTERNAL 'LIBRARY orxinvocation getHaltExit' +::method InitExit EXTERNAL 'LIBRARY orxinvocation getInitExit' +::method TermExit EXTERNAL 'LIBRARY orxinvocation getTermExit' +::method ScriptingExit EXTERNAL 'LIBRARY orxinvocation getScriptingExit' +::method ObjectFunctionExit EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' +::method NovalueExit EXTERNAL 'LIBRARY orxinvocation getNovalueExit' +::method ValueExit EXTERNAL 'LIBRARY orxinvocation getValueExit' + ::method getRC EXTERNAL 'LIBRARY orxinvocation getRC' ::method getCode EXTERNAL 'LIBRARY orxinvocation getCode' +::method callInstanceProgram EXTERNAL 'LIBRARY orxinvocation callInstanceProgram' Added: test/trunk/ooRexx/API/oo/tests/callReturn.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/callReturn.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/callReturn.rex 2008-11-09 19:23:27 UTC (rev 3669) @@ -0,0 +1,10 @@ +args = arg(1, 'a') +sum = arg() + +do i = 1 to arg() + arg = args[i] + if arg \= .nil then + sum += arg +end + +return sum Property changes on: test/trunk/ooRexx/API/oo/tests/callReturn.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/callType.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/callType.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/callType.rex 2008-11-09 19:23:27 UTC (rev 3669) @@ -0,0 +1,2 @@ +parse source . type . +return type Property changes on: test/trunk/ooRexx/API/oo/tests/callType.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/initialAddress.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/initialAddress.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/initialAddress.rex 2008-11-09 19:23:27 UTC (rev 3669) @@ -0,0 +1 @@ +return address() Property changes on: test/trunk/ooRexx/API/oo/tests/initialAddress.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-09 22:30:43
|
Revision: 3671 http://oorexx.svn.sourceforge.net/oorexx/?rev=3671&view=rev Author: bigrixx Date: 2008-11-09 22:30:41 +0000 (Sun, 09 Nov 2008) Log Message: ----------- more api test work Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxinstance.cpp test/trunk/ooRexx/API/oo/INVOCATIONTester.cls Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/initExit.rex test/trunk/ooRexx/API/oo/tests/syntaxError.rex test/trunk/ooRexx/API/oo/tests/terminationExit.rex Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-09 22:30:19 UTC (rev 3670) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-09 22:30:41 UTC (rev 3671) @@ -57,7 +57,7 @@ shvb.shvname.strptr = name; shvb.shvname.strlength = strlen(name); shvb.shvvalue.strptr = const_cast<char *>(value); - shvb.shvvalue.strlength = sizeof(value); + shvb.shvvalue.strlength = strlen(value); shvb.shvnamelen = shvb.shvname.strlength; shvb.shvvaluelen = shvb.shvvalue.strlength; shvb.shvcode = RXSHV_SET; @@ -431,7 +431,7 @@ { InstanceInfo *instanceInfo = getApplicationData(); - switch (instanceInfo->sio.action) + switch (instanceInfo->ini.action) { case InstanceInfo::SKIP: return RXEXIT_NOT_HANDLED; @@ -462,7 +462,7 @@ RXSTRING value; MAKERXSTRING(value, buffer, sizeof(buffer)); - getContextVariable("test1", &value); + getContextVariable("TEST1", &value); if (strcmp(value.strptr, "Hello World") != 0) { return RXEXIT_RAISE_ERROR; @@ -586,18 +586,18 @@ void *userData[2]; userData[1] = data; - RexxRegisterExitDll("TestFunctionExit", "orxclassicexits", "TestFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestObjectFunctionExit", "orxclassicexits", "TestObjectFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestScriptFunctionExit", "orxclassicexits", "TestScriptFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestCommandExit", "orxclassicexits", "TestCommandExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestQueueExit", "orxclassicexits", "TestQueueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestSessionIOExit", "orxclassicexits", "TestSessionIOExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestHaltExit", "orxclassicexits", "TestHaltExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestInitExit", "orxclassicexits", "TestInitExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestNovalueExit", "orxclassicexits", "TestNovalueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestTerminationExit", "orxclassicexits", "TestTerminationExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestValueExit", "orxclassicexits", "TestValueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestTraceExit", "orxclassicexits", "TestTraceExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestFunctionExit", "orxexits", "TestFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestObjectFunctionExit", "orxexits", "TestObjectFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestScriptFunctionExit", "orxexits", "TestScriptFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestCommandExit", "orxexits", "TestCommandExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestQueueExit", "orxexits", "TestQueueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestSessionIOExit", "orxexits", "TestSessionIOExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestHaltExit", "orxexits", "TestHaltExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestInitExit", "orxexits", "TestInitExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestNovalueExit", "orxexits", "TestNovalueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestTerminationExit", "orxexits", "TestTerminationExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestValueExit", "orxexits", "TestValueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestTraceExit", "orxexits", "TestTraceExit", (char *)userData, RXEXIT_DROPPABLE); } Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-09 22:30:19 UTC (rev 3670) +++ test/trunk/external/API/orxinstance.cpp 2008-11-09 22:30:41 UTC (rev 3671) @@ -145,7 +145,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Function Exit")); return RXEXIT_NOT_HANDLED; } @@ -195,7 +195,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Command Exit")); return RXEXIT_NOT_HANDLED; } @@ -266,7 +266,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Queue Exit")); return RXEXIT_NOT_HANDLED; } @@ -334,7 +334,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("I/O Exit")); return RXEXIT_NOT_HANDLED; } @@ -403,7 +403,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Halt Exit")); return RXEXIT_NOT_HANDLED; case InstanceInfo::HALT: { @@ -434,7 +434,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Trace Exit")); return RXEXIT_NOT_HANDLED; case InstanceInfo::TRACEON: { @@ -463,7 +463,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Init Exit")); return RXEXIT_NOT_HANDLED; } @@ -482,7 +482,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Termination Exit")); return RXEXIT_NOT_HANDLED; } @@ -522,7 +522,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Object Function Exit")); return RXEXIT_NOT_HANDLED; } return invokeExitFunction(context, "Object", exitInfo); @@ -539,7 +539,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Novalue Exit")); return RXEXIT_NOT_HANDLED; } @@ -564,7 +564,7 @@ case InstanceInfo::EXIT_ERROR: return RXEXIT_RAISE_ERROR; case InstanceInfo::RAISE: - context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Script Function Exit")); + context->RaiseException1(Rexx_Error_System_service_user_defined, context->NewStringFromAsciiz("Value() Exit")); return RXEXIT_NOT_HANDLED; } @@ -696,6 +696,7 @@ buildContextExitList(instanceInfo, contextExits); options[optionCount].option = (void *)contextExits; optionCount++; + break; } case InstanceInfo::REGISTERED_DLL: { @@ -704,6 +705,7 @@ buildRegisteredExitList(instanceInfo, registeredExits); options[optionCount].option = (void *)registeredExits; optionCount++; + break; } case InstanceInfo::REGISTERED_EXE: { @@ -712,6 +714,7 @@ buildRegisteredExitList(instanceInfo, registeredExits); options[optionCount].option = (void *)registeredExits; optionCount++; + break; } default: // no options added Modified: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-09 22:30:19 UTC (rev 3670) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-09 22:30:41 UTC (rev 3671) @@ -39,8 +39,8 @@ ::class 'INVOCATIONtester' public ::method init EXTERNAL 'LIBRARY orxinvocation init' -::method setExitType EXTERNAL 'LIBRARY orxinvocation setExitType' -::method getExitType EXTERNAL 'LIBRARY orxinvocation getExitType' +::method 'ExitType=' EXTERNAL 'LIBRARY orxinvocation setExitType' +::method 'ExitType' EXTERNAL 'LIBRARY orxinvocation getExitType' ::method !setProgramName PRIVATE EXTERNAL 'LIBRARY orxinvocation setProgramName' ::attribute programName GET ::attribute programName SET Added: test/trunk/ooRexx/API/oo/tests/initExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/initExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/initExit.rex 2008-11-09 22:30:41 UTC (rev 3671) @@ -0,0 +1 @@ +return test1 Property changes on: test/trunk/ooRexx/API/oo/tests/initExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/syntaxError.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/syntaxError.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/syntaxError.rex 2008-11-09 22:30:41 UTC (rev 3671) @@ -0,0 +1,2 @@ +-- this is an intentional syntax error +a = 1/0 Property changes on: test/trunk/ooRexx/API/oo/tests/syntaxError.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/terminationExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/terminationExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/terminationExit.rex 2008-11-09 22:30:41 UTC (rev 3671) @@ -0,0 +1,2 @@ +-- the termination exit will look for this +use arg test1 Property changes on: test/trunk/ooRexx/API/oo/tests/terminationExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-10 01:25:17
|
Revision: 3673 http://oorexx.svn.sourceforge.net/oorexx/?rev=3673&view=rev Author: bigrixx Date: 2008-11-10 01:25:12 +0000 (Mon, 10 Nov 2008) Log Message: ----------- a start for the command exit tests Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/commandExit.rex Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-10 01:24:34 UTC (rev 3672) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-10 01:25:12 UTC (rev 3673) @@ -330,7 +330,7 @@ } case RXSIODTR: { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) { RXSIODTR_PARM *parms = (RXSIODTR_PARM *)exitInfo; strcpy(parms->rxsiodtr_retc.strptr, "trace off"); @@ -357,7 +357,7 @@ } case RXSIOTRC: { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) { RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; // this one is really hard to test, so it's sufficient that we got here. Modified: test/trunk/external/API/orxexits.hpp =================================================================== --- test/trunk/external/API/orxexits.hpp 2008-11-10 01:24:34 UTC (rev 3672) +++ test/trunk/external/API/orxexits.hpp 2008-11-10 01:25:12 UTC (rev 3673) @@ -58,6 +58,7 @@ NOHALT = 8, ALL = 9, CONSOLE = 10, + CONSOLE_DEBUG = 11, } ExitAction; typedef enum @@ -119,6 +120,10 @@ { action = CONSOLE; } + else if (strcmp("DEBUG", a) == 0) + { + action = CONSOLE_DEBUG; + } else { action = DISABLED; @@ -163,6 +168,8 @@ return "ALL"; case CONSOLE: return "CONSOLE"; + case CONSOLE_DEBUG: + return "DEBUG"; } return "DISABLED"; } Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-10 01:24:34 UTC (rev 3672) +++ test/trunk/external/API/orxinstance.cpp 2008-11-10 01:25:12 UTC (rev 3673) @@ -353,7 +353,7 @@ } case RXSIODTR: { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) { RXSIODTR_PARM *parms = (RXSIODTR_PARM *)exitInfo; strcpy(parms->rxsiodtr_retc.strptr, "trace off"); @@ -380,7 +380,7 @@ } case RXSIOTRC: { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) { RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; // this one is really hard to test, so it's sufficient that we got here. Added: test/trunk/ooRexx/API/oo/tests/commandExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/commandExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/commandExit.rex 2008-11-10 01:25:12 UTC (rev 3673) @@ -0,0 +1,14 @@ +use arg address, command +signal on error +signal on failure + +address value address +command + +return "SUCCESS" rc + +error: +return 'ERROR' rc + +failure: +return 'FAILURE' rc Property changes on: test/trunk/ooRexx/API/oo/tests/commandExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-12 01:16:52
|
Revision: 3681 http://oorexx.svn.sourceforge.net/oorexx/?rev=3681&view=rev Author: bigrixx Date: 2008-11-12 01:16:41 +0000 (Wed, 12 Nov 2008) Log Message: ----------- more exit tests Modified Paths: -------------- test/trunk/external/API/orxinstance.cpp test/trunk/ooRexx/API/oo/INVOCATIONTester.cls Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/contextVariables.rex test/trunk/ooRexx/API/oo/tests/getCallerContext.rex test/trunk/ooRexx/API/oo/tests/queueExitPull.rex test/trunk/ooRexx/API/oo/tests/queueExitPush.rex test/trunk/ooRexx/API/oo/tests/queueExitQueue.rex test/trunk/ooRexx/API/oo/tests/queueExitSet.rex test/trunk/ooRexx/API/oo/tests/queueExitSize.rex Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-12 01:15:55 UTC (rev 3680) +++ test/trunk/external/API/orxinstance.cpp 2008-11-12 01:16:41 UTC (rev 3681) @@ -114,7 +114,7 @@ parms->rxfnc_flags.rxffnfnd = 1; return RXEXIT_HANDLED; } - else if (strcmp(functionName, "TESTARGUMENTS") == 0) + else if (strcmp(functionName, "TESTARGUMENTS") == 0 || strcmp(functionName, "TESTARGUMENTS2") == 0) { RexxArrayObject args = context->NewArray(parms->rxfnc_argc); for (int i = 0; i < parms->rxfnc_argc; i++) @@ -124,7 +124,7 @@ context->ArrayPut(args, parms->rxfnc_argv[i], i + 1); } } - parms->rxfnc_retc = (RexxObjectPtr)args; + parms->rxfnc_retc = (RexxObjectPtr)context->SendMessage2(args, "TOSTRING", context->String("L"), context->String(",")); return RXEXIT_HANDLED; } else Modified: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-12 01:15:55 UTC (rev 3680) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-12 01:16:41 UTC (rev 3681) @@ -86,7 +86,6 @@ -- ::attribute InitExit SET EXTERNAL 'LIBRARY orxinvocation setInitExit' -- ::attribute TermExit SET EXTERNAL 'LIBRARY orxinvocation setTermExit' -- ::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' --- ::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' -- ::attribute ObjectFunctionExit SET EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' -- ::attribute NovalueExit SET EXTERNAL 'LIBRARY orxinvocation setNovalueExit' -- ::attribute ValueExit SET EXTERNAL 'LIBRARY orxinvocation setValueExit' @@ -100,7 +99,6 @@ -- ::attribute InitExit GET EXTERNAL 'LIBRARY orxinvocation getInitExit' -- ::attribute TermExit GET EXTERNAL 'LIBRARY orxinvocation getTermExit' -- ::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' --- ::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' -- ::attribute ObjectFunctionExit GET EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' -- ::attribute NovalueExit GET EXTERNAL 'LIBRARY orxinvocation getNovalueExit' -- ::attribute ValueExit GET EXTERNAL 'LIBRARY orxinvocation getValueExit' Added: test/trunk/ooRexx/API/oo/tests/contextVariables.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/contextVariables.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/contextVariables.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,51 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +a = "Fred" +good = a == TestGetContextVariable("A"); +call TestSetContextVariable 'B', "Rick" +good = good & b == "Rick" +call TestDropContextVariable 'B' +good = good & b == "B" +return good + + + Property changes on: test/trunk/ooRexx/API/oo/tests/contextVariables.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/getCallerContext.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/getCallerContext.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/getCallerContext.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,42 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +return testgetcallercontext() == .context Property changes on: test/trunk/ooRexx/API/oo/tests/getCallerContext.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/queueExitPull.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/queueExitPull.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/queueExitPull.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,48 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +.stdque~push("Bonjour") +parse pull res +.stdque~empty +return res + + Property changes on: test/trunk/ooRexx/API/oo/tests/queueExitPull.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/queueExitPush.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/queueExitPush.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/queueExitPush.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,47 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +.stdque~empty +push "LIFO" + +res = .stdque~queued +return res Property changes on: test/trunk/ooRexx/API/oo/tests/queueExitPush.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/queueExitQueue.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/queueExitQueue.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/queueExitQueue.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,47 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +queue "FIFO" + +res = .stdque~queued +.stdque~empty +return res Property changes on: test/trunk/ooRexx/API/oo/tests/queueExitQueue.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/queueExitSet.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/queueExitSet.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/queueExitSet.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,46 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +part1 = rxqueue('Set', "YADAYADA") +part2 = .stdque~string +return part1 part2 + Property changes on: test/trunk/ooRexx/API/oo/tests/queueExitSet.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/queueExitSize.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/queueExitSize.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/queueExitSize.rex 2008-11-12 01:16:41 UTC (rev 3681) @@ -0,0 +1,45 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +.stdque~empty -- get this to a known size +return queued() + Property changes on: test/trunk/ooRexx/API/oo/tests/queueExitSize.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-13 00:01:07
|
Revision: 3684 http://oorexx.svn.sourceforge.net/oorexx/?rev=3684&view=rev Author: bigrixx Date: 2008-11-13 00:01:02 +0000 (Thu, 13 Nov 2008) Log Message: ----------- add tests for EXTERNAL attribute directives Modified Paths: -------------- test/trunk/external/API/orxinstance.cpp test/trunk/ooRexx/API/oo/INVOCATIONTester.cls Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-12 23:59:35 UTC (rev 3683) +++ test/trunk/external/API/orxinstance.cpp 2008-11-13 00:01:02 UTC (rev 3684) @@ -800,4 +800,6 @@ strncpy(instanceInfo->returnResult, resultString, sizeof(instanceInfo->returnResult)); } } + // make sure we terminate this first + instance->Terminate(); } Modified: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-12 23:59:35 UTC (rev 3683) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-13 00:01:02 UTC (rev 3684) @@ -76,59 +76,23 @@ expose LoadLibrary use arg LoadLibrary self~!setLoadLibrary(LoadLibrary) +-- NOTE: These are defined in a variety of styles...that's part of the test. --- ::attribute FunctionExit SET EXTERNAL 'LIBRARY orxinvocation setFunctionExit' --- ::attribute CommandExit SET EXTERNAL 'LIBRARY orxinvocation setCommandExit' --- ::attribute QueueExit SET EXTERNAL 'LIBRARY orxinvocation setQueueExit' --- ::attribute IOExit SET EXTERNAL 'LIBRARY orxinvocation setIOExit' --- ::attribute TraceExit SET EXTERNAL 'LIBRARY orxinvocation setTraceExit' --- ::attribute HaltExit SET EXTERNAL 'LIBRARY orxinvocation setHaltExit' --- ::attribute InitExit SET EXTERNAL 'LIBRARY orxinvocation setInitExit' --- ::attribute TermExit SET EXTERNAL 'LIBRARY orxinvocation setTermExit' --- ::attribute ScriptingExit SET EXTERNAL 'LIBRARY orxinvocation setScriptingExit' --- ::attribute ObjectFunctionExit SET EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' --- ::attribute NovalueExit SET EXTERNAL 'LIBRARY orxinvocation setNovalueExit' --- ::attribute ValueExit SET EXTERNAL 'LIBRARY orxinvocation setValueExit' +::attribute FunctionExit EXTERNAL 'LIBRARY orxinvocation FunctionExit' +::attribute CommandExit EXTERNAL 'LIBRARY orxinvocation' +::attribute QueueExit SET EXTERNAL 'LIBRARY orxinvocation setQueueExit' +::attribute QueueExit GET EXTERNAL 'LIBRARY orxinvocation getQueueExit' +::attribute IOExit SET EXTERNAL 'LIBRARY orxinvocation' +::attribute IOExit GET EXTERNAL 'LIBRARY orxinvocation' +::method TraceExit ATTRIBUTE EXTERNAL 'LIBRARY orxinvocation TraceExit' +::method HaltExit ATTRIBUTE EXTERNAL 'LIBRARY orxinvocation' +::attribute InitExit EXTERNAL 'LIBRARY orxinvocation' +::attribute TermExit EXTERNAL 'LIBRARY orxinvocation' +::attribute ScriptingExit EXTERNAL 'LIBRARY orxinvocation' +::attribute ObjectFunctionExit EXTERNAL 'LIBRARY orxinvocation' +::attribute NovalueExit EXTERNAL 'LIBRARY orxinvocation' +::attribute ValueExit EXTERNAL 'LIBRARY orxinvocation' --- ::attribute FunctionExit GET EXTERNAL 'LIBRARY orxinvocation getFunctionExit' --- ::attribute CommandExit GET EXTERNAL 'LIBRARY orxinvocation getCommandExit' --- ::attribute QueueExit GET EXTERNAL 'LIBRARY orxinvocation getQueueExit' --- ::attribute IOExit GET EXTERNAL 'LIBRARY orxinvocation getIOExit' --- ::attribute TraceExit GET EXTERNAL 'LIBRARY orxinvocation getTraceExit' --- ::attribute HaltExit GET EXTERNAL 'LIBRARY orxinvocation getHaltExit' --- ::attribute InitExit GET EXTERNAL 'LIBRARY orxinvocation getInitExit' --- ::attribute TermExit GET EXTERNAL 'LIBRARY orxinvocation getTermExit' --- ::attribute ScriptingExit GET EXTERNAL 'LIBRARY orxinvocation getScriptingExit' --- ::attribute ObjectFunctionExit GET EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' --- ::attribute NovalueExit GET EXTERNAL 'LIBRARY orxinvocation getNovalueExit' --- ::attribute ValueExit GET EXTERNAL 'LIBRARY orxinvocation getValueExit' - -::method 'FunctionExit=' EXTERNAL 'LIBRARY orxinvocation setFunctionExit' -::method 'CommandExit=' EXTERNAL 'LIBRARY orxinvocation setCommandExit' -::method 'QueueExit=' EXTERNAL 'LIBRARY orxinvocation setQueueExit' -::method 'IOExit=' EXTERNAL 'LIBRARY orxinvocation setIOExit' -::method 'TraceExit=' EXTERNAL 'LIBRARY orxinvocation setTraceExit' -::method 'HaltExit=' EXTERNAL 'LIBRARY orxinvocation setHaltExit' -::method 'InitExit=' EXTERNAL 'LIBRARY orxinvocation setInitExit' -::method 'TermExit=' EXTERNAL 'LIBRARY orxinvocation setTermExit' -::method 'ScriptingExit=' EXTERNAL 'LIBRARY orxinvocation setScriptingExit' -::method 'ObjectFunctionExit=' EXTERNAL 'LIBRARY orxinvocation setObjectFunctionExit' -::method 'NovalueExit=' EXTERNAL 'LIBRARY orxinvocation setNovalueExit' -::method 'ValueExit=' EXTERNAL 'LIBRARY orxinvocation setValueExit' - -::method FunctionExit EXTERNAL 'LIBRARY orxinvocation getFunctionExit' -::method CommandExit EXTERNAL 'LIBRARY orxinvocation getCommandExit' -::method QueueExit EXTERNAL 'LIBRARY orxinvocation getQueueExit' -::method IOExit EXTERNAL 'LIBRARY orxinvocation getIOExit' -::method TraceExit EXTERNAL 'LIBRARY orxinvocation getTraceExit' -::method HaltExit EXTERNAL 'LIBRARY orxinvocation getHaltExit' -::method InitExit EXTERNAL 'LIBRARY orxinvocation getInitExit' -::method TermExit EXTERNAL 'LIBRARY orxinvocation getTermExit' -::method ScriptingExit EXTERNAL 'LIBRARY orxinvocation getScriptingExit' -::method ObjectFunctionExit EXTERNAL 'LIBRARY orxinvocation getObjectFunctionExit' -::method NovalueExit EXTERNAL 'LIBRARY orxinvocation getNovalueExit' -::method ValueExit EXTERNAL 'LIBRARY orxinvocation getValueExit' - ::method getRC EXTERNAL 'LIBRARY orxinvocation getRC' ::method getCode EXTERNAL 'LIBRARY orxinvocation getCode' ::method callInstanceProgram EXTERNAL 'LIBRARY orxinvocation callInstanceProgram' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-14 19:54:18
|
Revision: 3688 http://oorexx.svn.sourceforge.net/oorexx/?rev=3688&view=rev Author: bigrixx Date: 2008-11-14 19:54:12 +0000 (Fri, 14 Nov 2008) Log Message: ----------- more exit tests Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxinstance.cpp test/trunk/ooRexx/API/oo/tests/ioExitDebug.rex Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/haltExit.rex test/trunk/ooRexx/API/oo/tests/novalueExit.rex test/trunk/ooRexx/API/oo/tests/traceExit.rex test/trunk/ooRexx/API/oo/tests/valueExit.rex Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-14 19:53:09 UTC (rev 3687) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-14 19:54:12 UTC (rev 3688) @@ -415,6 +415,9 @@ { RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; parms->rxtrc_flags.rxftrace = 1; + // just one shot at this, otherwise the test rig goes into + // a loop in the io intercepter. + instanceInfo->trc = InstanceInfo::TRACEOFF; return RXEXIT_HANDLED; } case InstanceInfo::TRACEOFF: Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-14 19:53:09 UTC (rev 3687) +++ test/trunk/external/API/orxinstance.cpp 2008-11-14 19:54:12 UTC (rev 3688) @@ -440,6 +440,9 @@ { RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; parms->rxtrc_flags.rxftrace = 1; + // just one shot at this, otherwise the test rig goes into + // a loop in the io intercepter. + instanceInfo->trc = InstanceInfo::TRACEOFF; return RXEXIT_HANDLED; } case InstanceInfo::TRACEOFF: @@ -547,7 +550,8 @@ if (strcmp(parms->variable_name.strptr, "FOO") == 0) { - parms->value = context->ArrayOfOne(context->NewStringFromAsciiz("BAR")); + // need to just return a string value for proper validation + parms->value = context->NewStringFromAsciiz("BAR"); return RXEXIT_HANDLED; } return RXEXIT_NOT_HANDLED; @@ -574,7 +578,8 @@ { if (strcmp(parms->variable_name.strptr, "FOO") == 0) { - parms->value = context->ArrayOfOne(context->NewStringFromAsciiz("BAR")); + // need to just return a string value for proper validation + parms->value = context->NewStringFromAsciiz("BAR"); return RXEXIT_HANDLED; } } Added: test/trunk/ooRexx/API/oo/tests/haltExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/haltExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/haltExit.rex 2008-11-14 19:54:12 UTC (rev 3688) @@ -0,0 +1,50 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +signal on halt +address cmd "HALT" -- this is handled by the command exit +x = "NOT CALLED" +return x + +halt: + return "CALLED" + Property changes on: test/trunk/ooRexx/API/oo/tests/haltExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Modified: test/trunk/ooRexx/API/oo/tests/ioExitDebug.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/ioExitDebug.rex 2008-11-14 19:53:09 UTC (rev 3687) +++ test/trunk/ooRexx/API/oo/tests/ioExitDebug.rex 2008-11-14 19:54:12 UTC (rev 3688) @@ -41,14 +41,17 @@ /*----------------------------------------------------------------------------*/ trap = .PullTrap~new .input~destination(trap) +.error~destination(.TraceTrap~new) trace ?all trace off .input~destination +.error~destination return trap~result syntax: .input~destination +.error~destination raise propagate ::class pullTrap @@ -65,3 +68,7 @@ expose called if called then return "CALLED" else return "NOT CALLED" + +::class traceTrap +::method lineout + -- just swallow the line Added: test/trunk/ooRexx/API/oo/tests/novalueExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/novalueExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/novalueExit.rex 2008-11-14 19:54:12 UTC (rev 3688) @@ -0,0 +1,44 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +-- just return the value of this variable. +return foo Property changes on: test/trunk/ooRexx/API/oo/tests/novalueExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/traceExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/traceExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/traceExit.rex 2008-11-14 19:54:12 UTC (rev 3688) @@ -0,0 +1,76 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +trap = .PullTrap~new +.input~destination(trap) +.error~destination(.TraceTrap~new) + +address cmd "TRACEON" -- the command exit handles this +trace off -- should also be turned off by the I/O trap + +.input~destination +.error~destination +return trap~result + +syntax: +.input~destination +.error~destination +raise propagate + +::class pullTrap +::method init + expose called + called = .false + +::method linein + expose called + called = .true + return "trace off" + +::method result + expose called + if called then return "CALLED" + else return "NOT CALLED" + + +::class traceTrap +::method lineout + -- just swallow the line Property changes on: test/trunk/ooRexx/API/oo/tests/traceExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/valueExit.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/valueExit.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/valueExit.rex 2008-11-14 19:54:12 UTC (rev 3688) @@ -0,0 +1,45 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +-- just return the value of this variable. +return value("FOO",,"TEST") + Property changes on: test/trunk/ooRexx/API/oo/tests/valueExit.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-15 00:32:41
|
Revision: 3690 http://oorexx.svn.sourceforge.net/oorexx/?rev=3690&view=rev Author: bigrixx Date: 2008-11-15 00:32:35 +0000 (Sat, 15 Nov 2008) Log Message: ----------- tests for RexxCreateInterpreter and RexxStart Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxclassicexits.def test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/external/API/orxinvocation.cpp test/trunk/ooRexx/API/oo/INVOCATIONTester.cls Added Paths: ----------- test/trunk/ooRexx/API/oo/INVOCATION.testGroup test/trunk/ooRexx/API/oo/RexxStart.testGroup Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-15 00:32:35 UTC (rev 3690) @@ -700,3 +700,54 @@ } return false; } + + +void REXXENTRY invokeRexxStart(InstanceInfo *instanceInfo) +{ + CONSTRXSTRING args[10]; + RXSYSEXIT registeredExits[RXNOOFEXITS]; + short callRC = 0; + RXSTRING returnValue; + + instanceInfo->code = 0; + instanceInfo->rc = 0; + strcpy(instanceInfo->returnResult, ""); + + for (size_t i = 0; i < instanceInfo->argCount; i++) + { + if (instanceInfo->arguments[i] != NULL) + { + MAKERXSTRING(args[i], instanceInfo->arguments[i], strlen(instanceInfo->arguments[i])); + } + else + { + MAKERXSTRING(args[i], NULL, 0); + } + } + + RXSYSEXIT *exits = NULL; + + if (instanceInfo->exitStyle == InstanceInfo::REGISTERED_DLL) + { + registerDllExits((void *)instanceInfo); + buildRegisteredExitList(instanceInfo, registeredExits); + exits = registeredExits; + } + MAKERXSTRING(returnValue, NULL, 0); + + int rc = RexxStart(instanceInfo->argCount, args, instanceInfo->programName, NULL, instanceInfo->initialAddress, RXCOMMAND, exits, &callRC, &returnValue); + + if (rc < 0) + { + instanceInfo->rc = -rc; + } + else + { + if (returnValue.strptr != NULL) + { + strncpy(instanceInfo->returnResult, returnValue.strptr, sizeof(instanceInfo->returnResult)); + RexxFreeMemory(returnValue.strptr); + } + } + deregisterExits(); +} Modified: test/trunk/external/API/orxclassicexits.def =================================================================== --- test/trunk/external/API/orxclassicexits.def 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/external/API/orxclassicexits.def 2008-11-15 00:32:35 UTC (rev 3690) @@ -58,3 +58,4 @@ buildRegisteredExitList createInstance invokeProgram + invokeRexxStart Modified: test/trunk/external/API/orxexits.hpp =================================================================== --- test/trunk/external/API/orxexits.hpp 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/external/API/orxexits.hpp 2008-11-15 00:32:35 UTC (rev 3690) @@ -223,5 +223,6 @@ RexxReturnCode REXXENTRY createInstance(InstanceInfo *instanceInfo, RexxInstance *&instance, RexxThreadContext *&threadContext); bool REXXENTRY buildContextExitList(InstanceInfo *instanceInfo, RexxContextExit *exitList); void REXXENTRY invokeProgram(InstanceInfo *instanceInfo); +void REXXENTRY invokeRexxStart(InstanceInfo *instanceInfo); #endif Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/external/API/orxinstance.cpp 2008-11-15 00:32:35 UTC (rev 3690) @@ -807,4 +807,5 @@ } // make sure we terminate this first instance->Terminate(); + deregisterExits(); } Modified: test/trunk/external/API/orxinvocation.cpp =================================================================== --- test/trunk/external/API/orxinvocation.cpp 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/external/API/orxinvocation.cpp 2008-11-15 00:32:35 UTC (rev 3690) @@ -394,6 +394,39 @@ } +RexxMethod3(RexxObjectPtr, callRexxStart, + CSELF, self, + CSTRING, program, + RexxArrayObject, args) +{ + InstanceInfo *instanceInfo = (InstanceInfo *)self; + instanceInfo->programName = program; + instanceInfo->argCount = context->ArraySize(args); + for (size_t i = 0; i < instanceInfo->argCount; i++) + { + RexxObjectPtr arg = context->ArrayAt(args, i + 1); + if (arg != NULLOBJECT) + { + instanceInfo->arguments[i] = context->CString(arg); + } + else + { + instanceInfo->arguments[i] = NULL; + } + } + + invokeRexxStart(instanceInfo); + if (instanceInfo->rc != 0) + { + return context->Nil(); + } + else + { + return context->String(instanceInfo->returnResult); + } +} + + RexxMethodEntry orxtest_methods[] = { REXX_METHOD(init, init), REXX_METHOD(setExitType, setExitType), @@ -430,6 +463,7 @@ REXX_METHOD(getRC, getRC), REXX_METHOD(getCode, getCode), REXX_METHOD(callInstanceProgram, callInstanceProgram), + REXX_METHOD(callRexxStart, callRexxStart), REXX_LAST_METHOD() }; Added: test/trunk/ooRexx/API/oo/INVOCATION.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATION.testGroup (rev 0) +++ test/trunk/ooRexx/API/oo/INVOCATION.testGroup 2008-11-15 00:32:35 UTC (rev 3690) @@ -0,0 +1,868 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +use arg testTypes + + parse source . . s + group = .TestGroup~new(s) + group~add(.INVOCATION.testGroup) + + if arg(1, 'E'), \ group~hasTestTypes(testTypes) then do + group~markNoTests("This is a native API test and not included in the test types to execute.") + + if group~isAutomatedTest then return group + else return group~suite~execute~~print + end + + signal on syntax name packageErr + .context~package~loadPackage('INVOCATIONTester.cls') + + if group~isAutomatedTest then return group + + testResult = group~suite~execute~~print + +return testResult + +packageErr: + err = .ExceptionData~new(timeStamp(), s, .ExceptionData~TRAP) + err~setLine(sigl) + err~conditionObject = condition('O') + err~msg = "Failed to load the external API package needed for this test group." + + if group~isAutomatedTest then return err + + err~print("Test group exception", .false) +return .ooTestResult~new(5)~~addException(err) + + +::requires 'ooTest.frm' -- load the ooRexxUnit classes + +-- class named exactly like file +::class "INVOCATION.testGroup" subclass ooTestCase public + +::method init class + forward class (super) continue + + -- Over-ride the default test type + self~ooTestType = .ooTestTypes~NATIVE_API_TEST + +::method TestCallReturn + tester = .InvocationTester~new + self~assertEquals(0, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'), .array~new(0))) + self~assertEquals(5, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'), .array~of(1,2))) + args = .array~new(3) + args[1] = 1 + args[3] = 3 + self~assertEquals(7, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'), args)) + +::method TestCallType + tester = .InvocationTester~new + self~assertEquals("COMMAND", tester~callInstanceProgram(self~resolveTestProgram('tests/callType.rex'), .array~new(0))) + +::method TestInitialAddress + tester = .InvocationTester~new + self~assertEquals(address(), tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + tester~initialAddress = "TESTING" + self~assertEquals("TESTING", tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + +::method TestSyntaxError + tester = .InvocationTester~new + tester~callInstanceProgram(self~resolveTestProgram('tests/syntaxError.rex'), .array~new(0)) + self~assertEquals(42, tester~getRC) + self~assertEquals(42003, tester~getCode) + +::method TestInitExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~initExit = "SKIP" + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~initExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + tester~exitType = "DLL" + tester~initExit = "SKIP" + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~exitType = "EXE" + tester~initExit = "SKIP" + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestTermExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~termExit = "SKIP" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("BAD")) + self~assertEquals(0, tester~getRC) + tester~termExit = "HANDLE" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) + self~assertEquals(0, tester~getRC) + tester~termExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~termExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + tester~exitType = "DLL" + tester~termExit = "SKIP" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("BAD")) + self~assertEquals(0, tester~getRC) + tester~termExit = "HANDLE" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) + self~assertEquals(0, tester~getRC) + tester~termExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~exitType = "EXE" + tester~termExit = "SKIP" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("BAD")) + self~assertEquals(0, tester~getRC) + tester~termExit = "HANDLE" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) + self~assertEquals(0, tester~getRC) + tester~termExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + + +::method TestContextCommandExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~commandExit = "SKIP" + self~assertEquals("FAILURE 30", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + tester~commandExit = "HANDLE" + self~assertEquals("SUCCESS -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "ERROR"))) + self~assertEquals("FAILURE -2", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "FAILURE"))) + tester~commandExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~commandExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeCommandExit + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~commandExit = "SKIP" + self~assertEquals("FAILURE 30", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + tester~commandExit = "HANDLE" + self~assertEquals("SUCCESS -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "ERROR"))) + self~assertEquals("FAILURE -2", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "FAILURE"))) + tester~commandExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllCommandExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~commandExit = "SKIP" + self~assertEquals("FAILURE 30", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + tester~commandExit = "HANDLE" + self~assertEquals("SUCCESS -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "ERROR"))) + self~assertEquals("FAILURE -2", tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "FAILURE"))) + tester~commandExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextFunctionExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~functionExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~functionExit = "HANDLE" + self~assertEquals('FUNCTION', tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()"))) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + self~assertEquals(40001, tester~getCode) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + self~assertEquals(43001, tester~getCode) + tester~functionExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~functionExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeFunctionExit + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~functionExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~functionExit = "HANDLE" + self~assertEquals('FUNCTION', tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()"))) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + self~assertEquals(40001, tester~getCode) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + self~assertEquals(43001, tester~getCode) + tester~functionExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllFunctionExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~functionExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~functionExit = "HANDLE" + self~assertEquals('FUNCTION', tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()"))) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + self~assertEquals(40001, tester~getCode) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + self~assertEquals(43001, tester~getCode) + tester~functionExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextObjectFunctionExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~objectFunctionExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~objectFunctionExit = "HANDLE" + self~assertEquals("1,2", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + self~assertEquals(40001, tester~getCode) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + self~assertEquals(43001, tester~getCode) + + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'), .array~new(0))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'), .array~new(0))) + +::method TestContextScriptFunctionExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~scriptingExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~scriptingExit = "HANDLE" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + self~assertEquals(40001, tester~getCode) + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + self~assertEquals(43001, tester~getCode) + + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'), .array~new(0))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'), .array~new(0))) + + + tester~scriptingExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~scriptingExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestContextQueueExitPush + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~queueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeQueueExitPush + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllQueueExitPush + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextQueueExitQueue + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~queueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeQueueExitQueue + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllQueueExitQueue + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextQueueExitSize + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~queueExit = "SKIP" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~queueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeQueueExitSize + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~queueExit = "SKIP" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllQueueExitSize + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextQueueExitPull + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~queueExit = "SKIP" + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~queueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + .stdque~empty -- safety measure to clear out the queue + +::method TestExeQueueExitPull + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~queueExit = "SKIP" + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + .stdque~empty -- safety measure to clear out the queue + +::method TestDllQueueExitPull + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + .stdque~empty -- safety measure to clear out the queue + +::method TestContextQueueExitSet + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~queueExit = "SKIP" + .stdque~set('SESSION') -- safety measure to reset the queue + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + .stdque~set('SESSION') -- safety measure to reset the queue + tester~queueExit = "HANDLE" + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~queueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + .stdque~set('SESSION') -- safety measure to reset the queue + +::method TestExeQueueExitSet + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~queueExit = "SKIP" + .stdque~set('SESSION') -- safety measure to reset the queue + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + .stdque~set('SESSION') -- safety measure to reset the queue + tester~queueExit = "HANDLE" + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllQueueExitSet + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + .stdque~set('SESSION') -- safety measure to reset the queue + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + .stdque~set('SESSION') -- safety measure to reset the queue + tester~queueExit = "HANDLE" + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextIOExitSay + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~ioExit = "SKIP" + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~ioExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeIOExitSay + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~ioExit = "SKIP" + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllIOExitSay + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~ioExit = "SKIP" + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextIOExitTrace + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~ioExit = "SKIP" + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~ioExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeIOExitTrace + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~ioExit = "SKIP" + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllIOExitTrace + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~ioExit = "SKIP" + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextIOExitPull + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~ioExit = "SKIP" + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~ioExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeIOExitPull + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~ioExit = "SKIP" + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllIOExitPull + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~ioExit = "SKIP" + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + tester~ioExit = "CONSOLE" + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextIOExitDebug + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~ioExit = "SKIP" + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~ioExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeIOExitDebug + tester = .InvocationTester~new + tester~exitType = "EXE" + tester~ioExit = "SKIP" + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllIOExitDebug + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~ioExit = "SKIP" + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + tester~ioExit = "DEBUG" + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + + tester~ioExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextNovalueExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~novalueExit = "SKIP" + self~assertEquals("FOO", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0))) + tester~novalueExit = "HANDLE" + self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0))) + + tester~novalueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~novalueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestContextValueExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + tester~valueExit = "SKIP" + -- the default behavior is to raise an error for an unknown environment selector + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + self~assertEquals(40, tester~getRC) + self~assertEquals(40914, tester~getCode) + tester~valueExit = "HANDLE" + self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0))) + + tester~valueExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~valueExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestContextHaltExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + -- this is the default behavior until we turn it on using the command exit + tester~haltExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + + tester~haltExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~haltExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeHaltExit + tester = .InvocationTester~new + tester~exitType = "EXE" + -- this is the default behavior until we turn it on using the command exit + tester~haltExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + + tester~haltExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllHaltExit + tester = .InvocationTester~new + tester~exitType = "DLL" + -- this is the default behavior until we turn it on using the command exit + tester~haltExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + + tester~haltExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestContextTraceExit + tester = .InvocationTester~new + tester~exitType = "CONTEXT" + -- this is the default behavior until we turn it on using the command exit + tester~traceExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + + tester~traceExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + tester~traceExit = "RAISE" + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + +::method TestExeTraceExit + tester = .InvocationTester~new + tester~exitType = "EXE" + -- this is the default behavior until we turn it on using the command exit + tester~traceExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + + tester~traceExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method TestDllTraceExit + tester = .InvocationTester~new + tester~exitType = "DLL" + -- this is the default behavior until we turn it on using the command exit + tester~traceExit = "SKIP" + tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + + tester~traceExit = "ERROR" + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + self~assertEquals(48001, tester~getCode) + +::method resolveTestProgram + use arg name + parse source . . me + currentOS = .ooRexxUnit.OSName + -- change the path separator if running on windows + if currentOS == 'WINDOWS' then + name = name~changeStr('/', '\') + return filespec('Location', me)||name + Modified: test/trunk/ooRexx/API/oo/INVOCATIONTester.cls =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-15 00:29:27 UTC (rev 3689) +++ test/trunk/ooRexx/API/oo/INVOCATIONTester.cls 2008-11-15 00:32:35 UTC (rev 3690) @@ -96,3 +96,4 @@ ::method getRC EXTERNAL 'LIBRARY orxinvocation getRC' ::method getCode EXTERNAL 'LIBRARY orxinvocation getCode' ::method callInstanceProgram EXTERNAL 'LIBRARY orxinvocation callInstanceProgram' +::method callRexxStart EXTERNAL 'LIBRARY orxinvocation callRexxStart' Added: test/trunk/ooRexx/API/oo/RexxStart.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/RexxStart.testGroup (rev 0) +++ test/trunk/ooRexx/API/oo/RexxStart.testGroup 2008-11-15 00:32:35 UTC (rev 3690) @@ -0,0 +1,307 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +use arg testTypes + + parse source . . s + group = .TestGroup~new(s) + group~add(.RexxStart.testGroup) + + if arg(1, 'E'), \ group~hasTestTypes(testTypes) then do + group~markNoTests("This is a native API test and not included in the test types to execute.") + + if group~isAutomatedTest then return group + else return group~suite~execute~~print + end + + signal on syntax name packageErr + .context~package~loadPackage('INVOCATIONTester.cls') + + if group~isAutomatedTest then return group + + testResult = group~suite~execute~~print + +return testResult + +packageErr: + err = .ExceptionData~new(timeStamp(), s, .ExceptionData~TRAP) + err~setLine(sigl) + err~conditionObject = condition('O') + err~msg = "Failed to load the external API package needed for this test group." + + if group~isAutomatedTest then return err + + err~print("Test group exception", .false) +return .ooTestResult~new(5)~~addException(err) + + +::requires 'ooTest.frm' -- load the ooRexxUnit classes + +-- class named exactly like file +::class "RexxStart.testGroup" subclass ooTestCase public + +::method init class + forward class (super) continue + + -- Over-ride the default test type + self~ooTestType = .ooTestTypes~NATIVE_API_TEST + +::method TestCallReturn + tester = .InvocationTester~new + self~assertEquals(0, tester~callRexxStart(self~resolveTestProgram('tests/callReturn.rex'), .array~new(0))) + self~assertEquals(5, tester~callRexxStart(self~resolveTestProgram('tests/callReturn.rex'), .array~of(1,2))) + args = .array~new(3) + args[1] = 1 + args[3] = 3 + self~assertEquals(7, tester~callRexxStart(self~resolveTestProgram('tests/callReturn.rex'), args)) + +::method TestCallType + tester = .InvocationTester~new + self~assertEquals("COMMAND", tester~callRexxStart(self~resolveTestProgram('tests/callType.rex'), .array~new(0))) + +::method TestInitialAddress + tester = .InvocationTester~new + self~assertEquals(address(), tester~callRexxStart(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + tester~initialAddress = "TESTING" + self~assertEquals("TESTING", tester~callRexxStart(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + +::method TestSyntaxError + tester = .InvocationTester~new + tester~callRexxStart(self~resolveTestProgram('tests/syntaxError.rex'), .array~new(0)) + self~assertEquals(42, tester~getRC) + +::method TestInitExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~initExit = "SKIP" + self~assertEquals("TEST1", tester~callRexxStart(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "HANDLE" + self~assertEquals("Hello World", tester~callRexxStart(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + tester~initExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + +::method TestTermExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~termExit = "SKIP" + tester~callRexxStart(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("BAD")) + self~assertEquals(0, tester~getRC) + tester~termExit = "HANDLE" + tester~callRexxStart(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) + self~assertEquals(0, tester~getRC) + tester~termExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + +::method TestCommandExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~commandExit = "SKIP" + self~assertEquals("FAILURE 30", tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + tester~commandExit = "HANDLE" + self~assertEquals("SUCCESS -1", tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO"))) + self~assertEquals("SUCCESS 0", tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "GOOD"))) + self~assertEquals("ERROR 1", tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "ERROR"))) + self~assertEquals("FAILURE -2", tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("CMD", "FAILURE"))) + tester~commandExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/commandExit.rex'), .array~of("FOOBAR", "ECHO")) + self~assertEquals(48, tester~getRC) + +::method TestFunctionExit + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~functionExit = "SKIP" + self~assertEquals("1", tester~callRexxStart(self~resolveTestProgram('tests/functionExit.rex'), .array~of("testarguments(1,2)"))) + tester~functionExit = "HANDLE" + self~assertEquals('FUNCTION', tester~callRexxStart(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()"))) + tester~callRexxStart(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTERROR()")) + self~assertEquals(40, tester~getRC) + tester~callRexxStart(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTNOTFOUND()")) + self~assertEquals(43, tester~getRC) + tester~functionExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/functionExit.rex'), .array~of("TESTSUBCALL()")) + self~assertEquals(48, tester~getRC) + +::method TestQueueExitPush + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callRexxStart(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callRexxStart(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + +::method TestQueueExitQueue + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("1", tester~callRexxStart(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("0", tester~callRexxStart(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + + tester~queueExit = "ERROR" + tester~callRexxStart(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + self~assertEquals(48, tester~getRC) + +::method TestQueueExitSize + tester = .InvocationTester~new + tester~exitType = "DLL" + tester~queueExit = "SKIP" + self~assertEquals("0", tester~callRexxStart(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + tester~queueExit = "HANDLE" + self~assertEquals("999999", tester~callRexxStart(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + + ... [truncated message content] |
From: <bi...@us...> - 2008-11-15 15:53:45
|
Revision: 3695 http://oorexx.svn.sourceforge.net/oorexx/?rev=3695&view=rev Author: bigrixx Date: 2008-11-15 15:53:42 +0000 (Sat, 15 Nov 2008) Log Message: ----------- Add command handler tests Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/external/API/orxinvocation.cpp test/trunk/ooRexx/API/oo/INVOCATION.testGroup Added Paths: ----------- test/trunk/ooRexx/API/oo/tests/commandHandlerGetvar.rex test/trunk/ooRexx/API/oo/tests/commandHandlerGood.rex test/trunk/ooRexx/API/oo/tests/commandHandlerSetvar.rex Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-15 15:52:33 UTC (rev 3694) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-15 15:53:42 UTC (rev 3695) @@ -544,7 +544,60 @@ } +RexxReturnCode RexxEntry TestSubcomHandler(CONSTRXSTRING *cmd, unsigned short *flags, PRXSTRING retstr) +{ + *flags = RXSUBCOM_OK; + // ok, a good address...now do the different commands + if (strcmp(cmd->strptr, "GOOD") == 0) + { + strcpy(retstr->strptr, "0"); + retstr->strlength = 1; + return 0; + } + else if (strcmp(cmd->strptr, "ERROR") == 0) + { + strcpy(retstr->strptr, "1"); + retstr->strlength = 1; + *flags = RXSUBCOM_ERROR; + return 0; + } + else if (strcmp(cmd->strptr, "SETVAR") == 0) + { + setContextVariable("TEST1", "Hello World"); + strcpy(retstr->strptr, "0"); + retstr->strlength = 1; + return 0; + } + else if (strcmp(cmd->strptr, "GETVAR") == 0) + { + getContextVariable("TEST1", retstr); + return 0; + } + else + { + strcpy(retstr->strptr, "-1"); + retstr->strlength = 2; + *flags = RXSUBCOM_FAILURE; + return 0; + } +} +void deregisterSubcomHandler() +{ + RexxDeregisterSubcom("TestSubcomHandler", NULL); +} + + +void REXXENTRY registerSubcomHandler(void *data) +{ + void *userData[2]; + userData[1] = data; + // make sure this is deregistered first + deregisterSubcomHandler(); + RexxRegisterSubcomExe("TestSubcomHandler", (REXXPFN)TestSubcomHandler, (char *)userData); +} + + void REXXENTRY deregisterExits() { RexxDeregisterExit("TestFunctionExit", NULL); Modified: test/trunk/external/API/orxexits.hpp =================================================================== --- test/trunk/external/API/orxexits.hpp 2008-11-15 15:52:33 UTC (rev 3694) +++ test/trunk/external/API/orxexits.hpp 2008-11-15 15:53:42 UTC (rev 3695) @@ -219,6 +219,7 @@ void REXXENTRY deregisterExits(); void REXXENTRY registerExeExits(void *data); void REXXENTRY registerDllExits(void *data); +void REXXENTRY registerSubcomHandler(void *data); bool REXXENTRY buildRegisteredExitList(InstanceInfo *instanceInfo, RXSYSEXIT *exitList); RexxReturnCode REXXENTRY createInstance(InstanceInfo *instanceInfo, RexxInstance *&instance, RexxThreadContext *&threadContext); bool REXXENTRY buildContextExitList(InstanceInfo *instanceInfo, RexxContextExit *exitList); Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2008-11-15 15:52:33 UTC (rev 3694) +++ test/trunk/external/API/orxinstance.cpp 2008-11-15 15:53:42 UTC (rev 3695) @@ -590,7 +590,42 @@ return RXEXIT_NOT_HANDLED; } +RexxObjectPtr RexxEntry TestCommandHandler(RexxExitContext *context, RexxStringObject address, RexxStringObject command) +{ + const char *c = context->CString(command); + // ok, a good address...now do the different commands + if (strcmp(c, "GOOD") == 0) + { + return context->False(); + } + else if (strcmp(c, "ERROR") == 0) + { + context->RaiseCondition("ERROR", command, NULLOBJECT, context->True()); + return NULLOBJECT; + } + else if (strcmp(c, "RAISE") == 0) + { + context->RaiseException1(Rexx_Error_System_service_user_defined, context->String("Command Handler")); + return NULLOBJECT; + } + else if (strcmp(c, "GETVAR") == 0) + { + return context->GetContextVariable("TEST1"); + } + else if (strcmp(c, "SETVAR") == 0) + { + context->SetContextVariable("TEST1", context->String("Hello World")); + return context->False(); + } + else + { + context->RaiseCondition("FAILURE", command, NULLOBJECT, context->WholeNumber(-1)); + return NULLOBJECT; + } +} + + bool REXXENTRY buildContextExitList(InstanceInfo *instanceInfo, RexxContextExit *exitList) { int counter = 0; @@ -695,6 +730,8 @@ // space for building exit lists RexxContextExit contextExits[RXNOOFEXITS]; RXSYSEXIT registeredExits[RXNOOFEXITS]; + RexxContextEnvironment commandHandlers[2]; + RexxRegisteredEnvironment subcomHandlers[2]; int optionCount = 0; switch (instanceInfo->exitStyle) @@ -759,6 +796,24 @@ optionCount++; } + commandHandlers[0].name = "TEST"; + commandHandlers[0].handler = TestCommandHandler; + commandHandlers[1].name = NULL; + commandHandlers[1].handler = NULL; + options[optionCount].optionName = DIRECT_ENVIRONMENTS; + options[optionCount].option = commandHandlers; + optionCount++; + + subcomHandlers[0].name = "TESTSUBCOM"; + subcomHandlers[0].registeredName = "TestSubcomHandler"; + subcomHandlers[1].name = NULL; + subcomHandlers[1].registeredName = NULL; + options[optionCount].optionName = REGISTERED_ENVIRONMENTS; + options[optionCount].option = subcomHandlers; + optionCount++; + + registerSubcomHandler(instanceInfo); + options[optionCount].optionName = APPLICATION_DATA; options[optionCount].option = (void *)instanceInfo; optionCount++; Modified: test/trunk/external/API/orxinvocation.cpp =================================================================== --- test/trunk/external/API/orxinvocation.cpp 2008-11-15 15:52:33 UTC (rev 3694) +++ test/trunk/external/API/orxinvocation.cpp 2008-11-15 15:53:42 UTC (rev 3695) @@ -364,22 +364,30 @@ RexxMethod3(RexxObjectPtr, callInstanceProgram, CSELF, self, CSTRING, program, - RexxArrayObject, args) + OPTIONAL_RexxArrayObject, args) { InstanceInfo *instanceInfo = (InstanceInfo *)self; instanceInfo->programName = program; - instanceInfo->argCount = context->ArraySize(args); - for (size_t i = 0; i < instanceInfo->argCount; i++) + + if (args == NULLOBJECT) { - RexxObjectPtr arg = context->ArrayAt(args, i + 1); - if (arg != NULLOBJECT) + instanceInfo->argCount = 0; + } + else + { + instanceInfo->argCount = context->ArraySize(args); + for (size_t i = 0; i < instanceInfo->argCount; i++) { - instanceInfo->arguments[i] = context->CString(arg); + RexxObjectPtr arg = context->ArrayAt(args, i + 1); + if (arg != NULLOBJECT) + { + instanceInfo->arguments[i] = context->CString(arg); + } + else + { + instanceInfo->arguments[i] = NULL; + } } - else - { - instanceInfo->arguments[i] = NULL; - } } invokeProgram(instanceInfo); @@ -401,18 +409,26 @@ { InstanceInfo *instanceInfo = (InstanceInfo *)self; instanceInfo->programName = program; - instanceInfo->argCount = context->ArraySize(args); - for (size_t i = 0; i < instanceInfo->argCount; i++) + + if (args == NULLOBJECT) { - RexxObjectPtr arg = context->ArrayAt(args, i + 1); - if (arg != NULLOBJECT) + instanceInfo->argCount = 0; + } + else + { + instanceInfo->argCount = context->ArraySize(args); + for (size_t i = 0; i < instanceInfo->argCount; i++) { - instanceInfo->arguments[i] = context->CString(arg); + RexxObjectPtr arg = context->ArrayAt(args, i + 1); + if (arg != NULLOBJECT) + { + instanceInfo->arguments[i] = context->CString(arg); + } + else + { + instanceInfo->arguments[i] = NULL; + } } - else - { - instanceInfo->arguments[i] = NULL; - } } invokeRexxStart(instanceInfo); Modified: test/trunk/ooRexx/API/oo/INVOCATION.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATION.testGroup 2008-11-15 15:52:33 UTC (rev 3694) +++ test/trunk/ooRexx/API/oo/INVOCATION.testGroup 2008-11-15 15:53:42 UTC (rev 3695) @@ -86,7 +86,7 @@ ::method TestCallReturn tester = .InvocationTester~new - self~assertEquals(0, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'), .array~new(0))) + self~assertEquals(0, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'))) self~assertEquals(5, tester~callInstanceProgram(self~resolveTestProgram('tests/callReturn.rex'), .array~of(1,2))) args = .array~new(3) args[1] = 1 @@ -95,17 +95,17 @@ ::method TestCallType tester = .InvocationTester~new - self~assertEquals("COMMAND", tester~callInstanceProgram(self~resolveTestProgram('tests/callType.rex'), .array~new(0))) + self~assertEquals("COMMAND", tester~callInstanceProgram(self~resolveTestProgram('tests/callType.rex'))) ::method TestInitialAddress tester = .InvocationTester~new - self~assertEquals(address(), tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + self~assertEquals(address(), tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'))) tester~initialAddress = "TESTING" - self~assertEquals("TESTING", tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) + self~assertEquals("TESTING", tester~callInstanceProgram(self~resolveTestProgram('tests/initialAddress.rex'))) ::method TestSyntaxError tester = .InvocationTester~new - tester~callInstanceProgram(self~resolveTestProgram('tests/syntaxError.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/syntaxError.rex')) self~assertEquals(42, tester~getRC) self~assertEquals(42003, tester~getCode) @@ -113,33 +113,33 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~initExit = "SKIP" - self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~initExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) tester~exitType = "DLL" tester~initExit = "SKIP" - self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~exitType = "EXE" tester~initExit = "SKIP" - self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("TEST1", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'))) tester~initExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/initExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -153,11 +153,11 @@ tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) self~assertEquals(0, tester~getRC) tester~termExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~termExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) tester~exitType = "DLL" @@ -168,7 +168,7 @@ tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) self~assertEquals(0, tester~getRC) tester~termExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~exitType = "EXE" @@ -179,7 +179,7 @@ tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~of("Hello World")) self~assertEquals(0, tester~getRC) tester~termExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/terminationExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -306,8 +306,8 @@ self~assertEquals(43, tester~getRC) self~assertEquals(43001, tester~getCode) - self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'), .array~new(0))) - self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'), .array~new(0))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'))) ::method TestContextScriptFunctionExit tester = .InvocationTester~new @@ -324,8 +324,8 @@ self~assertEquals(43, tester~getRC) self~assertEquals(43001, tester~getCode) - self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'), .array~new(0))) - self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'), .array~new(0))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/getCallerContext.rex'))) + self~assertEquals(1, tester~callInstanceProgram(self~resolveTestProgram('tests/contextVariables.rex'))) tester~scriptingExit = "ERROR" @@ -341,16 +341,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~queueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -358,12 +358,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -371,12 +371,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPush.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -384,16 +384,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~queueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -401,12 +401,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -414,12 +414,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~queueExit = "SKIP" - self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("1", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitQueue.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -427,16 +427,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~queueExit = "SKIP" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~queueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -444,12 +444,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~queueExit = "SKIP" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -457,12 +457,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~queueExit = "SKIP" - self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("0", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0))) + self~assertEquals("999999", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSize.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -470,16 +470,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~queueExit = "SKIP" - self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~queueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) .stdque~empty -- safety measure to clear out the queue @@ -488,12 +488,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~queueExit = "SKIP" - self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) .stdque~empty -- safety measure to clear out the queue @@ -502,12 +502,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~queueExit = "SKIP" - self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Bonjour", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "HANDLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) .stdque~empty -- safety measure to clear out the queue @@ -517,17 +517,17 @@ tester~exitType = "CONTEXT" tester~queueExit = "SKIP" .stdque~set('SESSION') -- safety measure to reset the queue - self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) .stdque~set('SESSION') -- safety measure to reset the queue tester~queueExit = "HANDLE" - self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~queueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) .stdque~set('SESSION') -- safety measure to reset the queue @@ -537,13 +537,13 @@ tester~exitType = "EXE" tester~queueExit = "SKIP" .stdque~set('SESSION') -- safety measure to reset the queue - self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) .stdque~set('SESSION') -- safety measure to reset the queue tester~queueExit = "HANDLE" - self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -552,13 +552,13 @@ tester~exitType = "DLL" tester~queueExit = "SKIP" .stdque~set('SESSION') -- safety measure to reset the queue - self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION YADAYADA", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) .stdque~set('SESSION') -- safety measure to reset the queue tester~queueExit = "HANDLE" - self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0))) + self~assertEquals("SESSION FOOBAR", tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'))) tester~queueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/queueExitSet.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -566,16 +566,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~ioExit = "SKIP" - self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~ioExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -583,12 +583,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~ioExit = "SKIP" - self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -596,12 +596,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~ioExit = "SKIP" - self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("HELLO", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitSay.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -609,16 +609,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~ioExit = "SKIP" - self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~ioExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -626,12 +626,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~ioExit = "SKIP" - self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -639,12 +639,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~ioExit = "SKIP" - self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals(" 47 *-* call trace OFF", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0))) + self~assertEquals("NOT RECEIVED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitTrace.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -652,16 +652,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~ioExit = "SKIP" - self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~ioExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -669,12 +669,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~ioExit = "SKIP" - self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -682,12 +682,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~ioExit = "SKIP" - self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Goodnight moon", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "CONSOLE" - self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0))) + self~assertEquals("Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitPull.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -695,16 +695,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~ioExit = "SKIP" - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~ioExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -712,12 +712,12 @@ tester = .InvocationTester~new tester~exitType = "EXE" tester~ioExit = "SKIP" - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -725,12 +725,12 @@ tester = .InvocationTester~new tester~exitType = "DLL" tester~ioExit = "SKIP" - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "DEBUG" - self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0))) + self~assertEquals("NOT CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'))) tester~ioExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/ioExitDebug.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -738,16 +738,16 @@ tester = .InvocationTester~new tester~exitType = "CONTEXT" tester~novalueExit = "SKIP" - self~assertEquals("FOO", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0))) + self~assertEquals("FOO", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'))) tester~novalueExit = "HANDLE" - self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0))) + self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'))) tester~novalueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~novalueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/novalueExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -756,18 +756,18 @@ tester~exitType = "CONTEXT" tester~valueExit = "SKIP" -- the default behavior is to raise an error for an unknown environment selector - tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex')) self~assertEquals(40, tester~getRC) self~assertEquals(40914, tester~getCode) tester~valueExit = "HANDLE" - self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0))) + self~assertEquals("BAR", tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'))) tester~valueExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~valueExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/valueExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -777,14 +777,14 @@ -- this is the default behavior until we turn it on using the command exit tester~haltExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'))) tester~haltExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~haltExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -794,10 +794,10 @@ -- this is the default behavior until we turn it on using the command exit tester~haltExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'))) tester~haltExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -807,10 +807,10 @@ -- this is the default behavior until we turn it on using the command exit tester~haltExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'))) tester~haltExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/haltExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -820,14 +820,14 @@ -- this is the default behavior until we turn it on using the command exit tester~traceExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'))) tester~traceExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) tester~traceExit = "RAISE" - tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48900, tester~getCode) @@ -837,10 +837,10 @@ -- this is the default behavior until we turn it on using the command exit tester~traceExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'))) tester~traceExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) @@ -850,13 +850,32 @@ -- this is the default behavior until we turn it on using the command exit tester~traceExit = "SKIP" tester~commandExit = "HANDLE" -- this gives us a command that will flip the halt exit on - self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0))) + self~assertEquals("CALLED", tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'))) tester~traceExit = "ERROR" - tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex'), .array~new(0)) + tester~callInstanceProgram(self~resolveTestProgram('tests/traceExit.rex')) self~assertEquals(48, tester~getRC) self~assertEquals(48001, tester~getCode) +::method TestCommandHandler + tester = .InvocationTester~new + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TEST", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TEST", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TEST", "FAILURE"))) + tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TEST", "RAISE")) + self~assertEquals(48, tester~getRC) + self~assertEquals(48900, tester~getCode) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TEST"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TEST"))) + +::method TestSubcomHandler + tester = .InvocationTester~new + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOM", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOM", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOM", "FAILURE"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOM"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOM"))) + ::method resolveTestProgram use arg name parse source . . me Added: test/trunk/ooRexx/API/oo/tests/commandHandlerGetvar.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/commandHandlerGetvar.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/commandHandlerGetvar.rex 2008-11-15 15:53:42 UTC (rev 3695) @@ -0,0 +1,59 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +use arg address +trace off +signal on error +signal on failure + +address value address +test1 = "Hello World" +'GETVAR' + +return "SUCCESS" rc + +error: +return 'ERROR' rc + +failure: +return 'FAILURE' rc + + Property changes on: test/trunk/ooRexx/API/oo/tests/commandHandlerGetvar.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: test/trunk/ooRexx/API/oo/tests/commandHandlerGood.rex =================================================================== --- test/trunk/ooRexx/API/oo/tests/commandHandlerGood.rex (rev 0) +++ test/trunk/ooRexx/API/oo/tests/commandHandlerGood.rex 2008-11-15 15:53:42 UTC (rev 3695) @@ -0,0 +1,57 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ +use arg address, command +trace off +signal on error +signal on failure + +address value address +command + +return "SUCCESS" r... [truncated message content] |
From: <bi...@us...> - 2008-11-16 15:08:57
|
Revision: 3696 http://oorexx.svn.sourceforge.net/oorexx/?rev=3696&view=rev Author: bigrixx Date: 2008-11-16 15:08:50 +0000 (Sun, 16 Nov 2008) Log Message: ----------- Add new process invocation tests Modified Paths: -------------- test/trunk/external/API/Makefile.aix test/trunk/external/API/Makefile.linux test/trunk/external/API/Makefile.windows test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxclassicexits.def test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/external/API/orxinvocation.cpp test/trunk/external/API/orxmethod.cpp test/trunk/ooRexx/API/oo/INVOCATION.testGroup test/trunk/ooRexx/API/oo/INVOCATIONTester.cls test/trunk/ooRexx/API/oo/RexxStart.testGroup Added Paths: ----------- test/trunk/external/API/orxinvocation.def test/trunk/external/API/rexxinstance.cpp test/trunk/ooRexx/API/oo/ProcessInvocation.testGroup test/trunk/ooRexx/API/oo/ProcessRexxStart.testGroup test/trunk/ooRexx/API/oo/path/ test/trunk/ooRexx/API/oo/path/test1.test1 test/trunk/ooRexx/API/oo/path/test2.test2 test/trunk/ooRexx/API/oo/tests/callPath.rex Property Changed: ---------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxclassicexits.def test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/external/API/orxinvocation.cpp Modified: test/trunk/external/API/Makefile.aix =================================================================== --- test/trunk/external/API/Makefile.aix 2008-11-15 15:53:42 UTC (rev 3695) +++ test/trunk/external/API/Makefile.aix 2008-11-16 15:08:50 UTC (rev 3696) @@ -61,25 +61,28 @@ # Build the libraries all: $(OOTEST_BIN_DIR)/liborxfunction.so $(OOTEST_BIN_DIR)/liborxmethod.so \ - $(OOTEST_BIN_DIR)/liborxclassic.so $(OOTEST_BIN_DIR)/liborxclassic1.so + $(OOTEST_BIN_DIR)/liborxclassic.so $(OOTEST_BIN_DIR)/liborxclassic1.so \ + $(OOTEST_BIN_DIR)/orxexits.so $(OOTEST_BIN_DIR)/orxinvocation.so $(OOTEST_BIN_DIR)/liborxfunction.so: liborxfunction.so - slibclean cp liborxfunction.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxmethod.so: liborxmethod.so - slibclean cp liborxmethod.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxclassic.so: liborxclassic.so - slibclean cp liborxclassic.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxclassic1.so: liborxclassic1.so - slibclean cp liborxclassic1.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/orxexits.so: orxexits.so + cp orxexits.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/orxinvocation.so: orxinvocation.so + cp orxinvocation.so $(OOTEST_BIN_DIR) + + # Build the shared library liborxfunction.so: orxfunction.o xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxfunction.so orxfunction.o @@ -98,6 +101,18 @@ xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxmethod.cpp +# Build the objects +orxclassicexits.o: orxclassicexits.cpp + xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxclassicexits.cpp + +# Build the objects +orxinstance.o: orxinstance.cpp + xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxinstance.cpp + +# Build the objects +orxinvocation.o: orxinvocation.cpp + xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxinvocation.cpp + # Build the shared library liborxclassic.so: orxclassic.o xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxclassic.so orxclassic.o @@ -115,6 +130,14 @@ orxclassic1.o: orxclassic1.c $(FUNCTION_SRC_DEPS) xlc_r -c $(ORXCFLAGS) $(REXX_INCLUDES) orxclassic1.c +# Build the shared library +orxexits.so: orxclassicexits.o orxinstance.o + xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxexits.so orxclassicexits.o orxinstance.o + +# Build the shared library +orxinvocation.so: orxinvocation.o + xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxinvocation.so orxinvocation.o + clean: rm -f *.so *.o $(OOTEST_BIN_DIR)/lib*.so Modified: test/trunk/external/API/Makefile.linux =================================================================== --- test/trunk/external/API/Makefile.linux 2008-11-15 15:53:42 UTC (rev 3695) +++ test/trunk/external/API/Makefile.linux 2008-11-16 15:08:50 UTC (rev 3696) @@ -60,7 +60,8 @@ # Build the libraries all: $(OOTEST_BIN_DIR)/liborxfunction.so $(OOTEST_BIN_DIR)/liborxmethod.so \ - $(OOTEST_BIN_DIR)/liborxclassic.so $(OOTEST_BIN_DIR)/liborxclassic1.so + $(OOTEST_BIN_DIR)/liborxclassic.so $(OOTEST_BIN_DIR)/liborxclassic1.so \ + $(OOTEST_BIN_DIR)/orxexits.so $(OOTEST_BIN_DIR)/orxinvocation.so $(OOTEST_BIN_DIR)/liborxfunction.so: liborxfunction.so cp liborxfunction.so $(OOTEST_BIN_DIR) @@ -74,7 +75,13 @@ $(OOTEST_BIN_DIR)/liborxclassic1.so: liborxclassic1.so cp liborxclassic1.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/orxexits.so: orxexits.so + cp orxexits.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/orxinvocation.so: orxinvocation.so + cp orxinvocation.so $(OOTEST_BIN_DIR) + + # Build the shared library liborxfunction.so: orxfunction.o gcc $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxfunction.so orxfunction.o @@ -93,6 +100,18 @@ gcc -c $(ORXCFLAGS) $(REXX_INCLUDES) orxmethod.cpp +# Build the objects +orxclassicexits.o: orxclassicexits.cpp + gcc -c $(ORXCFLAGS) $(REXX_INCLUDES) orxclassicexits.cpp + +# Build the objects +orxinstance.o: orxinstance.cpp + gcc -c $(ORXCFLAGS) $(REXX_INCLUDES) orxinstance.cpp + +# Build the objects +orxinvocation.o: orxinvocation.cpp + gcc -c $(ORXCFLAGS) $(REXX_INCLUDES) orxinvocation.cpp + # Build the shared library liborxclassic.so: orxclassic.o gcc $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxclassic.so orxclassic.o @@ -110,7 +129,15 @@ orxclassic1.o: orxclassic1.c $(FUNCTION_SRC_DEPS) gcc -c $(ORXCFLAGS) $(REXX_INCLUDES) orxclassic1.c +# Build the shared library +orxexits.so: orxclassicexits.o orxinstance.o + gcc $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxexits.so orxclassicexits.o orxinstance.o +# Build the shared library +orxinvocation.so: orxinvocation.o + gcc $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxinvocation.so orxinvocation.o + + clean: rm -f *.so *.o $(OOTEST_BIN_DIR)/lib*.so Modified: test/trunk/external/API/Makefile.windows =================================================================== --- test/trunk/external/API/Makefile.windows 2008-11-15 15:53:42 UTC (rev 3695) +++ test/trunk/external/API/Makefile.windows 2008-11-16 15:08:50 UTC (rev 3696) @@ -60,6 +60,7 @@ LIBS = $(REXX_LIBS) WARNINGFLAGS = /W3 /Wp64 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE +ORXEXELFLAGS = /NOLOGO /DEBUG -debugtype:cv /SUBSYSTEM:Console $(LIBS) user32.lib comdlg32.lib gdi32.lib kernel32.lib ORXLFLAGS = /NOLOGO /DEBUG -debugtype:cv /SUBSYSTEM:Windows $(LIBS) /DLL ORXCFLAGS = /nologo /EHsc /Zi /Od /Gr /MTd /D_CRT_SECURE_NO_DEPRECATE $(WARNINGFLAG) $(REXX_INCLUDES) /c @@ -71,7 +72,8 @@ # Build the libraries all: $(OOTEST_BIN_DIR)\orxfunction.dll $(OOTEST_BIN_DIR)\orxmethod.dll \ $(OOTEST_BIN_DIR)\orxclassic.dll $(OOTEST_BIN_DIR)\orxclassic1.dll \ - $(OOTEST_BIN_DIR)\orxexits.dll $(OOTEST_BIN_DIR)\orxinvocation.dll + $(OOTEST_BIN_DIR)\orxexits.dll $(OOTEST_BIN_DIR)\orxinvocation.dll \ + $(OOTEST_BIN_DIR)\rexxinstance.exe $(OOTEST_BIN_DIR)\orxfunction.dll: orxfunction.dll copy orxfunction.dll $(OOTEST_BIN_DIR) @@ -91,7 +93,10 @@ $(OOTEST_BIN_DIR)\orxinvocation.dll: orxinvocation.dll copy orxinvocation.dll $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)\rexxinstance.exe: rexxinstance.exe + copy rexxinstance.exe $(OOTEST_BIN_DIR) + # Build the shared library orxfunction.dll: orxfunction.obj link $(ORXLFLAGS) /def:orxfunction.def orxfunction.obj @@ -110,15 +115,15 @@ cl $(ORXCFLAGS) orxmethod.cpp # Build the objects -orxclassicexits.obj: orxclassicexits.cpp +orxclassicexits.obj: orxclassicexits.cpp orxexits.hpp cl $(ORXCFLAGS) orxclassicexits.cpp # Build the objects -orxinstance.obj: orxinstance.cpp +orxinstance.obj: orxinstance.cpp orxexits.hpp cl $(ORXCFLAGS) orxinstance.cpp # Build the objects -orxinvocation.obj: orxinvocation.cpp +orxinvocation.obj: orxinvocation.cpp orxexits.hpp cl $(ORXCFLAGS) orxinvocation.cpp # Build the objects @@ -133,6 +138,10 @@ orxclassic.obj: orxclassic.cpp cl $(ORXCFLAGS) orxclassic.cpp +# Build the objects +rexxinstance.obj: rexxinstance.cpp orxexits.hpp + cl $(ORXCFLAGS) rexxinstance.cpp + # Build the shared library orxclassic1.dll: orxclassic1.obj link $(ORXLFLAGS) /def:orxclassic1.def orxclassic1.obj @@ -145,6 +154,11 @@ orxinvocation.dll: orxinvocation.obj link $(ORXLFLAGS) orxclassicexits.lib /def:orxinvocation.def orxinvocation.obj +# Build the .exe file +rexxinstance.exe: rexxinstance.obj + link $(ORXEXELFLAGS) orxclassicexits.lib rexxinstance.obj -out:$(@B).exe + + clean: del *.dll *.obj *.ilk *.pdb *.lib *.exp $(OOTEST_BIN_DIR)\*.dll 1>nul 2>&1 Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2008-11-15 15:53:42 UTC (rev 3695) +++ test/trunk/external/API/orxclassicexits.cpp 2008-11-16 15:08:50 UTC (rev 3696) @@ -1,806 +1,807 @@ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ -/* */ -/* This program and the accompanying materials are made available under */ -/* the terms of the Common Public License v1.0 which accompanies this */ -/* distribution. A copy is also available at the following address: */ -/* http://www.oorexx.org/license.html */ -/* */ -/* Redistribution and use in source and binary forms, with or */ -/* without modification, are permitted provided that the following */ -/* conditions are met: */ -/* */ -/* Redistributions of source code must retain the above copyright */ -/* notice, this list of conditions and the following disclaimer. */ -/* Redistributions in binary form must reproduce the above copyright */ -/* notice, this list of conditions and the following disclaimer in */ -/* the documentation and/or other materials provided with the distribution. */ -/* */ -/* Neither the name of Rexx Language Association nor the names */ -/* of its contributors may be used to endorse or promote products */ -/* derived from this software without specific prior written permission. */ -/* */ -/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ -/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ -/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ -/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ -/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ -/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ -/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ -/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ -/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ -/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ -/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* */ -/*----------------------------------------------------------------------------*/ - -#include "rexx.h" -#include "orxexits.hpp" - -InstanceInfo *getApplicationData() -{ - void *userData[2]; - unsigned short flag; - - RexxQueryExit("TestFunctionExit", NULL, &flag, (char *)userData); - return (InstanceInfo *)userData[1]; -} - - -void setContextVariable(const char *name, const char *value) -{ - SHVBLOCK shvb; - - memset(&shvb, 0, sizeof(shvb)); - shvb.shvnext = NULL; - shvb.shvname.strptr = name; - shvb.shvname.strlength = strlen(name); - shvb.shvvalue.strptr = const_cast<char *>(value); - shvb.shvvalue.strlength = strlen(value); - shvb.shvnamelen = shvb.shvname.strlength; - shvb.shvvaluelen = shvb.shvvalue.strlength; - shvb.shvcode = RXSHV_SET; - shvb.shvret = 0; - RexxVariablePool(&shvb); -} - - -void getContextVariable(const char *name, RXSTRING *value) -{ - SHVBLOCK shvb; - - memset(&shvb, 0, sizeof(shvb)); - shvb.shvnext = NULL; - shvb.shvname.strptr = name; - shvb.shvname.strlength = strlen(name); - shvb.shvvalue.strptr = value->strptr; - shvb.shvvalue.strlength = value->strlength; - shvb.shvnamelen = shvb.shvname.strlength; - shvb.shvvaluelen = shvb.shvvalue.strlength; - shvb.shvcode = RXSHV_FETCH; - shvb.shvret = 0; - RexxVariablePool(&shvb); -} - - -void dropContextVariable(const char *name) -{ - SHVBLOCK shvb; - - memset(&shvb, 0, sizeof(shvb)); - shvb.shvnext = NULL; - shvb.shvname.strptr = name; - shvb.shvname.strlength = strlen(name); - shvb.shvnamelen = shvb.shvname.strlength; - shvb.shvcode = RXSHV_DROPV; - shvb.shvret = 0; - RexxVariablePool(&shvb); -} - - -int RexxEntry TestFunctionExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->fnc.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - RXFNCCAL_PARM *parms = (RXFNCCAL_PARM *)exitInfo; - const char *functionName = parms->rxfnc_name; - if (strcmp(functionName, "TESTSUBCALL") == 0) - { - // return the status of the flag - if (parms->rxfnc_flags.rxffsub) - { - strcpy(parms->rxfnc_retc.strptr, "SUBROUTINE"); - } - else - { - strcpy(parms->rxfnc_retc.strptr, "FUNCTION"); - } - parms->rxfnc_retc.strlength = strlen(parms->rxfnc_retc.strptr); - return RXEXIT_HANDLED; - } - else if (strcmp(functionName, "TESTERROR") == 0) - { - // this should raise an error - parms->rxfnc_flags.rxfferr = 1; - return RXEXIT_HANDLED; - } - else if (strcmp(functionName, "TESTNOTOUND") == 0) - { - // this should raise an error - parms->rxfnc_flags.rxffnfnd = 1; - return RXEXIT_HANDLED; - } - else if (strcmp(functionName, "TESTGETCONTEXTVARIABLE") == 0) - { - getContextVariable(parms->rxfnc_argv[0].strptr, &parms->rxfnc_retc); - return RXEXIT_HANDLED; - } - else if (strcmp(functionName, "TESTSETCONTEXTVARIABLE") == 0) - { - setContextVariable(parms->rxfnc_argv[0].strptr, parms->rxfnc_argv[1].strptr); - parms->rxfnc_retc.strlength = 0; - return RXEXIT_HANDLED; - } - else if (strcmp(functionName, "TESTDROPCONTEXTVARIABLE") == 0) - { - dropContextVariable(parms->rxfnc_argv[0].strptr); - return RXEXIT_HANDLED; - } - else - { - // pass on this - return RXEXIT_NOT_HANDLED; - } -} - -int RexxEntry TestCommandExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->cmd.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - RXCMDHST_PARM *parms = (RXCMDHST_PARM *)exitInfo; - // handle commands here...we need to process both the address environment and the commands - if (strcmp(parms->rxcmd_address, "FOOBAR") == 0) - { - strcpy(parms->rxcmd_retc.strptr, "-1"); - parms->rxcmd_retc.strlength = 2; - return RXEXIT_HANDLED; - } - - // ok, a good address...now do the different commands - if (strcmp(parms->rxcmd_command.strptr, "GOOD") == 0) - { - strcpy(parms->rxcmd_retc.strptr, "0"); - parms->rxcmd_retc.strlength = 1; - return RXEXIT_HANDLED; - } - else if (strcmp(parms->rxcmd_command.strptr, "ERROR") == 0) - { - strcpy(parms->rxcmd_retc.strptr, "1"); - parms->rxcmd_retc.strlength = 1; - parms->rxcmd_flags.rxfcerr = 1; - return RXEXIT_HANDLED; - } - // ok, a good address...now do the different commands - else if (strcmp(parms->rxcmd_command.strptr, "TRACEON") == 0) - { - instanceInfo->trc = InstanceInfo::TRACEON; - strcpy(parms->rxcmd_retc.strptr, "0"); - parms->rxcmd_retc.strlength = 1; - return RXEXIT_HANDLED; - } - // ok, a good address...now do the different commands - else if (strcmp(parms->rxcmd_command.strptr, "TRACEOFF") == 0) - { - instanceInfo->trc = InstanceInfo::TRACEOFF; - strcpy(parms->rxcmd_retc.strptr, "0"); - parms->rxcmd_retc.strlength = 1; - return RXEXIT_HANDLED; - } - // ok, a good address...now do the different commands - else if (strcmp(parms->rxcmd_command.strptr, "HALT") == 0) - { - instanceInfo->hlt = InstanceInfo::HALT; - strcpy(parms->rxcmd_retc.strptr, "0"); - parms->rxcmd_retc.strlength = 1; - return RXEXIT_HANDLED; - } - else - { - // unknown command - strcpy(parms->rxcmd_retc.strptr, "-2"); - parms->rxcmd_retc.strlength = 2; - parms->rxcmd_flags.rxfcfail = 1; - return RXEXIT_HANDLED; - } -} - -int RexxEntry TestQueueExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->msq.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - switch (subcode) - { - case RXMSQPLL: - { - RXMSQPLL_PARM *parms = (RXMSQPLL_PARM *)exitInfo; - strcpy(parms->rxmsq_retc.strptr, "Hello World"); - parms->rxmsq_retc.strlength = strlen("Hello World"); - return RXEXIT_HANDLED; - } - case RXMSQPSH: - { - RXMSQPSH_PARM *parms = (RXMSQPSH_PARM *)exitInfo; - if (parms->rxmsq_flags.rxfmlifo) - { - if (strcmp(parms->rxmsq_value.strptr, "LIFO") == 0) - { - return RXEXIT_HANDLED; - } - else - { - return RXEXIT_RAISE_ERROR; - } - } - else - { - if (strcmp(parms->rxmsq_value.strptr, "FIFO") == 0) - { - return RXEXIT_HANDLED; - } - else - { - return RXEXIT_RAISE_ERROR; - } - } - } - case RXMSQSIZ: - { - RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; - // this always returns a large, distinctive number - parms->rxmsq_size = 999999; - return RXEXIT_HANDLED; - } - case RXMSQNAM: - { - RXMSQPLL_PARM *parms = (RXMSQPLL_PARM *)exitInfo; - strcpy(parms->rxmsq_retc.strptr, "FOOBAR"); - parms->rxmsq_retc.strlength = strlen("FOOBAR"); - return RXEXIT_HANDLED; - } - } - return RXEXIT_RAISE_ERROR; -} - -int RexxEntry TestSessionIOExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->sio.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - switch (subcode) - { - case RXSIOTRD: - { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) - { - RXSIOTRD_PARM *parms = (RXSIOTRD_PARM *)exitInfo; - strcpy(parms->rxsiotrd_retc.strptr, "Hello World"); - parms->rxsiotrd_retc.strlength = strlen("Hello World"); - return RXEXIT_HANDLED; - } - return RXEXIT_NOT_HANDLED; - } - case RXSIODTR: - { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) - { - RXSIODTR_PARM *parms = (RXSIODTR_PARM *)exitInfo; - strcpy(parms->rxsiodtr_retc.strptr, "trace off"); - parms->rxsiodtr_retc.strlength = strlen("trace off"); - return RXEXIT_HANDLED; - } - return RXEXIT_NOT_HANDLED; - } - case RXSIOSAY: - { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) - { - RXSIOSAY_PARM *parms = (RXSIOSAY_PARM *)exitInfo; - if (strcmp(parms->rxsio_string.strptr, "HELLO") == 0) - { - return RXEXIT_HANDLED; - } - else - { - return RXEXIT_RAISE_ERROR; - } - } - return RXEXIT_NOT_HANDLED; - } - case RXSIOTRC: - { - if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) - { - RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; - // this one is really hard to test, so it's sufficient that we got here. - return RXEXIT_HANDLED; - } - return RXEXIT_NOT_HANDLED; - } - } - return RXEXIT_RAISE_ERROR; -} - -int RexxEntry TestHaltExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->hlt.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::HALT: - { - RXHLTTST_PARM *parms = (RXHLTTST_PARM *)exitInfo; - parms->rxhlt_flags.rxfhhalt = 1; - // the next call is a no - instanceInfo->hlt = InstanceInfo::NOHALT; - return RXEXIT_HANDLED; - } - case InstanceInfo::NOHALT: - { - RXHLTTST_PARM *parms = (RXHLTTST_PARM *)exitInfo; - parms->rxhlt_flags.rxfhhalt = 0; - return RXEXIT_HANDLED; - } - } - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestTraceExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->trc.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::TRACEON: - { - RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; - parms->rxtrc_flags.rxftrace = 1; - // just one shot at this, otherwise the test rig goes into - // a loop in the io intercepter. - instanceInfo->trc = InstanceInfo::TRACEOFF; - return RXEXIT_HANDLED; - } - case InstanceInfo::TRACEOFF: - { - RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; - parms->rxtrc_flags.rxftrace = 0; - return RXEXIT_HANDLED; - } - } - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestInitExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->ini.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - setContextVariable("TEST1", "Hello World"); - return RXEXIT_HANDLED; -} - -int RexxEntry TestTerminationExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->ter.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - char buffer[256]; - RXSTRING value; - MAKERXSTRING(value, buffer, sizeof(buffer)); - - getContextVariable("TEST1", &value); - if (strcmp(value.strptr, "Hello World") != 0) - { - return RXEXIT_RAISE_ERROR; - } - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestScriptFunctionExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->exf.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - // nothing else really testable in a classic fashion - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestObjectFunctionExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->ofnc.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - // nothing else really testable in a classic fashion - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestNovalueExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->var.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - // nothing else really testable in a classic fashion - return RXEXIT_NOT_HANDLED; -} - -int RexxEntry TestValueExit(int code, int subcode, PEXIT exitInfo) -{ - InstanceInfo *instanceInfo = getApplicationData(); - - switch (instanceInfo->val.action) - { - case InstanceInfo::SKIP: - return RXEXIT_NOT_HANDLED; - case InstanceInfo::EXIT_ERROR: - return RXEXIT_RAISE_ERROR; - case InstanceInfo::RAISE: - return RXEXIT_RAISE_ERROR; - } - - // nothing else really testable in a classic fashion - return RXEXIT_NOT_HANDLED; -} - - -RexxReturnCode RexxEntry TestSubcomHandler(CONSTRXSTRING *cmd, unsigned short *flags, PRXSTRING retstr) -{ - *flags = RXSUBCOM_OK; - // ok, a good address...now do the different commands - if (strcmp(cmd->strptr, "GOOD") == 0) - { - strcpy(retstr->strptr, "0"); - retstr->strlength = 1; - return 0; - } - else if (strcmp(cmd->strptr, "ERROR") == 0) - { - strcpy(retstr->strptr, "1"); - retstr->strlength = 1; - *flags = RXSUBCOM_ERROR; - return 0; - } - else if (strcmp(cmd->strptr, "SETVAR") == 0) - { - setContextVariable("TEST1", "Hello World"); - strcpy(retstr->strptr, "0"); - retstr->strlength = 1; - return 0; - } - else if (strcmp(cmd->strptr, "GETVAR") == 0) - { - getContextVariable("TEST1", retstr); - return 0; - } - else - { - strcpy(retstr->strptr, "-1"); - retstr->strlength = 2; - *flags = RXSUBCOM_FAILURE; - return 0; - } -} - -void deregisterSubcomHandler() -{ - RexxDeregisterSubcom("TestSubcomHandler", NULL); -} - - -void REXXENTRY registerSubcomHandler(void *data) -{ - void *userData[2]; - userData[1] = data; - // make sure this is deregistered first - deregisterSubcomHandler(); - RexxRegisterSubcomExe("TestSubcomHandler", (REXXPFN)TestSubcomHandler, (char *)userData); -} - - -void REXXENTRY deregisterExits() -{ - RexxDeregisterExit("TestFunctionExit", NULL); - RexxDeregisterExit("TestObjectFunctionExit", NULL); - RexxDeregisterExit("TestScriptFunctionExit", NULL); - RexxDeregisterExit("TestCommandExit", NULL); - RexxDeregisterExit("TestQueueExit", NULL); - RexxDeregisterExit("TestSessionIOExit", NULL); - RexxDeregisterExit("TestHaltExit", NULL); - RexxDeregisterExit("TestInitExit", NULL); - RexxDeregisterExit("TestNovalueExit", NULL); - RexxDeregisterExit("TestTerminationExit", NULL); - RexxDeregisterExit("TestValueExit", NULL); - RexxDeregisterExit("TestTraceExit", NULL); -} - -void REXXENTRY registerExeExits(void *data) -{ - deregisterExits(); - - void *userData[2]; - userData[1] = data; - - RexxRegisterExitExe("TestFunctionExit", (REXXPFN)TestFunctionExit, (char *)userData); - RexxRegisterExitExe("TestObjectFunctionExit", (REXXPFN)TestObjectFunctionExit, (char *)userData); - RexxRegisterExitExe("TestScriptFunctionExit", (REXXPFN)TestScriptFunctionExit, (char *)userData); - RexxRegisterExitExe("TestCommandExit", (REXXPFN)TestCommandExit, (char *)userData); - RexxRegisterExitExe("TestQueueExit", (REXXPFN)TestQueueExit, (char *)userData); - RexxRegisterExitExe("TestSessionIOExit", (REXXPFN)TestSessionIOExit, (char *)userData); - RexxRegisterExitExe("TestHaltExit", (REXXPFN)TestHaltExit, (char *)userData); - RexxRegisterExitExe("TestInitExit", (REXXPFN)TestInitExit, (char *)userData); - RexxRegisterExitExe("TestNovalueExit", (REXXPFN)TestNovalueExit, (char *)userData); - RexxRegisterExitExe("TestTerminationExit", (REXXPFN)TestTerminationExit, (char *)userData); - RexxRegisterExitExe("TestValueExit", (REXXPFN)TestValueExit, (char *)userData); - RexxRegisterExitExe("TestTraceExit", (REXXPFN)TestTraceExit, (char *)userData); -} - -void REXXENTRY registerDllExits(void *data) -{ - deregisterExits(); - - void *userData[2]; - userData[1] = data; - - RexxRegisterExitDll("TestFunctionExit", "orxexits", "TestFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestObjectFunctionExit", "orxexits", "TestObjectFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestScriptFunctionExit", "orxexits", "TestScriptFunctionExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestCommandExit", "orxexits", "TestCommandExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestQueueExit", "orxexits", "TestQueueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestSessionIOExit", "orxexits", "TestSessionIOExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestHaltExit", "orxexits", "TestHaltExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestInitExit", "orxexits", "TestInitExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestNovalueExit", "orxexits", "TestNovalueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestTerminationExit", "orxexits", "TestTerminationExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestValueExit", "orxexits", "TestValueExit", (char *)userData, RXEXIT_DROPPABLE); - RexxRegisterExitDll("TestTraceExit", "orxexits", "TestTraceExit", (char *)userData, RXEXIT_DROPPABLE); -} - - -bool REXXENTRY buildRegisteredExitList(InstanceInfo *instanceInfo, RXSYSEXIT *exitList) -{ - int counter = 0; - if (instanceInfo->fnc.isEnabled()) - { - exitList->sysexit_name = "TestFunctionExit"; - exitList->sysexit_code = RXFNC; - exitList++; - counter++; - } - if (instanceInfo->cmd.isEnabled()) - { - exitList->sysexit_name = "TestCommandExit"; - exitList->sysexit_code = RXCMD; - exitList++; - counter++; - } - if (instanceInfo->msq.isEnabled()) - { - exitList->sysexit_name = "TestQueueExit"; - exitList->sysexit_code = RXMSQ; - exitList++; - counter++; - } - if (instanceInfo->sio.isEnabled()) - { - exitList->sysexit_name = "TestSessionIOExit"; - exitList->sysexit_code = RXSIO; - exitList++; - counter++; - } - if (instanceInfo->hlt.isEnabled()) - { - exitList->sysexit_name = "TestHaltExit"; - exitList->sysexit_code = RXHLT; - exitList++; - counter++; - } - if (instanceInfo->trc.isEnabled()) - { - exitList->sysexit_name = "TestTraceExit"; - exitList->sysexit_code = RXTRC; - exitList++; - counter++; - } - if (instanceInfo->ini.isEnabled()) - { - exitList->sysexit_name = "TestInitExit"; - exitList->sysexit_code = RXINI; - exitList++; - counter++; - } - if (instanceInfo->ter.isEnabled()) - { - exitList->sysexit_name = "TestTerminationExit"; - exitList->sysexit_code = RXTER; - exitList++; - counter++; - } - if (instanceInfo->exf.isEnabled()) - { - exitList->sysexit_name = "TestScriptFunctionExit"; - exitList->sysexit_code = RXEXF; - exitList++; - counter++; - } - if (instanceInfo->var.isEnabled()) - { - exitList->sysexit_name = "TestNovalueExit"; - exitList->sysexit_code = RXNOVAL; - exitList++; - counter++; - } - if (instanceInfo->val.isEnabled()) - { - exitList->sysexit_name = "TestValueExit"; - exitList->sysexit_code = RXVALUE; - exitList++; - counter++; - } - if (instanceInfo->ofnc.isEnabled()) - { - exitList->sysexit_name = "TestObjectFunctionExit"; - exitList->sysexit_code = RXOFNC; - exitList++; - counter++; - } - - if (counter > 0) - { - exitList->sysexit_name = NULL; - exitList->sysexit_code = 0; - return true; - } - return false; -} - - -void REXXENTRY invokeRexxStart(InstanceInfo *instanceInfo) -{ - CONSTRXSTRING args[10]; - RXSYSEXIT registeredExits[RXNOOFEXITS]; - short callRC = 0; - RXSTRING returnValue; - - instanceInfo->code = 0; - instanceInfo->rc = 0; - strcpy(instanceInfo->returnResult, ""); - - for (size_t i = 0; i < instanceInfo->argCount; i++) - { - if (instanceInfo->arguments[i] != NULL) - { - MAKERXSTRING(args[i], instanceInfo->arguments[i], strlen(instanceInfo->arguments[i])); - } - else - { - MAKERXSTRING(args[i], NULL, 0); - } - } - - RXSYSEXIT *exits = NULL; - - if (instanceInfo->exitStyle == InstanceInfo::REGISTERED_DLL) - { - registerDllExits((void *)instanceInfo); - buildRegisteredExitList(instanceInfo, registeredExits); - exits = registeredExits; - } - MAKERXSTRING(returnValue, NULL, 0); - - int rc = RexxStart(instanceInfo->argCount, args, instanceInfo->programName, NULL, instanceInfo->initialAddress, RXCOMMAND, exits, &callRC, &returnValue); - - if (rc < 0) - { - instanceInfo->rc = -rc; - } - else - { - if (returnValue.strptr != NULL) - { - strncpy(instanceInfo->returnResult, returnValue.strptr, sizeof(instanceInfo->returnResult)); - RexxFreeMemory(returnValue.strptr); - } - } - deregisterExits(); -} +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYright HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYright */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +#include "rexx.h" +#include "orxexits.hpp" +#include <string.h> + +InstanceInfo *getApplicationData() +{ + void *userData[2]; + unsigned short flag; + + RexxQueryExit("TestFunctionExit", NULL, &flag, (char *)userData); + return (InstanceInfo *)userData[1]; +} + + +void setContextVariable(const char *name, const char *value) +{ + SHVBLOCK shvb; + + memset(&shvb, 0, sizeof(shvb)); + shvb.shvnext = NULL; + shvb.shvname.strptr = name; + shvb.shvname.strlength = strlen(name); + shvb.shvvalue.strptr = const_cast<char *>(value); + shvb.shvvalue.strlength = strlen(value); + shvb.shvnamelen = shvb.shvname.strlength; + shvb.shvvaluelen = shvb.shvvalue.strlength; + shvb.shvcode = RXSHV_SET; + shvb.shvret = 0; + RexxVariablePool(&shvb); +} + + +void getContextVariable(const char *name, RXSTRING *value) +{ + SHVBLOCK shvb; + + memset(&shvb, 0, sizeof(shvb)); + shvb.shvnext = NULL; + shvb.shvname.strptr = name; + shvb.shvname.strlength = strlen(name); + shvb.shvvalue.strptr = value->strptr; + shvb.shvvalue.strlength = value->strlength; + shvb.shvnamelen = shvb.shvname.strlength; + shvb.shvvaluelen = shvb.shvvalue.strlength; + shvb.shvcode = RXSHV_FETCH; + shvb.shvret = 0; + RexxVariablePool(&shvb); +} + + +void dropContextVariable(const char *name) +{ + SHVBLOCK shvb; + + memset(&shvb, 0, sizeof(shvb)); + shvb.shvnext = NULL; + shvb.shvname.strptr = name; + shvb.shvname.strlength = strlen(name); + shvb.shvnamelen = shvb.shvname.strlength; + shvb.shvcode = RXSHV_DROPV; + shvb.shvret = 0; + RexxVariablePool(&shvb); +} + + +int RexxEntry TestFunctionExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->fnc.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + RXFNCCAL_PARM *parms = (RXFNCCAL_PARM *)exitInfo; + const char *functionName = parms->rxfnc_name; + if (strcmp(functionName, "TESTSUBCALL") == 0) + { + // return the status of the flag + if (parms->rxfnc_flags.rxffsub) + { + strcpy(parms->rxfnc_retc.strptr, "SUBROUTINE"); + } + else + { + strcpy(parms->rxfnc_retc.strptr, "FUNCTION"); + } + parms->rxfnc_retc.strlength = strlen(parms->rxfnc_retc.strptr); + return RXEXIT_HANDLED; + } + else if (strcmp(functionName, "TESTERROR") == 0) + { + // this should raise an error + parms->rxfnc_flags.rxfferr = 1; + return RXEXIT_HANDLED; + } + else if (strcmp(functionName, "TESTNOTOUND") == 0) + { + // this should raise an error + parms->rxfnc_flags.rxffnfnd = 1; + return RXEXIT_HANDLED; + } + else if (strcmp(functionName, "TESTGETCONTEXTVARIABLE") == 0) + { + getContextVariable(parms->rxfnc_argv[0].strptr, &parms->rxfnc_retc); + return RXEXIT_HANDLED; + } + else if (strcmp(functionName, "TESTSETCONTEXTVARIABLE") == 0) + { + setContextVariable(parms->rxfnc_argv[0].strptr, parms->rxfnc_argv[1].strptr); + parms->rxfnc_retc.strlength = 0; + return RXEXIT_HANDLED; + } + else if (strcmp(functionName, "TESTDROPCONTEXTVARIABLE") == 0) + { + dropContextVariable(parms->rxfnc_argv[0].strptr); + return RXEXIT_HANDLED; + } + else + { + // pass on this + return RXEXIT_NOT_HANDLED; + } +} + +int RexxEntry TestCommandExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->cmd.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + RXCMDHST_PARM *parms = (RXCMDHST_PARM *)exitInfo; + // handle commands here...we need to process both the address environment and the commands + if (strcmp(parms->rxcmd_address, "FOOBAR") == 0) + { + strcpy(parms->rxcmd_retc.strptr, "-1"); + parms->rxcmd_retc.strlength = 2; + return RXEXIT_HANDLED; + } + + // ok, a good address...now do the different commands + if (strcmp(parms->rxcmd_command.strptr, "GOOD") == 0) + { + strcpy(parms->rxcmd_retc.strptr, "0"); + parms->rxcmd_retc.strlength = 1; + return RXEXIT_HANDLED; + } + else if (strcmp(parms->rxcmd_command.strptr, "ERROR") == 0) + { + strcpy(parms->rxcmd_retc.strptr, "1"); + parms->rxcmd_retc.strlength = 1; + parms->rxcmd_flags.rxfcerr = 1; + return RXEXIT_HANDLED; + } + // ok, a good address...now do the different commands + else if (strcmp(parms->rxcmd_command.strptr, "TRACEON") == 0) + { + instanceInfo->trc = InstanceInfo::TRACEON; + strcpy(parms->rxcmd_retc.strptr, "0"); + parms->rxcmd_retc.strlength = 1; + return RXEXIT_HANDLED; + } + // ok, a good address...now do the different commands + else if (strcmp(parms->rxcmd_command.strptr, "TRACEOFF") == 0) + { + instanceInfo->trc = InstanceInfo::TRACEOFF; + strcpy(parms->rxcmd_retc.strptr, "0"); + parms->rxcmd_retc.strlength = 1; + return RXEXIT_HANDLED; + } + // ok, a good address...now do the different commands + else if (strcmp(parms->rxcmd_command.strptr, "HALT") == 0) + { + instanceInfo->hlt = InstanceInfo::HALT; + strcpy(parms->rxcmd_retc.strptr, "0"); + parms->rxcmd_retc.strlength = 1; + return RXEXIT_HANDLED; + } + else + { + // unknown command + strcpy(parms->rxcmd_retc.strptr, "-2"); + parms->rxcmd_retc.strlength = 2; + parms->rxcmd_flags.rxfcfail = 1; + return RXEXIT_HANDLED; + } +} + +int RexxEntry TestQueueExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->msq.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + switch (subcode) + { + case RXMSQPLL: + { + RXMSQPLL_PARM *parms = (RXMSQPLL_PARM *)exitInfo; + strcpy(parms->rxmsq_retc.strptr, "Hello World"); + parms->rxmsq_retc.strlength = strlen("Hello World"); + return RXEXIT_HANDLED; + } + case RXMSQPSH: + { + RXMSQPSH_PARM *parms = (RXMSQPSH_PARM *)exitInfo; + if (parms->rxmsq_flags.rxfmlifo) + { + if (strcmp(parms->rxmsq_value.strptr, "LIFO") == 0) + { + return RXEXIT_HANDLED; + } + else + { + return RXEXIT_RAISE_ERROR; + } + } + else + { + if (strcmp(parms->rxmsq_value.strptr, "FIFO") == 0) + { + return RXEXIT_HANDLED; + } + else + { + return RXEXIT_RAISE_ERROR; + } + } + } + case RXMSQSIZ: + { + RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; + // this always returns a large, distinctive number + parms->rxmsq_size = 999999; + return RXEXIT_HANDLED; + } + case RXMSQNAM: + { + RXMSQPLL_PARM *parms = (RXMSQPLL_PARM *)exitInfo; + strcpy(parms->rxmsq_retc.strptr, "FOOBAR"); + parms->rxmsq_retc.strlength = strlen("FOOBAR"); + return RXEXIT_HANDLED; + } + } + return RXEXIT_RAISE_ERROR; +} + +int RexxEntry TestSessionIOExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->sio.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + switch (subcode) + { + case RXSIOTRD: + { + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + { + RXSIOTRD_PARM *parms = (RXSIOTRD_PARM *)exitInfo; + strcpy(parms->rxsiotrd_retc.strptr, "Hello World"); + parms->rxsiotrd_retc.strlength = strlen("Hello World"); + return RXEXIT_HANDLED; + } + return RXEXIT_NOT_HANDLED; + } + case RXSIODTR: + { + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) + { + RXSIODTR_PARM *parms = (RXSIODTR_PARM *)exitInfo; + strcpy(parms->rxsiodtr_retc.strptr, "trace off"); + parms->rxsiodtr_retc.strlength = strlen("trace off"); + return RXEXIT_HANDLED; + } + return RXEXIT_NOT_HANDLED; + } + case RXSIOSAY: + { + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE) + { + RXSIOSAY_PARM *parms = (RXSIOSAY_PARM *)exitInfo; + if (strcmp(parms->rxsio_string.strptr, "HELLO") == 0) + { + return RXEXIT_HANDLED; + } + else + { + return RXEXIT_RAISE_ERROR; + } + } + return RXEXIT_NOT_HANDLED; + } + case RXSIOTRC: + { + if (instanceInfo->sio == InstanceInfo::ALL || instanceInfo->sio == InstanceInfo::CONSOLE_DEBUG) + { + RXMSQSIZ_PARM *parms = (RXMSQSIZ_PARM *)exitInfo; + // this one is really hard to test, so it's sufficient that we got here. + return RXEXIT_HANDLED; + } + return RXEXIT_NOT_HANDLED; + } + } + return RXEXIT_RAISE_ERROR; +} + +int RexxEntry TestHaltExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->hlt.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::HALT: + { + RXHLTTST_PARM *parms = (RXHLTTST_PARM *)exitInfo; + parms->rxhlt_flags.rxfhhalt = 1; + // the next call is a no + instanceInfo->hlt = InstanceInfo::NOHALT; + return RXEXIT_HANDLED; + } + case InstanceInfo::NOHALT: + { + RXHLTTST_PARM *parms = (RXHLTTST_PARM *)exitInfo; + parms->rxhlt_flags.rxfhhalt = 0; + return RXEXIT_HANDLED; + } + } + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestTraceExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->trc.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::TRACEON: + { + RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; + parms->rxtrc_flags.rxftrace = 1; + // just one shot at this, otherwise the test rig goes into + // a loop in the io intercepter. + instanceInfo->trc = InstanceInfo::TRACEOFF; + return RXEXIT_HANDLED; + } + case InstanceInfo::TRACEOFF: + { + RXTRCTST_PARM *parms = (RXTRCTST_PARM *)exitInfo; + parms->rxtrc_flags.rxftrace = 0; + return RXEXIT_HANDLED; + } + } + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestInitExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->ini.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + setContextVariable("TEST1", "Hello World"); + return RXEXIT_HANDLED; +} + +int RexxEntry TestTerminationExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->ter.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + char buffer[256]; + RXSTRING value; + MAKERXSTRING(value, buffer, sizeof(buffer)); + + getContextVariable("TEST1", &value); + if (strcmp(value.strptr, "Hello World") != 0) + { + return RXEXIT_RAISE_ERROR; + } + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestScriptFunctionExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->exf.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + // nothing else really testable in a classic fashion + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestObjectFunctionExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->ofnc.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + // nothing else really testable in a classic fashion + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestNovalueExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->var.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + // nothing else really testable in a classic fashion + return RXEXIT_NOT_HANDLED; +} + +int RexxEntry TestValueExit(int code, int subcode, PEXIT exitInfo) +{ + InstanceInfo *instanceInfo = getApplicationData(); + + switch (instanceInfo->val.action) + { + case InstanceInfo::SKIP: + return RXEXIT_NOT_HANDLED; + case InstanceInfo::EXIT_ERROR: + return RXEXIT_RAISE_ERROR; + case InstanceInfo::RAISE: + return RXEXIT_RAISE_ERROR; + } + + // nothing else really testable in a classic fashion + return RXEXIT_NOT_HANDLED; +} + + +RexxReturnCode RexxEntry TestSubcomHandler(CONSTRXSTRING *cmd, unsigned short *flags, PRXSTRING retstr) +{ + *flags = RXSUBCOM_OK; + // ok, a good address...now do the different commands + if (strcmp(cmd->strptr, "GOOD") == 0) + { + strcpy(retstr->strptr, "0"); + retstr->strlength = 1; + return 0; + } + else if (strcmp(cmd->strptr, "ERROR") == 0) + { + strcpy(retstr->strptr, "1"); + retstr->strlength = 1; + *flags = RXSUBCOM_ERROR; + return 0; + } + else if (strcmp(cmd->strptr, "SETVAR") == 0) + { + setContextVariable("TEST1", "Hello World"); + strcpy(retstr->strptr, "0"); + retstr->strlength = 1; + return 0; + } + else if (strcmp(cmd->strptr, "GETVAR") == 0) + { + getContextVariable("TEST1", retstr); + return 0; + } + else + { + strcpy(retstr->strptr, "-1"); + retstr->strlength = 2; + *flags = RXSUBCOM_FAILURE; + return 0; + } +} + +void deregisterSubcomHandler() +{ + RexxDeregisterSubcom("TestSubcomHandler", NULL); +} + + +void REXXENTRY registerSubcomHandler(void *data) +{ + void *userData[2]; + userData[1] = data; + // make sure this is deregistered first + deregisterSubcomHandler(); + RexxRegisterSubcomExe("TestSubcomHandler", (REXXPFN)TestSubcomHandler, (char *)userData); +} + + +void REXXENTRY deregisterExits() +{ + RexxDeregisterExit("TestFunctionExit", NULL); + RexxDeregisterExit("TestObjectFunctionExit", NULL); + RexxDeregisterExit("TestScriptFunctionExit", NULL); + RexxDeregisterExit("TestCommandExit", NULL); + RexxDeregisterExit("TestQueueExit", NULL); + RexxDeregisterExit("TestSessionIOExit", NULL); + RexxDeregisterExit("TestHaltExit", NULL); + RexxDeregisterExit("TestInitExit", NULL); + RexxDeregisterExit("TestNovalueExit", NULL); + RexxDeregisterExit("TestTerminationExit", NULL); + RexxDeregisterExit("TestValueExit", NULL); + RexxDeregisterExit("TestTraceExit", NULL); +} + +void REXXENTRY registerExeExits(void *data) +{ + deregisterExits(); + + void *userData[2]; + userData[1] = data; + + RexxRegisterExitExe("TestFunctionExit", (REXXPFN)TestFunctionExit, (char *)userData); + RexxRegisterExitExe("TestObjectFunctionExit", (REXXPFN)TestObjectFunctionExit, (char *)userData); + RexxRegisterExitExe("TestScriptFunctionExit", (REXXPFN)TestScriptFunctionExit, (char *)userData); + RexxRegisterExitExe("TestCommandExit", (REXXPFN)TestCommandExit, (char *)userData); + RexxRegisterExitExe("TestQueueExit", (REXXPFN)TestQueueExit, (char *)userData); + RexxRegisterExitExe("TestSessionIOExit", (REXXPFN)TestSessionIOExit, (char *)userData); + RexxRegisterExitExe("TestHaltExit", (REXXPFN)TestHaltExit, (char *)userData); + RexxRegisterExitExe("TestInitExit", (REXXPFN)TestInitExit, (char *)userData); + RexxRegisterExitExe("TestNovalueExit", (REXXPFN)TestNovalueExit, (char *)userData); + RexxRegisterExitExe("TestTerminationExit", (REXXPFN)TestTerminationExit, (char *)userData); + RexxRegisterExitExe("TestValueExit", (REXXPFN)TestValueExit, (char *)userData); + RexxRegisterExitExe("TestTraceExit", (REXXPFN)TestTraceExit, (char *)userData); +} + +void REXXENTRY registerDllExits(void *data) +{ + deregisterExits(); + + void *userData[2]; + userData[1] = data; + + RexxRegisterExitDll("TestFunctionExit", "orxexits", "TestFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestObjectFunctionExit", "orxexits", "TestObjectFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestScriptFunctionExit", "orxexits", "TestScriptFunctionExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestCommandExit", "orxexits", "TestCommandExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestQueueExit", "orxexits", "TestQueueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestSessionIOExit", "orxexits", "TestSessionIOExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestHaltExit", "orxexits", "TestHaltExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestInitExit", "orxexits", "TestInitExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestNovalueExit", "orxexits", "TestNovalueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestTerminationExit", "orxexits", "TestTerminationExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestValueExit", "orxexits", "TestValueExit", (char *)userData, RXEXIT_DROPPABLE); + RexxRegisterExitDll("TestTraceExit", "orxexits", "TestTraceExit", (char *)userData, RXEXIT_DROPPABLE); +} + + +bool REXXENTRY buildRegisteredExitList(InstanceInfo *instanceInfo, RXSYSEXIT *exitList) +{ + int counter = 0; + if (instanceInfo->fnc.isEnabled()) + { + exitList->sysexit_name = "TestFunctionExit"; + exitList->sysexit_code = RXFNC; + exitList++; + counter++; + } + if (instanceInfo->cmd.isEnabled()) + { + exitList->sysexit_name = "TestCommandExit"; + exitList->sysexit_code = RXCMD; + exitList++; + counter++; + } + if (instanceInfo->msq.isEnabled()) + ... [truncated message content] |
From: <mie...@us...> - 2008-11-17 17:10:36
|
Revision: 3704 http://oorexx.svn.sourceforge.net/oorexx/?rev=3704&view=rev Author: miesfeld Date: 2008-11-17 17:10:26 +0000 (Mon, 17 Nov 2008) Log Message: ----------- ooTest - [ 2297300 ] patch to unit test / AIX Patch supplied by Rainer Tammer Thanks Rainer. Modified Paths: -------------- test/trunk/ReadMe.first test/trunk/external/API/Makefile.aix Modified: test/trunk/ReadMe.first =================================================================== --- test/trunk/ReadMe.first 2008-11-17 14:51:39 UTC (rev 3703) +++ test/trunk/ReadMe.first 2008-11-17 17:10:26 UTC (rev 3704) @@ -55,7 +55,24 @@ Look at the file: Expected.Results in the same directory as this file to see the expected console output when executing the entire test suite. +AIX +--- +If you have a normal install of the interpreter with the executable in the +path then use this command line: +# ./setTestEnv.sh +# ./testOORexx.rex + +For the tests to complete you need the IBM XL C/C++ V9 (with PTF for IZ34314) +compiler installed. The XL C/C++ V8 copiler does show the same problem. +Unfortunatle there is no ARAR number available yet. + +After Test Completion on Your OS +-------------------------------- +Look at the file: Expected.Results in the same directory as this file to see +some typical console output when executing the entire test suite. + + 2.) Running just a subset of the test suite. --------------------------------------------- Modified: test/trunk/external/API/Makefile.aix =================================================================== --- test/trunk/external/API/Makefile.aix 2008-11-17 14:51:39 UTC (rev 3703) +++ test/trunk/external/API/Makefile.aix 2008-11-17 17:10:26 UTC (rev 3704) @@ -62,27 +62,37 @@ # Build the libraries all: $(OOTEST_BIN_DIR)/liborxfunction.so $(OOTEST_BIN_DIR)/liborxmethod.so \ $(OOTEST_BIN_DIR)/liborxclassic.so $(OOTEST_BIN_DIR)/liborxclassic1.so \ - $(OOTEST_BIN_DIR)/orxexits.so $(OOTEST_BIN_DIR)/orxinvocation.so + $(OOTEST_BIN_DIR)/liborxexits.so $(OOTEST_BIN_DIR)/liborxinvocation.so \ + $(OOTEST_BIN_DIR)/rexxinstance $(OOTEST_BIN_DIR)/liborxfunction.so: liborxfunction.so + slibclean cp liborxfunction.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxmethod.so: liborxmethod.so + slibclean cp liborxmethod.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxclassic.so: liborxclassic.so + slibclean cp liborxclassic.so $(OOTEST_BIN_DIR) $(OOTEST_BIN_DIR)/liborxclassic1.so: liborxclassic1.so + slibclean cp liborxclassic1.so $(OOTEST_BIN_DIR) -$(OOTEST_BIN_DIR)/orxexits.so: orxexits.so - cp orxexits.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/liborxexits.so: liborxexits.so + slibclean + cp liborxexits.so $(OOTEST_BIN_DIR) -$(OOTEST_BIN_DIR)/orxinvocation.so: orxinvocation.so - cp orxinvocation.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/liborxinvocation.so: liborxinvocation.so + slibclean + cp liborxinvocation.so $(OOTEST_BIN_DIR) +$(OOTEST_BIN_DIR)/rexxinstance: rexxinstance + cp rexxinstance $(OOTEST_BIN_DIR) + # Build the shared library liborxfunction.so: orxfunction.o xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxfunction.so orxfunction.o @@ -100,7 +110,6 @@ orxmethod.o: orxmethod.cpp $(METHOD_SRC_DEPS) xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxmethod.cpp - # Build the objects orxclassicexits.o: orxclassicexits.cpp xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxclassicexits.cpp @@ -110,9 +119,13 @@ xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxinstance.cpp # Build the objects -orxinvocation.o: orxinvocation.cpp - xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxinvocation.cpp +orxinvocation.o: orxinvocation.cpp orxexits.hpp + xlC_r -c $(ORXCFLAGS) $(REXX_INCLUDES) orxinvocation.cpp +# Build the objects +orxclassic1.o: orxclassic1.c $(FUNCTION_SRC_DEPS) + xlc_r -c $(ORXCFLAGS) $(REXX_INCLUDES) orxclassic1.c + # Build the shared library liborxclassic.so: orxclassic.o xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxclassic.so orxclassic.o @@ -121,23 +134,26 @@ orxclassic.o: orxclassic.cpp $(FUNCTION_SRC_DEPS) xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) orxclassic.cpp - # Build the shared library liborxclassic1.so: orxclassic1.o xlc_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxclassic1.so orxclassic1.o -# Build the objects -orxclassic1.o: orxclassic1.c $(FUNCTION_SRC_DEPS) - xlc_r -c $(ORXCFLAGS) $(REXX_INCLUDES) orxclassic1.c - # Build the shared library -orxexits.so: orxclassicexits.o orxinstance.o - xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxexits.so orxclassicexits.o orxinstance.o +liborxexits.so: orxclassicexits.o orxinstance.o + xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o liborxexits.so orxclassicexits.o orxinstance.o # Build the shared library -orxinvocation.so: orxinvocation.o - xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -o orxinvocation.so orxinvocation.o +liborxinvocation.so: orxinvocation.o + xlC_r $(ORXLFLAGS) $(REXX_LIBS) -lrexx -lrexxapi -L. -lorxexits -o liborxinvocation.so orxinvocation.o +# Build the objects +rexxinstance.o: rexxinstance.cpp orxexits.hpp + xlC_r -c $(ORXCXXFLAGS) $(REXX_INCLUDES) rexxinstance.cpp + +# Build the binary +rexxinstance: rexxinstance.o + xlC_r $(REXX_LIBS) -ldl -lpthread -Wl,-binitfini:_init:_fini -Wl,-brtl -L. -lorxexits -lrexx -lrexxapi rexxinstance.o -o rexxinstance + clean: - rm -f *.so *.o $(OOTEST_BIN_DIR)/lib*.so + rm -f *.so *.o rexxinstance $(OOTEST_BIN_DIR)/lib*.so This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2009-03-01 19:07:22
|
Revision: 4240 http://oorexx.svn.sourceforge.net/oorexx/?rev=4240&view=rev Author: bigrixx Date: 2009-03-01 19:07:18 +0000 (Sun, 01 Mar 2009) Log Message: ----------- change method for checking the architecture Modified Paths: -------------- test/trunk/framework/OOREXXUNIT.CLS test/trunk/ooRexx/API/oo/CONVERSION.testGroup test/trunk/ooRexx/API/oo/FUNCTION.testGroup test/trunk/ooRexx/API/oo/METHOD.testGroup test/trunk/ooRexx/base/bif/ABS.testGroup test/trunk/ooRexx/base/bif/DATATYPE.testGroup test/trunk/ooRexx/base/bif/DELSTR.testGroup test/trunk/ooRexx/base/bif/DELWORD.testGroup test/trunk/ooRexx/base/bif/DIGITS.testGroup test/trunk/ooRexx/base/bif/INSERT.testGroup test/trunk/ooRexx/base/bif/LENGTH.testGroup test/trunk/ooRexx/base/bif/SIGN.testGroup test/trunk/ooRexx/base/bif/SPACE.testGroup test/trunk/ooRexx/base/bif/SUBSTR.testGroup test/trunk/ooRexx/base/bif/SUBWORD.testGroup test/trunk/ooRexx/base/bif/VERIFY.testGroup test/trunk/ooRexx/base/bif/WORD.testGroup test/trunk/ooRexx/base/bif/WORDINDEX.testGroup test/trunk/ooRexx/base/bif/WORDLENGTH.testGroup test/trunk/ooRexx/base/class/MutableBuffer/delword.testGroup test/trunk/ooRexx/base/class/MutableBuffer/insert.testGroup test/trunk/ooRexx/base/class/MutableBuffer/subWord.testGroup test/trunk/ooRexx/base/class/MutableBuffer/substr.testGroup test/trunk/ooRexx/base/class/MutableBuffer/verify.testGroup test/trunk/ooRexx/base/class/MutableBuffer/word.testGroup test/trunk/ooRexx/base/class/MutableBuffer/wordindex.testGroup test/trunk/ooRexx/base/class/MutableBuffer/wordlength.testGroup test/trunk/ooRexx/base/class/String/abs.testGroup test/trunk/ooRexx/base/class/String/datatype.testGroup test/trunk/ooRexx/base/class/String/delstr.testGroup test/trunk/ooRexx/base/class/String/delword.testGroup test/trunk/ooRexx/base/class/String/insert.testGroup test/trunk/ooRexx/base/class/String/sign.testGroup test/trunk/ooRexx/base/class/String/substr.testGroup test/trunk/ooRexx/base/class/String/subword.testGroup test/trunk/ooRexx/base/class/String/verify.testGroup test/trunk/ooRexx/base/class/String/word.testGroup test/trunk/ooRexx/base/class/String/wordindex.testGroup test/trunk/ooRexx/base/class/String/wordlength.testGroup test/trunk/ooRexx/base/class/String/x2d.testGroup test/trunk/ooRexx/base/expressions/EXPONENT.testGroup test/trunk/ooRexx/base/expressions/PRECEDENCE.testGroup test/trunk/ooRexx/base/expressions/SPECIAL.testGroup test/trunk/ooRexx/base/keyword/NUMERIC.testGroup Modified: test/trunk/framework/OOREXXUNIT.CLS =================================================================== --- test/trunk/framework/OOREXXUNIT.CLS 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/framework/OOREXXUNIT.CLS 2009-03-01 19:07:18 UTC (rev 4240) @@ -159,8 +159,6 @@ /* */ /*----------------------------------------------------------------------------*/ -if \ .local~hasEntry(ooRexxUnit.version) then do - -- Define the version number with: x.x.x_y.y.y Where x is the ooRexxUnit.cls -- version, and y is the minimum ooRexx interpreter level required. .local~ooRexxUnit.version=2.0.0_3.2.0 @@ -175,6 +173,7 @@ .local~ooRexxUnit.shellName=ooRexxUnit.getShellName() .local~ooRexxUnit.OSName =ooRexxUnit.getOSName() + -- define end-of-line chars .local~ooRexxUnit.line.separator=.endOfLine @@ -208,8 +207,17 @@ -- Add the test utility class to the local environment so that it is available -- to anyone running in this process. .local~put(.TESTUTIL, 'TESTUTIL') -end + architecture = 32 + signal on syntax name not64 + -- this will force a syntax error on 32-bit systems + x = delstr("abc", 1000000000, 1) + architecture = 64 + + not64: + signal off syntax + .local~ooRexxUnit.architecture = architecture + -- End of entry point. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ Modified: test/trunk/ooRexx/API/oo/CONVERSION.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/CONVERSION.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/API/oo/CONVERSION.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -335,12 +335,12 @@ self~assertSame(val, .CONVERSIONTester~TestObjectToWholeNumber(val)) val = 1 self~assertSame(val, .CONVERSIONTester~TestObjectToWholeNumber(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, .CONVERSIONTester~TestObjectToWholeNumber(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -348,14 +348,14 @@ ::method 'testWholenumber02' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then .CONVERSIONTester~TestObjectToWholeNumber(1000000000) else .CONVERSIONTester~TestObjectToWholeNumber(1000000000000000000) ::method 'testWholenumber03' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then .CONVERSIONTester~TestObjectToWholeNumber(-1000000000) else .CONVERSIONTester~TestObjectToWholeNumber(-1000000000000000000) @@ -368,12 +368,12 @@ self~assertSame(val, .CONVERSIONTester~TestWholeNumberToObject(val)) val = 1 self~assertSame(val, .CONVERSIONTester~TestWholeNumberToObject(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, .CONVERSIONTester~TestWholeNumberToObject(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -386,12 +386,12 @@ self~assertSame(val, .CONVERSIONTester~TestObjectToValue(val, .CONVERSIONTester~WholeNumberType)) val = 1 self~assertSame(val, .CONVERSIONTester~TestObjectToValue(val, .CONVERSIONTester~WholeNumberType)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, .CONVERSIONTester~TestObjectToValue(val, .CONVERSIONTester~WholeNumberType)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -399,7 +399,7 @@ ::method 'testWholenumber06' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 1000000000 else val = 1000000000000000000 @@ -407,7 +407,7 @@ ::method 'testWholenumber07' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = '-1000000000' else val = '-1000000000000000000' @@ -421,7 +421,7 @@ self~assertSame(val, .CONVERSIONTester~TestObjectToStringSize(val)) val = 1 self~assertSame(val, .CONVERSIONTester~TestObjectToStringSize(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -429,7 +429,7 @@ ::method 'testStringSize02' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then .CONVERSIONTester~TestObjectToStringSize(1000000000) else .CONVERSIONTester~TestObjectToStringSize(1000000000000000000) @@ -446,7 +446,7 @@ self~assertSame(val, .CONVERSIONTester~TestStringSizeToObject(val)) val = 1 self~assertSame(val, .CONVERSIONTester~TestStringSizeToObject(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -459,7 +459,7 @@ self~assertSame(val, .CONVERSIONTester~TestObjectToValue(val, .CONVERSIONTester~StringSizeType)) val = 1 self~assertSame(val, .CONVERSIONTester~TestObjectToValue(val, .CONVERSIONTester~StringSizeType)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -467,7 +467,7 @@ ::method 'testStringSize06' self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 1000000000 else val = 1000000000000000000 Modified: test/trunk/ooRexx/API/oo/FUNCTION.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/FUNCTION.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/API/oo/FUNCTION.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -408,12 +408,12 @@ self~assertSame(val, TestWholeNumberArg(val)) val = -1 self~assertSame(val, TestWholeNumberArg(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, TestWholeNumberArg(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -421,14 +421,14 @@ ::method 'testWholenumber02' self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then TestWholeNumberArg(1000000000) else TestWholeNumberArg(1000000000000000000) ::method 'testWholenumber03' self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then TestWholeNumberArg(-1000000000) else TestWholeNumberArg(-1000000000000000000) Modified: test/trunk/ooRexx/API/oo/METHOD.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/METHOD.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/API/oo/METHOD.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -486,12 +486,12 @@ self~assertSame(val, tester~TestWholeNumberArg(val)) val = 1 self~assertSame(val, tester~TestWholeNumberArg(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, tester~TestWholeNumberArg(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -502,7 +502,7 @@ ::method 'testWholenumber02' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestWholeNumberArg(1000000000) else tester~TestWholeNumberArg(1000000000000000000) @@ -510,7 +510,7 @@ ::method 'testWholenumber03' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestWholeNumberArg(-1000000000) else tester~TestWholeNumberArg(-1000000000000000000) @@ -524,7 +524,7 @@ self~assertSame(val, tester~TestStringSizeArg(val)) val = 1 self~assertSame(val, tester~TestStringSizeArg(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -535,7 +535,7 @@ ::method 'testStringSize02' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestStringSizeArg(1000000000) else tester~TestStringSizeArg(1000000000000000000) @@ -1813,13 +1813,13 @@ val = 1 self~assertSame(val, tester~TestWholeNumberToObject(val)) self~assertSame(val, tester~TestWholeNumberToObjectAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, tester~TestWholeNumberToObject(val)) self~assertSame(val, tester~TestWholeNumberToObjectAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -1837,13 +1837,13 @@ val = 1 self~assertSame(val, tester~TestObjectToWholeNumber(val)) self~assertSame(val, tester~TestObjectToWholeNumberAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 self~assertSame(val, tester~TestObjectToWholeNumber(val)) self~assertSame(val, tester~TestObjectToWholeNumberAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = -999999999 else val = -999999999999999999 @@ -1853,7 +1853,7 @@ ::method 'testObjectToWholenumber02' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToWholeNumber(1000000000) else tester~TestObjectToWholeNumber(1000000000000000000) @@ -1861,7 +1861,7 @@ ::method 'testObjectToWholenumber02a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToWholeNumberAlt(1000000000) else tester~TestObjectToWholeNumberAlt(1000000000000000000) @@ -1869,7 +1869,7 @@ ::method 'testObjectToWholenumber03' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToWholeNumber(-1000000000) else tester~TestObjectToWholeNumber(-1000000000000000000) @@ -1877,7 +1877,7 @@ ::method 'testObjectToWholenumber03a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToWholeNumberAlt(-1000000000) else tester~TestObjectToWholeNumberAlt(-1000000000000000000) @@ -1894,7 +1894,7 @@ val = 1 self~assertSame(val, tester~TestStringSizeToObject(val)) self~assertSame(val, tester~TestStringSizeToObjectAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -1913,7 +1913,7 @@ val = 1 self~assertSame(val, tester~TestObjectToStringSize(val)) self~assertSame(val, tester~TestObjectToStringSizeAlt(val)) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then val = 999999999 else val = 999999999999999999 @@ -1923,7 +1923,7 @@ ::method 'testObjectToStringSize02' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToStringSize(1000000000) else tester~TestObjectToStringSize(1000000000000000000) @@ -1931,7 +1931,7 @@ ::method 'testObjectToStringSize02a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToStringSizeAlt(1000000000) else tester~TestObjectToStringSizeAlt(1000000000000000000) @@ -2172,7 +2172,7 @@ ::method 'testIntptr01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 2147483647 self~assertSame(val, tester~TestIntptrArg(val)) val = '-2147483648' @@ -2200,7 +2200,7 @@ ::method 'testIntptr02' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestIntptrArg(2147483648) else tester~TestIntptrArg(9223372036854775808) @@ -2208,14 +2208,14 @@ ::method 'testIntptr03' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestIntptrArg('-2147483649') else tester~TestIntptrArg('-9223372036854775809') ::method 'testIntptrToObject01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 2147483647 self~assertSame(val, tester~TestIntptrToObject(val)) self~assertSame(val, tester~TestIntptrToObjectAlt(val)) @@ -2251,7 +2251,7 @@ ::method 'testObjectToIntptr01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 2147483647 self~assertSame(val, tester~TestObjectToIntptr(val)) self~assertSame(val, tester~TestObjectToIntptrAlt(val)) @@ -2289,7 +2289,7 @@ ::method 'testObjectToIntptr02' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToIntptr(2147483648) else tester~TestObjectToIntptr(9223372036854775808) @@ -2297,7 +2297,7 @@ ::method 'testObjectToIntptr02a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToIntptrAlt(2147483648) else tester~TestObjectToIntptrAlt(9223372036854775808) @@ -2305,7 +2305,7 @@ ::method 'testObjectToIntptr03' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToIntptr('-2147483649') else tester~TestObjectToIntptr('-9223372036854775809') @@ -2313,7 +2313,7 @@ ::method 'testObjectToIntptr03a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToIntptrAlt('-2147483649') else tester~TestObjectToIntptrAlt('-9223372036854775809') @@ -2322,7 +2322,7 @@ ::method 'testuintptr01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 4294967295 self~assertSame(val, tester~TestUintptrArg(val)) end @@ -2340,7 +2340,7 @@ ::method 'testuintptr02' tester = .METHODtester~new self~expectSyntax('88.907') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestUintptrArg(4294967296) else tester~TestUintptrArg(18446744073709551616) @@ -2353,7 +2353,7 @@ ::method 'testUintptrToObject01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 4294967295 self~assertSame(val, tester~TestUintptrToObject(val)) self~assertSame(val, tester~TestUintptrToObjectAlt(val)) @@ -2374,7 +2374,7 @@ ::method 'testObjectToUintptr01' tester = .METHODtester~new - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do val = 4294967295 self~assertSame(val, tester~TestObjectToUintptr(val)) self~assertSame(val, tester~TestObjectToUintptrAlt(val)) @@ -2394,7 +2394,7 @@ ::method 'testObjectToUintptr02' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToUintptr(4294967296) else tester~TestObjectToUintptr(18446744073709551616) @@ -2402,7 +2402,7 @@ ::method 'testObjectToUintptr02a' tester = .METHODtester~new self~expectSyntax('88.900') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then tester~TestObjectToUintptrAlt(4294967296) else tester~TestObjectToUintptrAlt(18446744073709551616) Modified: test/trunk/ooRexx/base/bif/ABS.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/ABS.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/ABS.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -165,10 +165,7 @@ ::method "test_29" self~expectSyntax(93.943) - if digits() == 9 then - x = ABS(1E1234567890) - else - x = ABS(1E1234567899999999990) + x = ABS(1E1234567890) ::method "test_30" self~expectSyntax(93.943) Modified: test/trunk/ooRexx/base/bif/DATATYPE.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/DATATYPE.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/DATATYPE.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -166,7 +166,7 @@ self~doDts(' c2 0D ab ', '000000000C') self~doDts(' c2 0D ab ', '000000000C') - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do self~doDts('123456789', '100011011N') self~doDts('1234567890', '100011001N') self~doDts('12345678901', '100011001N') @@ -397,7 +397,7 @@ self~assertTrue(DATATYPE('-1' ,'9')) self~assertTrue(DATATYPE('12345' ,'9')) -- ? self~assertTrue(DATATYPE('1E3' ,'9')) -- ? - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertFalse(DATATYPE('1E9' ,'9')) -- ? else self~assertFalse(DATATYPE('1E18' ,'9')) -- ? Modified: test/trunk/ooRexx/base/bif/DELSTR.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/DELSTR.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/DELSTR.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -116,7 +116,7 @@ ::method 'test16' self~expectSyntax(40.12) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then r = delStr('hasdghj',1E10) else r = delStr('hasdghj',1E19) Modified: test/trunk/ooRexx/base/bif/DELWORD.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/DELWORD.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/DELWORD.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -66,13 +66,13 @@ r = delWord('delWord1 delWord2',2.000000009,2.000000009) ::method 'test04' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord2', delWord('delWord1 delWord2',1.000000004,1.000000004)) else self~assertSame('delWord2', delWord('delWord1 delWord2',1.000000000000000004,1.000000000000000004)) ::method 'test05' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord1 ', delWord('delWord1 delWord2',2.000000004,2.000000004)) else self~assertSame('delWord1 ', delWord('delWord1 delWord2',2.000000000000000004,2.000000000000000004)) Modified: test/trunk/ooRexx/base/bif/DIGITS.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/DIGITS.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/DIGITS.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -148,7 +148,7 @@ ::method 'test18' self~expectSyntax(33.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then numeric fuzz 10 else numeric fuzz 19 Modified: test/trunk/ooRexx/base/bif/INSERT.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/INSERT.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/INSERT.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -174,7 +174,7 @@ ::method 'test034' self~expectSyntax(40.12) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = insert('A','hasdghj',1E10) else xre = insert('A','hasdghj',1E19) Modified: test/trunk/ooRexx/base/bif/LENGTH.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/LENGTH.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/LENGTH.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -121,7 +121,7 @@ self~assertSame('2', length(17+4)) ::method 'test019' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('14', length(+10000000000000000000000000000000000)) else self~assertSame('23', length(+10000000000000000000000000000000000)) Modified: test/trunk/ooRexx/base/bif/SIGN.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/SIGN.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/SIGN.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -98,35 +98,35 @@ ::method 'test015' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign('999999999e999999999') else xre = sign('999999999e999999999999999999') ::method 'test016' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign('-1.0e-999999999') else xre = sign('-1.0e-999999999999999999') ::method 'test017' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign('0.1e-999999999') else xre = sign('0.1e-999999999999999999') ::method 'test018' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign('0.1e-9999999999') else xre = sign('0.1e-9999999999999999999') ::method 'test019' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign('0.1e9999999999') else xre = sign('0.1e9999999999999999999') @@ -136,14 +136,14 @@ ::method 'test021' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign(999e999999999) else xre = sign(999e999999999999999999) ::method 'test022' self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = sign(-0.1e-999999999) else xre = sign(-0.1e-999999999999999999) Modified: test/trunk/ooRexx/base/bif/SPACE.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/SPACE.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/SPACE.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -77,25 +77,25 @@ xre = space('space1 space2',2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('space1 space2', space('space1 space2',1.000000000000000004)) else self~assertSame('space1 space2', space('space1 space2',1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('space1 space2', space('space1 space2',2.000000000000000004)) else self~assertSame('space1 space2', space('space1 space2',2.000000000000000004)) ::method 'test006' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('space1 space2', space('space1 space2',1.000000000000000004,' ')) else self~assertSame('space1 space2', space('space1 space2',1.000000000000000004,' ')) ::method 'test007' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('space1 space2', space('space1 space2',2.000000000000000004,'20'x)) else self~assertSame('space1 space2', space('space1 space2',2.000000000000000004,'20'x)) Modified: test/trunk/ooRexx/base/bif/SUBSTR.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/SUBSTR.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/SUBSTR.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -120,7 +120,7 @@ ::method 'test018' self~expectSyntax(40.12) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = subStr('hasdghj',1E10) else xre = subStr('hasdghj',1E19) Modified: test/trunk/ooRexx/base/bif/SUBWORD.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/SUBWORD.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/SUBWORD.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -75,13 +75,13 @@ xre = subWord('SUBWORD1 SUBWORD2',2.000000009) ::method 'test003' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1 SUBWORD2', subWord('SUBWORD1 SUBWORD2',1.000000000000000004)) else self~assertSame('SUBWORD1 SUBWORD2', subWord('SUBWORD1 SUBWORD2',1.000000000000000004)) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', subWord('SUBWORD1 SUBWORD2',2.000000000000000004)) else self~assertSame('SUBWORD2', subWord('SUBWORD1 SUBWORD2',2.000000000000000004)) @@ -332,13 +332,13 @@ xre = subWord('SUBWORD1 SUBWORD2',2.000000009,2.000000009) ::method 'test077' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1', subWord('SUBWORD1 SUBWORD2',1.000000000000000004,1.000000000000000004)) else self~assertSame('SUBWORD1', subWord('SUBWORD1 SUBWORD2',1.000000000000000004,1.000000000000000004)) ::method 'test078' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', subWord('SUBWORD1 SUBWORD2',2.000000000000000004,2.0000000000000000004)) else self~assertSame('SUBWORD2', subWord('SUBWORD1 SUBWORD2',2.000000000000000004,2.0000000000000000004)) Modified: test/trunk/ooRexx/base/bif/VERIFY.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/VERIFY.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/VERIFY.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -133,7 +133,7 @@ self~assertSame('0', verify('j',"ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251)) ::method 'test024' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('0', verify('j',"ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000001)) else self~assertSame('0', verify('j',"ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000000000000001)) Modified: test/trunk/ooRexx/base/bif/WORD.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/WORD.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/WORD.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -80,13 +80,13 @@ xre = word('WORD1 WORD2',2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD1', word('WORD1 WORD2',1.000000004)) else self~assertSame('WORD1', word('WORD1 WORD2',1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD2', word('WORD1 WORD2',2.000000004)) else self~assertSame('WORD2', word('WORD1 WORD2',2.000000000000000004)) Modified: test/trunk/ooRexx/base/bif/WORDINDEX.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/WORDINDEX.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/WORDINDEX.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -80,13 +80,13 @@ xre = wordIndex('WORD1 WORD2',2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('1', wordIndex('WORD1 WORD2',1.000000004)) else self~assertSame('1', wordIndex('WORD1 WORD2',1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('7', wordIndex('WORD1 WORD2',2.000000000000000004)) else self~assertSame('7', wordIndex('WORD1 WORD2',2.000000000000000004)) Modified: test/trunk/ooRexx/base/bif/WORDLENGTH.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/WORDLENGTH.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/bif/WORDLENGTH.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -81,13 +81,13 @@ xre = wordLength('WORD1 WORD2',2.000000009) ::method 'test0004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', wordLength('WORD1 WORD2',1.000000004)) else self~assertSame('5', wordLength('WORD1 WORD2',1.000000000000000004)) ::method 'test0005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', wordLength('WORD1 WORD2',2.000000004)) else self~assertSame('5', wordLength('WORD1 WORD2',2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/MutableBuffer/delword.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/delword.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/delword.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -65,13 +65,13 @@ r = .mutablebuffer~new('delWord1 delWord2')~delword(2.000000009,2.000000009) ::method 'test04' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord2', .mutablebuffer~new('delWord1 delWord2')~delword(1.000000004,1.000000004)~string) else self~assertSame('delWord2', .mutablebuffer~new('delWord1 delWord2')~delword(1.000000000000000004,1.000000000000000004)~string) ::method 'test05' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord1 ', .mutablebuffer~new('delWord1 delWord2')~delword(2.000000004,2.000000004)~string) else self~assertSame('delWord1 ', .mutablebuffer~new('delWord1 delWord2')~delword(2.000000000000000004,2.000000000000000004)~string) Modified: test/trunk/ooRexx/base/class/MutableBuffer/insert.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/insert.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/insert.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -200,7 +200,7 @@ ::method 'test034' mb = .mutablebuffer~new('hasdghj') self~expectSyntax(93.906) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = mb~insert('A',1E10) else xre = mb~insert('A',1E19) Modified: test/trunk/ooRexx/base/class/MutableBuffer/subWord.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/subWord.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/subWord.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -74,13 +74,13 @@ xre = .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000009) ::method 'test003' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1 SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(1.000000004)) else self~assertSame('SUBWORD1 SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(1.000000000000000004)) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000004)) else self~assertSame('SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000000000000004)) @@ -312,13 +312,13 @@ xre = .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000009,2.000000009) ::method 'test077' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(1.000000004,1.000000004)) else self~assertSame('SUBWORD1', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(1.000000000000000004,1.000000000000000004)) ::method 'test078' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000004,2.000000004)) else self~assertSame('SUBWORD2', .mutablebuffer~new('SUBWORD1 SUBWORD2')~subword(2.000000000000000004,2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/MutableBuffer/substr.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/substr.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/substr.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -161,7 +161,7 @@ ::method 'test018' self~expectSyntax(93.924) mb = .mutablebuffer~new('hasdghj') - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = mb~substr(1E10) else xre = mb~substr(1E19) Modified: test/trunk/ooRexx/base/class/MutableBuffer/verify.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/verify.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/verify.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -132,7 +132,7 @@ self~assertSame('0', .mutablebuffer~new('j')~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251)) ::method 'test024' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('0', .mutablebuffer~new('j')~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000001)) else self~assertSame('0', .mutablebuffer~new('j')~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000000000000001)) Modified: test/trunk/ooRexx/base/class/MutableBuffer/word.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/word.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/word.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = .mutablebuffer~new('WORD1 WORD2')~word(2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD1', .mutablebuffer~new('WORD1 WORD2')~word(1.000000004)) else self~assertSame('WORD1', .mutablebuffer~new('WORD1 WORD2')~word(1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD2', .mutablebuffer~new('WORD1 WORD2')~word(2.000000004)) else self~assertSame('WORD2', .mutablebuffer~new('WORD1 WORD2')~word(2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/MutableBuffer/wordindex.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/wordindex.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/wordindex.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = .mutablebuffer~new('WORD1 WORD2')~wordindex(2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('1', .mutablebuffer~new('WORD1 WORD2')~wordindex(1.000000004)) else self~assertSame('1', .mutablebuffer~new('WORD1 WORD2')~wordindex(1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('7', .mutablebuffer~new('WORD1 WORD2')~wordindex(2.000000004)) else self~assertSame('7', .mutablebuffer~new('WORD1 WORD2')~wordindex(2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/MutableBuffer/wordlength.testGroup =================================================================== --- test/trunk/ooRexx/base/class/MutableBuffer/wordlength.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/MutableBuffer/wordlength.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = .mutablebuffer~new('WORD1 WORD2')~wordLength(2.000000009) ::method 'test0004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', .mutablebuffer~new('WORD1 WORD2')~wordLength(1.000000004)) else self~assertSame('5', .mutablebuffer~new('WORD1 WORD2')~wordLength(1.0000000000000000004)) ::method 'test0005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', .mutablebuffer~new('WORD1 WORD2')~wordLength(2.000000004)) else self~assertSame('5', .mutablebuffer~new('WORD1 WORD2')~wordLength(2.0000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/abs.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/abs.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/abs.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -161,10 +161,7 @@ ::method "test_29" self~expectSyntax(93.943) - if digits() == 9 then - x = 1E1234567890~abs - else - x = 1E1234567899999999990~abs + x = 1E1234567890~abs ::method "test_30" self~expectSyntax(93.943) Modified: test/trunk/ooRexx/base/class/String/datatype.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/datatype.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/datatype.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -165,7 +165,7 @@ self~doDts(' c2 0D ab ', '000000000C') self~doDts(' c2 0D ab ', '000000000C') - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do self~doDts('123456789', '100011011N') self~doDts('1234567890', '100011001N') self~doDts('12345678901', '100011001N') @@ -396,7 +396,7 @@ self~assertTrue('-1' ~datatype('9')) self~assertTrue('12345' ~datatype('9')) -- ? self~assertTrue('1E3' ~datatype('9')) -- ? - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertFalse('1E9' ~datatype('9')) -- ? else self~assertFalse('1E18' ~datatype('9')) -- ? Modified: test/trunk/ooRexx/base/class/String/delstr.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/delstr.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/delstr.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -115,7 +115,7 @@ ::method 'test16' self~expectSyntax(93.924) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then r = 'hasdghj'~delstr(1E10) else r = 'hasdghj'~delstr(1E19) Modified: test/trunk/ooRexx/base/class/String/delword.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/delword.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/delword.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -65,13 +65,13 @@ r = 'delWord1 delWord2'~delword(2.000000009,2.000000009) ::method 'test04' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord2', 'delWord1 delWord2'~delword(1.000000004,1.000000004)) else self~assertSame('delWord2', 'delWord1 delWord2'~delword(1.000000000000000004,1.000000000000000004)) ::method 'test05' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('delWord1 ', 'delWord1 delWord2'~delword(2.000000004,2.000000004)) else self~assertSame('delWord1 ', 'delWord1 delWord2'~delword(2.000000000000000004,2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/insert.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/insert.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/insert.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -167,7 +167,7 @@ ::method 'test034' self~expectSyntax(93.923) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = 'hasdghj'~insert('A',1E10) else xre = 'hasdghj'~insert('A',1E19) Modified: test/trunk/ooRexx/base/class/String/sign.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/sign.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/sign.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -97,35 +97,35 @@ ::method 'test015' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '999999999e999999999'~sign() else xre = '999999999e999999999999999999'~sign() ::method 'test016' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '-1.0e-999999999'~sign() else xre = '-1.0e-999999999999999999'~sign() ::method 'test017' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '0.1e-999999999'~sign() else xre = '0.1e-999999999999999999'~sign() ::method 'test018' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '0.1e-9999999999'~sign() else xre = '0.1e-9999999999999999999'~sign() ::method 'test019' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '0.1e9999999999'~sign() else xre = '0.1e9999999999999999999'~sign() @@ -135,14 +135,14 @@ ::method 'test021' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = 999e999999999~sign() else xre = 999e999999999999999999~sign() ::method 'test022' self~expectSyntax(93.943) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = -0.1e-999999999~sign() else xre = -0.1e-999999999999999999~sign() Modified: test/trunk/ooRexx/base/class/String/substr.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/substr.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/substr.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -119,7 +119,7 @@ ::method 'test018' self~expectSyntax(93.924) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = 'hasdghj'~subStr(1E10) else xre = 'hasdghj'~subStr(1E19) Modified: test/trunk/ooRexx/base/class/String/subword.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/subword.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/subword.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -74,13 +74,13 @@ xre = 'SUBWORD1 SUBWORD2'~subWord(2.000000009) ::method 'test003' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1 SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(1.000000004)) else self~assertSame('SUBWORD1 SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(1.000000000000000004)) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(2.000000004)) else self~assertSame('SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(2.000000000000000004)) @@ -331,13 +331,13 @@ xre = 'SUBWORD1 SUBWORD2'~subWord(2.000000009,2.000000009) ::method 'test077' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD1', 'SUBWORD1 SUBWORD2'~subWord(1.000000004,1.000000004)) else self~assertSame('SUBWORD1', 'SUBWORD1 SUBWORD2'~subWord(1.000000000000000004,1.000000000000000004)) ::method 'test078' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(2.000000004,2.000000004)) else self~assertSame('SUBWORD2', 'SUBWORD1 SUBWORD2'~subWord(2.000000000000000004,2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/verify.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/verify.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/verify.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -132,7 +132,7 @@ self~assertSame('0', 'j'~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251)) ::method 'test024' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('0', 'j'~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000001)) else self~assertSame('0', 'j'~verify("ABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghijABCDEfghij",,251.00000000000000001)) Modified: test/trunk/ooRexx/base/class/String/word.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/word.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/word.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = 'WORD1 WORD2'~word(2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD1', 'WORD1 WORD2'~word(1.000000004)) else self~assertSame('WORD1', 'WORD1 WORD2'~word(1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('WORD2', 'WORD1 WORD2'~word(2.000000004)) else self~assertSame('WORD2', 'WORD1 WORD2'~word(2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/wordindex.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/wordindex.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/wordindex.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = 'WORD1 WORD2'~wordIndex(2.000000009) ::method 'test004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('1', 'WORD1 WORD2'~wordIndex(1.000000004)) else self~assertSame('1', 'WORD1 WORD2'~wordIndex(1.000000000000000004)) ::method 'test005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('7', 'WORD1 WORD2'~wordIndex(2.000000004)) else self~assertSame('7', 'WORD1 WORD2'~wordIndex(2.000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/wordlength.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/wordlength.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/wordlength.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -79,13 +79,13 @@ xre = 'WORD1 WORD2'~wordLength(2.000000009) ::method 'test0004' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', 'WORD1 WORD2'~wordLength(1.000000004)) else self~assertSame('5', 'WORD1 WORD2'~wordLength(1.0000000000000000004)) ::method 'test0005' - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then self~assertSame('5', 'WORD1 WORD2'~wordLength(2.000000004)) else self~assertSame('5', 'WORD1 WORD2'~wordLength(2.0000000000000000004)) Modified: test/trunk/ooRexx/base/class/String/x2d.testGroup =================================================================== --- test/trunk/ooRexx/base/class/String/x2d.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/class/String/x2d.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -77,28 +77,28 @@ ::method 'test006' self~expectSyntax(93.935) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '1123456789'~x2d() else xre = '1123456789999999999'~x2d() ::method 'test007' self~expectSyntax(93.935) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '11 23 4567 89'~x2d() else xre = '11 23 4567 89 99 99 99 99'~x2d() ::method 'test008' self~expectSyntax(93.935) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '123456789'~x2d() else xre = '12345678999999999'~x2d() ::method 'test009' self~expectSyntax(93.935) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre = '1 23 4567 89'~x2d() else xre = '1 23 4567 89 99 99 99 99'~x2d() Modified: test/trunk/ooRexx/base/expressions/EXPONENT.testGroup =================================================================== --- test/trunk/ooRexx/base/expressions/EXPONENT.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/expressions/EXPONENT.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -408,14 +408,14 @@ ::method "test_77" self~expectSyntax(42.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then x = 9E999999999 ** 3 else x = 9E999999999999999999 ** 3 ::method "test_78" self~expectSyntax(42.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then x = 9E999999999 ** 999999999 else x = 9E999999999999999999 ** 999999999 @@ -441,14 +441,14 @@ ::method "test_82" self~expectSyntax(42.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then x = 9E999999999 ** 999999999 else x = 9E999999999999999999 ** 999999999 ::method "test_83" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then op = 0.1E-999999999 else op = 0.1E-999999999999999999 @@ -459,14 +459,14 @@ ::method "test_85" self~expectSyntax(42.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then x = 1E-999999999 ** 3 else x = 1E-999999999999999999 ** 3 ::method "test_86" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then op = 0.1E-999999999 else op = 0.1E-999999999999999999 @@ -474,7 +474,7 @@ ::method "test_87" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then op = 0.1E-999999999 else op = 0.1E-999999999999999999 @@ -482,7 +482,7 @@ ::method "test_88" self~expectSyntax(26.8) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then x = 2 ** 9999999999 else x = 2 ** 9999999999999999999 Modified: test/trunk/ooRexx/base/expressions/PRECEDENCE.testGroup =================================================================== --- test/trunk/ooRexx/base/expressions/PRECEDENCE.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/expressions/PRECEDENCE.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -4236,7 +4236,7 @@ ::method "test_1321" self~expectSyntax(42.1) - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do minval=1e-999999999 maxval=1e+999999999 end Modified: test/trunk/ooRexx/base/expressions/SPECIAL.testGroup =================================================================== --- test/trunk/ooRexx/base/expressions/SPECIAL.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/expressions/SPECIAL.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -226,7 +226,7 @@ ::method "test_42" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre=0+9E9999999999+ft() else xre=0+9E9999999999999999999+ft() @@ -235,7 +235,7 @@ ::method "test_43" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then XX9999999999=9e9999999999; else XX9999999999=9e9999999999999999999; @@ -245,7 +245,7 @@ ::method "test_44" self~expectSyntax(41.1) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then xre=ft()+9E9999999999+0 else xre=ft()+9E9999999999999999999+0 @@ -260,7 +260,7 @@ ::method "test_46" self~expectSyntax(42.901) - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do a=9E999999999 xre=a+2E999999999/ft() end @@ -273,7 +273,7 @@ ::method "test_47" self~expectSyntax(42.901) - if digits() == 9 then do + if .ooRexxUnit.architecture == 32 then do a=9E999999999 xre=(a+2E999999999)/ft() end Modified: test/trunk/ooRexx/base/keyword/NUMERIC.testGroup =================================================================== --- test/trunk/ooRexx/base/keyword/NUMERIC.testGroup 2009-03-01 18:10:54 UTC (rev 4239) +++ test/trunk/ooRexx/base/keyword/NUMERIC.testGroup 2009-03-01 19:07:18 UTC (rev 4240) @@ -225,7 +225,7 @@ ::method "test_31" self~expectSyntax(26.5) - if digits() == 9 then + if .ooRexxUnit.architecture == 32 then Numeric Digits 9999999999 else Numeric Digits 9999999999999999999 @@ -348,7 +348,7 @@ ::method "test_50" self~expectSyntax(26.6) - use32 = digits() == 9 + use32 = .ooRexxUnit.architecture == 32 Numeric Digits 1000 if use32 then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2009-04-25 15:42:59
|
Revision: 4502 http://oorexx.svn.sourceforge.net/oorexx/?rev=4502&view=rev Author: bigrixx Date: 2009-04-25 15:42:58 +0000 (Sat, 25 Apr 2009) Log Message: ----------- [ oorexx-Bugs-2781186 ] RexxPackageUnloader not run Modified Paths: -------------- test/trunk/external/API/orxinvocation.cpp test/trunk/ooRexx/base/keyword/PARSE.testGroup Modified: test/trunk/external/API/orxinvocation.cpp =================================================================== --- test/trunk/external/API/orxinvocation.cpp 2009-04-25 15:42:06 UTC (rev 4501) +++ test/trunk/external/API/orxinvocation.cpp 2009-04-25 15:42:58 UTC (rev 4502) @@ -460,7 +460,27 @@ } } +/** + * The package loader and unloader don't really have anything + * sensible that they can test at this point, but having these + * defined is useful for the purposes of being able to + * verify that they are called. + * + * @param context The ThreadContext that allows us to do "stuff". + * + * @return void + */ +void RexxEntry packageLoader(RexxThreadContext *context) +{ + return; +} +void RexxEntry packageUnloader(RexxThreadContext *context) +{ + return; +} + + RexxMethodEntry orxtest_methods[] = { REXX_METHOD(init, init), REXX_METHOD(setExitType, setExitType), @@ -509,8 +529,8 @@ REXX_INTERPRETER_4_0_0, // anything after 4.0.0 will work "InvocationTest", // name of the package "1.0.0", // package information - NULL, // no load/unload functions - NULL, + packageLoader, // no load/unload functions + packageUnloader, NULL, // the exported routines orxtest_methods // the exported methods }; Modified: test/trunk/ooRexx/base/keyword/PARSE.testGroup =================================================================== --- test/trunk/ooRexx/base/keyword/PARSE.testGroup 2009-04-25 15:42:06 UTC (rev 4501) +++ test/trunk/ooRexx/base/keyword/PARSE.testGroup 2009-04-25 15:42:58 UTC (rev 4502) @@ -336,11 +336,11 @@ ------------------------------ -- create rexx-file containing PARSE LINEIN, will set RC=17 if successful s=.stream~new(fileName)~~open("replace") -- create empty file - s~~lineout("/*" date("S") time() ", ---rgf */")~~lineout + s~~lineout("/*" date("S") time() ", ---rgf */")~~lineout("") s~~lineout("parse linein 'a=' num1 'c=' num2 /* Assume: 8 and 9 */") s~~lineout("sum=num1+num2 /* Enter: a=8 b=9 as input */") - s~~lineout("exit sum -- set RC to '17'") ~~lineout + s~~lineout("exit sum -- set RC to '17'") ~~lineout("") s~close ------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2009-05-08 03:18:53
|
Revision: 4619 http://oorexx.svn.sourceforge.net/oorexx/?rev=4619&view=rev Author: miesfeld Date: 2009-05-08 03:18:51 +0000 (Fri, 08 May 2009) Log Message: ----------- ooTest - Fix 2788722 ooRexxUnit isInPath() not case sensitive Reported by U. Zinngrebe. Thanks. Modified Paths: -------------- test/trunk/framework/OOREXXUNIT.CLS test/trunk/testOORexx.rex Modified: test/trunk/framework/OOREXXUNIT.CLS =================================================================== --- test/trunk/framework/OOREXXUNIT.CLS 2009-05-08 00:48:08 UTC (rev 4618) +++ test/trunk/framework/OOREXXUNIT.CLS 2009-05-08 03:18:51 UTC (rev 4619) @@ -417,9 +417,16 @@ sl = .ooRexxUnit.directory.separator sep = .ooRexxUnit.path.separator - if path~caseLessPos(dir || sep) <> 0 then return .true - if path~caseLessPos(dir || sl || pathSep) <> 0 then return .true - if path~right(dir~length)~caselessCompare(dir) == 0 then return .true + if .ooRexxUnit.OSName == "WINDOWS" then do + if path~caseLessPos(dir || sep) <> 0 then return .true + if path~caseLessPos(dir || sl || pathSep) <> 0 then return .true + if path~right(dir~length)~caselessCompare(dir) == 0 then return .true + end + else do + if path~pos(dir || sep) <> 0 then return .true + if path~pos(dir || sl || pathSep) <> 0 then return .true + if path~right(dir~length)~compare(dir) == 0 then return .true + end return .false --End isInPath() Modified: test/trunk/testOORexx.rex =================================================================== --- test/trunk/testOORexx.rex 2009-05-08 00:48:08 UTC (rev 4618) +++ test/trunk/testOORexx.rex 2009-05-08 03:18:51 UTC (rev 4619) @@ -86,7 +86,14 @@ ::routine isInPath use arg path, dir, sl, sep - if path~caseLessPos(dir || sep) <> 0 then return .true - if path~caseLessPos(dir || sl || pathSep) <> 0 then return .true - if path~right(dir~length)~caselessCompare(dir) == 0 then return .true + if .ooRexxUnit.OSName == "WINDOWS" then do + if path~caseLessPos(dir || sep) <> 0 then return .true + if path~caseLessPos(dir || sl || pathSep) <> 0 then return .true + if path~right(dir~length)~caselessCompare(dir) == 0 then return .true + end + else do + if path~pos(dir || sep) <> 0 then return .true + if path~pos(dir || sl || pathSep) <> 0 then return .true + if path~right(dir~length)~compare(dir) == 0 then return .true + end return .false This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2009-05-13 16:52:12
|
Revision: 4658 http://oorexx.svn.sourceforge.net/oorexx/?rev=4658&view=rev Author: miesfeld Date: 2009-05-13 16:51:57 +0000 (Wed, 13 May 2009) Log Message: ----------- .Stream class tests Modified Paths: -------------- test/trunk/framework/FileUtils.cls test/trunk/ooRexx/base/bif/CHARIN.testGroup test/trunk/ooRexx/base/class/Stream.testGroup Modified: test/trunk/framework/FileUtils.cls =================================================================== --- test/trunk/framework/FileUtils.cls 2009-05-13 04:40:56 UTC (rev 4657) +++ test/trunk/framework/FileUtils.cls 2009-05-13 16:51:57 UTC (rev 4658) @@ -590,11 +590,12 @@ ::routine deleteFile public use strict arg fileName - -- On AIX (ksh), Linux (bash) and Windows the delete can be forced. Not sure on other - -- OSes + -- On AIX (ksh), Linux (bash) and Windows the delete can be forced. Not sure + -- on other OSes. Windows files need to be quoted, some test cases use file + -- names with spaces in them. TODO, need to check behavior on other OSes. select when .ooRexxUnit.OSName == "WINDOWS" then do - 'del /q /f' fileName '1>nul 2>&1' + 'del /q /f' .TestUtil~enQuote(fileName) '1>nul 2>&1' ret = RC end when .ooRexxUnit.OSName == "LINUX" then do Modified: test/trunk/ooRexx/base/bif/CHARIN.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/CHARIN.testGroup 2009-05-13 04:40:56 UTC (rev 4657) +++ test/trunk/ooRexx/base/bif/CHARIN.testGroup 2009-05-13 16:51:57 UTC (rev 4658) @@ -157,19 +157,27 @@ self~assertSame(0, chars(fileName)) --- Tests reading with a start position past the end of the file. +-- Tests reading with a start position past the end of the file. NOTREADY +-- condition should be raised. ::method test_charin_too_far fileName = createFile(.array~of('1234567890'), "delMe.test_charin_too_far") self~assertTrue(fileName \== "") self~charInTestingFile = fileName + r = "dog" + signal on notready + len = 10 + .endOfLine~length r = charin(fileName, 20, len) - self~assertSame("", r) + self~assertSame("cat", r, "Error notready not raised") + return +notready: + self~assertSame("dog", r, "Test case passes notready raised") + -- Tests using a negative number for start position. ::method test_charin_negative_start Modified: test/trunk/ooRexx/base/class/Stream.testGroup =================================================================== --- test/trunk/ooRexx/base/class/Stream.testGroup 2009-05-13 04:40:56 UTC (rev 4657) +++ test/trunk/ooRexx/base/class/Stream.testGroup 2009-05-13 16:51:57 UTC (rev 4658) @@ -1054,6 +1054,177 @@ self~assertSame("READY:", ret) +::method test_state_easy + + fileName = "delMe.testingFile" + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame("UNKNOWN", f~state) + + +::method test_state_exsitingFile + + src = .array~new(9) + do i = 1 to 9 + src[i] = 'My line' i + end + fileName = createFile(src, "delMe.testingFile") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame("UNKNOWN", f~state) + + ret = f~open + self~assertSame("READY:", ret) + + self~assertSame("READY", f~state) + + f~close + self~assertSame("UNKNOWN", f~state) + + +-- Test state equals error. +::method test_state_error + + fileName = "delMe.testingFile" + discard = stream(fileName, 'C', "open shared") + do i = 1 to 9 + discard = lineout(fileName, 'My line' i) + end + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + f~open("write replace") + self~assertSame("ERROR", f~state) + + +::method test_state_ready + + src = .array~new(9) + do i = 1 to 9 + src[i] = 'My line' i + end + fileName = createFile(src, "delMe.testingFile") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame("UNKNOWN", f~state) + + ret = f~open + self~assertSame("READY:", ret) + self~assertSame("READY", f~state) + + -- Reads 9 lines, state is still ready. Reads 10th line, state is now + -- notready, counter gets bumped to 10, do while check is now false. Assert + -- that counter is exactly 10. + + counter = 0 + do while f~state == "READY" + discard = f~linein + counter += 1 + end + self~assertSame(10, counter) + + +::method test_state_notready_1 + + src = .array~new(9) + do i = 1 to 9 + src[i] = 'My line' i + end + fileName = createFile(src, "delMe.testingFile") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame("UNKNOWN", f~state) + + ret = f~open + self~assertSame("READY:", ret) + self~assertSame("READY", f~state) + + discard = f~linein(11) + self~assertSame("NOTREADY", f~state) + + +::method test_state_notready_2 + + src = .array~new(9) + do i = 1 to 9 + src[i] = 'My line' i + end + lastByte = 9 * ('My line' i || .endOfFile)~length + + fileName = createFile(src, "delMe.testingFile") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame("UNKNOWN", f~state) + + ret = f~open + self~assertSame("READY:", ret) + self~assertSame("READY", f~state) + + discard = f~charin(lastByte + 1) + self~assertSame("NOTREADY", f~state) + + +-- Test string with no actual existing file. +::method test_string_1 + + fileName = "delMe.arrayOut_string_noFile" + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame(fileName, f~string) + + +-- Test string with an exsisting file. +::method test_string_2 + + src = .array~of(1, 2, 3, 4, 5) + fileName = createFile(src, "delMe.TestFile") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame(fileName, f~string) + + +-- Test string with an exsisting file. +::method test_string_3 + + src = .array~of(1, 2, 3, 4, 5) + fileName = createFile(src, "delMe.TestFile With Spaces") + self~assertTrue(fileName \== "") + + f = .stream~new(fileName) + self~assertTrue(f~isA(.stream)) + self~streamTestingFile = f + + self~assertSame(fileName, f~string) + + ::method test_stream_supplier_1 src = .array~new(13) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2009-05-15 16:22:34
|
Revision: 4680 http://oorexx.svn.sourceforge.net/oorexx/?rev=4680&view=rev Author: miesfeld Date: 2009-05-15 16:22:26 +0000 (Fri, 15 May 2009) Log Message: ----------- ooTest -Start to tidy some things up for the next snapshot release Modified Paths: -------------- test/trunk/ReadMe.first test/trunk/external/API/Makefile.aix test/trunk/external/API/Makefile.linux test/trunk/external/API/Makefile.windows test/trunk/worker.rex Added Paths: ----------- test/trunk/doc/ test/trunk/doc/Release.notes test/trunk/doc/ooTestQuick.pdf Removed Paths: ------------- test/trunk/misc/Release.notes Modified: test/trunk/ReadMe.first =================================================================== --- test/trunk/ReadMe.first 2009-05-15 04:31:09 UTC (rev 4679) +++ test/trunk/ReadMe.first 2009-05-15 16:22:26 UTC (rev 4680) @@ -1,17 +1,15 @@ - ooRexxUnit 4.0.0 snapshot 01 Quick Start + ooRexxUnit 4.0.0 snapshot 04 Quick Start ======================================== This is the read me file explaining how the ooTest framework is used by the ooRexx team to test ooRexx. -NOTE: This is mostly a place-holder file, it is just barely started. But, -the quick start notes below should allow one to quickly run the current -test suite. +The quick start notes below should allow one to quickly run the current test +suite. After installation, the doc subdirectory contains a quick start +tutorial in PDF format. This file: ooTestQuick.pdf provides additional +useful information and is a brief tutorial on how to write a test case. -The snapshot package includes a quick start tutorial in PDF format. This -file: ooTestQuick.pdf provides additional useful infomation. - NOTE: You need to match the ooRexxUnit version level with the version of the ooRexx interpreter you are running. To use the ooRexxUnit 4.0.0 test framework you must have the 4.0.0 version of the interpreter running. @@ -22,51 +20,65 @@ 1.) Simple command line, running the entire test suite at one time. -------------------------------------------------------------------- +NOTE: Starting with ooRexx 4.0.0, the test suite contains tests that require +external executables. These are tests to exercise the ooRexx native API. +Running these tests makes things slightly more complex. There are 3 options +here, simplest to hardest. + +1.) Skip the native API tests altogether. The best option if you are just +getting familiar with the test suite. + +2.) Download the pre-compiled external binaries for your system. Details on +picking and installing the proper set are in the Release.notes in the doc +directory. + +3.) If you understand, somewhat, compiling C / C++ files you can compile +your own binaries as part of running the automated test suite. Details for +this step have not been written, just post a question on the ooRexx +developers list. + Start in the root directory, the directory that contains this file. The Rexx program that runs the tests is: testOORexx.rex -That is the only file you need to use to begin with. The program file with -no arguments will run the entire ooRexx test suite. Depending on the horse -power in your system this could take 5 or 6 minutes, maybe longer on a real -old system. +That is the only file you need to use to begin with. We will assume that +you are using option 1 above, skipping the tests for the native API +binaries. The program file will run the ooRexx test suite. Depending on +the horse power in your system this could take 5 or 6 minutes, maybe longer +on a real old system. Once you invoke testOORexx everything runs automatically and you will see the results printed on the screen when the test finishes. +The argument: '-X native_api' in the following examples tells the framework +to eXclude the native API tests. + Windows ------- If you have done a normal install of the interpreter so that file associations are set up (done automatically by the installer) you can -simply use this command line: +simply use the following command line. -E:\ooRexxUnit.4.0.0>testOORexx +E:\ooRexxUnit.4.0.0>testOORexx -X native_api of course you can always use the full invocation the interpreter like this: -E:\ooRexxUnit.4.0.0>rexx testOORexx.rex +E:\ooRexxUnit.4.0.0>rexx testOORexx.rex -X native_api Linux ----- If you have a normal install of the interpreter with the executable in the path then use this command line: -# ./testOORexx.rex +# ./testOORexx.rex -X native_API -Look at the file: Expected.Results in the same directory as this file to see -the expected console output when executing the entire test suite. - AIX --- If you have a normal install of the interpreter with the executable in the path then use this command line: # ./setTestEnv.sh -# ./testOORexx.rex +# ./testOORexx.rex -X native_api -For the tests to complete you need the IBM XL C/C++ V9 (with PTF for IZ34314) -compiler installed. The XL C/C++ V8 copiler does show the same problem. -Unfortunatle there is no ARAR number available yet. - After Test Completion on Your OS -------------------------------- Look at the file: Expected.Results in the same directory as this file to see @@ -86,7 +98,7 @@ This command will print out some help: E:\ooRexxUnit.4.0.0>testOORexx.rex /? -testOORexx version 1.0.0 ooTest Framwork version 1.0.0_3.2.0 +testOORexx version 1.0.0 ooTest Framework version 1.0.0_3.2.0 usage: testOORexx [OPTIONS] Try 'testOORexx --help' for more information. @@ -128,26 +140,26 @@ E:\ooRexxUnit.4.0.0>testOORexx.rex -R ooRexx\base\expressions -f Addition Searching for test containers.. -Executing automated test suite.. +Executing automated test suite... ooTest Framework - Automated Test of the ooRexx Interpreter -Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 21 Aug 2008 -ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_3.2.0 +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 13 May 2009 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 -Tests ran: 200 -Assertions: 198 +Tests ran: 2839 +Assertions: 3576 Failures: 0 Errors: 0 Skipped files: 0 -File search: 00:00:00.020000 -Suite construction: 00:00:00.020000 -Test execution: 00:00:00.080000 -Total time: 00:00:01.022000 +File search: 00:00:00.297000 +Suite construction: 00:00:00.266000 +Test execution: 00:00:01.015000 +Total time: 00:00:02.281000 - E:\ooRexxUnit.4.0.0> @@ -163,7 +175,8 @@ Edit the file and start writing your test cases. PLEASE ask questions on one of the Rexx lists, as this Quick Start does not -go much further. +go much further. In addition, the ooTestQuick.pdf doc will walk you through +the process of creating test cases. You can learn a lot by examining some other test groups. @@ -181,8 +194,9 @@ ooTest Framework - Automated Test of the ooRexx Interpreter -Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 21 Aug 2008 -ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_3.2.0 +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 13 May 2009 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 Tests ran: 4 Assertions: 2 @@ -190,10 +204,9 @@ Errors: 0 Skipped files: 0 -File search: 00:00:00.130000 +File search: 00:00:00.406000 Suite construction: 00:00:00.000000 Test execution: 00:00:00.000000 -Total time: 00:00:01.012000 +Total time: 00:00:01.000000 - E:\ooRexxUnit.4.0.0> Copied: test/trunk/doc/Release.notes (from rev 4679, test/trunk/misc/Release.notes) =================================================================== --- test/trunk/doc/Release.notes (rev 0) +++ test/trunk/doc/Release.notes 2009-05-15 16:22:26 UTC (rev 4680) @@ -0,0 +1,110 @@ + ooTest Snapshot 04 + =================== + +ooTest is the framework used by the ooRexx project to test the interpreter +and auxiliary's packaged in the ooRexx distribution. ooTest sits on top of +the ooRexxUnit framework, which is an ooRexx implementation of junit, +originally designed and implemented by Prof. Rony G. Flatscher, and +released to the Rexx Language Association under the Common Public License +v1.0 as part of the ooRexx project. + +ooRexxUnit is a testing framework that can be used by anyone to test their +ooRexx programs. ooTest is designed specifically for use by ooRexx project +team to test the ooRexx interpreter. + +NOTE: The ooTest suite now contains some native API tests that require +external executables to run. + +Note that this release contains a quick start document, ooTestQuick.pdf, in +the doc subdirectory of the ooTest directory tree. This document contains +some tips to help get started in writing test cases. + +ooTest Snapshot 04 is a group of related packages released by the ooRexx +team that contains both the testing framework and the set of tests used in +testing the ooRexx interpreter. + +Each package comes in a zip, tar, and self-extracting zip (*.exe) file +format. The contained files themselves are completely platform independent. +Pick the format most convenient. + +This snapshot contains only the 4.0.0 package. As the name implies, it is a +snapshot of ooTest at this point in time. (May 16 2009 around a svn +revision level of 4685.) This snapshot contains all the currently available +test groups written to test the 4.0.0 interpreter. These test groups are +also an excellent source of techniques for using ooRexxUnit. + +As the ooRexx interpreter evolves, the ooTest and ooRexxUnit frameworks +evolve to take advantage of new features introduced in the interpreter. In +addition, there are test cases for testing features that are only present in +the 4.0.0 interpreter. For these reasons, the ooTest-4.0.0-snapshot04 +package is specific to ooRexx version 4.0.0. + +With the eminent release of ooRexx 4.0.0, it does not make sense to release +a 3.2.0 snapshot, the 3.2.0 branch has not changed (or has changed very +little) since the last snapshot. + +An ooRexxUnit 4.0.0 version of the framework is guaranteed to work with the +4.0.0 release of the interpreter. It may not run on a prior version of +ooRexx. A similar thing applies to the 3.2.0 version of ooRexxUnit. While +it may run under a 4.0.0 interpreter, it may not. People wishing only to +get the ooRexxUnit framework for their own testing should pick the +ooRexxUnit package designed for the interpreter version they are running / +planning to test on. + +The primary purpose of releasing this snapshot version of ooTest is to +encourage individuals and organizations to contribute test cases to test +ooRexx. + +Writing test groups to test the interpreter requires nothing other than an +installed ooRexx and this framework package. If an individual has limited +knowledge of ooRexx programming, then writing test cases will be a excellent +way to learn the language. + +It can not be stressed enough how valuable a contribution to the ooRexx +project test units are. + +Individuals wishing to contribute to ooRexx through writing test units can +get advice and help by joining the oorexx-devel list. The list is free and +open to anyone. Go to: + + https://sourceforge.net/mail/?group_id=119701 + +to join the list. + +In addition the RexxLA mailing list is also a good place to seek advice or +help in writing test units. If not already a member of RexxLA, more +information on the group can be found at: + + http://www.rexxla.org/ + +The test units included in this package serve as examples of using the +framework. + +Install +------- + +Unzip or untar the package in a convenient location. The root of the +package directory will be as follows, where the x.x.x is replaced by the +version number of the package used: + +ooRexxUnit.x.x.x + | + *------*framework + | | + | *-----<subdirectories> + | + *------*misc + | | + | *-----<subdirectories> + | + *------*ooRexx + | + *-----<subdirectories> + +The framework directory and subdirectories contain additional documentation +and examples. + +The ooRexx directory and subdirectories contain tests implemented using the +ooTest framework, a framework that sits on top of the ooRexxUnit framework. +This directory contains the tests used in testing the ooRexx interpreter. + Added: test/trunk/doc/ooTestQuick.pdf =================================================================== --- test/trunk/doc/ooTestQuick.pdf (rev 0) +++ test/trunk/doc/ooTestQuick.pdf 2009-05-15 16:22:26 UTC (rev 4680) @@ -0,0 +1,7242 @@ +%PDF-1.4 +1 0 obj +<< /S /GoTo /D (1.0) >> +endobj +4 0 obj +(Using the ooTest Framework to Write ooRexx Test Cases) +endobj +5 0 obj +<< /S /GoTo /D (2.0) >> +endobj +8 0 obj +(Table of Contents) +endobj +9 0 obj +<< /S /GoTo /D (3.0) >> +endobj +12 0 obj +(About This Book) +endobj +13 0 obj +<< /S /GoTo /D (3.1.1) >> +endobj +16 0 obj +(1. Related Information) +endobj +17 0 obj +<< /S /GoTo /D (3.2.1) >> +endobj +20 0 obj +(2. Getting Help) +endobj +21 0 obj +<< /S /GoTo /D (3.2.1.2) >> +endobj +24 0 obj +(2.1. The Rexx Language Association Mailing List) +endobj +25 0 obj +<< /S /GoTo /D (3.2.2.2) >> +endobj +28 0 obj +(2.2. The Open Object Rexx SourceForge Site) +endobj +29 0 obj +<< /S /GoTo /D (3.2.3.2) >> +endobj +32 0 obj +(2.3. comp.lang.rexx Newsgroup) +endobj +33 0 obj +<< /S /GoTo /D (4.0) >> +endobj +36 0 obj +(Chapter 1. First Steps) +endobj +37 0 obj +<< /S /GoTo /D (4.3.1) >> +endobj +40 0 obj +(1.1. ooRexxUnit Snapshots) +endobj +41 0 obj +<< /S /GoTo /D (4.4.1) >> +endobj +44 0 obj +(1.2. Download) +endobj +45 0 obj +<< /S /GoTo /D (4.5.1) >> +endobj +48 0 obj +(1.3. Extract the Files) +endobj +49 0 obj +<< /S /GoTo /D (4.6.1) >> +endobj +52 0 obj +(1.4. Test Your Install) +endobj +53 0 obj +<< /S /GoTo /D (4.7.1) >> +endobj +56 0 obj +(1.5. Understanding What you See) +endobj +57 0 obj +<< /S /GoTo /D (5.0) >> +endobj +60 0 obj +(Chapter 2. Starting to Write a Test Case) +endobj +61 0 obj +<< /S /GoTo /D (5.8.1) >> +endobj +64 0 obj +(2.1. A First Test Case) +endobj +65 0 obj +<< /S /GoTo /D (5.9.1) >> +endobj +68 0 obj +(2.2. Contributing to the ooRexx Project) +endobj +69 0 obj +<< /S /GoTo /D (6.0) >> +endobj +72 0 obj +(Chapter 3. Starting a Test Group from Scratch) +endobj +73 0 obj +<< /S /GoTo /D (6.10.1) >> +endobj +76 0 obj +(3.1. Starting a Test Group) +endobj +77 0 obj +<< /S /GoTo /D (6.11.1) >> +endobj +80 0 obj +(3.2. Editing STREAM.testGroup) +endobj +81 0 obj +<< /S /GoTo /D (6.12.1) >> +endobj +84 0 obj +(3.3. STREAM.testGroup Continued) +endobj +85 0 obj +<< /S /GoTo /D (6.13.1) >> +endobj +88 0 obj +(3.4. Finally, the Interesting Part) +endobj +89 0 obj +<< /S /GoTo /D (6.14.1) >> +endobj +92 0 obj +(3.5. The Core, Validating Results) +endobj +93 0 obj +<< /S /GoTo /D (6.15.1) >> +endobj +96 0 obj +(3.6. The Finale, Executing our Test) +endobj +97 0 obj +<< /S /GoTo /D (6.16.1) >> +endobj +100 0 obj +(3.7. One More Quick Test) +endobj +101 0 obj +<< /S /GoTo /D (7.0) >> +endobj +104 0 obj +(Chapter 4. Some Reference Documentation) +endobj +105 0 obj +<< /S /GoTo /D (7.17.1) >> +endobj +108 0 obj +(4.1. The assertXXX\(\) Methods) +endobj +109 0 obj +<< /S /GoTo /D (8.0) >> +endobj +112 0 obj +(Chapter 5. How to Become a Committer) +endobj +113 0 obj +<< /S /GoTo /D (9.0) >> +endobj +116 0 obj +(Chapter 6. Negative Tests) +endobj +117 0 obj +<< /S /GoTo /D (9.18.1) >> +endobj +120 0 obj +(6.1. Example One) +endobj +121 0 obj +<< /S /GoTo /D (9.19.1) >> +endobj +124 0 obj +(6.2. Example Two) +endobj +125 0 obj +<< /S /GoTo /D (10.0) >> +endobj +128 0 obj +(Appendix A. Notices) +endobj +129 0 obj +<< /S /GoTo /D (10.20.1) >> +endobj +132 0 obj +(A.1. Trademarks) +endobj +133 0 obj +<< /S /GoTo /D (10.21.1) >> +endobj +136 0 obj +(A.2. Source Code For This Document) +endobj +137 0 obj +<< /S /GoTo /D (11.0) >> +endobj +140 0 obj +(Appendix B. Common Public License Version 1.0) +endobj +141 0 obj +<< /S /GoTo /D (11.22.1) >> +endobj +144 0 obj +(B.1. Definitions) +endobj +145 0 obj +<< /S /GoTo /D (11.23.1) >> +endobj +148 0 obj +(B.2. Grant of Rights) +endobj +149 0 obj +<< /S /GoTo /D (11.24.1) >> +endobj +152 0 obj +(B.3. Requirements) +endobj +153 0 obj +<< /S /GoTo /D (11.25.1) >> +endobj +156 0 obj +(B.4. Commercial Distribution) +endobj +157 0 obj +<< /S /GoTo /D (11.26.1) >> +endobj +160 0 obj +(B.5. No Warranty) +endobj +161 0 obj +<< /S /GoTo /D (11.27.1) >> +endobj +164 0 obj +(B.6. Disclaimer of Liability) +endobj +165 0 obj +<< /S /GoTo /D (11.28.1) >> +endobj +168 0 obj +(B.7. General) +endobj +169 0 obj +<< /S /GoTo /D (12.0) >> +endobj +172 0 obj +(Index) +endobj +173 0 obj +<< /S /GoTo /D (12.29.1) >> +endobj +176 0 obj +(C) +endobj +177 0 obj +<< /S /GoTo /D (12.30.1) >> +endobj +180 0 obj +(L) +endobj +181 0 obj +<< /S /GoTo /D (12.31.1) >> +endobj +184 0 obj +(N) +endobj +185 0 obj +<< /S /GoTo /D (12.32.1) >> +endobj +188 0 obj +(O) +endobj +189 0 obj +<< /S /GoTo /D [190 0 R /Fit ] >> +endobj +193 0 obj << +/Length 411 +/Filter /FlateDecode +>> +stream +xڍRMO\xDC@\xBD\xE7W\xF8\x98H\xCC`{29\xB6\xE5CT\xA2\x90\xD2C\xD5C\xC4f\x97\x96\x88$\xDB\xF2\xF3q2\xC9j)P"\x8D\xED\xF1<?ۏ |
From: <mie...@us...> - 2009-05-19 03:15:53
|
Revision: 4706 http://oorexx.svn.sourceforge.net/oorexx/?rev=4706&view=rev Author: miesfeld Date: 2009-05-19 03:15:45 +0000 (Tue, 19 May 2009) Log Message: ----------- ooTest - Finish up the logic that allows for some test types to be skipped automatically, to only executed when specifically included by the tester. Modified Paths: -------------- test/trunk/ooTest.frm test/trunk/worker.rex Modified: test/trunk/ooTest.frm =================================================================== --- test/trunk/ooTest.frm 2009-05-19 03:06:42 UTC (rev 4705) +++ test/trunk/ooTest.frm 2009-05-19 03:15:45 UTC (rev 4706) @@ -257,7 +257,7 @@ /* class: ooTestTypes- - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ A class containing the constants for the test types supported by the ooTest - framework. + framework and methods to work with those constants.. \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ ::class 'ooTestTypes' public mixinclass Object @@ -296,10 +296,45 @@ ::method NATIVE_API_TEST class; return 10 ::method NATIVE_API_TEST; return 10 + -- A test type involving TCPIP, smtp, ftp, for example, where the test might + -- need some special set up. Like a ftp server, mail server, etc.. + ::method TCPIP_TEST class; return 11 + ::method TCPIP_TEST; return 11 - ::method MAX_TEST_TYPE class; return 10 - ::method MAX_TEST_TYPE; return 10 + ::method MAX_TEST_TYPE class; return 11 + ::method MAX_TEST_TYPE; return 11 + /** defaultTestSet() + * Returns the set of tests that are always run. Any test type in this set + * will execute unless the tester specifically eXcludes it. + * + * @param format Specifies the format of the returned set. Can be either + * Constant or String, the default is Constant. Constant + * returns a set containing the numeric constants of the + * default tests, String returns a set of the names of the + * default tests. Only the first letter is needed and case + * is not significant. + * + * @return A set of the tests that are always executed when the test suite is + * run. + */ + ::method defaultTestSet class + use strict arg format = 'C' + + tests = .set~of(self~DEFAULT_TEST, self~UNIT_LONG_TEST, self~SAMPLE_TEST, self~GUI_TEST, self~GUI_SAMPLE_TEST, - + self~OLE_TEST, self~DOC_EXAMPLE_TEST, self~NATIVE_API_TEST) + + select + when format~left(1)~upper == 'C' then return tests + when format~left(1)~upper == 'S' then return self~namesForTests(tests) + otherwise do + raise syntax 88.916 array ("1 'format'", "Constant or String", format) + end + end + + ::method defaultTestSet + forward class (self~class) + /** all() * Returns a set of all the test types possible. */ Modified: test/trunk/worker.rex =================================================================== --- test/trunk/worker.rex 2009-05-19 03:06:42 UTC (rev 4705) +++ test/trunk/worker.rex 2009-05-19 03:15:45 UTC (rev 4706) @@ -375,6 +375,10 @@ j = i select + when word == '-a' then do + optTable['testTypeIncludes'] = .ooTestTypes~all + end + when word == '-b' then do optTable['buildFirst'] = .true end @@ -494,7 +498,7 @@ use strict arg i, opt if i == tokenCount | self~isOptionToken(i + 1) then do - self~addErrorMsg("The" opt "option must be followed by at least 1 test type") + self~addErrorMsg("The" opt "option must be followed by at least 1 test type, or the word all.") return -1 end @@ -512,19 +516,29 @@ tmp = .set~new do t over types + if t~caselessCompare('all') == 0 then do + tmp = .ooTestTypes~all + leave + end + testType = .ooTestTypes~testForName(t) if testType == .nil then do self~addErrorMsg("The" opt "option must be followed by valid test types") self~addErrorMsg(" " t "is not a valid test type.") self~addErrorMsg(" Valid types are:" .ooTestTypes~allNames) + self~addErrorMsg(" In addition, the keyword 'all' can be used to indicate every test type.") return -1 end + tmp~put(testType) end - if opt == '-I' then optTable['testTypeIncludes'] = tmp - else optTable['testTypesExcludes'] = tmp + if opt == '-I' then index = 'testTypeIncludes' + else index = 'testTypesExcludes' + if optTable[index] == .nil then optTable[index] = tmp + else optTable[index] = optTable[index]~union(tmp) + return j ::method isOptionToken private @@ -584,9 +598,12 @@ self~setVerbosity(self~DEFAULT_VERBOSITY) self~root = self~TEST_ROOT || self~SL - self~testTypes = self~TEST_TYPES_DEFAULT self~ext = self~TEST_CONTAINER_EXT + -- Get the default set of test types to always execute, defined in the .ooTestTypes class. + -- The default format for the returned set is [C]onstant, i.e. the numeric test type values. + self~testTypes = .ooTestTypes~defaultTestSet + self~verboseTestCase = .false self~showProgress = .false self~noTicks = .false @@ -621,9 +638,8 @@ say " 2. testOORexx fileName" say " 3. testOORexx [OPTIONS]" say - say ' 1. With no options the entire automated test suite is executed. No' - say ' tests are exclued and the default verbosity and formatter are' - say ' used.' + say ' 1. With no options the automated test suite is executed using the default' + say ' set of test types, the default verbosity, and the default formatter.' say say ' 2. The single test group specified by "fileName" is executed.' say @@ -634,11 +650,13 @@ say say 'Valid options:' say ' Test selection:' + say ' -a --all-test-types Include all test types' say ' -b --build-first Build external binaries before running tests' say ' -B --force-build Force building (implies -b)' say ' -f --file=NAME Excute the single NAME test group' say ' -F --files=N1 N2 ... Execute the N1 N2 ... test groups' say ' -I, --test-types=T1 T2 .. Include test types T1 T2 ...' + say ' keyword "all" indicates all test types' say ' -n --no-tests No tests to execute (deliberately)' say ' -p --files-with-pattern=PA Execute test groups matching PA' say ' -R, --root=DIR DIR is root of search tree' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2009-06-18 00:05:20
|
Revision: 4807 http://oorexx.svn.sourceforge.net/oorexx/?rev=4807&view=rev Author: miesfeld Date: 2009-06-18 00:03:34 +0000 (Thu, 18 Jun 2009) Log Message: ----------- A little text editing for a snapshot Modified Paths: -------------- test/trunk/Expected.Results test/trunk/ReadMe.first test/trunk/doc/Release.notes Modified: test/trunk/Expected.Results =================================================================== --- test/trunk/Expected.Results 2009-06-17 16:07:14 UTC (rev 4806) +++ test/trunk/Expected.Results 2009-06-18 00:03:34 UTC (rev 4807) @@ -4,209 +4,42 @@ Note that this is intended only to give a feel for what the results might look like. On a Linux system results will be similar. -The 14 failures and 4 errors in this result are due to bugs in the interpreter -that will be fixed. +The 1 failure listed happened because stdout was redirected into a file to +capture the output. When run without redirection, the test case would pass. Please find bugs and report them. Ideally, open a bug report on SourceForge. -E:\ooRexxUnit.4.0.0>testOORexx.rex -Searching for test containers...... -Executing automated test suite.............................................. +C:\ooTest.4.0.0>testOORexx -X native_api +Searching for ................................. ........................................................................... -........................ +.......................................................... ooTest Framework - Automated Test of the ooRexx Interpreter -Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 23 Aug 2008 -ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_3.2.0 +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 16 Jun 2009 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 -Tests ran: 16660 -Assertions: 545595 -Failures: 14 -Errors: 4 -Skipped files: 0 +Tests ran: 18506 +Assertions: 574002 +Failures: 1 +Errors: 0 +Skipped files: 9 -[failure] [20080823 23:56:30.766000] - Test: TEST_1 - Class: CONDITION.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\CONDITION.testGroup - Line: 83 - Failed: assertSame - Expected: [[The NIL object], identityHash="267903090"] - Actual: [[], identityHash="266778531"] - -[failure] [20080823 23:56:35.344000] - Test: TEST_INVALIDOPT_HEX_4F - Class: shortTimeBIFTests - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 1305 +[failure] [20090617 16:44:17.375000] + svn: r4693 Change date: 2009-05-17 15:21:25 -0700 + Test: TEST_STDOUT_START + Class: CHAROUT.testGroup + File: C:\ooTest.4.0.0\ooRexx\base\bif\CHAROUT.testGroup + Line: 1388 Failed: expectSyntax - Expected: SYNTAX 40.904 + Expected: SYNTAX 93.958 Actual: Not raised -[failure] [20080823 23:56:35.516000] - Test: TEST_INVALIDOPT_HEX_6F - Class: shortTimeBIFTests - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 1305 - Failed: expectSyntax - Expected: SYNTAX 40.904 - Actual: Not raised +File search: 00:00:05.313000 +Suite construction: 00:00:02.234000 +Test execution: 00:02:59.594000 +Total time: 00:03:07.860000 -[failure] [20080823 23:56:42.594000] - Test: TEST_10 - Class: TIME.long.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 2046 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[0], identityHash="266486324"] - -[failure] [20080823 23:56:55.595000] - Test: TEST_11 - Class: TIME.long.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 2078 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[0], identityHash="266486324"] - -[failure] [20080823 23:57:22.596000] - Test: TEST_4 - Class: TIME.long.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 1884 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[0], identityHash="266486324"] - -[failure] [20080823 23:57:35.597000] - Test: TEST_5 - Class: TIME.long.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\bif\TIME.testGroup - Line: 1916 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[0], identityHash="266486324"] - -[failure] [20080823 23:58:27.818000] - Test: TEST_15 - Class: NUMERIC.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\keyword\NUMERIC.testGroup - Line: 141 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[12 2 ENGINEERING], identityHash="258778564"] - -[failure] [20080823 23:58:28.037000] - Test: TEST_638 - Class: PARSE.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\keyword\PARSE.testGroup - Line: 4447 - Failed: assertSame - Expected: [[], identityHash="267909968"] - Actual: [[2], identityHash="267903696"] - -[failure] [20080823 23:58:28.396000] - Test: TEST_PARSE_INSTRUCTION_EXAMPLES - Class: PARSE.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\keyword\PARSE.testGroup - Line: 294 - Failed: assertSame - Expected: [[80], identityHash="258503145"] - Actual: [[], identityHash="267909968"] - -[failure] [20080823 23:58:28.396000] - Test: TEST_PARSE_VARIABLE_PATTERNS - Class: PARSE.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\keyword\PARSE.testGroup - Line: 243 - Failed: assertSame - Expected: [[11], identityHash="267980053"] - Actual: [[], identityHash="267909968"] - -[failure] [20080823 23:58:53.304000] - Test: TEST_CURRENT_DIR_FILTER - Class: rxQueue.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\utilities\rxqueue\rxQueue.testGroup - Line: 86 - Failed: assertTrue - Expected: [1] - Actual: [[0], identityHash="267903086"] - -[failure] [20080823 23:58:53.398000] - Test: TEST_MULTI_LINES - Class: rxQueue.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\utilities\rxqueue\rxQueue.testGroup - Line: 111 - Failed: assertSame - Expected: [[5], identityHash="267944034"] - Actual: [[8], identityHash="267935594"] - -[failure] [20080823 23:58:53.507000] - Test: TEST_STDERR_TO_RXQUEUE - Class: rxQueue.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\utilities\rxqueue\rxQueue.testGroup - Line: 151 - Failed: assertSame - Expected: [[4], identityHash="267936233"] - Actual: [[13], identityHash="267980057"] - -[error] [20080823 23:58:08.599000] - Test: TEST_ADDS - Class: DateTime.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\class\DateTime.testGroup - Event: [SYNTAX 88.903] raised unexpectedly. - Argument offset must be a whole number; found "-25200000000" - Program: E:\work.ooRexx\3.x\main\Win32Dbg\CoreClasses.orx - Line: 256 - 256 *-* self~assertEquals(expected, a_dateTime~addYears(12)) - -[error] [20080823 23:58:08.599000] - Test: TEST_COMPARISON - Class: DateTime.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\class\DateTime.testGroup - Event: [SYNTAX 88.903] raised unexpectedly. - Argument offset must be a whole number; found "-25200000000" - Program: E:\work.ooRexx\3.x\main\Win32Dbg\CoreClasses.orx - Line: 466 - 466 *-* startTime = midnight~addHours(9.5) - -[error] [20080823 23:58:09.646000] - Test: TEST_FRACTIONALADDS - Class: DateTime.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\class\DateTime.testGroup - Event: [SYNTAX 88.903] raised unexpectedly. - Argument offset must be a whole number; found "-25200000000" - Program: E:\work.ooRexx\3.x\main\Win32Dbg\CoreClasses.orx - Line: 516 - 516 *-* self~assertEquals(expected, a_dateTime~addDays(.5)) - -[error] [20080823 23:58:09.646000] - Test: TEST_HASH - Class: DateTime.testGroup - File: E:\ooRexxUnit.4.0.0\ooRexx\base\class\DateTime.testGroup - Event: [SYNTAX 88.903] raised unexpectedly. - Argument offset must be a whole number; found "-25200000000" - Program: E:\work.ooRexx\3.x\main\Win32Dbg\CoreClasses.orx - Line: 245 - 245 *-* a_dateTime2 = a_dateTime1~addDays(1) - - -Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 23 Aug 2008 -ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_3.2.0 - -Tests ran: 16660 -Assertions: 545595 -Failures: 14 -Errors: 4 -Skipped files: 0 - -File search: 00:00:04.406000 -Suite construction: 00:00:02.219000 -Test execution: 00:02:26.523000 -Total time: 00:02:33.711000 - - -E:\ooRexxUnit.4.0.0> +C:\ooTest.4.0.0> Modified: test/trunk/ReadMe.first =================================================================== --- test/trunk/ReadMe.first 2009-06-17 16:07:14 UTC (rev 4806) +++ test/trunk/ReadMe.first 2009-06-18 00:03:34 UTC (rev 4807) @@ -82,7 +82,9 @@ After Test Completion on Your OS -------------------------------- Look at the file: Expected.Results in the same directory as this file to see -some typical console output when executing the entire test suite. +some typical console output when executing the entire test suite. This file +is only to give you an idea of the output. The output on your system could +be different. 2.) Running just a subset of the test suite. Modified: test/trunk/doc/Release.notes =================================================================== --- test/trunk/doc/Release.notes 2009-06-17 16:07:14 UTC (rev 4806) +++ test/trunk/doc/Release.notes 2009-06-18 00:03:34 UTC (rev 4807) @@ -13,8 +13,18 @@ team to test the ooRexx interpreter. NOTE: The ooTest suite now contains some native API tests that require -external executables to run. +external executables to run. This snapshot has some packages with the +external executables pre-built. Please pick the package appropriate for +your system and level of expertise. +ooTest-4.0.0-snapshot04_windows.zip * pre-built binaries, use on Windows +ooTest-4.0.0-snapshot04_linux.tgz * pre-built binaries, use on Linux + +ooTest-4.0.0-snapshot04.zip * source only, Windows file types. +ooTest-4.0.0-snapshot04.tgz * source only, Unix file types. + +The packages with the pre-built executables will be easiest to start with. + Note that this release contains a quick start document, ooTestQuick.pdf, in the doc subdirectory of the ooTest directory tree. This document contains some tips to help get started in writing test cases. @@ -23,13 +33,9 @@ team that contains both the testing framework and the set of tests used in testing the ooRexx interpreter. -Each package comes in a zip, tar, and self-extracting zip (*.exe) file -format. The contained files themselves are completely platform independent. -Pick the format most convenient. - This snapshot contains only the 4.0.0 package. As the name implies, it is a -snapshot of ooTest at this point in time. (May 16 2009 around a svn -revision level of 4685.) This snapshot contains all the currently available +snapshot of ooTest at this point in time. (June 17 2009 around a svn +revision level of 4810.) This snapshot contains all the currently available test groups written to test the 4.0.0 interpreter. These test groups are also an excellent source of techniques for using ooRexxUnit. @@ -87,7 +93,7 @@ package directory will be as follows, where the x.x.x is replaced by the version number of the package used: -ooRexxUnit.x.x.x +ooTest.x.x.x | *------*framework | | This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2009-06-18 20:10:11
|
Revision: 4817 http://oorexx.svn.sourceforge.net/oorexx/?rev=4817&view=rev Author: bigrixx Date: 2009-06-18 20:10:10 +0000 (Thu, 18 Jun 2009) Log Message: ----------- Some additional classic subcom handler tests Modified Paths: -------------- test/trunk/external/API/orxclassicexits.cpp test/trunk/external/API/orxexits.hpp test/trunk/external/API/orxinstance.cpp test/trunk/ooRexx/API/oo/INVOCATION.testGroup test/trunk/ooRexx/API/oo/ProcessInvocation.testGroup test/trunk/ooRexx/API/oo/ProcessRexxStart.testGroup test/trunk/ooRexx/API/oo/RexxStart.testGroup Modified: test/trunk/external/API/orxclassicexits.cpp =================================================================== --- test/trunk/external/API/orxclassicexits.cpp 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/external/API/orxclassicexits.cpp 2009-06-18 20:10:10 UTC (rev 4817) @@ -585,7 +585,7 @@ } } -void deregisterSubcomHandler() +void REXXENTRY deregisterSubcomHandler() { RexxDeregisterSubcom("TestSubcomHandler", NULL); } @@ -789,6 +789,8 @@ buildRegisteredExitList(instanceInfo, registeredExits); exits = registeredExits; } + + registerSubcomHandler(instanceInfo); MAKERXSTRING(returnValue, NULL, 0); int rc = RexxStart(instanceInfo->argCount, args, instanceInfo->programName, NULL, instanceInfo->initialAddress, RXCOMMAND, exits, &callRC, &returnValue); @@ -806,4 +808,5 @@ } } deregisterExits(); + deregisterSubcomHandler(); } Modified: test/trunk/external/API/orxexits.hpp =================================================================== --- test/trunk/external/API/orxexits.hpp 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/external/API/orxexits.hpp 2009-06-18 20:10:10 UTC (rev 4817) @@ -229,6 +229,7 @@ void REXXENTRY registerExeExits(void *data); void REXXENTRY registerDllExits(void *data); void REXXENTRY registerSubcomHandler(void *data); +void REXXENTRY deregisterSubcomHandler(); bool REXXENTRY buildRegisteredExitList(InstanceInfo *instanceInfo, RXSYSEXIT *exitList); RexxReturnCode REXXENTRY createInstance(InstanceInfo *instanceInfo, RexxInstance *&instance, RexxThreadContext *&threadContext); bool REXXENTRY buildContextExitList(InstanceInfo *instanceInfo, RexxContextExit *exitList); Modified: test/trunk/external/API/orxinstance.cpp =================================================================== --- test/trunk/external/API/orxinstance.cpp 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/external/API/orxinstance.cpp 2009-06-18 20:10:10 UTC (rev 4817) @@ -867,4 +867,5 @@ // make sure we terminate this first instance->Terminate(); deregisterExits(); + deregisterSubcomHandler(); } Modified: test/trunk/ooRexx/API/oo/INVOCATION.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/INVOCATION.testGroup 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/ooRexx/API/oo/INVOCATION.testGroup 2009-06-18 20:10:10 UTC (rev 4817) @@ -876,6 +876,14 @@ self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOM"))) self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOM"))) +::method TestClassicSubcomHandler + tester = .InvocationTester~new + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "FAILURE"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + ::method TestPathHandler tester = .InvocationTester~new tester~searchPath = self~resolveTestProgram('path') Modified: test/trunk/ooRexx/API/oo/ProcessInvocation.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/ProcessInvocation.testGroup 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/ooRexx/API/oo/ProcessInvocation.testGroup 2009-06-18 20:10:10 UTC (rev 4817) @@ -872,6 +872,14 @@ self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOM"))) self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOM"))) +::method TestClassicSubcomHandler + tester = .ProcessTester~new + self~assertEquals("SUCCESS 0", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "GOOD"))) + self~assertEquals("ERROR 1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "FAILURE"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + self~assertEquals("SUCCESS Hello World", tester~callInstanceProgram(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + ::method TestPathHandler tester = .ProcessTester~new tester~searchPath = self~resolveTestProgram('path') Modified: test/trunk/ooRexx/API/oo/ProcessRexxStart.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/ProcessRexxStart.testGroup 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/ooRexx/API/oo/ProcessRexxStart.testGroup 2009-06-18 20:10:10 UTC (rev 4817) @@ -99,6 +99,14 @@ tester~initialAddress = "TESTING" self~assertEquals("TESTING", tester~callRexxStart(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) +::method TestClassicSubcomHandler + tester = .ProcessTester~new + self~assertEquals("SUCCESS 0", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "GOOD"))) + self~assertEquals("ERROR 1", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "FAILURE"))) + self~assertEquals("SUCCESS Hello World", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + self~assertEquals("SUCCESS Hello World", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + ::method TestSyntaxError tester = .ProcessTester~new tester~callRexxStart(self~resolveTestProgram('tests/syntaxError.rex'), .array~new(0)) Modified: test/trunk/ooRexx/API/oo/RexxStart.testGroup =================================================================== --- test/trunk/ooRexx/API/oo/RexxStart.testGroup 2009-06-18 18:16:02 UTC (rev 4816) +++ test/trunk/ooRexx/API/oo/RexxStart.testGroup 2009-06-18 20:10:10 UTC (rev 4817) @@ -103,6 +103,14 @@ tester~initialAddress = "TESTING" self~assertEquals("TESTING", tester~callRexxStart(self~resolveTestProgram('tests/initialAddress.rex'), .array~new(0))) +::method TestClassicSubcomHandler + tester = .InvocationTester~new + self~assertEquals("SUCCESS 0", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "GOOD"))) + self~assertEquals("ERROR 1", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "ERROR"))) + self~assertEquals("FAILURE -1", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGood.rex'), .array~of("TESTSUBCOMHANDLER", "FAILURE"))) + self~assertEquals("SUCCESS Hello World", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerSetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + self~assertEquals("SUCCESS Hello World", tester~callRexxStart(self~resolveTestProgram('tests/commandHandlerGetvar.rex'), .array~of("TESTSUBCOMHANDLER"))) + ::method TestSyntaxError tester = .InvocationTester~new tester~callRexxStart(self~resolveTestProgram('tests/syntaxError.rex'), .array~new(0)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2009-06-22 01:14:20
|
Revision: 4824 http://oorexx.svn.sourceforge.net/oorexx/?rev=4824&view=rev Author: miesfeld Date: 2009-06-22 00:53:53 +0000 (Mon, 22 Jun 2009) Log Message: ----------- ooTest - This commit basically implements the remainder of the planned features and requested features for the test suite runner. * The use of a properties file to set options * The file list and pattern list options * The ability to run a single test case from a test group Plus some refactoring and claifying of how the options behave. Modified Paths: -------------- test/trunk/ooTest.frm test/trunk/worker.rex Modified: test/trunk/ooTest.frm =================================================================== --- test/trunk/ooTest.frm 2009-06-22 00:33:27 UTC (rev 4823) +++ test/trunk/ooTest.frm 2009-06-22 00:53:53 UTC (rev 4824) @@ -235,10 +235,9 @@ ::constant TEST_ROOT "ooRexx" ::constant TEST_CONTAINER_EXT ".testGroup" + ::constant DEFAULT_OPTIONS_FILE "options.ooTest" - -- .nil signals no restriction on test types. - ::method TEST_TYPES_DEFAULT class; return .nil - ::method TEST_TYPES_DEFAULT; return .nil + ::constant TESTOOREXX_REX_VERSION "1.1.0" ::constant SUCCESS_RC 0 ::constant TEST_SUCCESS_RC 0 @@ -264,7 +263,6 @@ ::constant MIN_TEST_TYPE 1 ::constant UNIT_TEST 1 - ::constant DEFAULT_TEST 1 ::constant UNIT_LONG_TEST 2 ::constant SAMPLE_TEST 3 @@ -290,6 +288,10 @@ ::constant MAX_TEST_TYPE 11 + -- The default test type is the unit test (see above for value.) + ::constant DEFAULT_TEST_TYPE 1 + + /** defaultTestSet() * Returns the set of tests that are always run. Any test type in this set * will execute unless the tester specifically eXcludes it. @@ -307,7 +309,7 @@ ::method defaultTestSet class use strict arg format = 'C' - tests = .set~of(self~DEFAULT_TEST, self~UNIT_LONG_TEST, self~SAMPLE_TEST, self~GUI_TEST, self~GUI_SAMPLE_TEST, - + tests = .set~of(self~UNIT_TEST, self~UNIT_LONG_TEST, self~SAMPLE_TEST, self~GUI_TEST, self~GUI_SAMPLE_TEST, - self~OLE_TEST, self~DOC_EXAMPLE_TEST, self~NATIVE_API_TEST) select @@ -340,7 +342,7 @@ ::method allNames class expose names - if names~default == .nil then self~populate + if names~UNIT == .nil then self~populate return self~namesString ::method allNames @@ -354,7 +356,7 @@ expose names use strict arg name - if names~DEFAULT == .nil then self~populate + if names~UNIT == .nil then self~populate return names~entry(name~upper) ::method testForName @@ -369,7 +371,7 @@ expose names use strict arg test - if names~DEFAULT == .nil then self~populate + if names~UNIT == .nil then self~populate return names~entry(test) /** namesForTests() @@ -384,7 +386,7 @@ if \ tests~isA(.Collection) then return .nil - if names~DEFAULT == .nil then self~populate + if names~UNIT == .nil then self~populate names__ = "" do t over tests @@ -467,7 +469,7 @@ self~defaultTestResultClass = .ooTestResult -- Set the type of test cases this class contains to the default. - self~ooTestType = .ooTestTypes~DEFAULT_TEST + self~ooTestType = .ooTestTypes~DEFAULT_TEST_TYPE -- End init( ) class @@ -741,6 +743,7 @@ say "Logs:"~left(20) stats~logs say + /* Over-ride the super-class printFailuerInfo(), even though almost exactly * the same, because the super-class is used to print TestCase objects and * here we are printing ooTestCase objects. ooTestCase objects have data not @@ -1554,7 +1557,118 @@ end return testSuite + -- End suiteForTestTypes() + /** suiteForTestCases + */ + ::method suiteForTestCases + expose tests testsWithSuite testCollections + use strict arg testCases, testTypes, testSuite = (.ooTestSuite~new) + + if \ isSubClassOf(testSuite~class, "ooTestSuite") then + raise syntax 88.917 array ("3 'testSuite'", "if used, must be a subclass of the ooTestSuite class. Found:" testSuite) + + if \ self~hasTests then return testSuite + + if \ testCases~isA(.set) then + raise syntax 88.914 array ("1 'testCases'", "Set") + + if \ (testTypes~isA(.set) | testTypes == .nil) then + raise syntax 88.916 array ("2 'testTypes'", ".nil, or a .Set", testTypes) + + if testTypes == .nil then do + do tClass over tests~allItems + suite = self~constructSuiteWithTestCases(tClass, testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + + do obj over testsWithSuite~allItems + suite = obj~getSuiteForTestCases(testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + + do obj over testCollections~allItems + suite = obj~getSuiteForTestCases(testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + end + else do + do t over testTypes + testClass = tests[t] + if testClass <> .nil then do + suite = self~constructSuiteWithTestCases(testClass, testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + + obj = testsWithSuite[t] + if obj <> .nil then do + suite = obj~getSuiteForTestCases(testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + + obj = testCollections[t] + if obj <> .nil then do + suite = obj~getSuiteForTestCases(testCases) + if suite == .nil then iterate + + suite~definedInFile = self~pathName + testSuite~addTest(suite) + end + end + end + + return testSuite + -- End suiteForTestCases() + + /** constructSuiteWithTestCases() + * + * Determines if the test case class has any of the test cases specified. If + * so, constructs a test suite object containing only those test cases + * specified. + * + * @param testCaseClass The test case class to look at. + * @param testCases A set of test case names. + * + * return A test suite object containing all of the matched test cases. If + * there are no matches, .nil is returned. + */ + ::method constructSuiteWithTestCases private + use strict arg testCaseClass, testCases + + founds = .array~new + + itr = testCaseClass~methods(testCaseClass) + do while itr~available + name = itr~index + if testCases~hasIndex(name) then founds~append(name) + itr~next + end + + if founds~items <> 0 then do + suite = .ooTestSuite~new + do t over founds + suite~addTest(testCaseClass~new(t)) + end + return suite + end + + return .nil + /** createMetaData() * * Creates a directory object with the metadata from the header of the test @@ -1600,7 +1714,31 @@ ::method getSuite expose testClass suiteClass -return suiteClass~new(testClass) + return suiteClass~new(testClass) + +::method getSuiteForTestCases + expose testClass suiteClass + use strict arg testCases + + founds = .array~new + + itr = testClass~methods(testClass) + do while itr~available + methodName = itr~index + if testCases~hasIndex(methodName) then founds~append(methodName) + itr~next + end + + if founds~items <> 0 then do + suite = suiteClass~new + do t over founds + suite~addTest(testClass~new(t)) + end + return suite + end + + return .nil + -- End of class: TestWithSuite @@ -1622,13 +1760,35 @@ ::method getSuite expose testClass names suiteClass - if suiteClass == .nil then suiteClass = .TestSuite + if suiteClass == .nil then suiteClass = .ooTestSuite suite = suiteClass~new do methodName over names suite~addTest(testClass~new(methodName)) end -return suite + return suite + +::method getSuiteForTestCases + expose testClass names suiteClass + use strict arg testCases + + founds = .array~new + do methodName over names + if testCases~hasIndex(methodName) then founds~append(methodName) + end + + if founds~items <> 0 then do + if suiteClass == .nil then suiteClass = .ooTestSuite + suite = suiteClass~new + + do t over founds + suite~addTest(testClass~new(t)) + end + return suite + end + + return .nil + -- End of class: TestWithSuiteAndNames @@ -1640,14 +1800,20 @@ \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ ::class 'ooTestFinder' public + ::constant ALL 1 + ::constant FILES 2 + ::constant PATTERN 3 + ::constant SINGLEFILE 4 + ::attribute testTypes private ::attribute root private ::attribute extension private ::attribute simpleFileSpec private - ::attribute isSimpleSearch private + ::attribute searchType private - ::attribute fileIncludes private - ::attribute fileExcludes private + ::attribute file private + ::attribute filePatterns private + ::attribute fileNames private ::attribute totalFound get ::attribute totalFound set private @@ -1658,7 +1824,7 @@ * @param root REQUIRED * The root of the directory tree to search for test containers. * @param extension REQUIRED - * The extension for test container files + * The extension for test container files, such as .testGroup * @param types OPTIONAL * The test types to search for. A value of nil indicates all tests and is * the default. @@ -1675,101 +1841,156 @@ self~testTypes = types self~totalFound = 0 - self~fileIncludes = .nil - self~fileExcludes = .nil - self~isSimpleSearch = .true + self~filePatterns = .nil + self~fileNames = .nil + self~file = .nil + self~searchType = self~ALL -- End init() - /** includeFiles() - * Add the named file or files to the include files array. The files are - * stored as regular expressions with the following conventions: + /** useFileName() + * Sets this test finder to locat a single file specified by fileName. * - * If the name ends in the extension specified in init(), and no directory - * slashes are in the name, then it will be considered the complete file name. - * The regular expression will be: any series of characters, the directory - * slash the specified name. + */ + ::method useFileName + use strict arg fileName + self~file = fileName + self~searchType = self~SINGLEFILE + + -- End useFileName() + + ::method useFiles + expose fileNames + use strict arg names + + if \ names~isA(.string), \ names~isA(.collection) then + raise syntax 88.916 array ("1 'names'", "a string or a collection" names) + + if fileNames == .nil then fileNames = .array~new + if names~isA(.string) then do + name = self~getCorrectFileName(names) + fileNames~append(name) + end + else do n over names + if \ n~isA(.string) then + raise syntax 88.900 array("The file name must be a string object; found" n) + + name = self~getCorrectFileName(n) + fileNames~append(name) + end + self~searchType = self~FILES + + -- End useFiles() + + ::method getCorrectFileName private + expose extension sl + use strict arg name + + p = name~lastPos(sl) + if p <> 0 then do + correctName = name~right(name~length - p) + if correctName == "" then + raise syntax 88.900 array('The file name "'name'" is improper') + end + + if correctName~right(extension~length) \== extenison then correctName = correctName || extension + + if correctName~countStr('.') > 1 then + raise syntax 88.900 array('The file name "'name'" is improper') + + return name + -- End getCorrectFileName() + + /** usePatterns() + * Add the file pattern or patterns to the file patterns array. The patterns + * are stored as regular expressions with the following conventions: * - * If there are no slashes and the name does not end in the extension the the - * name will be considered a segment of a file name. The regular expression - * will be any series of characters, the slash, any series of characters not a - * slash, the name, any series of characters not a slash, the extension. + * If the pattern ends in the extension specified in init(), and no directory + * slashes are in the pattern, then it will be considered a complete file + * name. The regular expression will be: any series of characters, the + * directory slash, the specified pattern. * - * The name ends in the slash, it will be considered a directory specification - * and all files in the directory will be matched. The regular expression - * will be any series of characters, the name, any series of characters not - * the slash, and the extension. + * If there are no slashes and the pattern does not end in the extension the + * pattern will be considered a segment of a file name. The regular + * expression will be any series of characters, the slash, any series of + * characters not a slash, the pattern, any series of characters not a slash, + * the extension. * - * Othewise, if it does contain a slash, the reqular expression will be any - * series of characters, and the name. + * If the pattern ends in the slash, it will be considered a directory speci- + * fication and all files in the directory will be matched. The regular ex- + * pression will be any series of characters, the pattern, any series of + * characters not the slash, and the extension. + * + * If the pattern does contain a slash, but does not end in a slash, the reqular + * expression will be any series of characters, and the pattern. */ - ::method includeFiles - expose fileIncludes - use strict arg files + ::method usePatterns + expose filePatterns + use strict arg patterns - if \ files~isA(.string), \ files~isA(.collection) then - raise syntax 88.916 array ("1 'files'", "a string or a collection" files) + if \ patterns~isA(.string), \ patterns~isA(.collection) then + raise syntax 88.916 array ("1 'patterns'", "a string or a collection" patterns) - if fileIncludes == .nil then fileIncludes = .array~new - if files~isA(.string) then do - regularExpression = self~buildRegEx(files) - fileIncludes~append(regularExpression) + if filePatterns == .nil then filePatterns = .array~new + if patterns~isA(.string) then do + regularExpression = self~buildRegEx(patterns) + filePatterns~append(regularExpression) end - else do file over files - if \ file~isA(.string) then - raise syntax 88.900 array("Only file names (string objects) are accepted; found" file) + else do pattern over patterns + say 'pattern:' pattern + if \ pattern~isA(.string) then + raise syntax 88.900 array("The file pattern must be a string object; found" pattern) - regularExpression = self~buildRegEx(file) - fileIncludes~append(regularExpression) + regularExpression = self~buildRegEx(pattern) + filePatterns~append(regularExpression) end - self~isSimpleSearch = .false + self~searchType = self~PATTERN + -- End usePatterns() ::method buildRegEx private expose extension sl - use strict arg fileName + use strict arg pattern - endsInSlash = (fileName~right(1) == sl) - hasExt = (fileName~right(extension~length)~upper == extension~upper) - hasSlash = (fileName~pos(sl) <> 0 ) + endsInSlash = (pattern~right(1) == sl) + hasExt = (pattern~right(extension~length)~upper == extension~upper) + hasSlash = (pattern~pos(sl) <> 0 ) notSlash = '[^' || sl || ']*' select when endsInSlash then do - reg = '?*' || fileName~upper || notSlash || '(' || extension~upper || ')' + reg = '?*' || pattern~upper || notSlash || '(' || extension~upper || ')' reg = self~maybeEscapeSlashes(reg) - return .RegularExpression~new(reg) end when hasExt, \ hasSlash then do - reg = '?*' || sl || fileName~upper + reg = '?*' || sl || pattern~upper reg = self~maybeEscapeSlashes(reg) - return .RegularExpression~new(reg) end when \ hasExt, \ hasSlash then do - reg = '?+' || sl || notSlash || '(' || fileName~upper || ')' || notSlash || '(' || extension~upper || ')' + reg = '?+' || sl || notSlash || '(' || pattern~upper || ')' || notSlash || '(' || extension~upper || ')' reg = self~maybeEscapeSlashes(reg) - return .RegularExpression~new(reg) end when hasExt, hasSlash then do - reg = '?*' || fileName~upper + reg = '?*' || pattern~upper reg = self~maybeEscapeSlashes(reg) - return .RegularExpression~new(reg) end otherwise do -- \ hasExt, hasSlash - p = fileName~lastPos(sl) - parse var fileName lead =(p + 1) segment + p = pattern~lastPos(sl) + parse var pattern lead =(p + 1) segment reg = '?*' || lead~upper || notSlash || '(' || segment~upper || ')' || notSlash || '(' || extension~upper || ')' reg = self~maybeEscapeSlashes(reg) - return .RegularExpression~new(reg) end end -- End select + say 're:' reg + return .RegularExpression~new(reg) + ::method maybeEscapeSlashes private use strict arg exp @@ -1872,30 +2093,51 @@ /** findFiles() * - * An enhancement is to match includes and excludes. */ ::method findFiles private - expose simpleFileSpec + expose simpleFileSpec searchType fileNames f = .array~new - j = SysFileTree(simpleFileSpec, files., "FOS") - self~totalFound = files.0 - do i = 1 to files.0 - if self~matchFile(files.i) then f~append(files.i) + + if searchType == self~SINGLEFILE then do + j = SysFileTree(self~file, files., "FO") + if j = 0, files.0 == 1 then f[1] = files.1 end + else do + j = SysFileTree(simpleFileSpec, files., "FOS") + select + when searchType == self~ALL then do i = 1 to files.0 + f[i] = files.i + end + when searchType == self~PATTERN then do i = 1 to files.0 + if self~matchFile(files.i) then f~append(files.i) + end + + otherwise do i = 1 to files.0 + n = filespec("NAME", files.i) + do fn over fileNames + if fn~caselessCompare(n) == 0 then f~append(files.i) + end + end + end + -- End select + end + + self~totalFound = files.0 + return f + -- End findFiles() ::method matchFile - expose isSimpleSearch fileIncludes + expose filePatterns use arg file - if isSimpleSearch then return .true - - do re over fileIncludes + do re over filePatterns if re~match(file~upper) then return .true end - return .false + return .false + -- End matchFiles() -- End of class: ooTestFinder Modified: test/trunk/worker.rex =================================================================== --- test/trunk/worker.rex 2009-06-22 00:33:27 UTC (rev 4823) +++ test/trunk/worker.rex 2009-06-22 00:53:53 UTC (rev 4824) @@ -60,7 +60,7 @@ testResult~setVerbosity(cl~getVerbosity) if cl~buildFirst then do - -- Create a phase report here and send it along. + -- TODO: Create a phase report here and send it along. ret = buildExternalBins(testResult, file, cl~forceBuild) end @@ -69,6 +69,12 @@ testResult~addEvent(overallPhase) testResult~print("ooTest Framework - Automated Test of the ooRexx Interpreter") + + if cl~waitAtCompletion then do + say + say "The automated test run is finished, hit enter to continue" + pull + end return 0 end @@ -80,9 +86,14 @@ searchPhase~tickTock(msg) finder = .ooTestFinder~new(cl~root, cl~ext, cl~testTypes) - if \ cl~simpleTestSelection then do - finder~includeFiles(cl~testFile) + select + when .testOpts~singleFile \== .nil then finder~useFileName(.testOpts~singleFile) + when .testOpts~fileList \== .nil then finder~useFiles(.testOpts~fileList) + when .testOpts~filesWithPattern \== .nil then finder~usePatterns(.testOpts~filesWithPattern) + otherwise nop end + -- End select + containers = finder~seek(testResult) -- Building the test suite takes very little time at this point. No need to @@ -95,8 +106,11 @@ suite~beVerbose = cl~showTestCases do container over containers - if cl~testTypes == .nil then container~suite(suite) - else container~suiteForTestTypes(cl~testTypes, suite) + select + when .testOpts~testCases \== .nil then container~suiteForTestCases(.testOpts~testCases, cl~testTypes, suite) + when cl~testTypes == .nil then container~suite(suite) + otherwise container~suiteForTestTypes(cl~testTypes, suite) + end end testResult~addEvent(suiteBuildPhase~~done) @@ -125,6 +139,8 @@ pull end + if .testOpts~debug == 1 then j = printDebug(containers, testResult, cl) + return 0 ::requires "ooTest.frm" @@ -151,8 +167,6 @@ ::attribute version get ::attribute version set private -::attribute needsHelp get -::attribute needsHelp set private ::attribute root get ::attribute root set private ::attribute ext get @@ -160,7 +174,10 @@ ::attribute testTypes get ::attribute testTypes set private +::attribute needsHelp get +::attribute needsHelp set private ::attribute doLongHelp private +::attribute doSubjectHelp private ::attribute errMsg private ::attribute doVersionOnly private @@ -181,13 +198,6 @@ ::attribute waitAtCompletion get -- w ::attribute waitAtCompletion set private --- Don't need to look at patterns, multi-dirs, single file, etc.. -::attribute simpleTestSelection get -::attribute simpleTestSelection set private - -::attribute testFile get -::attribute testFile set private - ::attribute testOpts private ::method init @@ -196,24 +206,19 @@ testOpts = .directory~new self~setAllDefaults + if self~needsHelp then return - self~readOptionsFile - .environment~testOpts = testOpts - if cmdLine == "" then return - if self~hasHelpArg then return + -- Command line options over-ride options in the options file, so the file, if + -- there is one, must be read before parsing the rest of the command line. + self~readOptionsFile + if self~needsHelp then return self~parse + if self~needsHelp then return - if self~errMsg \== .nil then return - if self~doVersionOnly then do - self~needsHelp = .true - return - end - self~resolveTestTypes - self~resolveFiles self~resolveOptions ::method showHelp @@ -223,9 +228,12 @@ if self~doVersionOnly then return self~TEST_SUCCESS_RC say + if self~doSubjectHelp then return self~subjectHelp if self~doLongHelp then return self~longHelp - if errMsg == .nil then ret = self~TEST_HELP_RC + if errMsg~items == 0 then do + ret = self~TEST_HELP_RC + end else do ret = self~TEST_BADARGS_RC do line over errMsg @@ -234,9 +242,7 @@ say end - say "usage: testOORexx [OPTIONS]" - say "Try 'testOORexx --help' for more information." - + self~doShortHelp return ret ::method getCommandLine @@ -252,83 +258,178 @@ ::method resolveTestTypes private expose testOpts + tmpSet = testOpts~defaultTestTypes~copy includes = testOpts~testTypeIncludes - excludes = testOpts~testTypesExcludes - if includes \== .nil | excludes \== .nil then do - select - when includes \== .nil, excludes \== .nil then self~testTypes = includes~difference(excludes) - when includes \== .nil then self~testTypes = includes - otherwise self~testTypes = .ooTestTypes~all~difference(excludes) - end - -- End select - end - testOpts~testTypes = self~testTypes + excludes = testOpts~testTypeExcludes -::method resolveFiles private - expose testOpts + -- If there are includes, add them into the default set. + if includes \== .nil then tmpSet = tmpSet~union(includes) - -- Here we would resolve files and directories. Only have the single file - -- option implemented so far. - if testOpts~file \== .nil then do - self~simpleTestSelection = .false - self~testFile = testOpts~file + -- Now, if there are excludes subtract them out. + if excludes \== .nil then tmpSet = tmpSet~difference(excludes) + + -- A value of .nil is used to signal that all test types are to be used. This + -- reduces the processing in parts of the automated running of the test suite. + -- Determine here if the default set now represents all possible tests. + if .ooTestTypes~all~difference(tmpSet)~items == 0 then do + self~testTypes = .nil + testOpts~testTypes = .nil end + else do + self~testTypes = tmpSet + testOpts~testTypes = tmpSet + end + ::method resolveOptions private expose testOpts - if testOpts~showProgress \== .nil then self~showProgress = testOpts~showProgress - if testOpts~showTestCases \== .nil then self~showTestCases = testOpts~showTestCases - if testOpts~suppressTestcaseTicks \== .nil then self~suppressTestcaseTicks = testOpts~suppressTestCaseTicks - if testOpts~suppressAllTicks \== .nil then self~suppressAllTicks = testOpts~suppressAllTicks - if testOpts~noTests \== .nil then self~noTests = testOpts~noTests - if testOpts~waitAtCompletion \== .nil then self~waitAtCompletion = testOpts~waitAtCompletion - if testOpts~buildFirst \== .nil then self~buildFirst = testOpts~buildFirst - if testOpts~forceBuild \== .nil then self~forceBuild = testOpts~forceBuild + self~setVerbosity(testOpts~verbosity) + self~root = testOpts~testCaseRoot + self~ext = testOpts~testContainerExt + self~showProgress = testOpts~showProgress + self~showTestCases = testOpts~showTestCases + self~suppressTestcaseTicks = testOpts~suppressTestCaseTicks + self~suppressAllTicks = testOpts~suppressAllTicks + self~noTests = testOpts~noTests + self~waitAtCompletion = testOpts~waitAtCompletion + self~buildFirst = testOpts~buildFirst + self~forceBuild = testOpts~forceBuild + if self~forceBuild then do self~buildFirst = .true testOpts~buildFirst = .true end + /* + if testOpts~singleFile == .nil, testOpts~fileList \== .nil, testOpts~fileList~items == 1 then do + a = testOpts~fileList~makeArray + testOpts~singleFile = a[1] + testOpts~fileList = .nil + end */ ::method readOptionsFile private - -- Not implemented yet. + expose cmdLine testOpts originalCommandLine + -- See if the user specified any options file related flags. + dashLittle = cmdLine~wordPos("-o") + dashBig = cmdLine~wordPos("-O") + + -- Can not specifiy both. + if dashLittle <> 0, dashBig <> 0 then do + msgs = .list~of("Bad command line", - + " CommandLine:" originalCommandLine, - + " Error at: " cmdLine~word(dashLittle) 'and' cmdLine~word(dashBig) - + "The -o and -O flags can not be specified together" ) + self~addErrorMsgAtTop(msg) + self~needsHelp = .true + return + end + + if dashBig <> 0 then do + testOpts~noOptionsFile = .true + return + end + + if dashLittle <> 0 then do + if \ self~validateAlternateOptionsFile(dashLittle) then return + end + else do + if SysFileExists(self~DEFAULT_OPTIONS_FILE) then testOpts~optionsFile = self~DEFAULT_OPTIONS_FILE + end + + if testOpts~optionsFile \== .nil then do + p = .Properties~load(testOpts~optionsFile) + if p~items == 0 then do + -- No items found, setting needsHelp will abort the test run. The user + -- will have to make sure they don't have an empty options file. + m = .list~of('Error reading the options file.', ' file:' testOpts~optionsFile, 'No options were found in the file.') + self~addErrorMsg(m) + self~needsHelp = .true + return + end + + itr = p~supplier + do while itr~available + if \ self~validateAndSetOpt(itr~index~upper, itr~item) then do + m = .list~of('Error reading the options file.', ' file:' testOpts~optionsFile) + self~addErrorMsgAtTop(m) + self~needsHelp = .true + return + end + + itr~next + end + end + +/** validateAlternateOptionsFile() + * + * Checks that the -o option is valid. If it is not valid, an error message is + * added. + * + * @param pos The word position of the -o token in the command line. + * + * @return True if the -o option names an exsiting file, otherwise false. + */ +::method validateAlternateOptionsFile private + expose cmdLine testOpts + use strict arg pos + + extra = "" + optFile = cmdLine~word(pos + 1) + + if optFile == "" then do + extra = 'Command line:' cmdLine + end + else if \ SysFileExists(optFile) then do + extra = 'The file:' optFile 'does not exist' + end + + if extra \== "" then do + m = .list~of('Error:', ' The -o option must be followed by a valid file name', extra) + self~addErrorMsg(m) + self~needsHelp = .true + return .false + end + + testOpts~optionsFile = optFile + return .true + ::method parse private expose cmdLine tokenCount errMsg originalCommandLine cmdLine = cmdLine~space(1) tokenCount = cmdLine~words - done = self~checkFormat - if done then return + if tokenCount > 0 then do + done = self~checkFormat + if done then return + end do i = 1 to tokenCount token = cmdLine~word(i) - select - when token~abbrev("--") then j = self~parseLongOpt(token, i) - when token~abbrev("-") then j = self~parseShortOpt(token, i) - - otherwise do - -- The error message list is not started at this point. - self~errMsg = .list~of("Command line arguments must start with '-' or '--'") - self~errMsg~insert(" Error at:" cmdLine~word(i)) - self~needsHelp = .true - return - end + if token~abbrev("-") then do + j = self~parseShortOpt(token, i) end - -- End select + else do + errMsg~insert("Command line arguments must start with '-'") + errMsg~insert(" Error at:" cmdLine~word(i)) + self~needsHelp = .true + return + end if j < 0 then do + self~needsHelp = .true + + -- It's not an error to request the version only (-v option.) + if self~doVersionOnly then return + -- The error message list *may* already have some messages. We want these - -- messaged to be first in the print out. - if errMsg == .nil then errMsg = .list~new - - k = errMsg~insert("Bad command line", .nil) - errMsg~insert(" CommandLine:" originalCommandLine, k) - errMsg~insert(" Error at: " cmdLine~word(i), k) - self~needsHelp = .true + -- messages to be first in the print out so they are inserted at the front + -- of the list. + msgs = .list~of("Bad command line", " CommandLine:" originalCommandLine, " Error at: " cmdLine~word(i)) + self~addErrorMsgAtTop(msgs) return end i = j @@ -355,24 +456,38 @@ end return .true -::method checkFileSegment private - expose cmdLine - use strict arg index +::method checkPattern private + use strict arg pattern if .ooTestConstants~SL == '\' then wrongSlash = '/'; else wrongSlash = '\' invalid = '*|[]:"<>?{}()+ ' || "'" || wrongSlash - segment = cmdLine~word(index) - pos = verify(segment, invalid, 'M') + pos = verify(pattern, invalid, 'M') if pos <> 0 then do - char = segment~substr(pos, 1) - self~addErrorMsg("The file name segment:" segment "contains an invalid character ("char")") - self~addErrorMsg(" File name segments can not contain invalid file name characters") + char = pattern~substr(pos, 1) + self~addErrorMsg("The file pattern:" pattern "contains an invalid character ("char")") + self~addErrorMsg(" File patterns can not contain invalid file name characters") self~addErrorMsg(" or regular expression characters.") return .false end return .true +::method checkFileName private + use strict arg name + + if .ooTestConstants~SL == '\' then wrongSlash = '/'; else wrongSlash = '\' + invalid = '*|:"<>?;= ' || "'" || wrongSlash + + pos = verify(name, invalid, 'M') + if pos <> 0 then do + char = name~substr(pos, 1) + self~addErrorMsg("The file name:" name "contains an invalid character ("char")") + self~addErrorMsg(" File patterns can not contain invalid file name characters") + self~addErrorMsg(" or characters that require special quoting.") + return .false + end + return .true + ::method parseShortOpt private expose cmdLine tokenCount testOpts use arg word, i @@ -380,8 +495,15 @@ j = i select + when word == '-v' then do + -- Return -1 to stop parsing the command line. + self~doVersionOnly = .true + j = -1 + end + when word == '-a' then do - testOpts~testTypeIncludes = .ooTestTypes~all + testOpts~allTestTypes = .true + testOpts~defaultTestTypes = .ooTestTypes~all end when word == '-b' then do @@ -393,39 +515,47 @@ testOpts~forceBuild = .true end + when word == '-d' then do + j = self~addMultiWordOpt(i, '-d') + end + when word~abbrev("-D") then do - j = self~addDefine(i) + j = self~addOption(i) end when word == '-f' then do - if self~lastToken(i, "The -f option must be followed by a file name segment") then return -1 - if \ self~isSingleValueToken(i, "The -f option must be followed by a single file name segment") then return -1 + value = self~getValueSegment(i) - j += 1 - if \ self~checkFileSegment(j) then return -1 - - testOpts~file = cmdLine~word(j) + if \ self~validateAndSetOpt(singleFile, value, "-f") then j = -1 + else j+=1 end when word == '-F' then do - return self~notImplemented("-F") + j = self~addMultiWordOpt(i, "-F") end + when word == '-I' then do + j = self~addMultiWordOpt(i, '-I') + end + when word == '-n' then do testOpts~noTests = .true end + -- The -o and -O (options file related) are processed already, so they are + -- just ignored here. + when word == '-o' then j += 1 + when word == '-O' then nop + when word == '-p' then do - return self~notImplemented("-p") + j = self~addMultiWordOpt(i, "-p") end when word == '-R' then do - if self~lastToken(i, "The -R option must be followed by a directory name") then return -1 - if \ self~isSingleValueToken(i, "The -R option must be followed by a single directory name") then return -1 + value = self~getValueSegment(i) - j += 1 - self~root = cmdLine~word(j) || self~SL - testOpts~testCaseRoot = self~root + if \ self~validateAndSetOpt(testCaseRoot, value, "-R") then j = -1 + else j+=1 end when word == '-s' then do @@ -436,8 +566,8 @@ testOpts~showTestCases = .true end - when word == '-I' then do - j = self~addTestTypes(i, '-I') + when word == '-t' then do + j = self~addMultiWordOpt(i, "-t") end when word == '-u' then do @@ -448,25 +578,11 @@ testOpts~suppressAllTicks = .true end - when word == '-v' then do - self~doVersionOnly = .true - end - when word == '-V' then do - if self~lastToken(i, "The -V option must be followed by the verbosity level") then return -1 - if \ self~isSingleValueToken(i, "The -V option must be followed by only 1 verbosity level") then return -1 + value = self~getValueSegment(i) - j += 1 - level = cmdLine~word(j) - - if \ isWholeRange(level, self~MIN_VERBOSITY, self~MAX_VERBOSITY) then do - self~addErrorMsg("The -V option must be followed by a valid verbosity level; found" level) - self~addErrorMsg(" Valid levels are in the range of" self~MIN_VERBOSITY "to" self~MAX_VERBOSITY) - return -1 - end - - self~setVerbosity(level) - testOpts~verbosity = level + if \ self~validateAndSetOpt(verbosity, value, "-V") then j = -1 + else j+=1 end when word == '-w' then do @@ -474,18 +590,35 @@ end when word == '-X' then do - j = self~addTestTypes(i, '-X') + j = self~addMultiWordOpt(i, '-X') end otherwise do self~addErrorMsg( '"'cmdLine~word(i)'"' "is not a valid option") - return -1 + j = -1 end end -- End select return j +::method getValueSegment private + expose cmdLine tokenCount + use strict arg switchPos + + start = switchPos + 1 + if start > tokenCount then return "" + + nextSwitch = self~nextOptionIndex(start) + select + when nextSwitch == start then ret = "" + when nextSwitch == 0 then ret = cmdLine~subword(start) + otherwise ret = cmdLine~subword(start, (nextSwitch - start)) + end + -- End select + + return ret + ::method nextOptionIndex private expose cmdLine tokenCount use strict arg start @@ -500,59 +633,73 @@ self~addErrorMsg("The" opt "argument option is not implemented yet.") return -1 -::method parseLongOpt private - self~addErrorMsg("Long argument options are not implemented yet.") - return -1 - -::method addTestTypes private +::method addFiles private expose cmdLine tokenCount testOpts use strict arg i, opt + displayName = opt + if i == tokenCount | self~isOptionToken(i + 1) then do - self~addErrorMsg("The" opt "option must be followed by at least 1 test type, or the word all.") - return -1 + files = "" + j = -1 end + else do + j = i + 1 + nextOpt = self~nextOptionIndex(j) - j = i + 1 - nextOpt = self~nextOptionIndex(j) + if nextOpt == 0 then do + files = cmdLine~subWord(j) + j = tokenCount + end + else do + files = cmdLine~subWord(j, (nextOpt - j)) + j = nextOpt - 1 + end + end - if nextOpt == 0 then do - types = makeSetOfWords(cmdLine~subWord(j)) - j = tokenCount + if \ self~validateAndSetOpt(optName, types, displayName) then j = -1 + + return j + + +::method addMultiWordOpt private + expose cmdLine tokenCount testOpts + use strict arg i, opt + + displayName = opt + select + when opt == '-d' then optName = 'DEFAULTTESTTYPES' + when opt == '-F' then optName = 'FILELIST' + when opt == '-I' then optName = 'TESTTYPEINCLUDES' + when opt == '-p' then optName = 'FILESWITHPATTERN' + when opt == '-t' then optName = 'TESTCASES' + when opt == '-X' then optName = 'TESTTYPEEXCLUDES' end + -- End select + + if i == tokenCount | self~isOptionToken(i + 1) then do + optWords = "" + j = -1 + end else do - types = makeSetOfWords(cmdLine~subWord(j, (nextOpt - j))) - j = nextOpt - 1 - end + j = i + 1 + nextOpt = self~nextOptionIndex(j) - tmp = .set~new - do t over types - if t~caselessCompare('all') == 0 then do - tmp = .ooTestTypes~all - leave + if nextOpt == 0 then do + optWords = cmdLine~subWord(j) + j = tokenCount end - - testType = .ooTestTypes~testForName(t) - if testType == .nil then do - self~addErrorMsg("The" opt "option must be followed by valid test types") - self~addErrorMsg(" " t "is not a valid test type.") - self~addErrorMsg(" Valid types are:" .ooTestTypes~allNames) - self~addErrorMsg(" In addition, the keyword 'all' can be used to indicate every test type.") - return -1 + else do + optWords = cmdLine~subWord(j, (nextOpt - j)) + j = nextOpt - 1 end - - tmp~put(testType) end - if opt == '-I' then index = testTypeIncludes - else index = testTypesExcludes + if \ self~validateAndSetOpt(optName, optWords, displayName) then j = -1 - if testOpts[index] == .nil then testOpts[index] = tmp - else testOpts[index] = testOpts[index]~union(tmp) - return j -::method addDefine private +::method addOption private expose cmdLine tokenCount testOpts use strict arg i @@ -575,13 +722,216 @@ i = nextOpt - 1 end - define = define~substr(3) - parse var define name "=" value - testOpts[name~strip~upper] = value~strip + parse var define "-D" name "=" value + if \ self~validateAndSetOpt(name~upper, value) then return -1 return i +::method validateAndSetOpt private + expose testOpts optsTable + use strict arg name, value, displayName = (arg(1)) + optType = optsTable[name] + + -- First deal with specific option keywords that require special handling. + -- Then deal with option keywords that have a generic handling. Everything + -- else is user defined options where the value could be whatever the user + -- wants. + select + when name == 'ALLTESTTYPES' then do + tmpVal = value + if value == 'true' then value = 1 + else if value == 'false' then value = 0 + + if \ isBoolean(value) then do + self~addErrorMsg("The value for the" displayName "option must be true or false, found:" tmpVal) + return .false + end + + testOpts~allTestTypes = value + if testOpts~allTestTypes then testOpts~defaultTestTypes = .ooTestTypes~all + end + + -- If the file name ends in the test container extension, we treat it as an + -- absolute path name, otherwise it is treated as a file name. + when name == 'SINGLEFILE' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by a file name.") + return .false + end + + if value~words > 1 then do + self~addErrorMsg("The" displayName "option must be followed by a single file name.") + return .false + end + + if value~right(self~TEST_CONTAINER_EXT~length) == self~TEST_CONTAINER_EXT then do + testOpts~singleFile = value + return .true + end + + if \ self~checkFileName(value) then do + self~addErrorMsgAtTop("The" displayName "option must be followed by a valid file name.") + return .false + end + + if testOpts~fileList == .nil then testOpts~fileList = .set~new + testOpts~fileList~put(value) + return .true + end + + when name == 'FILELIST' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by at least 1 file name.") + return .false + end + + -- Don't uppercase words in set. + files = makeSetOfWords(value, .false) + if testOpts~fileList == .nil then testOpts~fileList = .set~new + do f over files + if \ self~checkFileName(f) then do + self~addErrorMsgAtTop("The" displayName "option only accepts valid file names that do not require quoting.") + return .false + end + testOpts~fileList~put(f) + end + + return .true + end + + when name == 'FILESWITHPATTERN' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by at least 1 file pattern.") + return .false + end + + patterns = makeSetOfWords(value) + if testOpts~filesWithPattern == .nil then testOpts~filesWithPattern = .set~new + do p over patterns + if \ self~checkPattern(p) then do + self~addErrorMsgAtTop("The" displayName "option only accepts valid patterns.") + return .false + end + testOpts~filesWithPattern~put(p) + end + + return .true + end + + when name == 'TESTCASES' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by at least 1 test case name.") + return .false + end + + tests = makeSetOfWords(value) + + do t over tests + if \ t~abbrev("TEST") then do + self~addErrorMsg("The" displayName "option requires test case method names.") + self~addErrorMsg(" All test case method names start with 'test'; found" t) + return .false + end + end + testOpts~testCases = tests + return .true + end + + when name == 'TESTCASEROOT' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by a directory name.") + return .false + end + + if value~words > 1 then do + self~addErrorMsg("The" displayName "option must be followed by a single directory name.") + return .false + end + + if value~right(1) \== self~SL then value = value || self~SL + testOpts~testCaseRoot = value + end + + when name == 'VERBOSITY' then do + if value == "" then do + self~addErrorMsg("The" displayName "option must be followed by the verbosity level.") + return .false + end + + if value~words > 1 then do + self~addErrorMsg("The" displayName "option must be followed by only 1 verbosity level.") + return .false + end + + if \ isWholeRange(value, self~MIN_VERBOSITY, self~MAX_VERBOSITY) then do + self~addErrorMsg("The" displayName "option must be followed by a valid verbosity level; found" value) + self~addErrorMsg(" Valid levels are in the range of" self~MIN_VERBOSITY "to" self~MAX_VERBOSITY) + return .false + end + + testOpts~verbosity = value + end + + when optType == 'testtypes' then do + if value = "" then do + self~addErrorMsg("The" displayName "option must be followed by at least 1 test type, or the word all.") + return .false + end + + testTypes = makeSetOfWords(value) + tmpSet = .set~new + + do t over testTypes + if t~caselessCompare('all') == 0 then do + tmpSet = .ooTestTypes~all + leave + end + + testType = .ooTestTypes~testForName(t) + if testType == .nil then do + self~addErrorMsg("The" displayName "option must be followed by valid test types") + self~addErrorMsg(" " t "is not a valid test type.") + self~addErrorMsg(" Valid types are:" .ooTestTypes~allNames) + self~addErrorMsg(" In addition, the keyword 'all' can be used to indicate every test type.") + return .false + end + + tmpSet~put(testType) + end + testOpts[name] = tmpSet + end + + when optType == 'boolean' then do + if value == 'true' then value = 1 + else if value == 'false' then value = 0 + + if \ isBoolean(value) then do + self~addErrorMsg("The value for the" displayName "option must be true or false, found:" value) + return .false + end + testOpts[name] = value + end + + when optType == 'notimplemented' then do + self~notImplemented(displayName) + return .false + end + + when optType == 'invalid' then do + self~addErrorMsg("The" displayName "option is not valid in an options file.") + return .false + end + + otherwise do + testOpts[name] = value + end + end + -- End select + + return .true + + ::method isOptionToken private expose cmdLine tokenCount use strict arg i @@ -590,91 +940,170 @@ else return cmdLine~word(i)~abbrev("-") -/** addErrorMsg() Adds msg to the end of the error messages list. */ +/** addErrorMsg() + * + * Adds message(s) to the end of the error messages list. + * + * @param msg The message(s) to add. This can be a single string or a list of + * message strings + */ ::method addErrorMsg private expose errMsg use strict arg msg - if errMsg == .nil then errMsg = .list~new - errMsg~insert(msg) + if msg~isA(.list) then do + do line over msg + errMsg~insert(line) + end + end + else do + errMsg~insert(msg) + end + +/** addErrorMsgAtTop() + * + * Adds message(s) to the top of the error messages list. + * + * @param msg The message(s) to add. This can be a single string or a list of + * message strings + */ +::method addErrorMsgAtTop private + expose errMsg + use strict arg msg + if msg~isA(.list) then do + if msg~isEmpty then do + errMsg~insert("", .nil) + return + end + + index = msg~first + k = errMsg~insert(msg~at(index), .nil) + + index = msg~next(index) + do while index \== .nil + k = errMsg~insert(msg~at(index), k) + index = msg~next(index) + end + end + else do + errMsg~insert(msg, .nil) + end + + /** checkFormat() * Checks that the first command line token starts with "-", or if not, that it - * is a simple command line with one file name on it. + * is a simple command line with only one token on it. * * Returns true if command line parsing is done, otherwise false. Parsing would - * be done if there is an error, or if there is only a single file name on the + * be done if there is an error, or if there is only a single token on the * command line. + * + * The single token is treated as a either a complete file specification, or a + * file pattern. If the token ends with the default container extension, it is + * considered to be a complete file name, otherwise it is considered a pattern. + * + * So, if it is a pattern, for instance, 'char' would execute all test groups + * with 'char' in their name. ooRexx\base would execute all test groups in the + * ooRexx\base directory, but not recurse. Etc.. Look at the pattern matching + * doc to see how this works. + * + * To execute a single specific test group file, the -f option can also be used. */ ::method checkFormat private expose cmdLine tokenCount testOpts if cmdLine~left(1) == "-" then return .false - -- Want to eventually support: - -- testFileName - -- or - -- directoryName testFile - -- - -- For now just support testFileName if tokenCount > 1 then do - self~addErrorMsg("Command line arguments must start with '-' or '--'") + self~addErrorMsg("Command line arguments must start with '-'") self~needsHelp = .true end else do - testOpts~file = cmdLine + if cmdLine~right(self~TEST_CONTAINER_EXT~length) == self~TEST_CONTAINER_EXT then testOpts~singleFile = cmdLine + else testOpts~filesWithPattern = cmdLine end return .true ::method setAllDefaults private - expose cmdLine originalCommandLine testOpts + expose cmdLine originalCommandLine testOpts optsTable originalCommandLine = cmdLine~copy - self~version = "1.1.0" + self~version = self~TESTOOREXX_REX_VERSION self~needsHelp = .false self~doLongHelp = .false - self~errMsg = .nil + self~doSubjectHelp = .false + self~errMsg = .list~new self~doVersionOnly = .false - self~setVerbosity(self~DEFAULT_VERBOSITY) - self~root = self~TEST_ROOT || self~SL - self~ext = self~TEST_CONTAINER_EXT + if self~hasHelpArg then return - -- Get the default set of test types to always execute, defined in the .ooTestTypes class. - -- The default format for the returned set is [C]onstant, i.e. the numeric test type values. - self~testTypes = .ooTestTypes~defaultTestSet + -- Set all the known, defined, test options. In the below, some indexes are + -- purposively set to .nil even though that is not necessary. It is done so + -- that the list of valid option words is in one place. + testOpts~version = self~version - self~showTestCases = .false - self~showProgress = .false - self~suppressAllTicks = .false - self~suppressTestcaseTicks = .false - self~simpleTestSelection = .true - self~testFile = .nil + testOpts~allTestTypes = .false + testOpts~buildFirst = .false + testOpts~forceBuild = .false + testOpts~defaultTestTypes = .ooTestTypes~defaultTestSet + testOpts~testContainerExt = self~TEST_CONTAINER_EXT + testOpts~singleFile = .nil + testOpts~fileList = .nil + testOpts~testTypeIncludes = .nil + testOpts~noTests = .false + testOpts~optionsFile = .nil + testOpts~noOptionsFile = .false + testOpts~filesWithPattern = .nil + testOpts~testCases = .nil + testOpts~testCaseRoot= self~TEST_ROOT || self~SL + testOpts~testTypeExcludes = .nil + testOpts~showProgress = .false + testOpts~showTestcases = .false + testOpts~suppressTestcaseTicks = .false + testOpts~suppressAllTicks = .false + testOpts~verbosity = self~DEFAULT_VERBOSITY + testOpts~waitAtCompletion = .false - self~waitAtCompletion = .false + optsTable = .table~new + optsTable[allTestTypes ] = "boolean" + optsTable[buildFirst ] = "boolean" + optsTable[forceBuild ] = "boolean" + optsTable[defaultTestTypes ] = "testypes" + optsTable[testContainerExt ] = "string" + optsTable[singleFile ] = "string" + optsTable[fileList ] = "filelist" + optsTable[testTypeIncludes ] = "testtypes" + optsTable[noTests ] = "boolean" + optsTable[optionsFile ] = "invalid" + optsTable[noOptionsFile ] = "invalid" + optsTable[filesWithPattern ] = "fileswithpattern" + optsTable[testCases ] = "testcases" + optsTable[testCaseRoot ] = "string" + optsTable[testTypeExcludes ] = "testtypes" + optsTable[showProgress ] = "boolean" + optsTable[showTestcases ] = "boolean" + optsTable[suppressTestcaseTicks] = "boolean" + optsTable[suppressAllTicks ] = "boolean" + optsTable[verbosity ] = "verbosity" + optsTable[waitAtCompletion ] = "boolean" - self~buildFirst = .false - self~forceBuild = .false - self~noTests = .false + optsTable[h ] = "invalid" + optsTable[help] = "invalid" + optsTable[v ] = "invalid" - testOpts~version = self~version - testOpts~verbosity = self~DEFAULT_VERBOSITY - testOpts~testCaseRoot = self~root - testOpts~testFileExt = self~ext - testOpts~testTypes = self~testTypes - testOpts~showTestCases = self~showTestCases - testOpts~showProgress = self~showProgress - testOpts~suppressAllTicks = self~suppressAllTicks - testOpts~suppressTestcaseTicks = self~suppressTestcaseTicks - testOpts~waitAtCompletion = self~waitAtCompletion - testOpts~buildFirst = self~buildFirst - testOpts~forceBuild = self~forceBuild - testOpts~noTests = self~noTests ::method hasHelpArg private - expose cmdLine + expose cmdLine helpSubject + if cmdLine~word(1) == 'help' then do + helpSubject = cmdLine~word(2) + self~doSubjectHelp = .true + self~needsHelp = .true + return .true + end + tokens = makeSetOfWords(cmdLine) helpTokens = .set~of("-H", "/H", "--H", "--HELP", "/?", "?", "-?", "--?") intersect = helpTokens~intersection(tokens) @@ -685,11 +1114,16 @@ self~needsHelp = .true return .true +::method doShortHelp private + say "usage: testOORexx [OPTIONS]" + say "Try 'testOORexx --help' for more information." + ::method longHelp private say 'Test the ooRexx interpreter using the automated ooTest framework.' say "usage: 1. testOORexx" say " 2. testOORexx fileName" say " 3. testOORexx [OPTIONS]" + say ' 4. testOORexx help [subject]' say say ' 1. With no options the automated test suite is executed using the default' say ' set of test types, the default verbosity, and the default formatter.' @@ -698,37 +1132,177 @@ say say ' 3. The automated test suite is executed using the specified options.' say - say ' Options must start with "-" or "--" Spaces are not tolerated in' - say ' either file names or directory names.' + say ' 4. Show detailed help on "subject" Use "help topic" to list valid subjects' say + say ' Options must start with "-", the only exception is the --help option. Spaces' + say ' are not tolerated in either file names or directory names.' + say + say ' The long name options are specified using the -D (define option) format. I.e.,' + say ' the "testContainerExt" option is specified as: -DtestContainerExt=ext.' + say + say ' All command line options, except the help and options file options, are valid' + say ' in the options file, but you must use the long name format. I.e., the' + say ' -Dverbosity=NUM option could be: verbosity=5 in the options file.' + say + say ' Options below shown as: someOpt=bool are true / false, with the default as' + say ' false. The value can be specified as either 1 / 0 or the words true / false.' + say say 'Valid options:' + say ' Help related:' + say ' -h Show short help' + say ' --help Show long help (this help)' + say ' -v Show version and quit' + say + say ' Generic option:' + say ' -D Define option. Format must be: -Dname=value' + say say ' Test selection:' - say ' -a --all-test-types Include all test types' - say ' -b --build-first Build external binaries before running tests' - say ' -B --force-build Force building (implies -b)' - say ' -f --file=NAME Excute the single NAME test group' - say ' -F --files=N1 N2 ... Execute the N1 N2 ... test groups' - say ' -I, --test-types=T1 T2 .. Include test types T1 T2 ...' - say ' keyword "all" indicates all test types' - say ' -n --no-tests No tests to execute (deliberately)' - say ' -p --files-with-pattern=PA Execute test groups matching PA' - say ' -R, --root=DIR DIR is root of search tree' - say ' -X --exclude-types=X1 X2 .. Exclude test types X1 X2 ...' + say ' -a -DallTestTypes=bool Include all test types' + say ' -b -DbuildFirst=bool Build external binaries before running tests' + say ' -B -DforceBuild=bool Force building (implies -b)' + say ' -d -DdefaultTestTypes=D1 D2 ... change default test type set to D1 D2 ...' + say ' -e -DtestContainerExt=EXT change default test container ext to EXT' + say ' -f -DsingleFile=NAME Excute the single NAME test group' + say ' -F -DfileList=N1 N2 ... Execute the N1 N2 ... test groups' + say ' -I, -DtestTypeIncludes=T1 T2 ... Include test types T1 T2 ... keyword "all"' + say ' indicates all test types' + say ' -n -DnoTests=bool No tests to execute (deliberately)' + say ' -o -DoptionsFile=FILE Use FILE as options file, not default file' + say ' -O -DnoOptonsFile=bool Do not use any options file' + say ' -p -DfilesWithPattern=PA Execute test groups matching PA' + say ' -R, -DtestCaseRoot=DIR DIR is root of search tree' + say ' -X -DtestTypeExcludes=X1 X1 ... Exclude test types X1 X2 ... keyword "all"' + say ' indicates all test types' say say ' Output control:' - say ' -h Show short help' - say ' --help Show long help (this help)' - say ' -s --show-progress Show test group progress' - say ' -S --show-testcases Show test case progress' - say ' -u --suppress-testcase-ticks Do not show ticks during test execution' - say ' -U --suppress-all-ticks Do not show any ticks' - say ' -v, --version Show version and quit' - say ' -V, --verbose=NUM Set vebosity to NUM' - say ' -w, --wait-at-completion At test end, wait for user to hit enter' + say ' -s -DshowProgress=bool Show test group progress' + say ' -S -DshowTestcases=bool Show test case progress' + say ' -u -DsuppressTestcaseTicks=bool Do not show ticks during test execution' + say ' -U -DsuppressAllTicks=bool Do not show any ticks' + say ' -V, -Dverbosity=NUM Set vebosity to NUM' + say ' -w, -DwaitAtCompletion=bool At test end, wait for user to hit enter' say - say ' Generic options:' - say ' -D Define option. Format must be: -Dname=value' - say return self~TEST_HELP_RC + +::method subjectHelp + expose helpSubject + + if helpSubject == "" then do + say 'A "subject" keyword must follow the "help" command' + say 'Use "help topic" to list valid subjects' + say + self~doShortHelp + return self~TEST_BADARGS_RC + end + + helpSubject = helpSubject~lower + ret = self~TEST_HELP_RC + + select + when helpSubject == 'topic' then do + say 'Detailed help subjects (case insignificant) are:' + say ' testTypes' + end + + when helpSubject == 'testtypes' then ... [truncated message content] |
From: <mie...@us...> - 2009-06-24 03:27:26
|
Revision: 4841 http://oorexx.svn.sourceforge.net/oorexx/?rev=4841&view=rev Author: miesfeld Date: 2009-06-24 03:27:24 +0000 (Wed, 24 Jun 2009) Log Message: ----------- Have testOORexx finish consistently Modified Paths: -------------- test/trunk/setTestEnv.sh test/trunk/worker.rex Modified: test/trunk/setTestEnv.sh =================================================================== --- test/trunk/setTestEnv.sh 2009-06-23 22:19:11 UTC (rev 4840) +++ test/trunk/setTestEnv.sh 2009-06-24 03:27:24 UTC (rev 4841) @@ -49,11 +49,13 @@ Linux) echo "Setting env for Linux" + frameworkPath=`pwd`:`pwd`/framework: + export PATH=$frameworkPath$PATH export LD_LIBRARY_PATH=`pwd`/bin/LINUX:$LD_LIBRARY_PATH ;; *) echo "Unsupported OS" - exit;; + ;; esac Modified: test/trunk/worker.rex =================================================================== --- test/trunk/worker.rex 2009-06-23 22:19:11 UTC (rev 4840) +++ test/trunk/worker.rex 2009-06-24 03:27:24 UTC (rev 4841) @@ -64,20 +64,8 @@ ret = buildExternalBins(testResult, file, cl~forceBuild) end - if cl~noTests then do - overallPhase~done - testResult~addEvent(overallPhase) + if cl~noTests then return finishTestRun(cl, testResult, overallPhase) - testResult~print("ooTest Framework - Automated Test of the ooRexx Interpreter") - - if cl~waitAtCompletion then do - say - say "The automated test run is finished, hit enter to continue" - pull - end - return 0 - end - searchPhase = .PhaseReport~new(file, .PhaseReport~FILE_SEARCH_PHASE) msg = "Searching for test containers" if cl~suppressAllTicks then @@ -126,26 +114,31 @@ suite~execute(testResult) executionPhase~done - overallPhase~done - testResult~addEvent(executionPhase) - testResult~addEvent(overallPhase) - testResult~print("ooTest Framework - Automated Test of the ooRexx Interpreter") +return finishTestRun(cl, testResult, overAllPhase, containers) - if cl~waitAtCompletion then do - say - say "The automated test run is finished, hit enter to continue" - pull - end +::requires "ooTest.frm" - if .testOpts~debug then j = printDebug(containers, testResult, cl) - else if .testOpts~printOptions then j = printOptions(.true) +::routine finishTestRun + use strict arg cl, testResult, overallPhase, containers = .nil -return 0 + overallPhase~done + testResult~addEvent(overallPhase) -::requires "ooTest.frm" + testResult~print("ooTest Framework - Automated Test of the ooRexx Interpreter") + if .testOpts~debug then j = printDebug(containers, testResult, cl) + else if .testOpts~printOptions then j = printOptions(.true) + + if cl~waitAtCompletion then do + say + say "The automated test run is finished, hit enter to continue" + pull + end + +return 0 + ::routine buildExternalBins use arg testResult, file, force @@ -1241,11 +1234,14 @@ prefix = "====== Debug output" say prefix '='~copies(80 - prefix~length) say - say 'Test groups collected:' - do c over containers - say c~pathName + + if containers \== .nil then do + say 'Test groups collected:' + do c over containers + say c~pathName + end + say end - say return printOptions(.false) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-02-05 04:36:11
|
Revision: 5539 http://oorexx.svn.sourceforge.net/oorexx/?rev=5539&view=rev Author: miesfeld Date: 2010-02-05 04:36:03 +0000 (Fri, 05 Feb 2010) Log Message: ----------- ooTest - commit a few logs of the the test suite execution at svn revision 5538. I'd like to keep a few logs here and there for a bit of history. Revision Links: -------------- http://oorexx.svn.sourceforge.net/oorexx/?rev=5538&view=rev Added Paths: ----------- test/trunk/historic.logs/ test/trunk/historic.logs/Windows/ test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.dbg.log test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.rel.log test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.dbg.log test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.rel.log Added: test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.dbg.log =================================================================== --- test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.dbg.log (rev 0) +++ test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.dbg.log 2010-02-05 04:36:03 UTC (rev 5539) @@ -0,0 +1,43 @@ +ooTest Framework - Automated Test of the ooRexx Interpreter + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 32 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576562 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 1 + +[Skipped test group] [20100204 19:48:15.127000] + File: E:\work.ooRexx\...\base\rexxutil\platform\unix\SysSearchPath.testGroup + The test container has no executable tests + Test is a LINUX specific test. Current OS is: WINDOWS + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 32 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576562 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 1 + +File search: 00:00:13.391000 +Suite construction: 00:00:03.391000 +Test execution: 00:04:09.433000 +Total time: 00:04:28.996000 + + Added: test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.rel.log =================================================================== --- test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.rel.log (rev 0) +++ test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.32bit.rel.log 2010-02-05 04:36:03 UTC (rev 5539) @@ -0,0 +1,42 @@ +ooTest Framework - Automated Test of the ooRexx Interpreter + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 32 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576561 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 1 + +[Skipped test group] [20100204 20:14:27.212000] + File: E:\work.ooRexx\...\base\rexxutil\platform\unix\SysSearchPath.testGroup + The test container has no executable tests + Test is a LINUX specific test. Current OS is: WINDOWS + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 32 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576561 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 1 + +File search: 00:00:03.188000 +Suite construction: 00:00:01.719000 +Test execution: 00:03:26.353000 +Total time: 00:03:32.056000 + Added: test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.dbg.log =================================================================== --- test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.dbg.log (rev 0) +++ test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.dbg.log 2010-02-05 04:36:03 UTC (rev 5539) @@ -0,0 +1,43 @@ +ooTest Framework - Automated Test of the ooRexx Interpreter + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576568 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 2 + +[Skipped test group] [20100204 20:02:00.960000] + File: C:\work.ooRexx\...\base\rexxutil\platform\unix\SysSearchPath.testGroup + The test container has no executable tests + Test is a LINUX specific test. Current OS is: WINDOWS + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576568 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 2 + +File search: 00:00:06.062000 +Suite construction: 00:00:03.047000 +Test execution: 00:05:00.297000 +Total time: 00:05:16.812000 + + Added: test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.rel.log =================================================================== --- test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.rel.log (rev 0) +++ test/trunk/historic.logs/Windows/ooRexx_4.0.0.5538.64bit.rel.log 2010-02-05 04:36:03 UTC (rev 5539) @@ -0,0 +1,42 @@ +ooTest Framework - Automated Test of the ooRexx Interpreter + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576565 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 2 + +[Skipped test group] [20100204 20:21:58.320000] + File: C:\work.ooRexx\...\base\rexxutil\platform\unix\SysSearchPath.testGroup + The test container has no executable tests + Test is a LINUX specific test. Current OS is: WINDOWS + + +Interpreter: REXX-ooRexx_4.0.0(MT) 6.03 4 Feb 2010 +Addressing Mode: 64 +ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 + +Tests ran: 19245 +Assertions: 576565 +Failures: 0 + (Known failures:) 0 +Errors: 0 +Exceptions: 0 +Skipped files: 1 +Messages: 0 +Logs: 2 + +File search: 00:00:03.657000 +Suite construction: 00:00:01.875000 +Test execution: 00:04:24.984000 +Total time: 00:04:37.907000 + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2010-05-04 13:26:00
|
Revision: 5887 http://oorexx.svn.sourceforge.net/oorexx/?rev=5887&view=rev Author: bigrixx Date: 2010-05-04 13:25:51 +0000 (Tue, 04 May 2010) Log Message: ----------- allow tests to operate with subclasses Modified Paths: -------------- test/trunk/framework/OOREXXUNIT.CLS test/trunk/ooTest.frm Modified: test/trunk/framework/OOREXXUNIT.CLS =================================================================== --- test/trunk/framework/OOREXXUNIT.CLS 2010-05-04 12:45:26 UTC (rev 5886) +++ test/trunk/framework/OOREXXUNIT.CLS 2010-05-04 13:25:51 UTC (rev 5887) @@ -674,8 +674,8 @@ TestCaseTable[aTestCase]~queue(dateTime": endTest") dir=.directory~new~~setentry("OOREXXUNIT.CONDITION", dateTime":" pp("endTest") aTestCase~string) - -- save class' 'testCaseInfo' with test case for later analysis - dir~setentry("OOREXXUNIT.class_testCaseInfo", aTestCase~class~testCaseInfo) + -- save class' 'caseInfo' with test case for later analysis + dir~setentry("OOREXXUNIT.class_testCaseInfo", aTestCase~class~caseInfo) logQueue~queue(dir) fAssertions=fAssertions+aTestCase~assertCount @@ -724,7 +724,7 @@ dir=.directory~new~~setentry("OOREXXUNIT.CONDITION", dateTime":" pp("startTest") aTestCase~string) -- save class' 'testCaseInfo' with test case for later analysis - dir~setentry("OOREXXUNIT.class_testCaseInfo", aTestCase~class~testCaseInfo) + dir~setentry("OOREXXUNIT.class_testCaseInfo", aTestCase~class~caseInfo) logQueue~queue(dir) @@ -1466,11 +1466,11 @@ ::class "TestCase" public inherit "Assert" ::attribute defaultTestResultClass class -::attribute TestCaseInfo class +::attribute caseInfo class ::method init class self~defaultTestResultClass=.TestResult -- set default: use TestResult class - self~TestCaseInfo=.directory~new + self~caseInfo=.directory~new forward class (super) @@ -1479,9 +1479,9 @@ parse arg fName fCountTestCases=1 -- default: individual test - self~TestCaseInfo=.directory~new -- directory to contain information on test + self~caseInfo=.directory~new -- directory to contain information on test - clzTCI=self~class~testCaseInfo -- get access to clz' 'testCaseInfo' dir + clzTCI=self~class~caseInfo -- get access to clz' 'caseInfo' dir s=clzTCI~entry("test_Case-source") if .nil<>s then -- if source available, memorize fully qualified file name self~definedInFile=s @@ -1491,7 +1491,7 @@ self~init:super -- let superclass initialize -::method TestCaseInfo attribute -- ooRexxUnit only +::method caseInfo attribute -- ooRexxUnit only ::method createResult -- creates a default TestResult object @@ -1690,18 +1690,21 @@ raise syntax 88.914 array ("1 'classObj'", 'Class') -- Get the test methods names. By convention this is all methods starting - -- with "TEST" - testMethodNames = .array~new + -- with "TEST". We use a set because there may be duplicates in the + -- class hierarchy + testMethodNames = .set~new - -- Only get methods of the receiver class (= testClass) - methSupplier = classObj~methods(.nil) + -- Get all methods that start with "TEST", even ones from the superclasses + -- Some tests might have method overrides that test different variants of + -- the base test methods + methSupplier = classObj~methods do while methSupplier~available -- iterate over supplied methods name = methSupplier~index - if name~left(4)="TEST" then testMethodNames~append(name) + if name~left(4)="TEST" then testMethodNames~put(name) methSupplier~next end - return testMethodNames~sort + return testMethodNames~makearray~sort ::method addTest @@ -1820,7 +1823,7 @@ ::routine makeDirTestInfo public use arg aTestCaseClass, arrLines - tmpDir=aTestCaseClass~TestCaseInfo -- get directory object to add infos to + tmpDir=aTestCaseClass~caseInfo -- get directory object to add infos to keyWord="" tOut=xrange("A","Z")||xrange("a","z") Modified: test/trunk/ooTest.frm =================================================================== --- test/trunk/ooTest.frm 2010-05-04 12:45:26 UTC (rev 5886) +++ test/trunk/ooTest.frm 2010-05-04 13:25:51 UTC (rev 5887) @@ -348,18 +348,18 @@ ::method allNames return self~class~allNames - /** testForName() + /** getTestForName() * Returns the numeric test type constant for the specified name, or .nil if * there is no such test type. */ - ::method testForName class + ::method getTestForName class expose names use strict arg name if names~UNIT == .nil then self~populate return names~entry(name~upper) - ::method testForName + ::method getTestForName use strict arg name return self~class(name) @@ -802,7 +802,7 @@ use strict arg problem if problem~additionalObject~isA(.ooTestCase) then do - info = problem~additionalObject~class~testCaseInfo + info = problem~additionalObject~class~caseInfo if info~hasEntry("test_Case-revsion") then do parse value info~entry("test_Case-date") with date time offset junk say " svn: r" || info~entry("test_Case-revsion") " Change date:" date time offset @@ -1138,7 +1138,7 @@ ::attribute isAutomatedTest get ::attribute isAutomatedTest set private - -- A directory object that is used to set the TestCaseInfo class attribute of + -- A directory object that is used to set the caseInfo class attribute of -- each Test class this test group contains. ::attribute testInfo get expose testInfo @@ -1364,7 +1364,7 @@ if \ isSubClassOf(test, "ooTestCase") then raise syntax 88.917 array ("1 'test'", "must be a subclass of the ooTestCase class. Found:" test) - test~testCaseInfo = self~testInfo + test~caseInfo = self~testInfo tests[test~ooTestType] = test self~currentTypes~put(test~ooTestType) self~testCount += 1 @@ -1396,7 +1396,7 @@ if \ isSubClassOf(suite, "ooTestSuite") then raise syntax 88.917 array ("2 'suite'", "must be a subclass of the ooTestSuite class. Found:" suite) - test~testCaseInfo = self~testInfo + test~caseInfo = self~testInfo testsWithSuite[test~ooTestType] = .TestWithSuite~new(test, suite) self~currentTypes~put(test~ooTestType) self~testCount += 1 @@ -1447,7 +1447,7 @@ if \ isSubClassOf(suite, "ooTestSuite") then raise syntax 88.917 array ("3 'suite'", "if used, must be a subclass of the ooTestSuite class. Found:" suite) - test~testCaseInfo = self~testInfo + test~caseInfo = self~testInfo testCollections[test~ooTestType] = .TestWithSuiteAndNames~new(test, methods, suite) self~currentTypes~put(test~ooTestType) self~testCount += 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mie...@us...> - 2010-10-20 00:36:51
|
Revision: 6310 http://oorexx.svn.sourceforge.net/oorexx/?rev=6310&view=rev Author: miesfeld Date: 2010-10-20 00:36:44 +0000 (Wed, 20 Oct 2010) Log Message: ----------- Add a dlopen test to the ooTest misc directory, not integrated into the test suite Modified Paths: -------------- test/trunk/external/API/Makefile.linux Added Paths: ----------- test/trunk/misc/dlOpenTest.c Modified: test/trunk/external/API/Makefile.linux =================================================================== --- test/trunk/external/API/Makefile.linux 2010-10-20 00:19:30 UTC (rev 6309) +++ test/trunk/external/API/Makefile.linux 2010-10-20 00:36:44 UTC (rev 6310) @@ -38,7 +38,7 @@ # Setup ORXLFLAGS = --export-dynamic -shared -nostartfiles -ORXEXELFLAGS = -L. -ldl +ORXEXELFLAGS = -L. -ldl -lstdc++ ORXCFLAGS = -fPIC COMMON_SRC_DEPS = FUNCTION_SRC_DEPS = $(COMMON_SRC_DEPS) @@ -143,7 +143,7 @@ # Build the executable file rexxinstance: rexxinstance.o - gcc $(ORXEXELFLAGS) -lorxexits rexxinstance.o -o rexxinstance + gcc $(ORXEXELFLAGS) $(REXX_LIBS) -lrexxapi -lorxexits rexxinstance.o -o rexxinstance # Compile the objects rexxinstance.o: rexxinstance.cpp orxexits.hpp Added: test/trunk/misc/dlOpenTest.c =================================================================== --- test/trunk/misc/dlOpenTest.c (rev 0) +++ test/trunk/misc/dlOpenTest.c 2010-10-20 00:36:44 UTC (rev 6310) @@ -0,0 +1,89 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2010-2010 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.oorexx.org/license.html */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/*----------------------------------------------------------------------------*/ + +/** + * Test to see if librexx.so and librexxapi.so can be dynamically loaded and + * used. + * + * To compile use + * + * gcc -o dlOpenTest dlOpenTest.c -ldl + */ +#include <stdlib.h> +#include <stdio.h> +#include <dlfcn.h> +#include <oorexxapi.h> + +int main(int argc, char **argv) { + void *hRexx, *hRxapi; + char *str; + char *rexxLibName = "librexx.so"; + char *rexxapiLibName = "librexxapi.so"; + PFNGETVERSIONINFORMATION getVer; + + hRexx = dlopen(rexxLibName, RTLD_LAZY); + if ( !hRexx ) { + fputs(dlerror(), stderr); + exit(1); + } + printf("dlopen worked for %s, handle=%p\n", rexxLibName, hRexx); + + hRxapi = dlopen(rexxapiLibName, RTLD_LAZY); + if ( !hRxapi ) { + fputs (dlerror(), stderr); + dlclose(hRexx); + exit(1); + } + printf("dlopen worked for %s, handle=%p\n", rexxapiLibName, hRxapi); + + getVer = dlsym(hRexx, "RexxGetVersionInformation"); + str = dlerror(); + if ( !getVer ) { + printf("dlsym getVer=%p error=%s\n", getVer, str); + exit(1); + } + printf("dlsy worked for RexxGetVersionInformation, function pointer=%p\n", getVer); + + str = (getVer)(); + printf("\nooRexx Version Information:\n\n%s\n\n", str); + + dlclose(hRexx); + dlclose(hRxapi); + + return 0; +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |