From: Richard M K. <kr...@us...> - 2007-12-16 00:24:09
|
Update of /cvsroot/sbcl/sbcl/tests In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv11580/tests Modified Files: run-program.test.sh Log Message: 1.0.12.34: fix bug, add error signalling in RUN-PROGRAM * Incorrect initialization of one bookkeeping variable in COPY-DESCRIPTOR-TO-STREAM left another bookkeeping variable with garbage after a properly-encoded short read, causing subsequent decoding attempts to fail. Only easily visible on when the child line buffers to one or another descriptor. * Add test for same. * Additionally, signal an error if we have any not-yet-decoded octets when the child closes its output or error. * Add test for same. Index: run-program.test.sh =================================================================== RCS file: /cvsroot/sbcl/sbcl/tests/run-program.test.sh,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- run-program.test.sh 9 Dec 2007 18:11:51 -0000 1.13 +++ run-program.test.sh 16 Dec 2007 00:23:59 -0000 1.14 @@ -82,6 +82,26 @@ :input i :output stream))))) (assert (= (length string) 6)) (assert (string= string "abcdef"))) + + ;;; Test the bookkeeping involved in decoding the child's output: + + ;; repeated short, properly-encoded reads exposed one bug. (But + ;; note: this test will be inconclusive if the child's stderr is + ;; fully buffered.) + (let ((str (with-output-to-string (s) + (run-program "/bin/sh" + '("-c" "(echo Foo; sleep 2s; echo Bar)>&2") + :output s :search t :error :output :wait t)))) + (assert (string= str (format nil "Foo~%Bar~%")))) + + ;; end of file in the middle of a UTF-8 character + (typep (nth-value 1 (ignore-errors + (let ((sb-impl::*default-external-format* :utf-8)) + (with-output-to-string (s) + (run-program "printf" '("\\316") + :output s :search t :wait t))))) + 'error) + ;; success convention for this Lisp program run as part of a larger script (sb-ext:quit :unix-status 52))) EOF |