1
0
mirror of synced 2026-01-22 02:45:23 +00:00

307 lines
8.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;; TESTER FOR MULTIPLE STREAMS PER FILE
;; The main functionality to test with multiple streams per file is to
;; make sure that the functions listed below work properly using various
;; devices and all of the combinations of the access modes when trying to
;; open more than one stream on the same file. The tests should also
;; verify valid & distinct streams for each legal open case, verify same
;; data at same locations read from each open stream, verify filepos can
;; be set and is unique for each open stream, verify correct results
;; using 2 or more separate processes on same machine, and 1 or more
;; processes on different machines opening multiple streams on the same,
;; verify correct operation of multiple open streams for both NS and IFS
;; files, verify closing one stream does not close any other open stream
;; on the same file, verify that a file cannot be deleted or renamed
;; with an open stream, and use as many device names as possible to open streams with.
;; Functions To Be Tested:
;; OPENSTREAM, STREAMP, OPENP,
;; CLOSEF, INFILE, OUTFILE, GETFILEINFO,
;; WHENCLOSE, DELFILE,
;; RENAMEFILE, BIN, BOUT, EOFP,
;; SETFILEPTR, GETFILEPTR, GETSTREAM
;;
;; Created By: Jim Blum
;;
;; Creation Date: FEB 11, 1987
;;
;;
;; Last Update: FEB 16, 1987
;;
;; Filed As: {ERIS}<LISPCORE>TEST>MSPF>MSPF.TEST
;;
;;
(DO-TEST-GROUP "TEST MULTIPLE STREAMS PER FILE"
:BEFORE
(PROGN
(TEST-SETQ DEVICE-LIST '("{DSK}TESTFILE" "{ERINYES}<TEST>TESTFILE" "{CORE}TESTFILE" "{PELE:}<PUBLIC>TESTFILE")) ; list of devices/filenames to test
(TEST-SETQ ACCESS-MODES '(IL:INPUT IL:OUTPUT IL:BOTH IL:APPEND))
(TEST-SETQ RESULT T)
)
:AFTER
(PROGN
(DOLIST (FILE DEVICE-LIST)
(DO NIL ((NULL (IL:DELFILE FILE)))) ; DELETE ALL VERSIONS
)
)
(DO-TEST "Verify combinations of open access methods work as they should"
(DOLIST (FILE DEVICE-LIST)
(DO NIL ((NULL (IL:DELFILE FILE)))) ; DELETE OLD VERSIONS
)
(DOLIST (FILE DEVICE-LIST RESULT )
(UNWIND-PROTECT
(PROGN
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:OUTPUT))
(DOLIST (MODE ACCESS-MODES )
(IF (TEST-SETQ STREAM2
(IGNORE-ERRORS
(IL:OPENSTREAM FILE MODE 'IL:OLD)
)
)
(PROGN
(IGNORE-ERRORS (IL:CLOSEF STREAM))
(FORMAT *ERROR-OUTPUT* "FILE ~A OPENED ILLEGALLY IN MODE ~A~%~%" FILE MODE)
(SETQ RESULT NIL)
) ; PROGN
) ; IF
) ; DOLIST
) ; PROGN
(PROGN (IL:CLOSEF STREAM) (DELETE-FILE FILE))
) ;UNWIND PROTECT
) ; DOLIST
) ; DO-TEST
(DO-TEST "TEST MULTIPLE INPUT STREAMS WORK"
(TEST-SETQ RESULT T)
(DOLIST (FILE DEVICE-LIST)
(DO NIL ((NULL (IL:DELFILE FILE)))) ; DELETE OLD VERSIONS
)
(DOLIST (FILE DEVICE-LIST RESULT)
(UNWIND-PROTECT
(PROGN
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:OUTPUT))
(PRINT "THIS IS A TEST" STREAM)
(IL:CLOSEF STREAM)
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:INPUT))
(IF (NOT (AND (IL:OPENP STREAM)
(IL:GETSTREAM STREAM)
(STREAMP STREAM)
)
)
(PROGN
(FORMAT *ERROR-OUTPUT* "FILE ERROR IN ~A~%~%" FILE)
(TEST-SETQ RESULT NIL)
)
)
(TEST-SETQ STREAM2 (IL:OPENSTREAM FILE 'IL:INPUT))
(IF (NOT (AND (IL:OPENP STREAM2)
(IL:GETSTREAM STREAM2)
(STREAMP STREAM2)
)
)
(PROGN (FORMAT *ERROR-OUTPUT* "Cannot open multiple stream on file ~a~%~%" FILE)
(TEST-SETQ RESULT NIL)
)
)
(TEST-SETQ STREAM3 (IL:OPENSTREAM FILE 'IL:INPUT))
(IF (NOT (AND (IL:OPENP STREAM3)
(IL:GETSTREAM STREAM3)
(STREAMP STREAM3)
)
)
(PROGN
(FORMAT *ERROR-OUTPUT* "Cannot open multiple stream on file ~a~%~%" FILE)
(TEST-SETQ RESULT NIL)
)
)
<09><> <20>(IL:SETFILEPTR STREAM 0)
(IL:SETFILEPTR STREAM2 0)
(IL:SETFILEPTR STREAM3 0)
(IF (NOT (EQUAL (READ STREAM)
"THIS IS A TEST"
)
)
(TEST-SETQ RESULT NIL)
)
(IF (NOT (EQUAL (READ STREAM2)
"THIS IS A TEST"
)
)
(TEST-SETQ RESULT NIL)
)
(IF (NOT (EQUAL (READ STREAM3)
"THIS IS A TEST"
)
)
(TEST-SETQ RESULT NIL)
)
(IF (OR (IL:NEQ (IL:GETFILEPTR STREAM) 17)
(IL:NEQ (IL:GETFILEPTR STREAM2) 17)
(IL:NEQ (IL:GETFILEPTR STREAM3) 17)
)
(PROGN
(FORMAT *ERROR-OUTPUT* "FILEPTR ON STREAM IS NOT CORRECT~%~%")
(TEST-SETQ RESULT NIL)
)
)
(IF (OR (IL:EOFP STREAM)
(IL:EOFP STREAM2)
(IL:EOFP STREAM3)
)
(PROGN
(FORMAT *ERROR-OUTPUT* "EARLY END OF FILE ENCOUNTERED~%~%")
(TEST-SETQ RESULT NIL)
)
)
(IGNORE-ERRORS (READ STREAM))
(IGNORE-ERRORS (READ STREAM2))
(IGNORE-ERRORS (READ STREAM3))
(IF (NOT (AND (IL:EOFP STREAM)
(IL:EOFP STREAM2)
(IL:EOFP STREAM3)
)
)
(PROGN (FORMAT *ERROR-OUTPUT* "END OF FILE NOT ENCOUNTERED~%~%")
(TEST-SETQ RESULT NIL)
)
) ; IF
(IF (IGNORE-ERRORS (IL:RENAMEFILE FILE 'TESTFILE2))
(PROGN
(FORMAT *ERROR-OUTPUT* "RENAME-FILE ERROR~%~%")
(TEST-SETQ RESULT NIL)
)
)
(IF (IGNORE-ERRORS (IL:DELFILE FILE))
(PROGN
(FORMAT *ERROR-OUTPUT* "FILE ~A DELETED WHILE A STREAM WAS OPEN ON IT~%~%" FILE)
(TEST-SETQ RESULT NIL)
)
)
) ; PROGN FOR UNWIND-PROTECT
(PROGN (IGNORE-ERRORS (IL:CLOSEF STREAM))
(IGNORE-ERRORS (IL:CLOSEF STREAM2))
(IGNORE-ERRORS (IL:CLOSEF STREAM3))
(IF (OR (IL:OPENP STREAM)
(IL:OPENP STREAM2)
(IL:OPENP STREAM3)
)
(PROGN (FORMAT *ERROR-OUTPUT* "IL:OPENP RETURNS NON-NIL ON A CLOSED STREAM~%~%")
(TEST-SETQ RESULT NIL)
)
) ; IF
(IGNORE-ERRORS (DELETE-FILE FILE))
) ; PROGN
) ; UNWIND-PROTECT
) ; DOLIST
) ; DO-TEST
(DO-TEST "TEST FILE ATTRIBUTES UNAFFECTED WITH MULTIPLE STREAMS"
(TEST-SETQ RESULT T)
(DOLIST (FILE DEVICE-LIST)
(DO NIL ((NULL (IL:DELFILE FILE)))) ; DELETE OLD VERSIONS
)
(DOLIST (FILE DEVICE-LIST RESULT)
(UNWIND-PROTECT
(PROGN
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:OUTPUT))
(PRINT "THIS IS A TEST" STREAM)
(IL:CLOSEF STREAM)
(TEST-SETQ AUTHOR (IL:GETFILEINFO FILE 'IL:AUTHOR))
(TEST-SETQ LENGTH (IL:GETFILEINFO FILE 'IL:LENGTH))
(TEST-SETQ CREDATE (IL:GETFILEINFO FILE 'IL:CREATIONDATE))
(TEST-SETQ TYPE (IL:GETFILEINFO FILE 'IL:TYPE))
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:INPUT))
(TEST-SETQ STREAM2 (IL:OPENSTREAM FILE 'IL:INPUT))
(TEST-SETQ STREAM3 (IL:OPENSTREAM FILE 'IL:INPUT))
(READ STREAM)
(READ STREAM2)
(READ STREAM3)
)
(PROGN
(IGNORE-ERRORS (IL:CLOSEF STREAM))
(IGNORE-ERRORS (IL:CLOSEF STREAM2))
(IGNORE-ERRORS (IL:CLOSEF STREAM3))
(AND
<EFBFBD><EFBFBD> <20>(EQUAL AUTHOR (IL:GETFILEINFO FILE 'IL:AUTHOR))
(EQUAL CREDATE (IL:GETFILEINFO FILE 'IL:CREATIONDATE))
(EQUAL TYPE (IL:GETFILEINFO FILE 'IL:TYPE))
(EQUAL LENGTH (IL:GETFILEINFO FILE 'IL:LENGTH))
)
)
)
)
)
(DO-TEST "TEST WHENCLOSE FUNCTION"
(TEST-SETQ RESULT NIL)
(DOLIST (FILE DEVICE-LIST RESULT)
(TEST-SETQ CLIST NIL)
(UNWIND-PROTECT
(PROGN
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:OUTPUT))
(PRINT "THIS IS A TEST" STREAM)
(IL:CLOSEF STREAM)
(TEST-SETQ STREAM (IL:OPENSTREAM FILE 'IL:INPUT))
(TEST-SETQ STREAM2 (IL:OPENSTREAM FILE 'IL:INPUT))
(TEST-SETQ STREAM3 (IL:OPENSTREAM FILE 'IL:INPUT))
(IL:WHENCLOSE STREAM 'IL:BEFORE (FUNCTION (LAMBDA (ST)
(IL:PUSH CLIST (READ ST)))))
(IL:WHENCLOSE STREAM2 'IL:BEFORE (FUNCTION (LAMBDA (ST)
(IL:PUSH CLIST (READ ST)))))
(IL:WHENCLOSE STREAM3 'IL:BEFORE (FUNCTION (LAMBDA (ST)
(IL:PUSH CLIST (READ ST)))))
)
(SETQ RESULT
(PROGN
(IGNORE-ERRORS (IL:CLOSEF STREAM))
(IGNORE-ERRORS (IL:CLOSEF STREAM2))
(IGNORE-ERRORS (IL:CLOSEF STREAM3))
(EQUAL CLIST '("THIS IS A TEST" "THIS IS A TEST" "THIS IS A TEST"))
) ; PROGN
) ; SETQ
) ; UNWIND-PROTECT
) ; DOLIST
) ;DO-TEST
(DO-TEST "TEST INFILE & OUTFILE"
(TEST-SETQ RESULT NIL)
(DOLIST (FILE DEVICE-LIST RESULT)
(UNWIND-PROTECT
(PROGN
(IL:OUTFILE FILE)
(IL:PRINT "THIS IS A TEST" NIL)
(IL:CLOSEF NIL)
(SETQ STREAM (IL:INFILE FILE))
(SETQ STREAM2 (IL:OPENSTREAM FILE 'IL:INPUT))
)
(SETQ RESULT
(AND
(EQUAL (IL:READ NIL) "THIS IS A TEST")
(NOT (IGNORE-ERRORS (IL:CLOSEF STREAM)))
(IGNORE-ERRORS (IL:CLOSEF STREAM2))
(IGNORE-ERRORS (IL:CLOSEF NIL))
(IL:TRUE (IL:CLOSEF NIL))
) ; PROGN
) ; SETQ
) ; UNWIND-PROTECT
) ; DOLIST
) ;DO-TEST
) ; DO-TEST-GROUP
STOP
 HELVETICA HELVETICA<0E> .
}!dz<>