From: <mie...@us...> - 2007-11-26 17:39:24
|
Revision: 1309 http://oorexx.svn.sourceforge.net/oorexx/?rev=1309&view=rev Author: miesfeld Date: 2007-11-26 09:39:28 -0800 (Mon, 26 Nov 2007) Log Message: ----------- ooRexxUnit - Port the following commits from the 3.2.0 branch into the trunk: r1306 ooRexxUnit - Add a directory to hold test units for builtin functions. Add a test unit for the lines() builtin function. r1305 ooRexxUnit - tweak the simpleFormatTestResults() routine a little. r1303 ooRexxUnit - Add a QA test for the drives.rex sample program. This test unit can also serve as an example of how to automate the execution of a sample program. r1301 ooRexxUnit - Fix the WinUtils.cls framework file so that it actually works. r1300 ooRexxUnit - Add a test unit for the fileNameDialog_demo.rex sample shipped with the release. r1299 ooRexxUnit - Update ooRexx.Base.SourceFile.testUnit and ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit to use the new framework files. Eliminates the error that ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit produces on non-Windows OSes. r1298 ooRexxUnit - Add two files to the framework to provide common public routines that help with the writting of test units. One provides file related utilities and the other provides Windows specific utilities. r1295 ooRexxUnit - Class test unit, fix a few copy & paste errors and change the formatter when the test unit is run stand alone to simpleFormatTestResults Modified Paths: -------------- test/trunk/framework/OOREXXUNIT.CLS test/trunk/tests/oorexxunit/ooRexx/base/class/ooRexx.Base.Class.Class.testUnit test/trunk/tests/oorexxunit/ooRexx/base/ooRexx.Base.SourceFile.testUnit test/trunk/tests/oorexxunit/ooRexx/extensions/platform/windows/rxwinsys/ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit Added Paths: ----------- test/trunk/framework/FileUtils.cls test/trunk/framework/WinUtils.cls test/trunk/tests/oorexxunit/ooRexx/base/bif/ test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog/ test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog/ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit test/trunk/tests/oorexxunit/ooRexx/samples/ooRexx.Samples.drives.testUnit Removed Paths: ------------- test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog/ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit Copied: test/trunk/framework/FileUtils.cls (from rev 1298, test/branches/test.3.2.0/framework/FileUtils.cls) =================================================================== --- test/trunk/framework/FileUtils.cls (rev 0) +++ test/trunk/framework/FileUtils.cls 2007-11-26 17:39:28 UTC (rev 1309) @@ -0,0 +1,228 @@ +#!/usr/bin/rexx +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2007-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. */ +/* */ +/*----------------------------------------------------------------------------*/ +/* + name: FileUtils.cls + authors: Mark Miesfeld + last update: 2007-11-24 + + purpose: Provides common public routines and utility classes to do + file system related tasks, to make writing test units + easier. + + remarks: This file has the requires directive for ooRexxUnit.cls. + When writing a test unit, use a requires directive for this + class and the requires directive for ooRexxUnit.cls is not + needed. + + category0: ooRexxUnit + category1: framework +*/ + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + Directives, Classes, or Routines. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::requires 'OOREXXUNIT.CLS' + +/* createFile( src, name ) - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + + Writes out a file using the supplied source. + + Input: + src REQUIRED + An array containing the lines to be written to the file. + + name REQUIRED + The name of the file to be written. + + Returns: + The fully qualified name of the file on succes. Returns the empty string + on error. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine createFile public + use strict arg src, name + + fileName = "" + fsObj = .stream~new(name) + state = fsObj~open("WRITE REPLACE") + if state~abbrev("READY") then do + fsObj~arrayout(src) + fsObj~close + fileName = fsObj~qualify + end + +return fileName +-- End createFile( src, name ) + +/* Convenience method. Calls createFile() with .rex tacked onto basename. */ +::routine createRexxPrgFile public + use strict arg src, baseName +return createFile(src, baseName || '.rex') + +/* deleteFile( fileName )- - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + + Provides a platform independent file delete. On some platforms, SysFileDelete + does not force a deletion. This function will force the deletion where + possible. + + Input: + fileName REQUIRED + The file to delete. + + Returns: + The operating system return code when the delete is done. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine deleteFile public + use strict arg fileName + + -- On Linux (bash) and Windows the delete can be forced. Not sure on other + -- OSes + select + when .ooRexxUnit.OSName == "WINDOWS" then do + 'del /q /f' fileName '1>nul 2>&1' + ret = RC + end + when .ooRexxUnit.OSName == "LINUX" then do + 'rm -f' fileName '>/dev/null 2>&1' + ret = RC + end + otherwise ret = SysFileDelete(fileName) + end + +return ret +-- End deleteFile( fileName ) + +/* execRexxPrg( prgName, output )- - - - - - - - - - - - - - - - - - - - - - -*\ + + Executes a Rexx program using a separate instance of the interpreter. This + function captures the output and the return code from the executed program and + returns it to the caller. + + Input: + prgName REQUIRED + The Rexx program to execute. + + output REQUIRED [In / Out] + An array object in which the the executed program's output is returned. + The output lines are appended to the array, so the array does not need to + be empty. + + Returns: + The return code produced by executing the program on success. Returns 9999 + for an internal error. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine execRexxPrg public + use strict arg prgName, output + + if \ output~isInstanceOf(.array) then return 9999 + + -- Only supported on Linux (bash) and Windows. Other OSes or shells could + -- be added here. (Turns out Linux and Windows redirection is the same.) + select + when .ooRexxUnit.OSName == "WINDOWS" then stdErrToStdOut = '2>&1' + when .ooRexxUnit.OSName == "LINUX" then stdErrToStdOut = '2>&1' + otherwise return 9999 + end + + tmpOutFile = 'tmpXXX_delete.me' + + cmd = 'rexx' prgName '>' tmpOutFile stdErrToStdOut + cmd + prgRet = RC + + fsObj = .stream~new(tmpOutFile) + tmpArray = fsObj~arrayin + do line over tmpArray + output~append(line) + end + fsObj~close + + j = deleteFile(tmpOutFile) + +return prgRet +-- End execRexxPrg( prgName, output ) + +/* indirectRequire( fileName ) - - - - - - - - - - - - - - - - - - - - - - - -*\ + + Provides a way for a test unit to indirectly 'require' (use the ::requires + directive) a file. This is best explained using an example. + + A test unit written to test a Windows specific feature of the interprerter, + say the WindowsClipboard class, can test if the operating system is Windows + before it executes any tests. If the OS is not Windows, it simply returns an + empty list and no tests are executed. + + However, if that test unit has a requires directive for a Windows only file, + the test unit produces an error when run on a non-Windows OS because the + required file is not found. This error ocurrs before the OS test has a chance + to execute. + + This function allows the test unit to first determine that the OS is Windows, + then add the 'required' file. This supports the ooRexx project goal of having + the entire test suite run on any supported OS and not produce extraneous + errors. Although the example is Windows, the principle applies to any OS. + + Psuedo code to use this function: + + -- Test OS + if not right OS then return empty list + + prgFile = indirectRequire(<fileToRequire>) + if pgrFile == "" then return empty list -- Some error happened. + + call (prgfile) -- Now the requires directive for the file has executed. + + deleteFile(prgFile) -- Delete the temporary file. + + Input: + fileName REQUIRED + The file that is to be indirectly required. + + Returns: + On success, the fully quailified file name of the Rexx program that will + 'require' the specified file. The empty string is returned on error. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine indirectRequire public + use strict arg fileName + + srcLines = .array~of('::requires' enQuote(fileName)) + fullName = createRexxPrgFile(srcLines, 'tmpIndirectRequire') + +return fullName +-- End indirectRequire() + Modified: test/trunk/framework/OOREXXUNIT.CLS =================================================================== --- test/trunk/framework/OOREXXUNIT.CLS 2007-11-26 15:40:52 UTC (rev 1308) +++ test/trunk/framework/OOREXXUNIT.CLS 2007-11-26 17:39:28 UTC (rev 1309) @@ -1368,9 +1368,16 @@ line = info[1] if line~abbrev("@assert") then do - parse var line atWord assert "expected=" expected ", actual=" actual - assert = assert~strip~strip('T', ':') - actual = actual~strip('T', '.') + if line~word(2)~abbrev('check4Condition') then do + parse var line . '['expected']' . + assert = "Error should be raised" + actual = "Not raised" + end + else do + parse var line atWord assert "expected=" expected ", actual=" actual + assert = assert~strip~strip('T', ':') + actual = actual~strip('T', '.') + end say " Failed:" assert say " Expected:" expected say " Actual: " actual Copied: test/trunk/framework/WinUtils.cls (from rev 1298, test/branches/test.3.2.0/framework/WinUtils.cls) =================================================================== --- test/trunk/framework/WinUtils.cls (rev 0) +++ test/trunk/framework/WinUtils.cls 2007-11-26 17:39:28 UTC (rev 1309) @@ -0,0 +1,159 @@ +#!/usr/bin/rexx +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2007-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. */ +/* */ +/*----------------------------------------------------------------------------*/ +/* + name: WinUtils.cls + authors: Mark Miesfeld + last update: 2007-11-24 + + purpose: Provides public routines and utility classes to aid in the + creation of test units that are Windows specific. (The + test cases are for Windows specific portions of the ooRexx + package.) + + remarks: This file fits into the ooRexxUnit framework as part of the + framwork's primary use by the ooRexx development team to + test the ooRexx interpretor. It may be of limited use + outside of that role. + + category0: ooRexxUnit + category1: framework +*/ + + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + Directives, Classes, or Routines. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::requires "winsystm.cls" + +::class 'ProgramLauncher' public + + -- Attribute: prgResultCode + -- Holds the return code when the program ends + ::method prgResultCode attribute + + ::method init + expose prgName finished + use arg prgName + self~init:super + finished = .false + + ::method getResult unguarded + expose finished + guard on when finished + return self~prgResultCode + + ::method startProgram + expose prgName finished + + reply 0 + + prgName + self~prgResultCode = RC + finished = .true + +::class 'WindowFinder' public + ::method repetitions attribute + ::method sleepTime attribute + + ::method init + expose windowMgr + + windowMgr = .WindowsManager~new + self~repetitions = 20 + self~sleepTime = .1 + + ::method getWindow + expose windowMgr + use arg title, loops, pause + + if arg(2, 'O') then loops = self~repetitions + if arg(3, 'O') then pause = self~sleepTime + + do loops + j = SysSleep(pause) + wnd = windowMgr~find(title) + if wnd~class == .WindowObject then leave + end + + return wnd + + +/* displayWindowChildren( windowObj )- - - - - - - - - - - - - - - - - - - - -*\ + + Utility routine to display information about the child windows of the + specified window. This is useful for getting the needed information about + windows, such as buttons, so that they can be manipulated. + + Note: + This function would not, normally, be used in a test unit. It is a utility + to aid in the development of test units where the Windows GUI is involved. + + Input: + windowObj REQUIRED + A WindowObject instance that represents the parent window of the children + windows. + + Returns: + -1 if windowObject is not the proper class, otherwise the count of children + windows. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine displayWindowChildren public + use strict arg windowObj + + if windowObj~class <> .WindowObject then do + say "Error not a WindowObject. Can not display children." + return -1 + end + + enum. = windowObj~enumerateChildren + say 'The' windowObj~title "window has" enum.0 'children' + + do i = 1 to enum.0 + say 'Child number:' i + say ' Title: ' enum.i.!title + say ' Window Class ' enum.i.!class + say ' Window ID ' enum.i.!id + say ' Window State: ' enum.i.!state + say ' Count children: ' enum.i.!children + say ' Window handle: ' enum.i.!handle + say ' Window position:' enum.i.!coordinates + say + end + +return enum.0; +-- End displayWindowChildren( windowObj ) Copied: test/trunk/tests/oorexxunit/ooRexx/base/bif (from rev 1306, test/branches/test.3.2.0/tests/oorexxunit/ooRexx/base/bif) Deleted: test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit =================================================================== --- test/branches/test.3.2.0/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit 2007-11-26 02:47:27 UTC (rev 1306) +++ test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -1,315 +0,0 @@ -#!/usr/bin/rexx -/* - name: ooRexx.Base.BIF.LINES.testUnit - authors: Mark Miesfeld - date: 11/25/2007 - version: 1.0.0 - changed: - - languageLevel: 6.0 - purpose: A collection of tests for the lines() builtin function. - - remark: Test units are always works in progress. Any one should - feel free to add, update, improve, or correct tests in this - collection of tests. - - license: CPL 1.0 (Common Public License v1.0, see below) - link: - - category1: ooRexx - category2: Base - category3: Builtin functions - -*/ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2007-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.ibm.com/developerworks/oss/CPLv1.0.htm */ -/* */ -/* 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. */ -/* */ -/*----------------------------------------------------------------------------*/ - - testUnitClass = .ooRexx.Base.BIF.LINES.testUnit - testUnitList = .list~of(.array~of(testUnitClass, .list~new)) - - srcLines = .array~new - do i = 1 to 150 until srcLines[i] = "*/" - srcLines[i] = sourceline(i) - end - - call makeDirTestInfo testUnitClass, srcLines - - parse source s - testUnitClass~testCaseInfo~setentry("test_Case-source", s) - - if \ .local~hasentry("bRunTestsLocally") then - .local~bRunTestsLocally = .true - - if .bRunTestsLocally == .true then do - ts = .TestSuite~new - ts~addTest(.TestSuite~new(testUnitClass)) - - testResult = ts~run - call simpleFormatTestResults testResult - end - -return testUnitList --- End of entry point. - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ - Directives, Classes, or Routines. -\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::requires "FileUtils.cls" - -/* class: ooRexx.Base.BIF.LINES.testUnit - - - - - - - - - - - - - - - - - - -*\ - -\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::class ooRexx.Base.BIF.LINES.testUnit public subclass TestCase - - ::method test_stdin_normal - - -- Default stream is stdin, default for omitted second arg should be Normal - self~assertSame("Should be no lines available in stdin", 0, lines()) - - self~assertSame('stdin empty "Normal" is valid', 0, lines( , "Normal")) - self~assertSame('stdin empty "normal" is valid', 0, lines( , "normal")) - self~assertSame('stdin empty "nORmAl" is valid', 0, lines( , "nORmAl")) - self~assertSame('stdin empty "NORMAL" is valid', 0, lines( , "NORMAL")) - self~assertSame('stdin empty "NORMALLYLONGERTHANNEEDEDSHOULDBEVALID" is valid', 0, - - lines( , "NORMALLYLONGERTHANNEEDEDSHOULDBEVALID")) - self~assertSame('stdin empty "n" is valid', 0, lines( , "n")) - self~assertSame('stdin empty "N" is valid', 0, lines( , "N")) - self~assertSame('stdin empty "Nor" is valid', 0, lines( , "Nor")) - self~assertSame('stdin empty "NIGHTSHADE" is valid', 0, lines( , "NIGHTSHADE")) - - opt = 'n' - self~assertSame('stdin empty use a variable for the option is valid', 0, lines( , opt)) - - opt = 'N' || 'uncool'~copies(5000) - self~assertSame('stdin empty extremely long string is valid', 0, lines( , opt)) - - ::method test_stdin_count - self~assertSame('stdin empty "Count" is valid', 0, lines(, "Count")) - self~assertSame('stdin empty "count" is valid', 0, lines(, "count")) - self~assertSame('stdin empty "COUNT" is valid', 0, lines(, "COUNT")) - self~assertSame('stdin empty "cOuNt" is valid', 0, lines(, "cOuNt")) - - self~assertSame('stdin empty "c" is valid', 0, lines(, "c")) - self~assertSame('stdin empty "C" is valid', 0, lines(, "C")) - self~assertSame('stdin empty "comic" is valid', 0, lines(, "comic")) - - opt = 'c' - self~assertSame('stdin empty use of a variable for "Count" is valid', 0, lines(, opt)) - - opt = 'C' || "comedian"~copies(1000) - self~assertSame('stdin empty use of a long string for "Count" is valid', 0, lines(, opt)) - - ::method test_fileStream_normal - - -- Create a temp file with exactly 4 lines in it. - fileName = createFile(.array~of(1, 2, 3, 4), "delMe_BIF_Lines4") - - -- Assert the file was created ok - self~assertFalse('temp file must be created', fileName == "") - - self~assertSame('file has lines, omitted 2nd arg should return 1', 1, lines(fileName)) - self~assertSame('file has lines, "N" for 2nd arg should return 1', 1, lines(fileName, 'N')) - self~assertSame('file has lines, "Normal" for 2nd arg should return 1', 1, lines(fileName, 'Normal')) - - -- Read 2 lines, should get same results, because file still has lines. - do 2 - discard = linein(fileName) - end - self~assertSame('file has 2 lines, omitted 2nd arg should return 1', 1, lines(fileName)) - self~assertSame('file has 2 lines, "N" for 2nd arg should return 1', 1, lines(fileName, 'N')) - self~assertSame('file has 2 lines, "Normal" for 2nd arg should return 1', 1, lines(fileName, 'Normal')) - - -- Read 2 lines, should get 0 for same tests. - do 2 - discard = linein(fileName) - end - self~assertSame('file has 0 lines, omitted 2nd arg should return 0', 0, lines(fileName)) - self~assertSame('file has 0 lines, "N" for 2nd arg should return 0', 0, lines(fileName, 'N')) - self~assertSame('file has 0 lines, "Normal" for 2nd arg should return 0', 0, lines(fileName, 'Normal')) - - -- Be sure file is closed and delete it. - j = lineout(fileName) - j = deleteFile(fileName) - - - ::method test_fileStream_count - - -- Create a temp file with exactly 64 lines in it. - txt = .array~new - do i = 1 to 64 - txt~append(i) - end - fileName = createFile(txt, "delMe_BIF_Lines64") - self~assertFalse('temp file must be created', fileName == "") - - self~assertSame('file has 64 lines, 2nd arg "C" should return 64', 64, lines(fileName, 'C')) - self~assertSame('file has 64 lines, 2nd arg "c" should return 64', 64, lines(fileName, 'c')) - self~assertSame('file has 64 lines, 2nd arg "count" should return 64', 64, lines(fileName, "count")) - - -- Read 4 lines, option of count should return 60 - do 4 - discard = linein(fileName) - end - self~assertSame('60 lines left, 2nd arg "C" should return 60', 60, lines(fileName, 'C')) - self~assertSame('60 lines left, 2nd arg "c" should return 60', 60, lines(fileName, 'c')) - self~assertSame('60 lines left, 2nd arg "count" should return 60', 60, lines(fileName, "count")) - - -- Read down to 0 lines, assert count is correct each time - j = 60 - do i = 1 to 60 - self~assertSame(j 'lines left, count option should return' j, j, lines(fileName, 'C')) - discard = linein(fileName) - j -= 1 - end - - self~assertSame('0 lines left COUNT option should return 0', 0, lines(fileName, 'COUNT' )) - - -- Be sure file is closed and delete it. - junk = lineout(fileName) - junk = deleteFile(fileName) - - ::method test_normal_negativeTest1 - - self~assertSame("Non-existent stream, default 2nd arg should return 0", 0, lines('bogusZ2ls')) - self~assertSame("Non-existent stream, 'N' 2nd arg should return 0", 0, lines('b0sokdogusZ2ls', 'N')) - self~assertSame("Non-existent stream, 'NORMAL' 2nd arg should return 0", 0, lines('bklwerj4ogusZ2ls', "NORMAL")) - - self~assertSame("Non-existent stream, 'NORMAL' 2nd arg should return 0", 0, lines('', "NORMAL")) - - ::method test_count_negativeTest1 - - self~assertSame("Non-existent stream, 'count' 2nd arg should return 0", 0, lines('bogusZ2ls', 'count')) - self~assertSame("Non-existent stream, 'C' 2nd arg should return 0", 0, lines('b0sokdogusZ2ls', 'C')) - self~assertSame("Non-existent stream, 'cOUn' 2nd arg should return 0", 0, lines('bklwerj4ogusZ2ls', "cOUn")) - - self~assertSame("Non-existent stream, 'CCC' 2nd arg should return 0", 0, lines('', "CCC")) - - ::method test_normal_bytes - - -- Create a temp file with some lines. - fileName = createFile(.array~of('dog', 'cat', 'lion', 'tiger'), "delMe_BIF_LinesBytes") - self~assertFalse('temp file must be created', fileName == "") - - -- See how many bytes in size it is - bytes = stream(fileName, "C", "QUERY SIZE") - - -- If we read in all the bytes, normal should return 0 - discard = charin(fileName, bytes) - self~assertSame('Read all bytes, 0 lines should remain', 0, lines(fileName)) - - -- Delete the file and create another one for the next test. - junk = lineout(fileName) - junk = deleteFile(fileName) - - -- If we read all the bytes but the last new line chars, lines should - -- return 1. - fileName = createFile(.array~of('tom', 'frank', 'john', 'harry'), "delMe_BIF_LinesBytes2") - self~assertFalse('temp file must be created', fileName == "") - bytes = stream(fileName, "C", "QUERY SIZE") - - -- On Windows the last two chars are the new line chars, on unix-like, - -- just 1 char. On MAC it has always been only 1 char, although a - -- different char on pre MAC OS X. - if .ooRexxUnit.OSName~abbrev("WIN") then readBytes = bytes - 2 - else readBytes = bytes - 1 - - discard = charin(fileName, readBytes) - self~assertSame('Read all bytes but last newline, 1 line should remain', 1, lines(fileName)) - - -- Delete the file - junk = lineout(fileName) - junk = deleteFile(fileName) - - ::method test_count_bytes - - -- This is a repeat of test_normal_bytes, using count, and no comments. - fileName = createFile(.array~of('dog', 'cat', 'lion', 'tiger'), "delMe_BIF_LinesCountB") - self~assertFalse('temp file must be created', fileName == "") - - bytes = stream(fileName, "C", "QUERY SIZE") - discard = charin(fileName, bytes) - self~assertSame('Read all bytes, use "C" options, 0 lines should remain', 0, lines(fileName, 'C')) - - junk = lineout(fileName) - junk = deleteFile(fileName) - fileName = createFile(.array~of('tom', 'frank', 'john', 'harry'), "delMe_BIF_LinesCount2") - self~assertFalse('temp file must be created', fileName == "") - bytes = stream(fileName, "C", "QUERY SIZE") - - if .ooRexxUnit.OSName~abbrev("WIN") then readBytes = bytes - 2 - else readBytes = bytes - 1 - - discard = charin(fileName, readBytes) - self~assertSame('Read all bytes but last newline, "C" option, 1 line should remain', 1, lines(fileName)) - - -- Delete the file - junk = lineout(fileName) - junk = deleteFile(fileName) - - /* The following all test bad syntax options */ - ::method test_bad_opt_stdin - self~expectSyntax("40.904") - j = lines(, "Tom") - - ::method test_bad_opt_noFile - self~expectSyntax("40.904") - j = lines('bogusFile', "Left") - - ::method test_bad_opt_goodFile - self~expectSyntax("40.904") - j = lines('ooRexx.Base.BIF.LINES.testUnit', 0) - - ::method test_too_many_opt_goodFile - self~expectSyntax("40.4") - j = lines('ooRexx.Base.BIF.LINES.testUnit', 'NORMAL', 'COUNT') - - ::method test_too_many_opt_stdin - self~expectSyntax("40.4") - j = lines(, 'NORMAL', 'COUNT') - - ::method test_way_too_many_opt_stdin - self~expectSyntax("40.4") - j = lines(, 'N', 'C', 1,2,2,3,4,5,6,7,8,9,0,'t','a','b','d') - - /* This test will fail on 3.2.0, but should pass on later versions of the - * interpreter. - */ - ::method test_bad_opt_stdin_nullString - self~expectSyntax("40.904") - j = lines(, "") - --- End of class: ooRexx.Base.BIF.LINES.testUnit Copied: test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit (from rev 1306, test/branches/test.3.2.0/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit) =================================================================== --- test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit (rev 0) +++ test/trunk/tests/oorexxunit/ooRexx/base/bif/ooRexx.Base.BIF.LINES.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -0,0 +1,315 @@ +#!/usr/bin/rexx +/* + name: ooRexx.Base.BIF.LINES.testUnit + authors: Mark Miesfeld + date: 11/25/2007 + version: 1.0.0 + changed: + + languageLevel: 6.0 + purpose: A collection of tests for the lines() builtin function. + + remark: Test units are always works in progress. Any one should + feel free to add, update, improve, or correct tests in this + collection of tests. + + license: CPL 1.0 (Common Public License v1.0, see below) + link: + + category1: ooRexx + category2: Base + category3: Builtin functions + +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 2007-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.ibm.com/developerworks/oss/CPLv1.0.htm */ +/* */ +/* 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. */ +/* */ +/*----------------------------------------------------------------------------*/ + + testUnitClass = .ooRexx.Base.BIF.LINES.testUnit + testUnitList = .list~of(.array~of(testUnitClass, .list~new)) + + srcLines = .array~new + do i = 1 to 150 until srcLines[i] = "*/" + srcLines[i] = sourceline(i) + end + + call makeDirTestInfo testUnitClass, srcLines + + parse source s + testUnitClass~testCaseInfo~setentry("test_Case-source", s) + + if \ .local~hasentry("bRunTestsLocally") then + .local~bRunTestsLocally = .true + + if .bRunTestsLocally == .true then do + ts = .TestSuite~new + ts~addTest(.TestSuite~new(testUnitClass)) + + testResult = ts~run + call simpleFormatTestResults testResult + end + +return testUnitList +-- End of entry point. + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + Directives, Classes, or Routines. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::requires "FileUtils.cls" + +/* class: ooRexx.Base.BIF.LINES.testUnit - - - - - - - - - - - - - - - - - - -*\ + +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::class ooRexx.Base.BIF.LINES.testUnit public subclass TestCase + + ::method test_stdin_normal + + -- Default stream is stdin, default for omitted second arg should be Normal + self~assertSame("Should be no lines available in stdin", 0, lines()) + + self~assertSame('stdin empty "Normal" is valid', 0, lines( , "Normal")) + self~assertSame('stdin empty "normal" is valid', 0, lines( , "normal")) + self~assertSame('stdin empty "nORmAl" is valid', 0, lines( , "nORmAl")) + self~assertSame('stdin empty "NORMAL" is valid', 0, lines( , "NORMAL")) + self~assertSame('stdin empty "NORMALLYLONGERTHANNEEDEDSHOULDBEVALID" is valid', 0, - + lines( , "NORMALLYLONGERTHANNEEDEDSHOULDBEVALID")) + self~assertSame('stdin empty "n" is valid', 0, lines( , "n")) + self~assertSame('stdin empty "N" is valid', 0, lines( , "N")) + self~assertSame('stdin empty "Nor" is valid', 0, lines( , "Nor")) + self~assertSame('stdin empty "NIGHTSHADE" is valid', 0, lines( , "NIGHTSHADE")) + + opt = 'n' + self~assertSame('stdin empty use a variable for the option is valid', 0, lines( , opt)) + + opt = 'N' || 'uncool'~copies(5000) + self~assertSame('stdin empty extremely long string is valid', 0, lines( , opt)) + + ::method test_stdin_count + self~assertSame('stdin empty "Count" is valid', 0, lines(, "Count")) + self~assertSame('stdin empty "count" is valid', 0, lines(, "count")) + self~assertSame('stdin empty "COUNT" is valid', 0, lines(, "COUNT")) + self~assertSame('stdin empty "cOuNt" is valid', 0, lines(, "cOuNt")) + + self~assertSame('stdin empty "c" is valid', 0, lines(, "c")) + self~assertSame('stdin empty "C" is valid', 0, lines(, "C")) + self~assertSame('stdin empty "comic" is valid', 0, lines(, "comic")) + + opt = 'c' + self~assertSame('stdin empty use of a variable for "Count" is valid', 0, lines(, opt)) + + opt = 'C' || "comedian"~copies(1000) + self~assertSame('stdin empty use of a long string for "Count" is valid', 0, lines(, opt)) + + ::method test_fileStream_normal + + -- Create a temp file with exactly 4 lines in it. + fileName = createFile(.array~of(1, 2, 3, 4), "delMe_BIF_Lines4") + + -- Assert the file was created ok + self~assertFalse('temp file must be created', fileName == "") + + self~assertSame('file has lines, omitted 2nd arg should return 1', 1, lines(fileName)) + self~assertSame('file has lines, "N" for 2nd arg should return 1', 1, lines(fileName, 'N')) + self~assertSame('file has lines, "Normal" for 2nd arg should return 1', 1, lines(fileName, 'Normal')) + + -- Read 2 lines, should get same results, because file still has lines. + do 2 + discard = linein(fileName) + end + self~assertSame('file has 2 lines, omitted 2nd arg should return 1', 1, lines(fileName)) + self~assertSame('file has 2 lines, "N" for 2nd arg should return 1', 1, lines(fileName, 'N')) + self~assertSame('file has 2 lines, "Normal" for 2nd arg should return 1', 1, lines(fileName, 'Normal')) + + -- Read 2 lines, should get 0 for same tests. + do 2 + discard = linein(fileName) + end + self~assertSame('file has 0 lines, omitted 2nd arg should return 0', 0, lines(fileName)) + self~assertSame('file has 0 lines, "N" for 2nd arg should return 0', 0, lines(fileName, 'N')) + self~assertSame('file has 0 lines, "Normal" for 2nd arg should return 0', 0, lines(fileName, 'Normal')) + + -- Be sure file is closed and delete it. + j = lineout(fileName) + j = deleteFile(fileName) + + + ::method test_fileStream_count + + -- Create a temp file with exactly 64 lines in it. + txt = .array~new + do i = 1 to 64 + txt~append(i) + end + fileName = createFile(txt, "delMe_BIF_Lines64") + self~assertFalse('temp file must be created', fileName == "") + + self~assertSame('file has 64 lines, 2nd arg "C" should return 64', 64, lines(fileName, 'C')) + self~assertSame('file has 64 lines, 2nd arg "c" should return 64', 64, lines(fileName, 'c')) + self~assertSame('file has 64 lines, 2nd arg "count" should return 64', 64, lines(fileName, "count")) + + -- Read 4 lines, option of count should return 60 + do 4 + discard = linein(fileName) + end + self~assertSame('60 lines left, 2nd arg "C" should return 60', 60, lines(fileName, 'C')) + self~assertSame('60 lines left, 2nd arg "c" should return 60', 60, lines(fileName, 'c')) + self~assertSame('60 lines left, 2nd arg "count" should return 60', 60, lines(fileName, "count")) + + -- Read down to 0 lines, assert count is correct each time + j = 60 + do i = 1 to 60 + self~assertSame(j 'lines left, count option should return' j, j, lines(fileName, 'C')) + discard = linein(fileName) + j -= 1 + end + + self~assertSame('0 lines left COUNT option should return 0', 0, lines(fileName, 'COUNT' )) + + -- Be sure file is closed and delete it. + junk = lineout(fileName) + junk = deleteFile(fileName) + + ::method test_normal_negativeTest1 + + self~assertSame("Non-existent stream, default 2nd arg should return 0", 0, lines('bogusZ2ls')) + self~assertSame("Non-existent stream, 'N' 2nd arg should return 0", 0, lines('b0sokdogusZ2ls', 'N')) + self~assertSame("Non-existent stream, 'NORMAL' 2nd arg should return 0", 0, lines('bklwerj4ogusZ2ls', "NORMAL")) + + self~assertSame("Non-existent stream, 'NORMAL' 2nd arg should return 0", 0, lines('', "NORMAL")) + + ::method test_count_negativeTest1 + + self~assertSame("Non-existent stream, 'count' 2nd arg should return 0", 0, lines('bogusZ2ls', 'count')) + self~assertSame("Non-existent stream, 'C' 2nd arg should return 0", 0, lines('b0sokdogusZ2ls', 'C')) + self~assertSame("Non-existent stream, 'cOUn' 2nd arg should return 0", 0, lines('bklwerj4ogusZ2ls', "cOUn")) + + self~assertSame("Non-existent stream, 'CCC' 2nd arg should return 0", 0, lines('', "CCC")) + + ::method test_normal_bytes + + -- Create a temp file with some lines. + fileName = createFile(.array~of('dog', 'cat', 'lion', 'tiger'), "delMe_BIF_LinesBytes") + self~assertFalse('temp file must be created', fileName == "") + + -- See how many bytes in size it is + bytes = stream(fileName, "C", "QUERY SIZE") + + -- If we read in all the bytes, normal should return 0 + discard = charin(fileName, bytes) + self~assertSame('Read all bytes, 0 lines should remain', 0, lines(fileName)) + + -- Delete the file and create another one for the next test. + junk = lineout(fileName) + junk = deleteFile(fileName) + + -- If we read all the bytes but the last new line chars, lines should + -- return 1. + fileName = createFile(.array~of('tom', 'frank', 'john', 'harry'), "delMe_BIF_LinesBytes2") + self~assertFalse('temp file must be created', fileName == "") + bytes = stream(fileName, "C", "QUERY SIZE") + + -- On Windows the last two chars are the new line chars, on unix-like, + -- just 1 char. On MAC it has always been only 1 char, although a + -- different char on pre MAC OS X. + if .ooRexxUnit.OSName~abbrev("WIN") then readBytes = bytes - 2 + else readBytes = bytes - 1 + + discard = charin(fileName, readBytes) + self~assertSame('Read all bytes but last newline, 1 line should remain', 1, lines(fileName)) + + -- Delete the file + junk = lineout(fileName) + junk = deleteFile(fileName) + + ::method test_count_bytes + + -- This is a repeat of test_normal_bytes, using count, and no comments. + fileName = createFile(.array~of('dog', 'cat', 'lion', 'tiger'), "delMe_BIF_LinesCountB") + self~assertFalse('temp file must be created', fileName == "") + + bytes = stream(fileName, "C", "QUERY SIZE") + discard = charin(fileName, bytes) + self~assertSame('Read all bytes, use "C" options, 0 lines should remain', 0, lines(fileName, 'C')) + + junk = lineout(fileName) + junk = deleteFile(fileName) + fileName = createFile(.array~of('tom', 'frank', 'john', 'harry'), "delMe_BIF_LinesCount2") + self~assertFalse('temp file must be created', fileName == "") + bytes = stream(fileName, "C", "QUERY SIZE") + + if .ooRexxUnit.OSName~abbrev("WIN") then readBytes = bytes - 2 + else readBytes = bytes - 1 + + discard = charin(fileName, readBytes) + self~assertSame('Read all bytes but last newline, "C" option, 1 line should remain', 1, lines(fileName)) + + -- Delete the file + junk = lineout(fileName) + junk = deleteFile(fileName) + + /* The following all test bad syntax options */ + ::method test_bad_opt_stdin + self~expectSyntax("40.904") + j = lines(, "Tom") + + ::method test_bad_opt_noFile + self~expectSyntax("40.904") + j = lines('bogusFile', "Left") + + ::method test_bad_opt_goodFile + self~expectSyntax("40.904") + j = lines('ooRexx.Base.BIF.LINES.testUnit', 0) + + ::method test_too_many_opt_goodFile + self~expectSyntax("40.4") + j = lines('ooRexx.Base.BIF.LINES.testUnit', 'NORMAL', 'COUNT') + + ::method test_too_many_opt_stdin + self~expectSyntax("40.4") + j = lines(, 'NORMAL', 'COUNT') + + ::method test_way_too_many_opt_stdin + self~expectSyntax("40.4") + j = lines(, 'N', 'C', 1,2,2,3,4,5,6,7,8,9,0,'t','a','b','d') + + /* This test will fail on 3.2.0, but should pass on later versions of the + * interpreter. + */ + ::method test_bad_opt_stdin_nullString + self~expectSyntax("40.904") + j = lines(, "") + +-- End of class: ooRexx.Base.BIF.LINES.testUnit Modified: test/trunk/tests/oorexxunit/ooRexx/base/class/ooRexx.Base.Class.Class.testUnit =================================================================== --- test/trunk/tests/oorexxunit/ooRexx/base/class/ooRexx.Base.Class.Class.testUnit 2007-11-26 15:40:52 UTC (rev 1308) +++ test/trunk/tests/oorexxunit/ooRexx/base/class/ooRexx.Base.Class.Class.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -1,6 +1,6 @@ #!/usr/bin/rexx /* - name: ooRexx.Base.Class.CircularQueue.testUnit + name: ooRexx.Base.Class.Class.testUnit author: Rony G. Flatscher date: 2006-11-28 version: 1.0.5 @@ -15,7 +15,7 @@ 2007-05-31, ---rgf, added "test_MULTIPLE_INHERITANCE_WITH_MULTIPLE_METACLASSES" languageLevel: 6.02 - purpose: Test the methods of the class CircularQueue. + purpose: Test the methods of the class Class. remark: --- license: CPL 1.0 (Common Public License v1.0, see below) @@ -120,7 +120,7 @@ -- testResult=.testSuite~new(testUnitClass)~run testResult=ts~run -- now run all the tests - call simpleDumpTestResults testResult + call simpleFormatTestResults testResult end /* return list of array objects containing test case classes and Modified: test/trunk/tests/oorexxunit/ooRexx/base/ooRexx.Base.SourceFile.testUnit =================================================================== --- test/trunk/tests/oorexxunit/ooRexx/base/ooRexx.Base.SourceFile.testUnit 2007-11-26 15:40:52 UTC (rev 1308) +++ test/trunk/tests/oorexxunit/ooRexx/base/ooRexx.Base.SourceFile.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -4,8 +4,10 @@ author: Mark Miesfeld date: 10/29/2007 version: 0.1.0 - changed: + changed: 11/14/2007 Moved the file utility routines into the + framework so they are available for all test units. MM + languageLevel: 6.0 purpose: Test cases related to the interpreter reading a source file @@ -101,7 +103,7 @@ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ Directives, Classes, or Routines. \* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::requires "OOREXXUNIT.CLS" +::requires "FileUtils.cls" -- FileUtils.cls has a requires for OOREXXUNIT.CLS /* class: ooRexx.Base.SourceFile.testUnit- - - - - - - - - - - - - - - - - - -*\ @@ -356,60 +358,3 @@ -- End of class: ooRexx.Base.SourceFile.testUnit -::routine createRexxPrgFile public - use arg src, baseName - - fileName = "" - fn = baseName || '.rex' - fsObj = .stream~new(fn) - state = fsObj~open("WRITE REPLACE") - if state~abbrev("READY") then do - fsObj~arrayout(src) - fsObj~close - fileName = fsObj~qualify - end - -return fileName - -::routine execRexxPrg public - use arg fileName, output - - errRet = 9999 - - -- Only supported on Linux (bash) and Windows. Other OSes or shells could - -- be added here. (Turns out Linux and Windows redirection is the same.) - select - when .ooRexxUnit.OSName == "WINDOWS" then stdErrToStdOut = '2>&1' - when .ooRexxUnit.OSName == "LINUX" then stdErrToStdOut = '2>&1' - otherwise return errRet - end - - tmpOutFile = 'tmpXXX_delete.me' - - cmd = 'rexx' fileName '>' tmpOutFile stdErrToStdOut - cmd - prgRet = RC - - fsObj = .stream~new(tmpOutFile) - tmpArray = fsObj~arrayin - do line over tmpArray - output~append(line) - end - fsObj~close - - j = deleteFile(tmpOutFile) - -return prgRet - -::routine deleteFile public - use arg fileName - - -- On Linux (bash) and Windows the delete can be forced. Not sure on other - -- OSes - select - when .ooRexxUnit.OSName == "WINDOWS" then 'del /q /f' fileName '1>nul 2>&1' - when .ooRexxUnit.OSName == "LINUX" then 'rm -f' fileName '>/dev/null 2>&1' - otherwise j = SysFileDelete(fileName) - end - -return 0 Modified: test/trunk/tests/oorexxunit/ooRexx/extensions/platform/windows/rxwinsys/ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit =================================================================== --- test/trunk/tests/oorexxunit/ooRexx/extensions/platform/windows/rxwinsys/ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit 2007-11-26 15:40:52 UTC (rev 1308) +++ test/trunk/tests/oorexxunit/ooRexx/extensions/platform/windows/rxwinsys/ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -64,6 +64,20 @@ -- return an empty list to a, possible, caller. if .ooRexxUnit.OSName <> "WINDOWS" then return .list~new + -- Now that we know we are on a Windows box, add the required winsystm.cls + -- + -- Use indirectRequire() to create a rexx program file with the requires + -- directive for winsystm.cls. If an empty string is returned, that + -- indicates an error happned, so return the empty list. Otherwise, call + -- the program file, which will add the winsystm.cls definitions to this + -- process, and the test cases can execute. Delete the temporary program + -- file. + prgFile = indirectRequire('winsystm.cls') + if prgFile == "" then return .list~new + call (prgFile) + j = deleteFile(prgFile) + + testUnitClass=.ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit -- change accordingly ------------------------------------------------------------------------------------------- /* list of array objects, each containing the testUnit class object and an @@ -116,9 +130,13 @@ /* return list of array objects containing test case classes and optionally list of mandatory test methods */ return testUnitList +-- End of entry point. -::requires ooRexxUnit.cls -- load the ooRexxUnit classes -::requires "WINSYSTM.CLS" +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + load the ooRexxUnit classes, FileUtils.cls has the requires directive for + OOREXXUNIT.CLS +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::requires "FileUtils.cls" -- class named exactly like file ::class "ooRexx.Extensions.Platform.Windows.RxWinSys.Clipboard.testUnit" subclass TestCase public Copied: test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog (from rev 1300, test/branches/test.3.2.0/tests/oorexxunit/ooRexx/samples/ooDialog) Deleted: test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog/ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit =================================================================== --- test/branches/test.3.2.0/tests/oorexxunit/ooRexx/samples/ooDialog/ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit 2007-11-25 06:20:28 UTC (rev 1300) +++ test/trunk/tests/oorexxunit/ooRexx/samples/ooDialog/ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit 2007-11-26 17:39:28 UTC (rev 1309) @@ -1,332 +0,0 @@ -#!/usr/bin/rexx -/* - name: ooRexx.samples.ooDialog.fileNameDialog_demo.testUnit - author: Mark Miesfeld - date: 2007-08-13 - version: 0.0.9 - changed: - - languageLevel: 6.0 - purpose: Test the fileNameDialog_demo ooRexx program - - remark: A primary reason for this test unit is to ensure the sample - program shipped with the release package of ooRexx runs - as expected. - - If all samples have a test unit, then an automated test can - be run after a build to ensure all sample programs will - execute. - - This is a Windows only test. This test needs to be run - with a standard ooRexx installation. - - This test unit is a work in progress. Please feel free to - add to it. The idea is to work through all the options of - the sample program. A generic killExample() method is - started, but may not be finished. The method would be used - to shut down the sample program if the test unit gets - 'stuck.' - - The test unit should also serve as an example of how to - automate the execution of an ooDialog program. - - license: CPL 1.0 (Common Public License v1.0, see below) - link: - - category1: ooRexx - category2: samples - category3: ooDialog - -*/ -/*----------------------------------------------------------------------------*/ -/* */ -/* Copyright (c) 2007 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.ibm.com/developerworks/oss/CPLv1.0.htm */ -/* */ -/* 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 ... [truncated message content] |