X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fexternal-format.impure.lisp;h=845214db2d0763ad80caa351d878173cb0f8157c;hb=828bcd9589641a560e01c2f2bc9134a0aaacd552;hp=cff240a2737b9a00b25bcbb35c45d5454459064d;hpb=8d86dacd3936887cd09f259067ac1a6f03d7d1bf;p=sbcl.git diff --git a/tests/external-format.impure.lisp b/tests/external-format.impure.lisp index cff240a..845214d 100644 --- a/tests/external-format.impure.lisp +++ b/tests/external-format.impure.lisp @@ -22,7 +22,7 @@ ,@body)))) (do-external-formats (xf) - (with-open-file (s "/dev/null" :direction :input :external-format xf) + (with-open-file (s #-win32 "/dev/null" #+win32 "nul" :direction :input :external-format xf) (assert (eq (read-char s nil s) s)))) ;;; Test standard character read-write equivalency over all external formats. @@ -35,7 +35,9 @@ (with-open-file (s "external-format-test.txt" :direction :input :external-format xf) (loop for character across standard-characters - do (assert (eql (read-char s) character)))))) + do (let ((got (read-char s))) + (unless (eql character got) + (error "wanted ~S, got ~S" character got))))))) (delete-file "external-format-test.txt") #-sb-unicode @@ -53,14 +55,16 @@ :if-exists :supersede :external-format :utf-8) (dotimes (n offset) (write-char #\a s)) - (dotimes (n 4097) + (dotimes (n (+ 4 sb-impl::+bytes-per-buffer+)) (write-char character s))) (with-open-file (s "external-format-test.txt" :direction :input :external-format :utf-8) (dotimes (n offset) (assert (eql (read-char s) #\a))) - (dotimes (n 4097) - (assert (eql (read-char s) character))) + (dotimes (n (+ 4 sb-impl::+bytes-per-buffer+)) + (let ((got (read-char s))) + (unless (eql got character) + (error "wanted ~S, got ~S (~S)" character got n)))) (assert (eql (read-char s nil s) s)))))) ;;; Test character decode restarts. @@ -258,8 +262,7 @@ ;;; See sbcl-devel "Subject: Bug in FILE-POSITION on UTF-8-encoded files" ;;; by Lutz Euler on 2006-03-05 for more details. -(with-test (:name (:file-position :utf-8) - :fails-on :sbcl) +(with-test (:name (:file-position :utf-8)) (let ((path "external-format-test.txt")) (with-open-file (s path :direction :output @@ -281,4 +284,45 @@ (assert (char= char new-char))))) (values))) +;;; External format support in SB-ALIEN + +(with-test (:name (:sb-alien :vanilla)) + (define-alien-routine strdup c-string (str c-string)) + (assert (equal "foo" (strdup "foo")))) + +(with-test (:name (:sb-alien :utf-8 :utf-8)) + (define-alien-routine strdup (c-string :external-format :utf-8) + (str (c-string :external-format :utf-8))) + (assert (equal "foo" (strdup "foo")))) + +(with-test (:name (:sb-alien :latin-1 :utf-8)) + (define-alien-routine strdup (c-string :external-format :latin-1) + (str (c-string :external-format :utf-8))) + (assert (= (length (strdup (string (code-char 246)))) + 2))) + +(with-test (:name (:sb-alien :utf-8 :latin-1)) + (define-alien-routine strdup (c-string :external-format :utf-8) + (str (c-string :external-format :latin-1))) + (assert (equal (string (code-char 228)) + (strdup (concatenate 'string + (list (code-char 195)) + (list (code-char 164))))))) + +(with-test (:name (:sb-alien :ebcdic :ebcdic)) + (define-alien-routine strdup (c-string :external-format :ebcdic-us) + (str (c-string :external-format :ebcdic-us))) + (assert (equal "foo" (strdup "foo")))) + +(with-test (:name (:sb-alien :latin-1 :ebcdic)) + (define-alien-routine strdup (c-string :external-format :latin-1) + (str (c-string :external-format :ebcdic-us))) + (assert (not (equal "foo" (strdup "foo"))))) + +(with-test (:name (:sb-alien :simple-base-string)) + (define-alien-routine strdup (c-string :external-format :ebcdic-us + :element-type base-char) + (str (c-string :external-format :ebcdic-us))) + (assert (typep (strdup "foo") 'simple-base-string))) + ;;;; success