From: <mie...@us...> - 2008-05-12 22:31:14
|
Revision: 2492 http://oorexx.svn.sourceforge.net/oorexx/?rev=2492&view=rev Author: miesfeld Date: 2008-05-12 15:31:13 -0700 (Mon, 12 May 2008) Log Message: ----------- ooRexxUnit - forward port the following commits from 3.2.0 branch to trunk 2269 - Fix some Linux idiosyncrasies. ------------------------------------------------------------------------ 2268 - Fix the search for sample programs on Linux. ------------------------------------------------------------------------ 2267 - Add a sample OLEObject test group. Fix the properties on the sample test groups. Start of conversion to only use svn revision and change date as the meta data for test groups. ------------------------------------------------------------------------ 2266 - As a convenience make the machineOS attribute gettable by all. ------------------------------------------------------------------------ 2265 - Add some public functions to the framework to help when writing OLEObject test cases. ------------------------------------------------------------------------ 2261 - fix spaces in path name problem on Windows ------------------------------------------------------------------------ Modified Paths: -------------- test/trunk/framework/FileUtils.cls test/trunk/misc/template.testGroup test/trunk/ooRexx/base/bif/BEEP.testGroup test/trunk/ooRexx/samples/drives.testGroup test/trunk/ooRexx/samples/ooDialog/examples/fileNameDialog_demo.testGroup test/trunk/ooTest.frm Added Paths: ----------- test/trunk/misc/SampleOLEObject.testGroup Property Changed: ---------------- test/trunk/misc/SimpleWithOneTimeSetup.testGroup test/trunk/misc/SimpleWithSomeSetup.testGroup test/trunk/misc/Simplest.testGroup test/trunk/misc/template.testGroup Modified: test/trunk/framework/FileUtils.cls =================================================================== --- test/trunk/framework/FileUtils.cls 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/framework/FileUtils.cls 2008-05-12 22:31:13 UTC (rev 2492) @@ -167,7 +167,7 @@ end escName = escName || tmp - ret = issueCmd('rpm -q ooRexx | grep' escName, cmdOut) + ret = issueCmd('rpm -q ooRexx --list | grep' escName, cmdOut) if cmdOut~items == 1 then retObj = cmdOut[1] leave FINDSAMPLE end @@ -352,7 +352,7 @@ ::routine execRexxPrgWithArgs public use strict arg prgName, params, output - cmd = 'rexx' prgName params + cmd = 'rexx' .TestUtil~enQuote(prgName) params prgRet = issueCmd(cmd, output) return prgRet @@ -416,3 +416,78 @@ return fullName -- End indirectRequire() + +/* createOleObject( id ) - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + + Creates an .OLEObject instance, a proxy for the specified COM object. This + routine is used to trap the REXX error that happens when the proxied COM + object can not be created. + + Input: + id REQUIRED + The string used to create the COM object. I.e., the ProgID or CLSID. + + withEvents OPTIONAL + If true, create the OLE object with events, otherwise without events. The + default is false. + + beVerbose OPTIONAL + If true and the OleObject is not created, the error message is displayed. + If false, the default, the message is not displayed. + + Use this option for test case development only. Tests run for an + automated test should not produce output. + + Returns: + An instance of .OLEObject on success, .nil on failure. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::routine createOleObject public + use strict arg id, withEvents = .false, beVerbose = .false + + if \ isBoolean(withEvents) then + raise syntax 88.900 array ("withEvents must be set to true or false; found:" withEvents) + + if \ isBoolean(beVerbose) then + raise syntax 88.900 array ("beVerbose must be set to true or false; found:" beVerbose) + + signal on syntax name returnNil + + if withEvents then oleObject = .OLEObject~new(id, "WITHEVENTS") + else oleObject = .OLEObject~new(id, "NOEVENTS") + + return oleObject + +returnNil: + if beVerbose then do + cObj = condition("O") + say "Error" rc": " errortext(rc) + say "Code " cObj~code":" cObj~message + end + + return .nil +-- End createOleObject( id, verbose ) + + +/** testForOleObject() + * Provides a quick check to see if there would be a problem creating an + * OLEObject on the current system. (For example if the OLE Automation + * application is not installed.) + * + * @param id REQUIRED + * The string used to create the OLE Automation object. I.e., the ProgID or + * CLSID. + * + * @return Returns 0 if there are no problems, otherwise the syntax error + * code produced by the failure to create the OLE Automation object. + */ +::routine testForOleObject public + use strict arg id + + signal on syntax name returnCode + + oleObject = .OLEObject~new(id, "NOEVENTS") + drop oleObject + return 0 + +returnCode: + return condition('O')~code Copied: test/trunk/misc/SampleOLEObject.testGroup (from rev 2267, test/branches/test.3.2.0/misc/SampleOLEObject.testGroup) =================================================================== --- test/trunk/misc/SampleOLEObject.testGroup (rev 0) +++ test/trunk/misc/SampleOLEObject.testGroup 2008-05-12 22:31:13 UTC (rev 2492) @@ -0,0 +1,113 @@ +#!/usr/bin/rexx +/* + SVN Revision: $Rev$ + Change Date: $Date$ +*/ +/*----------------------------------------------------------------------------*/ +/* */ +/* 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. */ +/* */ +/*----------------------------------------------------------------------------*/ + /** + * This is an example of how to structure an OLEObject test case. Because not + * all systems will have an OLE Automation application installed, the idea is + * to check in the prologue and make sure the OLEObject can be created. If it + * can not be created, then the test group is marked as having no executable + * tests. + */ + parse source . . s + + group = .TestGroup~new(s) + group~add(.NotesTestCases) + group~restrictOS("WINDOWS") + + -- If we are on Windows test for the OLE Automation object. By testing that + -- the current OS is Windows, we don't over-ride the OS restriction reason + -- with an OLE Object not found reason. That way, on another OS, say Linux, + -- when the test group is skipped the reason will be because the OS is not + -- correct, rather than the reason being the OLE application is not found. + -- On Linux, that reason could be slightly confusing to a user who knows + -- little about OLE Automation. + if group~machineOS == "WINDOWS" then do + code = testForOleObject('Notes.NotesSession') + if code <> 0 then + group~markNoTests("This is an OLE / Notes test but the Notes OLEObject can not be created. Code:" code) + end + + if group~isAutomatedTest then return group + + testResult = group~suite~execute~~print + +return testResult +-- End of entry point. + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + Directives, Classes, or Routines. + The OLE helper functions, testForOleObject() and createOleObject() are in the + FileUtils framework file. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::requires 'ooTest.frm' +::requires 'FileUtils.cls' + +/* class: NotesTestCases - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + Most systems will not have Notes installed and this test group will be + skipped. So there are only a few real test cases. How to write the actual + test cases for OLEObject is left as an exercise for the reader. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::class "NotesTestCases" public subclass ooTestCase + + ::method test_GoodCreation + + notes = createOleObject("Notes.NotesSession") + self~assertNotNull(notes) + + ::method test_UserName + + -- Get the logged in user name. + output = .array~new + cmd = "set USERNAME" + ret = issueCmd(cmd, output) + + -- Always assert that necessary things are as expected. + self~assertSame(0, ret) + self~assertSame(1, output~items) + parse value output[1] with envVar "=" user + + notes = createOleObject("Notes.NotesSession") + self~assertNotNull(notes) + + notesUser = notes~UserName + self~assertSame(user, notesUser) + +-- End of class: NotesTestCases Property changes on: test/trunk/misc/SimpleWithOneTimeSetup.testGroup ___________________________________________________________________ Name: svn:executable + * Name: svn:eol-style: + Lf Property changes on: test/trunk/misc/SimpleWithSomeSetup.testGroup ___________________________________________________________________ Name: svn:executable + * Name: svn:eol-style: + Lf Property changes on: test/trunk/misc/Simplest.testGroup ___________________________________________________________________ Name: svn:executable + * Name: svn:eol-style: + Lf Modified: test/trunk/misc/template.testGroup =================================================================== --- test/trunk/misc/template.testGroup 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/misc/template.testGroup 2008-05-12 22:31:13 UTC (rev 2492) @@ -1,33 +1,7 @@ #!/usr/bin/rexx /* - name: template.testGroup - authors: <name> - date: <date> - version: 0.0.0 - changed: - - languageLevel: 6.0 - purpose: A simple template file for starting test groups. - <put your purpose above> - - remark: <put any extra remarks here. not necessarily needed.> - - <search and replace template.testGroup - with the real test group name> - - You do *not* need to name your test case class the same as - the file. You can of course if you want to. - - <strip out this remark section> - - - license: CPL 1.0 (Common Public License v1.0, see below) - link: - - category1: ooRexx - category2: Base - category3: Template - + SVN Revision: $Rev$ + Change Date: $Date$ */ /*----------------------------------------------------------------------------*/ /* */ Property changes on: test/trunk/misc/template.testGroup ___________________________________________________________________ Name: svn:eol-style: + Lf Name: svn:keywords + Date Rev Modified: test/trunk/ooRexx/base/bif/BEEP.testGroup =================================================================== --- test/trunk/ooRexx/base/bif/BEEP.testGroup 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/ooRexx/base/bif/BEEP.testGroup 2008-05-12 22:31:13 UTC (rev 2492) @@ -74,31 +74,66 @@ retc = beep(262 /* middle C */, 1) /* 1/1000 second or standard beep */ self~assertSame('', retc) +-- Duration and frequency are ignored on *nix ::method "test_2" - self~expectSyntax(40) - retc = beep() + if .ooRexxUnit.OSName == "WINDOWS" then do + self~expectSyntax(40) + retc = beep() + end + else do + retc = beep() + self~assertSame('', retc) + end +-- Duration and frequency are ignored on *nix ::method "test_3" - self~expectSyntax(40) - retc = beep( , 1) + if .ooRexxUnit.OSName == "WINDOWS" then do + self~expectSyntax(40) + retc = beep( , 1) + end + else do + retc = beep( , 1) + self~assertSame('', retc) + end +-- Duration and frequency are ignored on *nix ::method "test_4" - self~expectSyntax(40) - retc = beep(38, ) + if .ooRexxUnit.OSName == "WINDOWS" then do + self~expectSyntax(40) + retc = beep(38, ) + end + else do + retc = beep(38, ) + self~assertSame('', retc) + end ::method "test_5" retc = beep(37, 1) self~assertSame("", retc) +-- Duration and frequency are ignored on *nix ::method "test_6" - self~expectSyntax(40) - retc = beep(36, 1) + if .ooRexxUnit.OSName == "WINDOWS" then do + self~expectSyntax(40) + retc = beep(36, 1) + end + else do + retc = beep(36, 1) + self~assertSame('', retc) + end ::method "test_7" retc = beep(32767, 1) self~assertSame("", retc) +-- Duration and frequency are ignored on *nix ::method "test_8" - self~expectSyntax(40) - retc = beep(32768, 1) + if .ooRexxUnit.OSName == "WINDOWS" then do + self~expectSyntax(40) + retc = beep(32768, 1) + end + else do + retc = beep(32768, 1) + self~assertSame('', retc) + end Modified: test/trunk/ooRexx/samples/drives.testGroup =================================================================== --- test/trunk/ooRexx/samples/drives.testGroup 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/ooRexx/samples/drives.testGroup 2008-05-12 22:31:13 UTC (rev 2492) @@ -1,26 +1,7 @@ #!/usr/bin/rexx /* - name: drives.testGroup - authors: Mark Miesfeld - date: 11/24/2007 - version: 1.0.0 - changed: - - languageLevel: 6.0 - purpose: Tests that the sample program, drives.rex, that is shipped - with the release package works as expected. This is a QA - test more than a collection of unit tests. - - remark: This is a Windows only test group. This test group has - more comment in it than needed so it can serve as an - example. - - license: CPL 1.0 (Common Public License v1.0, see below) - link: - - category1: ooRexx - category2: Samples - + SVN Revision: $Rev$ + Change Date: $Date$ */ /*----------------------------------------------------------------------------*/ /* */ @@ -76,8 +57,10 @@ -- found. If it can not be found, we mark this test group as not having any -- executable tests. - if locateSamplePrg("drives.rex") == .nil then - group~markNoTests("This is a test of a sample ooRexx program, but the sample can not be located") + if group~machineOS == "WINDOWS" then do + if locateSamplePrg("drives.rex") == .nil then + group~markNoTests("This is a test of a sample ooRexx program, but the sample can not be located") + end if group~isAutomatedTest then return group Modified: test/trunk/ooRexx/samples/ooDialog/examples/fileNameDialog_demo.testGroup =================================================================== --- test/trunk/ooRexx/samples/ooDialog/examples/fileNameDialog_demo.testGroup 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/ooRexx/samples/ooDialog/examples/fileNameDialog_demo.testGroup 2008-05-12 22:31:13 UTC (rev 2492) @@ -96,15 +96,17 @@ -- a regular install. -- -- Since that has shown in the past to let bugs escape, we attempt to work - -- around it. The framework provides (in FileUtils.cls) that can be used to - -- locate sample programs. It will return .nil if the sample can not be - -- located by any means known to mankind. + -- around it. The framework provides (in FileUtils.cls) a function that can be + -- used to locate sample programs. It will return .nil if the sample can not + -- be located by any means known to mankind. - if locateSamplePrg("fileNameDialog_demo.rex") == .nil then do - -- The sample program can not be located, so give up and mark this test - -- group as having no executable tests. To do that it is required that a - --reason be supplied. - group~markNoTests("This is a test of a sample program, but the program can not be located.") + if group~machineOS == "WINDOWS" then do + if locateSamplePrg("fileNameDialog_demo.rex") == .nil then do + -- The sample program can not be located, so give up and mark this test + -- group as having no executable tests. To do that it is required that a + --reason be supplied. + group~markNoTests("This is a test of a sample program, but the program can not be located.") + end end Modified: test/trunk/ooTest.frm =================================================================== --- test/trunk/ooTest.frm 2008-05-12 20:30:01 UTC (rev 2491) +++ test/trunk/ooTest.frm 2008-05-12 22:31:13 UTC (rev 2492) @@ -1011,7 +1011,8 @@ ::attribute currentTypes set private -- The operating system this group is executing on. - ::attribute machineOS private + ::attribute machineOS get + ::attribute machineOS set private -- A set containing all the possible OSes that ooRexx will run on. This set -- is intended to be immutable. If / when ooRexx is compilable on additional This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |