home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 10
/
Fresh_Fish_10_2352.bin
/
useful
/
util
/
edit
/
mg
/
rexx
/
testrexxregion.mg
< prev
next >
Wrap
Text File
|
1990-06-02
|
3KB
|
114 lines
/*
* Run the tests in the introductory comments to a region.
*
* The region marked at the time of invocation will be tested. It should
* be suitable for calling as a rexx function, and return a string value.
* It must start with a comment that contains lines describing the tests
* to be run, the comment ending with a single line having a comment end
* string on it (with optional whitespace).
*
* The format for a test line is:
* <whatever> test: <expected result> (<argument strings>) <actual result>
*
* <whatever> will be ignored.
*
* <argument strings> are the arguments to be passed to the region, formatted
* for use by rexx-do-region. Note that if there are no arguments, then
* the argument list should be ( 0 ). If there are arguments, then the
* first thing in the argument list should be the negative of the number of
* arguments, i.e.: ( -3 "This is" a "\^c" ).
*
* <expected results> is the value that it is expected that the function will
* return when the marked region is started via
* 'rexx-do-region' argument strings
*
* <actual results> are placed by this code. If they match the expected
* results, they are left blank. Otherwise, it is changed to the actual
* result. If there was some problem with the result (for example, it
* occupied more than one line), then the results will be assumed to have
* been "****".
*/
/* Canonical mg prefix. */
options results
options failat 2
signal on failure
/* Constants for this invocation */
bufname = "*Rexx-Test*"
flag = "****"
/* Clean out the test buffer, and copy the region to it */
'switch-to-buffer "'bufname'"'
'beginning-of-buffer'
'end-of-buffer'
'kill-region'
'switch-to-buffer ""' /* Null string -> goes to previous buffer */
'copy-region-as-kill'
'switch-to-buffer ""'
'yank'
/* Find and store all the tests, including the line number the test is on */
i = 1
'beginning-of-buffer'
do until rc ~= 0
'rexx-point pnt'
if pnt.3 = '*/' then break
parse value pnt.3 with 'test:' exp '(' args ')'
if exp ~= "" then do
test.i.argstring = args
test.i.expected = exp
test.i.line = pnt.1
i = i + 1
end
'next-line'
end
numtests = i - 1
/* If there aren't any tests, we can stop here */
if numtests < 1 then do
'rexx-display "No tests to run."'
exit 0
end
/* Now run each test, and stash the result */
do i = 1 to numtests
'end-of-buffer'
'beginning-of-buffer'
signal off failure
'rexx-do-region' test.i.argstring
signal on failure
'beginning-of-buffer'
'rexx-region region'
if region.0 = 1 then test.i.value = region.1
else do
test.i.value = flag
iterate
end
'kill-region'
end
/*
* Finally, go check each test against the expected result, and insert the
* appropriate thing in the buffer.
*/
'switch-to-buffer ""'
do i = 1 to numtests
'goto-line' test.i.line
'search-forward )'
'rexx-insert "\tx"'
'backward-char'
'kill-line'
if test.i.value ~= test.i.expected then
'rexx-insert 'slashquote(test.i.value, '\')
end
/* And, since all's well that ends well, exit */
exit 0
/* Come here if some command has serious problems */
failure:
'rexx-display "something died!"'
exit 1