PageRenderTime 60ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/test/io-error.scm

http://mosh-scheme.googlecode.com/
Scheme | 381 lines | 148 code | 51 blank | 182 comment | 0 complexity | 438d408db456ca6c8a345143ed9b1de5 MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0
  1. ; io-error.scm - Tests for i/o errors
  2. ;
  3. ; Copyright (c) 2009 Higepon(Taro Minowa) <higepon@users.sourceforge.jp>
  4. ;
  5. ; Redistribution and use in source and binary forms, with or without
  6. ; modification, are permitted provided that the following conditions
  7. ; are met:
  8. ;
  9. ; 1. Redistributions of source code must retain the above copyright
  10. ; notice, this list of conditions and the following disclaimer.
  11. ;
  12. ; 2. Redistributions in binary form must reproduce the above copyright
  13. ; notice, this list of conditions and the following disclaimer in the
  14. ; documentation and/or other materials provided with the distribution.
  15. ;
  16. ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  17. ; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  18. ; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  19. ; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  20. ; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  21. ; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  22. ; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  23. ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  26. ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. ;
  28. ; $Id: test.ss 621 2008-11-09 06:22:47Z higepon $
  29. (import (rnrs)
  30. (mosh)
  31. (mosh process)
  32. (mosh shell)
  33. (mosh test))
  34. ;; utf-8-codec
  35. ;; error-handling-mode: raise
  36. (test-error i/o-decoding-error?
  37. (bytevector->string #vu8(97 #xff 98 99) (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise))))
  38. ;; utf-8-codec
  39. ;; error-handling-mode: ignore
  40. (test-equal (bytevector->string #vu8(97 #xff 98 99) (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode ignore)))
  41. "abc")
  42. ;; utf-8-codec
  43. ;; error-handling-mode: ignore
  44. (test-equal (bytevector->string #vu8(97 98 #xff 99) (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode ignore)))
  45. "abc")
  46. ;; utf-8-codec
  47. ;; error-handling-mode: ignore
  48. (test-equal (bytevector->string #vu8(97 98 99 #xff) (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode ignore)))
  49. "abc")
  50. ;; utf-8-code
  51. ;; error-handling-mode: replace
  52. (let ([s (bytevector->string #vu8(97 #xff 98 99) (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode replace)))])
  53. (test-equal #\a (string-ref s 0))
  54. (test-equal (string-ref s 1) (integer->char #xfffd))
  55. (test-equal (string-ref s 2) #\b)
  56. (test-equal (string-ref s 3) #\c))
  57. ;; How do I can test utf-8-codec encoding-error?
  58. ;; It never happen?
  59. ;; utf-8-codec
  60. ;; read
  61. (test-error i/o-decoding-error?
  62. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  63. (file-options no-truncate no-fail)
  64. (buffer-mode none)
  65. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  66. read))
  67. (test-error i/o-decoding-error?
  68. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  69. (file-options no-truncate no-fail)
  70. (buffer-mode none)
  71. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  72. (lambda (x) (read x))))
  73. ;; utf-8-codec
  74. ;; peek-char
  75. (test-error i/o-decoding-error?
  76. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  77. (file-options no-truncate no-fail)
  78. (buffer-mode none)
  79. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  80. peek-char))
  81. ;; utf-8-codec
  82. ;; get-datum
  83. (test-error i/o-decoding-error?
  84. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  85. (file-options no-truncate no-fail)
  86. (buffer-mode none)
  87. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  88. get-datum))
  89. ;; utf-8-codec
  90. ;; get-string
  91. (test-error i/o-decoding-error?
  92. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  93. (file-options no-truncate no-fail)
  94. (buffer-mode none)
  95. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  96. get-string-all))
  97. ;; utf-8-codec
  98. ;; get-string-n!
  99. (test-error i/o-decoding-error?
  100. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  101. (file-options no-truncate no-fail)
  102. (buffer-mode none)
  103. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  104. (lambda (x) (get-string-n! x "abc" 0 3))))
  105. ;; utf-8-codec
  106. ;; get-char
  107. (test-error i/o-decoding-error?
  108. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  109. (file-options no-truncate no-fail)
  110. (buffer-mode none)
  111. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  112. get-char))
  113. ;; utf-8-codec
  114. ;; get-string-n
  115. (test-error i/o-decoding-error?
  116. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  117. (file-options no-truncate no-fail)
  118. (buffer-mode none)
  119. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  120. (lambda (x) (get-string-n x 3))))
  121. ;; utf-8-codec
  122. ;; port-eof?
  123. (test-error i/o-decoding-error?
  124. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  125. (file-options no-truncate no-fail)
  126. (buffer-mode none)
  127. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  128. port-eof?))
  129. ;; utf-8-codec
  130. ;; get-line
  131. (test-error i/o-decoding-error?
  132. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  133. (file-options no-truncate no-fail)
  134. (buffer-mode none)
  135. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  136. get-line))
  137. ;; utf-8-codec
  138. ;; lookahead-char
  139. (test-error i/o-decoding-error?
  140. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  141. (file-options no-truncate no-fail)
  142. (buffer-mode none)
  143. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  144. lookahead-char))
  145. ;; utf-8-codec
  146. ;; read-char
  147. (test-error i/o-decoding-error?
  148. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  149. (file-options no-truncate no-fail)
  150. (buffer-mode none)
  151. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  152. read-char))
  153. ;; utf-8-codec
  154. ;; read-char
  155. (test-error i/o-decoding-error?
  156. (call-with-port (open-file-input-port "./test/invalid-utf8.txt"
  157. (file-options no-truncate no-fail)
  158. (buffer-mode none)
  159. (make-transcoder (utf-8-codec) (native-eol-style) (error-handling-mode raise)))
  160. (lambda (x) (read-char x))))
  161. ;; utf-16-codec
  162. ;; error-handling-mode: raise
  163. (test-error i/o-decoding-error?
  164. (bytevector->string #vu8(97) (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise))))
  165. ;; utf-16-codec
  166. ;; error-handling-mode: ignore
  167. (test-equal (bytevector->string #vu8(97) (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode ignore)))
  168. "")
  169. ;; utf-16-code
  170. ;; error-handling-mode: replace
  171. (let ([s (bytevector->string #vu8(97) (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode replace)))])
  172. (test-equal (string-ref s 0) (integer->char #xfffd)))
  173. ;; utf-16-codec
  174. ;; read
  175. ;; (test-error i/o-decoding-error?
  176. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  177. ;; (file-options no-truncate no-fail)
  178. ;; (buffer-mode none)
  179. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  180. ;; read))
  181. ;; (test-error i/o-decoding-error?
  182. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  183. ;; (file-options no-truncate no-fail)
  184. ;; (buffer-mode none)
  185. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  186. ;; (lambda (x) (read x))))
  187. ;; ;; utf-16-codec
  188. ;; ;; peek-char
  189. ;; (test-error i/o-decoding-error?
  190. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  191. ;; (file-options no-truncate no-fail)
  192. ;; (buffer-mode none)
  193. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  194. ;; peek-char))
  195. ;; ;; utf-16-codec
  196. ;; ;; get-datum
  197. ;; (test-error i/o-decoding-error?
  198. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  199. ;; (file-options no-truncate no-fail)
  200. ;; (buffer-mode none)
  201. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  202. ;; get-datum))
  203. ;; ;; utf-16-codec
  204. ;; ;; get-string
  205. ;; (test-error i/o-decoding-error?
  206. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  207. ;; (file-options no-truncate no-fail)
  208. ;; (buffer-mode none)
  209. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  210. ;; get-string-all))
  211. ;; ;; utf-16-codec
  212. ;; ;; get-string-n!
  213. ;; (test-error i/o-decoding-error?
  214. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  215. ;; (file-options no-truncate no-fail)
  216. ;; (buffer-mode none)
  217. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  218. ;; (lambda (x) (get-string-n! x "abc" 0 3))))
  219. ;; ;; utf-16-codec
  220. ;; ;; get-char
  221. ;; (test-error i/o-decoding-error?
  222. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  223. ;; (file-options no-truncate no-fail)
  224. ;; (buffer-mode none)
  225. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  226. ;; get-char))
  227. ;; ;; utf-16-codec
  228. ;; ;; get-string-n
  229. ;; (test-error i/o-decoding-error?
  230. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  231. ;; (file-options no-truncate no-fail)
  232. ;; (buffer-mode none)
  233. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  234. ;; (lambda (x) (get-string-n x 3))))
  235. ;; ;; utf-16-codec
  236. ;; ;; port-eof?
  237. ;; (test-error i/o-decoding-error?
  238. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  239. ;; (file-options no-truncate no-fail)
  240. ;; (buffer-mode none)
  241. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  242. ;; port-eof?))
  243. ;; ;; utf-16-codec
  244. ;; ;; get-line
  245. ;; (test-error i/o-decoding-error?
  246. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  247. ;; (file-options no-truncate no-fail)
  248. ;; (buffer-mode none)
  249. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  250. ;; get-line))
  251. ;; ;; utf-16-codec
  252. ;; ;; lookahead-char
  253. ;; (test-error i/o-decoding-error?
  254. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  255. ;; (file-options no-truncate no-fail)
  256. ;; (buffer-mode none)
  257. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  258. ;; lookahead-char))
  259. ;; ;; utf-16-codec
  260. ;; ;; read-char
  261. ;; (test-error i/o-decoding-error?
  262. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  263. ;; (file-options no-truncate no-fail)
  264. ;; (buffer-mode none)
  265. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  266. ;; read-char))
  267. ;; ;; utf-16-codec
  268. ;; ;; read-char
  269. ;; (test-error i/o-decoding-error?
  270. ;; (call-with-port (open-file-input-port "./test/invalid-utf16.txt"
  271. ;; (file-options no-truncate no-fail)
  272. ;; (buffer-mode none)
  273. ;; (make-transcoder (utf-16-codec) (native-eol-style) (error-handling-mode raise)))
  274. ;; (lambda (x) (read-char x))))
  275. (test-error i/o-invalid-position-error?
  276. (let ([port (open-file-input-port "./test/invalid-utf8.txt"
  277. (file-options no-truncate no-fail)
  278. (buffer-mode none))])
  279. (set-port-position! port -1)))
  280. ;; file-is-read-only
  281. (unless (string=? (host-os) "win32")
  282. (let ()
  283. (def-command chmod)
  284. (chmod -w "./test/read-only.txt")
  285. (test-error i/o-file-is-read-only-error?
  286. (open-file-input/output-port "./test/read-only.txt" (file-options no-fail) 'block))
  287. (test-error i/o-file-is-read-only-error?
  288. (open-file-output-port "./test/read-only.txt" (file-options no-fail) 'block))))
  289. ; we can't "svn add" this file, but test is OK.
  290. ;(open-file-output-port "./test/can-not-read-write.txt" (file-options no-fail) 'block)
  291. ;(open-file-input/output-port "./test/can-not-read-write.txt" (file-options no-fail) 'block)
  292. ;(open-file-input-port "./test/can-not-read-write.txt" (file-options no-fail) 'block)
  293. ;(open-input-file "./test/can-not-read-write.txt")
  294. ;(open-output-file "./test/can-not-read-write.txt")
  295. ;; transcoded-port procedure closes the binary port
  296. (test-error i/o-port-error?
  297. (let* ([binary-port (open-bytevector-input-port #vu8(97 98 99))]
  298. [text-port (transcoded-port binary-port (make-transcoder (latin-1-codec)))])
  299. (read-char text-port)
  300. (read-char text-port)
  301. (get-u8 binary-port) ;; port is already closed!
  302. (display (read-char text-port))))
  303. (unless (string=? (host-os) "win32")
  304. (let ()
  305. (define (text-pipe)
  306. ;; Binary ports here
  307. (let-values ([(in out) (pipe)])
  308. ;; Textual ports here
  309. (cons (transcoded-port in (native-transcoder))
  310. (transcoded-port out (native-transcoder)))))
  311. (define p (text-pipe))
  312. (define p-reader (car p))
  313. (define p-writer (cdr p))
  314. (test-write-equal "<transcoded-textual-input-port <binary-input-port <unknown file>>>"
  315. p-reader)
  316. (test-true (textual-port? p-reader))
  317. (test-write-equal "<transcoded-textual-output-port <binary-output-port <unknown file>>>"
  318. p-writer)
  319. (test-true (textual-port? p-writer))
  320. (display "asd" p-writer)
  321. (flush-output-port p-writer)
  322. (test-eqv #\a (read-char p-reader))
  323. (close-port p-reader)
  324. (close-port p-writer)))
  325. (cond
  326. [(member (host-os) '("win32" "linux"))
  327. (test-true (string? (mosh-executable-path)))]
  328. [else
  329. '()])
  330. (test-results)