Fix frame-call-representation for primitive applications
[bpt/guile.git] / test-suite / tests / iconv.test
CommitLineData
f05bb849
AW
1;;;; iconv.test --- Exercise the iconv API. -*- coding: utf-8; mode: scheme; -*-
2;;;;
3;;;; Copyright (C) 2013 Free Software Foundation, Inc.
4;;;; Andy Wingo
5;;;;
6;;;; This library is free software; you can redistribute it and/or
7;;;; modify it under the terms of the GNU Lesser General Public
8;;;; License as published by the Free Software Foundation; either
9;;;; version 3 of the License, or (at your option) any later version.
10;;;;
11;;;; This library is distributed in the hope that it will be useful,
12;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14;;;; Lesser General Public License for more details.
15;;;;
16;;;; You should have received a copy of the GNU Lesser General Public
17;;;; License along with this library; if not, write to the Free Software
18;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
20(define-module (test-suite iconv)
21 #:use-module (ice-9 iconv)
22 #:use-module (rnrs bytevectors)
23 #:use-module (test-suite lib))
24
25
26(define exception:encoding-error
27 '(encoding-error . ""))
28
29(define exception:decoding-error
30 '(decoding-error . ""))
31
32\f
33(with-test-prefix "ascii string"
34 (let ((s "Hello, World!"))
35 ;; For ASCII, all of these encodings should be the same.
36
37 (pass-if "to ascii bytevector"
38 (equal? (string->bytevector s "ASCII")
39 #vu8(72 101 108 108 111 44 32 87 111 114 108 100 33)))
40
41 (pass-if "to ascii bytevector (length check)"
42 (equal? (string-length s)
43 (bytevector-length (string->bytevector s "ascii"))))
44
45 (pass-if "from ascii bytevector"
46 (equal? s
47 (bytevector->string (string->bytevector s "ascii") "ascii")))
48
49 (pass-if "to utf-8 bytevector"
50 (equal? (string->bytevector s "ASCII")
51 (string->bytevector s "utf-8")))
52
53 (pass-if "to UTF-8 bytevector (testing encoding case sensitivity)"
54 (equal? (string->bytevector s "ascii")
55 (string->bytevector s "UTF-8")))
56
57 (pass-if "from utf-8 bytevector"
58 (equal? s
59 (bytevector->string (string->bytevector s "utf-8") "utf-8")))
60
61 (pass-if "to latin1 bytevector"
62 (equal? (string->bytevector s "ASCII")
63 (string->bytevector s "latin1")))
64
65 (pass-if "from latin1 bytevector"
66 (equal? s
67 (bytevector->string (string->bytevector s "utf-8") "utf-8")))))
68
69(with-test-prefix "narrow non-ascii string"
70 (let ((s "été"))
71 (pass-if "to latin1 bytevector"
72 (equal? (string->bytevector s "latin1")
73 #vu8(233 116 233)))
74
75 (pass-if "to latin1 bytevector (length check)"
76 (equal? (string-length s)
77 (bytevector-length (string->bytevector s "latin1"))))
78
79 (pass-if "from latin1 bytevector"
80 (equal? s
81 (bytevector->string (string->bytevector s "latin1") "latin1")))
82
83 (pass-if "to utf-8 bytevector"
84 (equal? (string->bytevector s "utf-8")
85 #vu8(195 169 116 195 169)))
86
87 (pass-if "from utf-8 bytevector"
88 (equal? s
89 (bytevector->string (string->bytevector s "utf-8") "utf-8")))
90
91 (pass-if-exception "encode latin1 as ascii" exception:encoding-error
92 (string->bytevector s "ascii"))
93
94 (pass-if-exception "misparse latin1 as utf8" exception:decoding-error
95 (bytevector->string (string->bytevector s "latin1") "utf-8"))
96
8c76a897
AW
97 (pass-if "misparse latin1 as utf8 with substitutions"
98 (equal? (bytevector->string (string->bytevector s "latin1")
99 "utf-8" 'substitute)
100 "?t?"))
101
f05bb849
AW
102 (pass-if-exception "misparse latin1 as ascii" exception:decoding-error
103 (bytevector->string (string->bytevector s "latin1") "ascii"))))
104
105
106(with-test-prefix "wide non-ascii string"
107 (let ((s "ΧΑΟΣ"))
108 (pass-if "to utf-8 bytevector"
109 (equal? (string->bytevector s "utf-8")
110 #vu8(206 167 206 145 206 159 206 163) ))
111
112 (pass-if "from utf-8 bytevector"
113 (equal? s
114 (bytevector->string (string->bytevector s "utf-8") "utf-8")))
115
116 (pass-if-exception "encode as ascii" exception:encoding-error
117 (string->bytevector s "ascii"))
118
119 (pass-if-exception "encode as latin1" exception:encoding-error
5ed4ea90
AW
120 (string->bytevector s "latin1"))
121
122 (pass-if "encode as ascii with substitutions"
123 (equal? (make-string (string-length s) #\?)
124 (bytevector->string (string->bytevector s "ascii" 'substitute)
125 "ascii")))))