1 /**
2 * test-symbol.c
3 *
4 * Copyright (c) 2012
5 * libchewing Core Team. See ChangeLog for details.
6 *
7 * See the file "COPYING" for information on usage and redistribution
8 * of this file.
9 */
10
11 #ifdef HAVE_CONFIG_H
12 # include <config.h>
13 #endif
14
15 #include <assert.h>
16 #include <stdlib.h>
17 #include <string.h>
18
19 #include "chewing.h"
20 #include "testhelper.h"
21
22 static const TestData SYMBOL[] = {
23 {"`1<E>", "\xE2\x80\xA6" /* … */ },
24 {"`2<E>", "\xE2\x80\xBB" /* ※ */ },
25 {"`31<E>", "\xEF\xBC\x8C" /* , */ },
26 {"`32<E>", "\xE3\x80\x81" /* 、 */ },
27 {"`33<E>", "\xE3\x80\x82" /* 。 */ },
28 {"`34<E>", "\xEF\xBC\x8E" /* . */ },
29 {"`35<E>", "\xEF\xBC\x9F" /* ? */ },
30 {"`36<E>", "\xEF\xBC\x81" /* ! */ },
31 {"`37<E>", "\xEF\xBC\x9B" /* ; */ },
32 {"`38<E>", "\xEF\xB8\xB0" /* ︰ */ },
33 {"`39<E>", "\xE2\x80\xA7" /* ‧ */ },
34 {"`30<E>", "\xE2\x80\xA5" /* ‥ */ },
35 {"`3<R>1<E>", "\xEF\xB9\x90" /* ﹐ */ },
36 {"`3<R>2<E>", "\xEF\xB9\x92" /* ﹒ */ },
37 {"`3<R>3<E>", "\xCB\x99" /* ˙ */ },
38 {"`3<R>4<E>", "\xC2\xB7" /* · */ },
39 {"`3<R>5<E>", "\xE2\x80\x98" /* ‘ */ },
40 {"`3<R>6<E>", "\xE2\x80\x99" /* ’ */ },
41 {"`3<R>7<E>", "\xE2\x80\x9C" /* “ */ },
42 {"`3<R>8<E>", "\xE2\x80\x9D" /* ” */ },
43 {"`3<R>9<E>", "\xE3\x80\x9D" /* 〝 */ },
44 {"`3<R>0<E>", "\xE3\x80\x9E" /* 〞 */ },
45 {"`3<R><R>1<E>", "\xE2\x80\xB5" /* ‵ */ },
46 {"`3<R><R>2<E>", "\xE2\x80\xB2" /* ′ */ },
47 {"`3<R><R>3<E>", "\xE3\x80\x83" /* 〃 */ },
48 {"`3<R><R>4<E>", "\xEF\xBD\x9E" /* ~ */ },
49 {"`3<R><R>5<E>", "\xEF\xBC\x84" /* $ */ },
50 {"`3<R><R>6<E>", "\xEF\xBC\x85" /* % */ },
51 {"`3<R><R>7<E>", "\xEF\xBC\xA0" /* @ */ },
52 {"`3<R><R>8<E>", "\xEF\xBC\x86" /* & */ },
53 {"`3<R><R>9<E>", "\xEF\xBC\x83" /* # */ },
54 {"`3<R><R>0<E>", "\xEF\xBC\x8A" /* * */ },
55 {"`41<E>", "\xEF\xBC\x88" /* ( */ },
56 {"`42<E>", "\xEF\xBC\x89" /* ) */ },
57 {"`43<E>", "\xE3\x80\x8C" /* 「 */ },
58 {"`44<E>", "\xE3\x80\x8D" /* 」 */ },
59 {"`45<E>", "\xE3\x80\x94" /* 〔 */ },
60 {"`46<E>", "\xE3\x80\x95" /* 〕 */ },
61 {"`47<E>", "\xEF\xBD\x9B" /* { */ },
62 {"`48<E>", "\xEF\xBD\x9D" /* } */ },
63 {"`49<E>", "\xE3\x80\x88" /* 〈 */ },
64 {"`40<E>", "\xE3\x80\x89" /* 〉 */ },
65 {"`4<R>1<E>", "\xE3\x80\x8E" /* 『 */ },
66 {"`4<R>2<E>", "\xE3\x80\x8F" /* 』 */ },
67 {"`4<R>3<E>", "\xE3\x80\x8A" /* 《 */ },
68 {"`4<R>4<E>", "\xE3\x80\x8B" /* 》 */ },
69 {"`4<R>5<E>", "\xE3\x80\x90" /* 【 */ },
70 {"`4<R>6<E>", "\xE3\x80\x91" /* 】 */ },
71 {"`4<R>7<E>", "\xEF\xB9\x99" /* ﹙ */ },
72 {"`4<R>8<E>", "\xEF\xB9\x9A" /* ﹚ */ },
73 {"`4<R>9<E>", "\xEF\xB9\x9D" /* ﹝ */ },
74 {"`4<R>0<E>", "\xEF\xB9\x9E" /* ﹞ */ },
75 {"`4<R><R>1<E>", "\xEF\xB9\x9B" /* ﹛ */ },
76 {"`4<R><R>2<E>", "\xEF\xB9\x9C" /* ﹜ */ },
77 {"`51<E>", "\xEF\xB8\xB5" /* ︵ */ },
78 {"`52<E>", "\xEF\xB8\xB6" /* ︶ */ },
79 {"`53<E>", "\xEF\xB9\x81" /* ﹁ */ },
80 {"`54<E>", "\xEF\xB9\x82" /* ﹂ */ },
81 {"`55<E>", "\xEF\xB8\xB9" /* ︹ */ },
82 {"`56<E>", "\xEF\xB8\xBA" /* ︺ */ },
83 {"`57<E>", "\xEF\xB8\xB7" /* ︷ */ },
84 {"`58<E>", "\xEF\xB8\xB8" /* ︸ */ },
85 {"`59<E>", "\xEF\xB8\xBF" /* ︿ */ },
86 {"`50<E>", "\xEF\xB9\x80" /* ﹀ */ },
87 {"`5<R>1<E>", "\xEF\xB9\x83" /* ﹃ */ },
88 {"`5<R>2<E>", "\xEF\xB9\x84" /* ﹄ */ },
89 {"`5<R>3<E>", "\xEF\xB8\xBD" /* ︽ */ },
90 {"`5<R>4<E>", "\xEF\xB8\xBE" /* ︾ */ },
91 {"`5<R>5<E>", "\xEF\xB8\xBB" /* ︻ */ },
92 {"`5<R>6<E>", "\xEF\xB8\xBC" /* ︼ */ },
93 {"`61<E>", "\xCE\xB1" /* α */ },
94 {"`62<E>", "\xCE\xB2" /* β */ },
95 {"`63<E>", "\xCE\xB3" /* γ */ },
96 {"`64<E>", "\xCE\xB4" /* δ */ },
97 {"`65<E>", "\xCE\xB5" /* ε */ },
98 {"`66<E>", "\xCE\xB6" /* ζ */ },
99 {"`67<E>", "\xCE\xB7" /* η */ },
100 {"`68<E>", "\xCE\xB8" /* θ */ },
101 {"`69<E>", "\xCE\xB9" /* ι */ },
102 {"`60<E>", "\xCE\xBA" /* κ */ },
103 {"`6<R>1<E>", "\xCE\xBB" /* λ */ },
104 {"`6<R>2<E>", "\xCE\xBC" /* μ */ },
105 {"`6<R>3<E>", "\xCE\xBD" /* ν */ },
106 {"`6<R>4<E>", "\xCE\xBE" /* ξ */ },
107 {"`6<R>5<E>", "\xCE\xBF" /* ο */ },
108 {"`6<R>6<E>", "\xCF\x80" /* π */ },
109 {"`6<R>7<E>", "\xCF\x81" /* ρ */ },
110 {"`6<R>8<E>", "\xCF\x83" /* σ */ },
111 {"`6<R>9<E>", "\xCF\x84" /* τ */ },
112 {"`6<R>0<E>", "\xCF\x85" /* υ */ },
113 {"`6<R><R>1<E>", "\xCF\x86" /* φ */ },
114 {"`6<R><R>2<E>", "\xCF\x87" /* χ */ },
115 {"`6<R><R>3<E>", "\xCF\x88" /* ψ */ },
116 {"`6<R><R>4<E>", "\xCF\x89" /* ω */ },
117 {"`6<R><R>5<E>", "\xCE\x91" /* Α */ },
118 {"`6<R><R>6<E>", "\xCE\x92" /* Β */ },
119 {"`6<R><R>7<E>", "\xCE\x93" /* Γ */ },
120 {"`6<R><R>8<E>", "\xCE\x94" /* Δ */ },
121 {"`6<R><R>9<E>", "\xCE\x95" /* Ε */ },
122 {"`6<R><R>0<E>", "\xCE\x96" /* Ζ */ },
123 {"`6<R><R><R>1<E>", "\xCE\x97" /* Η */ },
124 {"`6<R><R><R>2<E>", "\xCE\x98" /* Θ */ },
125 {"`6<R><R><R>3<E>", "\xCE\x99" /* Ι */ },
126 {"`6<R><R><R>4<E>", "\xCE\x9A" /* Κ */ },
127 {"`6<R><R><R>5<E>", "\xCE\x9B" /* Λ */ },
128 {"`6<R><R><R>6<E>", "\xCE\x9C" /* Μ */ },
129 {"`6<R><R><R>7<E>", "\xCE\x9D" /* Ν */ },
130 {"`6<R><R><R>8<E>", "\xCE\x9E" /* Ξ */ },
131 {"`6<R><R><R>9<E>", "\xCE\x9F" /* Ο */ },
132 {"`6<R><R><R>0<E>", "\xCE\xA0" /* Π */ },
133 {"`6<R><R><R><R>1<E>", "\xCE\xA1" /* Ρ */ },
134 {"`6<R><R><R><R>2<E>", "\xCE\xA3" /* Σ */ },
135 {"`6<R><R><R><R>3<E>", "\xCE\xA4" /* Τ */ },
136 {"`6<R><R><R><R>4<E>", "\xCE\xA5" /* Υ */ },
137 {"`6<R><R><R><R>5<E>", "\xCE\xA6" /* Φ */ },
138 {"`6<R><R><R><R>6<E>", "\xCE\xA7" /* Χ */ },
139 {"`6<R><R><R><R>7<E>", "\xCE\xA8" /* Ψ */ },
140 {"`6<R><R><R><R>8<E>", "\xCE\xA9" /* Ω */ },
141 {"`71<E>", "\xEF\xBC\x8B" /* + */ },
142 {"`72<E>", "\xEF\xBC\x8D" /* - */ },
143 {"`73<E>", "\xC3\x97" /* × */ },
144 {"`74<E>", "\xC3\xB7" /* ÷ */ },
145 {"`75<E>", "\xEF\xBC\x9D" /* = */ },
146 {"`76<E>", "\xE2\x89\xA0" /* ≠ */ },
147 {"`77<E>", "\xE2\x89\x92" /* ≒ */ },
148 {"`78<E>", "\xE2\x88\x9E" /* ∞ */ },
149 {"`79<E>", "\xC2\xB1" /* ± */ },
150 {"`70<E>", "\xE2\x88\x9A" /* √ */ },
151 {"`7<R>1<E>", "\xEF\xBC\x9C" /* < */ },
152 {"`7<R>2<E>", "\xEF\xBC\x9E" /* > */ },
153 {"`7<R>3<E>", "\xEF\xB9\xA4" /* ﹤ */ },
154 {"`7<R>4<E>", "\xEF\xB9\xA5" /* ﹥ */ },
155 {"`7<R>5<E>", "\xE2\x89\xA6" /* ≦ */ },
156 {"`7<R>6<E>", "\xE2\x89\xA7" /* ≧ */ },
157 {"`7<R>7<E>", "\xE2\x88\xA9" /* ∩ */ },
158 {"`7<R>8<E>", "\xE2\x88\xAA" /* ∪ */ },
159 {"`7<R>9<E>", "\xCB\x87" /* ˇ */ },
160 {"`7<R>0<E>", "\xE2\x8A\xA5" /* ⊥ */ },
161 {"`7<R><R>1<E>", "\xE2\x88\xA0" /* ∠ */ },
162 {"`7<R><R>2<E>", "\xE2\x88\x9F" /* ∟ */ },
163 {"`7<R><R>3<E>", "\xE2\x8A\xBF" /* ⊿ */ },
164 {"`7<R><R>4<E>", "\xE3\x8F\x92" /* ㏒ */ },
165 {"`7<R><R>5<E>", "\xE3\x8F\x91" /* ㏑ */ },
166 {"`7<R><R>6<E>", "\xE2\x88\xAB" /* ∫ */ },
167 {"`7<R><R>7<E>", "\xE2\x88\xAE" /* ∮ */ },
168 {"`7<R><R>8<E>", "\xE2\x88\xB5" /* ∵ */ },
169 {"`7<R><R>9<E>", "\xE2\x88\xB4" /* ∴ */ },
170 {"`7<R><R>0<E>", "\xE2\x95\xB3" /* ╳ */ },
171 {"`7<R><R><R>1<E>", "\xEF\xB9\xA2" /* ﹢ */ },
172 {"`81<E>", "\xE2\x86\x91" /* ↑ */ },
173 {"`82<E>", "\xE2\x86\x93" /* ↓ */ },
174 {"`83<E>", "\xE2\x86\x90" /* ← */ },
175 {"`84<E>", "\xE2\x86\x92" /* → */ },
176 {"`85<E>", "\xE2\x86\x96" /* ↖ */ },
177 {"`86<E>", "\xE2\x86\x97" /* ↗ */ },
178 {"`87<E>", "\xE2\x86\x99" /* ↙ */ },
179 {"`88<E>", "\xE2\x86\x98" /* ↘ */ },
180 {"`89<E>", "\xE3\x8A\xA3" /* ㊣ */ },
181 {"`80<E>", "\xE2\x97\x8E" /* ◎ */ },
182 {"`8<R>1<E>", "\xE2\x97\x8B" /* ○ */ },
183 {"`8<R>2<E>", "\xE2\x97\x8F" /* ● */ },
184 {"`8<R>3<E>", "\xE2\x8A\x95" /* ⊕ */ },
185 {"`8<R>4<E>", "\xE2\x8A\x99" /* ⊙ */ },
186 {"`8<R>5<E>", "\xE2\x97\x8B" /* ○ */ },
187 {"`8<R>6<E>", "\xE2\x97\x8F" /* ● */ },
188 {"`8<R>7<E>", "\xE2\x96\xB3" /* △ */ },
189 {"`8<R>8<E>", "\xE2\x96\xB2" /* ▲ */ },
190 {"`8<R>9<E>", "\xE2\x98\x86" /* ☆ */ },
191 {"`8<R>0<E>", "\xE2\x98\x85" /* ★ */ },
192 {"`8<R><R>1<E>", "\xE2\x97\x87" /* ◇ */ },
193 {"`8<R><R>2<E>", "\xE2\x97\x86" /* ◆ */ },
194 {"`8<R><R>3<E>", "\xE2\x96\xA1" /* □ */ },
195 {"`8<R><R>4<E>", "\xE2\x96\xA0" /* ■ */ },
196 {"`8<R><R>5<E>", "\xE2\x96\xBD" /* ▽ */ },
197 {"`8<R><R>6<E>", "\xE2\x96\xBC" /* ▼ */ },
198 {"`8<R><R>7<E>", "\xC2\xA7" /* § */ },
199 {"`8<R><R>8<E>", "\xEF\xBF\xA5" /* ¥ */ },
200 {"`8<R><R>9<E>", "\xE3\x80\x92" /* 〒 */ },
201 {"`8<R><R>0<E>", "\xEF\xBF\xA0" /* ¢ */ },
202 {"`8<R><R><R>1<E>", "\xEF\xBF\xA1" /* £ */ },
203 {"`8<R><R><R>2<E>", "\xE2\x80\xBB" /* ※ */ },
204 {"`8<R><R><R>3<E>", "\xE2\x99\x80" /* ♀ */ },
205 {"`8<R><R><R>4<E>", "\xE2\x99\x82" /* ♂ */ },
206 {"`91<E>", "\xE2\x99\xA8" /* ♨ */ },
207 {"`92<E>", "\xE2\x98\x80" /* ☀ */ },
208 {"`93<E>", "\xE2\x98\x81" /* ☁ */ },
209 {"`94<E>", "\xE2\x98\x82" /* ☂ */ },
210 {"`95<E>", "\xE2\x98\x83" /* ☃ */ },
211 {"`96<E>", "\xE2\x99\xA0" /* ♠ */ },
212 {"`97<E>", "\xE2\x99\xA5" /* ♥ */ },
213 {"`98<E>", "\xE2\x99\xA3" /* ♣ */ },
214 {"`99<E>", "\xE2\x99\xA6" /* ♦ */ },
215 {"`90<E>", "\xE2\x99\xA9" /* ♩ */ },
216 {"`9<R>1<E>", "\xE2\x99\xAA" /* ♪ */ },
217 {"`9<R>2<E>", "\xE2\x99\xAB" /* ♫ */ },
218 {"`9<R>3<E>", "\xE2\x99\xAC" /* ♬ */ },
219 {"`9<R>4<E>", "\xE2\x98\xBA" /* ☺ */ },
220 {"`9<R>5<E>", "\xE2\x98\xBB" /* ☻ */ },
221 {"`01<E>", "\xE2\x94\x9C" /* ├ */ },
222 {"`02<E>", "\xE2\x94\x80" /* ─ */ },
223 {"`03<E>", "\xE2\x94\xBC" /* ┼ */ },
224 {"`04<E>", "\xE2\x94\xB4" /* ┴ */ },
225 {"`05<E>", "\xE2\x94\xAC" /* ┬ */ },
226 {"`06<E>", "\xE2\x94\xA4" /* ┤ */ },
227 {"`07<E>", "\xE2\x94\x8C" /* ┌ */ },
228 {"`08<E>", "\xE2\x94\x90" /* ┐ */ },
229 {"`09<E>", "\xE2\x95\x9E" /* ╞ */ },
230 {"`00<E>", "\xE2\x95\x90" /* ═ */ },
231 {"`0<R>1<E>", "\xE2\x95\xAA" /* ╪ */ },
232 {"`0<R>2<E>", "\xE2\x95\xA1" /* ╡ */ },
233 {"`0<R>3<E>", "\xE2\x94\x82" /* │ */ },
234 {"`0<R>4<E>", "\xE2\x96\x95" /* ▕ */ },
235 {"`0<R>5<E>", "\xE2\x94\x94" /* └ */ },
236 {"`0<R>6<E>", "\xE2\x94\x98" /* ┘ */ },
237 {"`0<R>7<E>", "\xE2\x95\xAD" /* ╭ */ },
238 {"`0<R>8<E>", "\xE2\x95\xAE" /* ╮ */ },
239 {"`0<R>9<E>", "\xE2\x95\xB0" /* ╰ */ },
240 {"`0<R>0<E>", "\xE2\x95\xAF" /* ╯ */ },
241 {"`<R>11<E>", "\xE2\x95\x94" /* ╔ */ },
242 {"`<R>12<E>", "\xE2\x95\xA6" /* ╦ */ },
243 {"`<R>13<E>", "\xE2\x95\x97" /* ╗ */ },
244 {"`<R>14<E>", "\xE2\x95\xA0" /* ╠ */ },
245 {"`<R>15<E>", "\xE2\x95\x90" /* ═ */ },
246 {"`<R>16<E>", "\xE2\x95\xAC" /* ╬ */ },
247 {"`<R>17<E>", "\xE2\x95\xA3" /* ╣ */ },
248 {"`<R>18<E>", "\xE2\x95\x93" /* ╓ */ },
249 {"`<R>19<E>", "\xE2\x95\xA5" /* ╥ */ },
250 {"`<R>10<E>", "\xE2\x95\x96" /* ╖ */ },
251 {"`<R>1<R>1<E>", "\xE2\x95\x92" /* ╒ */ },
252 {"`<R>1<R>2<E>", "\xE2\x95\xA4" /* ╤ */ },
253 {"`<R>1<R>3<E>", "\xE2\x95\x95" /* ╕ */ },
254 {"`<R>1<R>4<E>", "\xE2\x95\x91" /* ║ */ },
255 {"`<R>1<R>5<E>", "\xE2\x95\x9A" /* ╚ */ },
256 {"`<R>1<R>6<E>", "\xE2\x95\xA9" /* ╩ */ },
257 {"`<R>1<R>7<E>", "\xE2\x95\x9D" /* ╝ */ },
258 {"`<R>1<R>8<E>", "\xE2\x95\x9F" /* ╟ */ },
259 {"`<R>1<R>9<E>", "\xE2\x95\xAB" /* ╫ */ },
260 {"`<R>1<R>0<E>", "\xE2\x95\xA2" /* ╢ */ },
261 {"`<R>1<R><R>1<E>", "\xE2\x95\x99" /* ╙ */ },
262 {"`<R>1<R><R>2<E>", "\xE2\x95\xA8" /* ╨ */ },
263 {"`<R>1<R><R>3<E>", "\xE2\x95\x9C" /* ╜ */ },
264 {"`<R>1<R><R>4<E>", "\xE2\x95\x9E" /* ╞ */ },
265 {"`<R>1<R><R>5<E>", "\xE2\x95\xAA" /* ╪ */ },
266 {"`<R>1<R><R>6<E>", "\xE2\x95\xA1" /* ╡ */ },
267 {"`<R>1<R><R>7<E>", "\xE2\x95\x98" /* ╘ */ },
268 {"`<R>1<R><R>8<E>", "\xE2\x95\xA7" /* ╧ */ },
269 {"`<R>1<R><R>9<E>", "\xE2\x95\x9B" /* ╛ */ },
270 {"`<R>21<E>", "\xEF\xBC\xBF" /* _ */ },
271 {"`<R>22<E>", "\xCB\x8D" /* ˍ */ },
272 {"`<R>23<E>", "\xE2\x96\x81" /* ▁ */ },
273 {"`<R>24<E>", "\xE2\x96\x82" /* ▂ */ },
274 {"`<R>25<E>", "\xE2\x96\x83" /* ▃ */ },
275 {"`<R>26<E>", "\xE2\x96\x84" /* ▄ */ },
276 {"`<R>27<E>", "\xE2\x96\x85" /* ▅ */ },
277 {"`<R>28<E>", "\xE2\x96\x86" /* ▆ */ },
278 {"`<R>29<E>", "\xE2\x96\x87" /* ▇ */ },
279 {"`<R>20<E>", "\xE2\x96\x88" /* █ */ },
280 {"`<R>2<R>1<E>", "\xE2\x96\x8F" /* ▏ */ },
281 {"`<R>2<R>2<E>", "\xE2\x96\x8E" /* ▎ */ },
282 {"`<R>2<R>3<E>", "\xE2\x96\x8D" /* ▍ */ },
283 {"`<R>2<R>4<E>", "\xE2\x96\x8C" /* ▌ */ },
284 {"`<R>2<R>5<E>", "\xE2\x96\x8B" /* ▋ */ },
285 {"`<R>2<R>6<E>", "\xE2\x96\x8A" /* ▊ */ },
286 {"`<R>2<R>7<E>", "\xE2\x96\x89" /* ▉ */ },
287 {"`<R>2<R>8<E>", "\xE2\x97\xA2" /* ◢ */ },
288 {"`<R>2<R>9<E>", "\xE2\x97\xA3" /* ◣ */ },
289 {"`<R>2<R>0<E>", "\xE2\x97\xA5" /* ◥ */ },
290 {"`<R>2<R><R>1<E>", "\xE2\x97\xA4" /* ◤ */ },
291 {"`<R>31<E>", "\xEF\xB9\xA3" /* ﹣ */ },
292 {"`<R>32<E>", "\xEF\xB9\xA6" /* ﹦ */ },
293 {"`<R>33<E>", "\xE2\x89\xA1" /* ≡ */ },
294 {"`<R>34<E>", "\xEF\xBD\x9C" /* | */ },
295 {"`<R>35<E>", "\xE2\x88\xA3" /* ∣ */ },
296 {"`<R>36<E>", "\xE2\x88\xA5" /* ∥ */ },
297 {"`<R>37<E>", "\xE2\x80\x93" /* – */ },
298 {"`<R>38<E>", "\xEF\xB8\xB1" /* ︱ */ },
299 {"`<R>39<E>", "\xE2\x80\x94" /* — */ },
300 {"`<R>30<E>", "\xEF\xB8\xB3" /* ︳ */ },
301 {"`<R>3<R>1<E>", "\xE2\x95\xB4" /* ╴ */ },
302 {"`<R>3<R>2<E>", "\xC2\xAF" /* ¯ */ },
303 {"`<R>3<R>3<E>", "\xEF\xBF\xA3" /*  ̄ */ },
304 {"`<R>3<R>4<E>", "\xEF\xB9\x89" /* ﹉ */ },
305 {"`<R>3<R>5<E>", "\xEF\xB9\x8A" /* ﹊ */ },
306 {"`<R>3<R>6<E>", "\xEF\xB9\x8D" /* ﹍ */ },
307 {"`<R>3<R>7<E>", "\xEF\xB9\x8E" /* ﹎ */ },
308 {"`<R>3<R>8<E>", "\xEF\xB9\x8B" /* ﹋ */ },
309 {"`<R>3<R>9<E>", "\xEF\xB9\x8C" /* ﹌ */ },
310 {"`<R>3<R>0<E>", "\xEF\xB9\x8F" /* ﹏ */ },
311 {"`<R>3<R><R>1<E>", "\xEF\xB8\xB4" /* ︴ */ },
312 {"`<R>3<R><R>2<E>", "\xE2\x88\x95" /* ∕ */ },
313 {"`<R>3<R><R>3<E>", "\xEF\xB9\xA8" /* ﹨ */ },
314 {"`<R>3<R><R>4<E>", "\xE2\x95\xB1" /* ╱ */ },
315 {"`<R>3<R><R>5<E>", "\xE2\x95\xB2" /* ╲ */ },
316 {"`<R>3<R><R>6<E>", "\xEF\xBC\x8F" /* / */ },
317 {"`<R>3<R><R>7<E>", "\xEF\xBC\xBC" /* \ */ },
318 };
319
320 static const char *CAND[] = {
321 "\xE2\x80\xA6" /* … */ ,
322 "\xE2\x80\xBB" /* ※ */ ,
323 "\xE5\xB8\xB8\xE7\x94\xA8\xE7\xAC\xA6\xE8\x99\x9F" /* 常用符號 */ ,
324 "\xE5\xB7\xA6\xE5\x8F\xB3\xE6\x8B\xAC\xE8\x99\x9F" /* 左右括號 */ ,
325 "\xE4\xB8\x8A\xE4\xB8\x8B\xE6\x8B\xAC\xE8\x99\x9F" /* 上下括號 */ ,
326 "\xE5\xB8\x8C\xE8\x87\x98\xE5\xAD\x97\xE6\xAF\x8D" /* 希臘字母 */ ,
327 "\xE6\x95\xB8\xE5\xAD\xB8\xE7\xAC\xA6\xE8\x99\x9F" /* 數學符號 */ ,
328 "\xE7\x89\xB9\xE6\xAE\x8A\xE5\x9C\x96\xE5\xBD\xA2" /* 特殊圖形 */ ,
329 "\x55\x6E\x69\x63\x6F\x64\x65" /* Unicode */ ,
330 "\xE5\x96\xAE\xE7\xB7\x9A\xE6\xA1\x86" /* 單線框 */ ,
331 "\xE9\x9B\x99\xE7\xB7\x9A\xE6\xA1\x86" /* 雙線框 */ ,
332 "\xE5\xA1\xAB\xE8\x89\xB2\xE6\x96\xB9\xE5\xA1\x8A" /* 填色方塊 */ ,
333 "\xE7\xB7\x9A\xE6\xAE\xB5" /* 線段 */ ,
334 };
335
336 FILE *fd;
337
test_type_symbol()338 void test_type_symbol()
339 {
340 ChewingContext *ctx;
341 size_t i;
342
343 ctx = chewing_new();
344 start_testcase(ctx, fd);
345
346 chewing_set_candPerPage(ctx, 10);
347 chewing_set_maxChiSymbolLen(ctx, 16);
348
349 for (i = 0; i < ARRAY_SIZE(SYMBOL); ++i) {
350 type_keystroke_by_string(ctx, SYMBOL[i].token);
351 ok_preedit_buffer(ctx, "");
352 ok_commit_buffer(ctx, SYMBOL[i].expected);
353 }
354
355 chewing_delete(ctx);
356 }
357
test_symbol_cand_page()358 void test_symbol_cand_page()
359 {
360 ChewingContext *ctx;
361
362 ctx = chewing_new();
363 start_testcase(ctx, fd);
364
365 chewing_set_candPerPage(ctx, 10);
366 chewing_set_maxChiSymbolLen(ctx, 16);
367
368 chewing_handle_Default(ctx, '`');
369 ok(chewing_cand_CurrentPage(ctx) == 0, "current page shall be 0");
370 ok(chewing_cand_TotalPage(ctx) == 2, "total page shall be 2");
371
372 ok_candidate(ctx, CAND, ARRAY_SIZE(CAND));
373
374 chewing_delete(ctx);
375 }
376
test_symbol_count()377 void test_symbol_count()
378 {
379 ChewingContext *ctx;
380 int total;
381
382 ctx = chewing_new();
383 start_testcase(ctx, fd);
384
385 type_keystroke_by_string(ctx, "`3");
386 total = chewing_cand_TotalChoice(ctx);
387 ok(total == 30, "total candidate for `3 is %d, shall be %d", total, 30);
388
389 chewing_delete(ctx);
390 }
391
test_symbol()392 void test_symbol()
393 {
394 test_symbol_cand_page();
395 test_symbol_count();
396 }
397
test_nocand_symbol()398 void test_nocand_symbol()
399 {
400 ChewingContext *ctx;
401
402 ctx = chewing_new();
403 start_testcase(ctx, fd);
404
405 chewing_set_candPerPage(ctx, 10);
406 chewing_set_maxChiSymbolLen(ctx, 16);
407
408 type_keystroke_by_string(ctx, "`<R>20");
409 ok_preedit_buffer(ctx, "\xE2\x96\x88"); /* █ */
410
411 type_keystroke_by_string(ctx, "<D>");
412 ok_candidate(ctx, CAND, ARRAY_SIZE(CAND));
413
414 type_keystroke_by_string(ctx, "1<E>"); /* select … */
415 ok_commit_buffer(ctx, "\xE2\x80\xA6");
416
417 chewing_delete(ctx);
418 }
419
main(int argc,char * argv[])420 int main(int argc, char *argv[])
421 {
422 char *logname;
423 int ret;
424
425 putenv("CHEWING_PATH=" CHEWING_DATA_PREFIX);
426 putenv("CHEWING_USER_PATH=" TEST_HASH_DIR);
427
428 ret = asprintf(&logname, "%s.log", argv[0]);
429 if (ret == -1)
430 return -1;
431 fd = fopen(logname, "w");
432 assert(fd);
433 free(logname);
434
435 test_type_symbol();
436 test_symbol();
437 test_nocand_symbol();
438
439 fclose(fd);
440
441 return exit_status();
442 }
443