mirror of https://github.com/GNOME/gimp.git
152 lines
4.3 KiB
Scheme
152 lines
4.3 KiB
Scheme
; Test cases for file port
|
|
|
|
|
|
|
|
; setup
|
|
; Some tests use new ports, not the setup one.
|
|
|
|
|
|
(define aOutFilePort (open-output-file "testFile"))
|
|
|
|
; Note the file is in the current working directory
|
|
|
|
; Note read and write are in terms of objects,
|
|
; so a string in the file will have quotes.
|
|
|
|
|
|
; tests
|
|
|
|
; Output port
|
|
|
|
(test! "open-output-file yields a port")
|
|
(assert `(port? ,aOutFilePort))
|
|
|
|
; Note the file is overwritten if it already exists.
|
|
|
|
(test! "open-output-file yields a port of kind output")
|
|
(assert `(output-port? ,aOutFilePort))
|
|
(test! "open-output-file yields a port NOT of kind input")
|
|
(assert `(not (input-port? ,aOutFilePort)))
|
|
|
|
(test! "write succeeds on an output file-port")
|
|
(assert `(write "bar" ,aOutFilePort))
|
|
|
|
(test! "closing a port succeeds")
|
|
(assert `(close-port ,aOutFilePort))
|
|
|
|
(test! "closing a port a second time throws an error")
|
|
; FIXME Not tested. The testing framework doesn't catch, and stops.
|
|
; Note it actually is still a port, but it is not open any more.
|
|
;(assert-error `(close-port ,aOutFilePort)
|
|
; "Error: not a port")
|
|
|
|
; aOutFilePort is still in scope and should not be garbage collected.
|
|
|
|
(test! "A closed port is still a port")
|
|
(assert `(port? ,aOutFilePort))
|
|
|
|
(test! "A closed port has no direction")
|
|
(assert `(not (output-port? ,aOutFilePort)))
|
|
(assert `(not (input-port? ,aOutFilePort)))
|
|
|
|
(test! "a closed port cannot be written")
|
|
; Note it doesn't say "must be open"
|
|
(assert-error `(write "foo" ,aOutFilePort)
|
|
"write: argument 2 must be: output port")
|
|
|
|
|
|
; Input port
|
|
|
|
(test! "a closed output file port can be then opened for input")
|
|
(define aInFilePort (open-input-file "testFile"))
|
|
|
|
(test! "open-input-file yields a port of kind input")
|
|
(assert `(input-port? ,aInFilePort))
|
|
(test! "open-input-file yields a port NOT of kind output")
|
|
(assert `(not (output-port? ,aInFilePort)))
|
|
|
|
(test! "write always fails on an input file-port")
|
|
(assert-error `(write "bar" ,aInFilePort)
|
|
"write: argument 2 must be: output port")
|
|
(test! "write-char always fails on an input file-port")
|
|
(assert-error `(write-char #\a ,aInFilePort)
|
|
"write-char: argument 2 must be: output port")
|
|
(test! "write-byte always fails on an input file-port")
|
|
(assert-error `(write-byte (integer->byte 72),aInFilePort)
|
|
"write-byte: argument 2 must be: output port")
|
|
|
|
(test! "string read from input file port equals what we wrote earlier")
|
|
(assert `(string=?
|
|
(read ,aInFilePort)
|
|
"bar"))
|
|
|
|
(test! "next read from input file port equals EOF")
|
|
(assert `(eof-object? (read ,aInFilePort)))
|
|
|
|
(test! "closing a input port")
|
|
(assert `(close-port ,aInFilePort))
|
|
|
|
|
|
(test! "a closed input port cannot be read")
|
|
; Note it doesn't say "must be open"
|
|
(assert-error `(read ,aInFilePort)
|
|
"read: argument 1 must be: input port")
|
|
|
|
|
|
|
|
|
|
; input-output file port
|
|
(define aInOutFilePort (open-input-output-file "testFile"))
|
|
|
|
; Note the file is not overwritten if it already exists.
|
|
|
|
(test! "open-input-output-file yields a port")
|
|
(assert `(port? ,aInOutFilePort))
|
|
|
|
(test! "open-input-output-file yields a port of kind output")
|
|
(assert `(output-port? ,aInOutFilePort))
|
|
(test! "open-input-output-file yields a port also of kind input")
|
|
(assert `(input-port? ,aInOutFilePort))
|
|
|
|
(test! "string read from input file port equals what we wrote earlier")
|
|
(assert `(string=?
|
|
(read ,aInOutFilePort)
|
|
"bar"))
|
|
|
|
(test! "next read from input-output file port equals EOF")
|
|
(assert `(eof-object? (read ,aInOutFilePort)))
|
|
|
|
(test! "write-char space succeeds on an input-output file-port")
|
|
(assert `(write-char #\space ,aInOutFilePort))
|
|
|
|
(test! "write succeeds on an input-output file-port")
|
|
(assert `(write "zed" ,aInOutFilePort))
|
|
|
|
; The model is NOT of independent read and write cursors.
|
|
; See the following tests.
|
|
|
|
; This fails w string-length: argument 1 must be: string (/usr/local/share/gimp/3.0/tests/file-port.scm : 107)
|
|
;(test! "string read from input-output file port equals what we just wrote")
|
|
; read cursor points before what we just wrote
|
|
;(assert `(string=?
|
|
; (read ,aInOutFilePort)
|
|
; "zed"))
|
|
|
|
(test! "next read from input-output file port after a write equals EOF")
|
|
(assert `(eof-object? (read ,aInOutFilePort)))
|
|
|
|
|
|
|
|
; TODO
|
|
; close-port is generic for any port
|
|
; close-input-port on a input-output port should only close it for read
|
|
; and leave it open for write?
|
|
|
|
; TODO port with unichar contents
|
|
|
|
|
|
|
|
|
|
|
|
|