X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-simple-streams%2Fsimple-stream-tests.lisp;h=735b1547baa5d868c30b27a638a95dd0ac9c391b;hb=22aec7852f4861e5dab28cc0d619c24b62590dad;hp=9664814ab8a811779fdb723570250834c9881322;hpb=ac85367426b222612311c5cf7b061ff89c64d825;p=sbcl.git diff --git a/contrib/sb-simple-streams/simple-stream-tests.lisp b/contrib/sb-simple-streams/simple-stream-tests.lisp index 9664814..735b154 100644 --- a/contrib/sb-simple-streams/simple-stream-tests.lisp +++ b/contrib/sb-simple-streams/simple-stream-tests.lisp @@ -6,27 +6,32 @@ (in-package #:sb-simple-streams-test) -(defparameter *dumb-string* "This file created by simple-stream-tests.lisp. Nothing to see here, move along.") +(defparameter *dumb-string* + "This file created by simple-stream-tests.lisp. Nothing to see here, move along.") -(defparameter *test-path* (merge-pathnames - (make-pathname :name nil :type nil :version nil) - *load-truename*)) +(defparameter *test-path* + (merge-pathnames (make-pathname :name nil :type nil :version nil) + *load-truename*) + "Directory for temporary test files.") (eval-when (:load-toplevel) (ensure-directories-exist *test-path*)) + + (deftest create-file-1 - (let* ((file (merge-pathnames #p"test-data.txt" *test-path*)) - (stream-object (make-instance 'file-simple-stream - :filename file - :direction :output - :if-exists :overwrite))) + ;; Create a file-simple-stream, write data. + (let* ((file (merge-pathnames #p"test-data.txt" *test-path*))) (prog1 - (with-open-stream (s stream-object) - (string= (write-string *dumb-string* s) *dumb-string*)) + (with-open-stream (s (make-instance 'file-simple-stream + :filename file + :direction :output + :if-exists :overwrite)) + (string= (write-string *dumb-string* s) *dumb-string*)) (delete-file file))) t) (deftest create-file-2 + ;; Create a file-simple-stream via :class argument to open, write data. (let ((file (merge-pathnames #p"test-data.txt" *test-path*))) (prog1 (with-open-file (s file @@ -37,25 +42,36 @@ t) (deftest create-read-file-1 + ;; Via file-simple-stream objects, write and then re-read data. (let ((result t) (file (merge-pathnames #p"test-data.txt" *test-path*))) - (let ((stream-object (make-instance 'file-simple-stream - :filename file - :direction :output - :if-exists :overwrite))) - (with-open-stream (s stream-object) - (setf result (and result (string= (write-string *dumb-string* s) - *dumb-string*))) - (terpri s))) - (let ((stream-object (make-instance 'file-simple-stream - :filename file - :direction :input))) - (with-open-stream (s stream-object) - (setf result (and result (string= (read-line s) *dumb-string*))))) + (with-open-stream (s (make-instance 'file-simple-stream + :filename file + :direction :output + :if-exists :overwrite)) + (write-line *dumb-string* s) + (setf result (and result (string= (write-string *dumb-string* s) + *dumb-string*)))) + (with-open-stream (s (make-instance 'file-simple-stream + :filename file + :direction :input + :if-does-not-exist :error)) + ;; Check first line + (multiple-value-bind (string missing-newline-p) + (read-line s) + (setf result (and result (string= string *dumb-string*) + (not missing-newline-p)))) + ;; Check second line + (multiple-value-bind (string missing-newline-p) + (read-line s) + (setf result (and result (string= string *dumb-string*) + missing-newline-p)))) + (delete-file file) result) t) (deftest create-read-mapped-file-1 + ;; Read data via a mapped-file-simple-stream object. (let ((result t) (file (merge-pathnames #p"test-data.txt" *test-path*))) (with-open-file (s file @@ -71,5 +87,46 @@ result) t) +(deftest write-read-inet + (handler-case + (with-open-stream (s (make-instance 'socket-simple-stream + :remote-host #(127 0 0 1) + :remote-port 7)) + (string= (prog1 (write-line "Got it!" s) (finish-output s)) + (read-line s))) + (sb-bsd-sockets::connection-refused-error () t)) + t) +(deftest write-read-large-sc-1 + ;; Do write and read with more data than the buffer will hold + ;; (single-channel simple-stream) + (let* ((file (merge-pathnames #p"test-data.txt" *test-path*)) + (stream (make-instance 'file-simple-stream + :filename file + :direction :output)) + (content (make-string (1+ (device-buffer-length stream)) + :initial-element #\x))) + (with-open-stream (s stream) + (write-string content s)) + (with-open-stream (s (make-instance 'file-simple-stream + :filename file + :direction :input)) + (prog1 (string= content (read-line s)) + (delete-file file)))) + t) + +(deftest write-read-large-dc-1 + ;; Do write and read with more data than the buffer will hold + ;; (dual-channel simple-stream; we only have socket streams atm) + (handler-case + (let* ((stream (make-instance 'socket-simple-stream + :remote-host #(127 0 0 1) + :remote-port 7)) + (content (make-string (1+ (device-buffer-length stream)) + :initial-element #\x))) + (with-open-stream (s stream) + (string= (prog1 (write-line content s) (finish-output s)) + (read-line s)))) + (sb-bsd-sockets::connection-refused-error () t)) + t)