2009-06-26 Robert Jordan <robertj@gmx.net>
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlCharTests.cs
1 //
2 // XmlTextReaderTests.cs
3 //
4 // Authors:
5 //      Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
6 //
7 // (C) 2003 Atsushi Enomoto, originally written by Jason Diamond
8 //    (Moved from XmlTextReaderTests.cs)
9 //
10 using System;
11 using System.Xml;
12
13 using NUnit.Framework;
14
15 // The following is #if'ed out because it's specific to the Mono
16 // implementation and won't compile when testing Microsoft's code.
17 // Feel free to turn it on if you want to test Mono's name tables.
18
19 // But note that anyway it is impossible to test XmlChar class
20 // because it is marked as internal.
21
22 namespace MonoTests.System.Xml
23 {
24
25         [TestFixture]
26         public class XmlCharTests
27         {
28 #if false
29
30                 [Test]
31                 public void IsFirstNameCharTest ()
32                 {
33                         for (int ch = 0; ch <= 0xFFFF; ++ch) {
34                                 Assert.IsTrue (XmlChar.IsFirstNameChar (ch) ==
35                                                 IsFirstNameChar (ch));
36                         }
37                 }
38
39                 [Test]
40                 public void IsNameCharTest ()
41                 {
42                         for (int ch = 0; ch <= 0xFFFF; ++ch) {
43                                 Assert.IsTrue (XmlChar.IsNameChar (ch) ==
44                                                 IsNameChar (ch));
45                         }
46                 }
47
48                 private static bool IsFirstNameChar (int ch)
49                 {
50                         return
51                                 IsLetter (ch) ||
52                                 (ch == '_') ||
53                                 (ch == ':');
54                 }
55
56                 private static bool IsNameChar (int ch)
57                 {
58                         return
59                                 IsLetter (ch) ||
60                                 IsDigit (ch) ||
61                                 (ch == '.') ||
62                                 (ch == '-') ||
63                                 (ch == '_') ||
64                                 (ch == ':') ||
65                                 IsCombiningChar (ch) ||
66                                 IsExtender (ch);
67                 }
68
69                 private static bool IsLetter (int ch)
70                 {
71                         return
72                                 IsBaseChar (ch) ||
73                                 IsIdeographic (ch);
74                 }
75
76                 private static bool IsBaseChar (int ch)
77                 {
78                         return
79                                 (ch >= 0x0041 && ch <= 0x005A) ||
80                                 (ch >= 0x0061 && ch <= 0x007A) ||
81                                 (ch >= 0x00C0 && ch <= 0x00D6) ||
82                                 (ch >= 0x00D8 && ch <= 0x00F6) ||
83                                 (ch >= 0x00F8 && ch <= 0x00FF) ||
84                                 (ch >= 0x0100 && ch <= 0x0131) ||
85                                 (ch >= 0x0134 && ch <= 0x013E) ||
86                                 (ch >= 0x0141 && ch <= 0x0148) ||
87                                 (ch >= 0x014A && ch <= 0x017E) ||
88                                 (ch >= 0x0180 && ch <= 0x01C3) ||
89                                 (ch >= 0x01CD && ch <= 0x01F0) ||
90                                 (ch >= 0x01F4 && ch <= 0x01F5) ||
91                                 (ch >= 0x01FA && ch <= 0x0217) ||
92                                 (ch >= 0x0250 && ch <= 0x02A8) ||
93                                 (ch >= 0x02BB && ch <= 0x02C1) ||
94                                 (ch == 0x0386) ||
95                                 (ch >= 0x0388 && ch <= 0x038A) ||
96                                 (ch == 0x038C) ||
97                                 (ch >= 0x038E && ch <= 0x03A1) ||
98                                 (ch >= 0x03A3 && ch <= 0x03CE) ||
99                                 (ch >= 0x03D0 && ch <= 0x03D6) ||
100                                 (ch == 0x03DA) ||
101                                 (ch == 0x03DC) ||
102                                 (ch == 0x03DE) ||
103                                 (ch == 0x03E0) ||
104                                 (ch >= 0x03E2 && ch <= 0x03F3) ||
105                                 (ch >= 0x0401 && ch <= 0x040C) ||
106                                 (ch >= 0x040E && ch <= 0x044F) ||
107                                 (ch >= 0x0451 && ch <= 0x045C) ||
108                                 (ch >= 0x045E && ch <= 0x0481) ||
109                                 (ch >= 0x0490 && ch <= 0x04C4) ||
110                                 (ch >= 0x04C7 && ch <= 0x04C8) ||
111                                 (ch >= 0x04CB && ch <= 0x04CC) ||
112                                 (ch >= 0x04D0 && ch <= 0x04EB) ||
113                                 (ch >= 0x04EE && ch <= 0x04F5) ||
114                                 (ch >= 0x04F8 && ch <= 0x04F9) ||
115                                 (ch >= 0x0531 && ch <= 0x0556) ||
116                                 (ch == 0x0559) ||
117                                 (ch >= 0x0561 && ch <= 0x0586) ||
118                                 (ch >= 0x05D0 && ch <= 0x05EA) ||
119                                 (ch >= 0x05F0 && ch <= 0x05F2) ||
120                                 (ch >= 0x0621 && ch <= 0x063A) ||
121                                 (ch >= 0x0641 && ch <= 0x064A) ||
122                                 (ch >= 0x0671 && ch <= 0x06B7) ||
123                                 (ch >= 0x06BA && ch <= 0x06BE) ||
124                                 (ch >= 0x06C0 && ch <= 0x06CE) ||
125                                 (ch >= 0x06D0 && ch <= 0x06D3) ||
126                                 (ch == 0x06D5) ||
127                                 (ch >= 0x06E5 && ch <= 0x06E6) ||
128                                 (ch >= 0x0905 && ch <= 0x0939) ||
129                                 (ch == 0x093D) ||
130                                 (ch >= 0x0958 && ch <= 0x0961) ||
131                                 (ch >= 0x0985 && ch <= 0x098C) ||
132                                 (ch >= 0x098F && ch <= 0x0990) ||
133                                 (ch >= 0x0993 && ch <= 0x09A8) ||
134                                 (ch >= 0x09AA && ch <= 0x09B0) ||
135                                 (ch == 0x09B2) ||
136                                 (ch >= 0x09B6 && ch <= 0x09B9) ||
137                                 (ch >= 0x09DC && ch <= 0x09DD) ||
138                                 (ch >= 0x09DF && ch <= 0x09E1) ||
139                                 (ch >= 0x09F0 && ch <= 0x09F1) ||
140                                 (ch >= 0x0A05 && ch <= 0x0A0A) ||
141                                 (ch >= 0x0A0F && ch <= 0x0A10) ||
142                                 (ch >= 0x0A13 && ch <= 0x0A28) ||
143                                 (ch >= 0x0A2A && ch <= 0x0A30) ||
144                                 (ch >= 0x0A32 && ch <= 0x0A33) ||
145                                 (ch >= 0x0A35 && ch <= 0x0A36) ||
146                                 (ch >= 0x0A38 && ch <= 0x0A39) ||
147                                 (ch >= 0x0A59 && ch <= 0x0A5C) ||
148                                 (ch == 0x0A5E) ||
149                                 (ch >= 0x0A72 && ch <= 0x0A74) ||
150                                 (ch >= 0x0A85 && ch <= 0x0A8B) ||
151                                 (ch == 0x0A8D) ||
152                                 (ch >= 0x0A8F && ch <= 0x0A91) ||
153                                 (ch >= 0x0A93 && ch <= 0x0AA8) ||
154                                 (ch >= 0x0AAA && ch <= 0x0AB0) ||
155                                 (ch >= 0x0AB2 && ch <= 0x0AB3) ||
156                                 (ch >= 0x0AB5 && ch <= 0x0AB9) ||
157                                 (ch == 0x0ABD) ||
158                                 (ch == 0x0AE0) ||
159                                 (ch >= 0x0B05 && ch <= 0x0B0C) ||
160                                 (ch >= 0x0B0F && ch <= 0x0B10) ||
161                                 (ch >= 0x0B13 && ch <= 0x0B28) ||
162                                 (ch >= 0x0B2A && ch <= 0x0B30) ||
163                                 (ch >= 0x0B32 && ch <= 0x0B33) ||
164                                 (ch >= 0x0B36 && ch <= 0x0B39) ||
165                                 (ch == 0x0B3D) ||
166                                 (ch >= 0x0B5C && ch <= 0x0B5D) ||
167                                 (ch >= 0x0B5F && ch <= 0x0B61) ||
168                                 (ch >= 0x0B85 && ch <= 0x0B8A) ||
169                                 (ch >= 0x0B8E && ch <= 0x0B90) ||
170                                 (ch >= 0x0B92 && ch <= 0x0B95) ||
171                                 (ch >= 0x0B99 && ch <= 0x0B9A) ||
172                                 (ch == 0x0B9C) ||
173                                 (ch >= 0x0B9E && ch <= 0x0B9F) ||
174                                 (ch >= 0x0BA3 && ch <= 0x0BA4) ||
175                                 (ch >= 0x0BA8 && ch <= 0x0BAA) ||
176                                 (ch >= 0x0BAE && ch <= 0x0BB5) ||
177                                 (ch >= 0x0BB7 && ch <= 0x0BB9) ||
178                                 (ch >= 0x0C05 && ch <= 0x0C0C) ||
179                                 (ch >= 0x0C0E && ch <= 0x0C10) ||
180                                 (ch >= 0x0C12 && ch <= 0x0C28) ||
181                                 (ch >= 0x0C2A && ch <= 0x0C33) ||
182                                 (ch >= 0x0C35 && ch <= 0x0C39) ||
183                                 (ch >= 0x0C60 && ch <= 0x0C61) ||
184                                 (ch >= 0x0C85 && ch <= 0x0C8C) ||
185                                 (ch >= 0x0C8E && ch <= 0x0C90) ||
186                                 (ch >= 0x0C92 && ch <= 0x0CA8) ||
187                                 (ch >= 0x0CAA && ch <= 0x0CB3) ||
188                                 (ch >= 0x0CB5 && ch <= 0x0CB9) ||
189                                 (ch == 0x0CDE) ||
190                                 (ch >= 0x0CE0 && ch <= 0x0CE1) ||
191                                 (ch >= 0x0D05 && ch <= 0x0D0C) ||
192                                 (ch >= 0x0D0E && ch <= 0x0D10) ||
193                                 (ch >= 0x0D12 && ch <= 0x0D28) ||
194                                 (ch >= 0x0D2A && ch <= 0x0D39) ||
195                                 (ch >= 0x0D60 && ch <= 0x0D61) ||
196                                 (ch >= 0x0E01 && ch <= 0x0E2E) ||
197                                 (ch == 0x0E30) ||
198                                 (ch >= 0x0E32 && ch <= 0x0E33) ||
199                                 (ch >= 0x0E40 && ch <= 0x0E45) ||
200                                 (ch >= 0x0E81 && ch <= 0x0E82) ||
201                                 (ch == 0x0E84) ||
202                                 (ch >= 0x0E87 && ch <= 0x0E88) ||
203                                 (ch == 0x0E8A) ||
204                                 (ch == 0x0E8D) ||
205                                 (ch >= 0x0E94 && ch <= 0x0E97) ||
206                                 (ch >= 0x0E99 && ch <= 0x0E9F) ||
207                                 (ch >= 0x0EA1 && ch <= 0x0EA3) ||
208                                 (ch == 0x0EA5) ||
209                                 (ch == 0x0EA7) ||
210                                 (ch >= 0x0EAA && ch <= 0x0EAB) ||
211                                 (ch >= 0x0EAD && ch <= 0x0EAE) ||
212                                 (ch == 0x0EB0) ||
213                                 (ch >= 0x0EB2 && ch <= 0x0EB3) ||
214                                 (ch == 0x0EBD) ||
215                                 (ch >= 0x0EC0 && ch <= 0x0EC4) ||
216                                 (ch >= 0x0F40 && ch <= 0x0F47) ||
217                                 (ch >= 0x0F49 && ch <= 0x0F69) ||
218                                 (ch >= 0x10A0 && ch <= 0x10C5) ||
219                                 (ch >= 0x10D0 && ch <= 0x10F6) ||
220                                 (ch == 0x1100) ||
221                                 (ch >= 0x1102 && ch <= 0x1103) ||
222                                 (ch >= 0x1105 && ch <= 0x1107) ||
223                                 (ch == 0x1109) ||
224                                 (ch >= 0x110B && ch <= 0x110C) ||
225                                 (ch >= 0x110E && ch <= 0x1112) ||
226                                 (ch == 0x113C) ||
227                                 (ch == 0x113E) ||
228                                 (ch == 0x1140) ||
229                                 (ch == 0x114C) ||
230                                 (ch == 0x114E) ||
231                                 (ch == 0x1150) ||
232                                 (ch >= 0x1154 && ch <= 0x1155) ||
233                                 (ch == 0x1159) ||
234                                 (ch >= 0x115F && ch <= 0x1161) ||
235                                 (ch == 0x1163) ||
236                                 (ch == 0x1165) ||
237                                 (ch == 0x1167) ||
238                                 (ch == 0x1169) ||
239                                 (ch >= 0x116D && ch <= 0x116E) ||
240                                 (ch >= 0x1172 && ch <= 0x1173) ||
241                                 (ch == 0x1175) ||
242                                 (ch == 0x119E) ||
243                                 (ch == 0x11A8) ||
244                                 (ch == 0x11AB) ||
245                                 (ch >= 0x11AE && ch <= 0x11AF) ||
246                                 (ch >= 0x11B7 && ch <= 0x11B8) ||
247                                 (ch == 0x11BA) ||
248                                 (ch >= 0x11BC && ch <= 0x11C2) ||
249                                 (ch == 0x11EB) ||
250                                 (ch == 0x11F0) ||
251                                 (ch == 0x11F9) ||
252                                 (ch >= 0x1E00 && ch <= 0x1E9B) ||
253                                 (ch >= 0x1EA0 && ch <= 0x1EF9) ||
254                                 (ch >= 0x1F00 && ch <= 0x1F15) ||
255                                 (ch >= 0x1F18 && ch <= 0x1F1D) ||
256                                 (ch >= 0x1F20 && ch <= 0x1F45) ||
257                                 (ch >= 0x1F48 && ch <= 0x1F4D) ||
258                                 (ch >= 0x1F50 && ch <= 0x1F57) ||
259                                 (ch == 0x1F59) ||
260                                 (ch == 0x1F5B) ||
261                                 (ch == 0x1F5D) ||
262                                 (ch >= 0x1F5F && ch <= 0x1F7D) ||
263                                 (ch >= 0x1F80 && ch <= 0x1FB4) ||
264                                 (ch >= 0x1FB6 && ch <= 0x1FBC) ||
265                                 (ch == 0x1FBE) ||
266                                 (ch >= 0x1FC2 && ch <= 0x1FC4) ||
267                                 (ch >= 0x1FC6 && ch <= 0x1FCC) ||
268                                 (ch >= 0x1FD0 && ch <= 0x1FD3) ||
269                                 (ch >= 0x1FD6 && ch <= 0x1FDB) ||
270                                 (ch >= 0x1FE0 && ch <= 0x1FEC) ||
271                                 (ch >= 0x1FF2 && ch <= 0x1FF4) ||
272                                 (ch >= 0x1FF6 && ch <= 0x1FFC) ||
273                                 (ch == 0x2126) ||
274                                 (ch >= 0x212A && ch <= 0x212B) ||
275                                 (ch == 0x212E) ||
276                                 (ch >= 0x2180 && ch <= 0x2182) ||
277                                 (ch >= 0x3041 && ch <= 0x3094) ||
278                                 (ch >= 0x30A1 && ch <= 0x30FA) ||
279                                 (ch >= 0x3105 && ch <= 0x312C) ||
280                                 (ch >= 0xAC00 && ch <= 0xD7A3);
281                 }
282
283                 private static bool IsIdeographic (int ch)
284                 {
285                         return
286                                 (ch >= 0x4E00 && ch <= 0x9FA5) ||
287                                 (ch == 0x3007) ||
288                                 (ch >= 0x3021 && ch <= 0x3029);
289                 }
290
291                 private static bool IsDigit (int ch)
292                 {
293                         return
294                                 (ch >= 0x0030 && ch <= 0x0039) ||
295                                 (ch >= 0x0660 && ch <= 0x0669) ||
296                                 (ch >= 0x06F0 && ch <= 0x06F9) ||
297                                 (ch >= 0x0966 && ch <= 0x096F) ||
298                                 (ch >= 0x09E6 && ch <= 0x09EF) ||
299                                 (ch >= 0x0A66 && ch <= 0x0A6F) ||
300                                 (ch >= 0x0AE6 && ch <= 0x0AEF) ||
301                                 (ch >= 0x0B66 && ch <= 0x0B6F) ||
302                                 (ch >= 0x0BE7 && ch <= 0x0BEF) ||
303                                 (ch >= 0x0C66 && ch <= 0x0C6F) ||
304                                 (ch >= 0x0CE6 && ch <= 0x0CEF) ||
305                                 (ch >= 0x0D66 && ch <= 0x0D6F) ||
306                                 (ch >= 0x0E50 && ch <= 0x0E59) ||
307                                 (ch >= 0x0ED0 && ch <= 0x0ED9) ||
308                                 (ch >= 0x0F20 && ch <= 0x0F29);
309                 }
310
311                 private static bool IsCombiningChar (int ch)
312                 {
313                         return
314                                 (ch >= 0x0300 && ch <= 0x0345) ||
315                                 (ch >= 0x0360 && ch <= 0x0361) ||
316                                 (ch >= 0x0483 && ch <= 0x0486) ||
317                                 (ch >= 0x0591 && ch <= 0x05A1) ||
318                                 (ch >= 0x05A3 && ch <= 0x05B9) ||
319                                 (ch >= 0x05BB && ch <= 0x05BD) ||
320                                 (ch == 0x05BF) ||
321                                 (ch >= 0x05C1 && ch <= 0x05C2) ||
322                                 (ch == 0x05C4) ||
323                                 (ch >= 0x064B && ch <= 0x0652) ||
324                                 (ch == 0x0670) ||
325                                 (ch >= 0x06D6 && ch <= 0x06DC) ||
326                                 (ch >= 0x06DD && ch <= 0x06DF) ||
327                                 (ch >= 0x06E0 && ch <= 0x06E4) ||
328                                 (ch >= 0x06E7 && ch <= 0x06E8) ||
329                                 (ch >= 0x06EA && ch <= 0x06ED) ||
330                                 (ch >= 0x0901 && ch <= 0x0903) ||
331                                 (ch == 0x093C) ||
332                                 (ch >= 0x093E && ch <= 0x094C) ||
333                                 (ch == 0x094D) ||
334                                 (ch >= 0x0951 && ch <= 0x0954) ||
335                                 (ch >= 0x0962 && ch <= 0x0963) ||
336                                 (ch >= 0x0981 && ch <= 0x0983) ||
337                                 (ch == 0x09BC) ||
338                                 (ch == 0x09BE) ||
339                                 (ch == 0x09BF) ||
340                                 (ch >= 0x09C0 && ch <= 0x09C4) ||
341                                 (ch >= 0x09C7 && ch <= 0x09C8) ||
342                                 (ch >= 0x09CB && ch <= 0x09CD) ||
343                                 (ch == 0x09D7) ||
344                                 (ch >= 0x09E2 && ch <= 0x09E3) ||
345                                 (ch == 0x0A02) ||
346                                 (ch == 0x0A3C) ||
347                                 (ch == 0x0A3E) ||
348                                 (ch == 0x0A3F) ||
349                                 (ch >= 0x0A40 && ch <= 0x0A42) ||
350                                 (ch >= 0x0A47 && ch <= 0x0A48) ||
351                                 (ch >= 0x0A4B && ch <= 0x0A4D) ||
352                                 (ch >= 0x0A70 && ch <= 0x0A71) ||
353                                 (ch >= 0x0A81 && ch <= 0x0A83) ||
354                                 (ch == 0x0ABC) ||
355                                 (ch >= 0x0ABE && ch <= 0x0AC5) ||
356                                 (ch >= 0x0AC7 && ch <= 0x0AC9) ||
357                                 (ch >= 0x0ACB && ch <= 0x0ACD) ||
358                                 (ch >= 0x0B01 && ch <= 0x0B03) ||
359                                 (ch == 0x0B3C) ||
360                                 (ch >= 0x0B3E && ch <= 0x0B43) ||
361                                 (ch >= 0x0B47 && ch <= 0x0B48) ||
362                                 (ch >= 0x0B4B && ch <= 0x0B4D) ||
363                                 (ch >= 0x0B56 && ch <= 0x0B57) ||
364                                 (ch >= 0x0B82 && ch <= 0x0B83) ||
365                                 (ch >= 0x0BBE && ch <= 0x0BC2) ||
366                                 (ch >= 0x0BC6 && ch <= 0x0BC8) ||
367                                 (ch >= 0x0BCA && ch <= 0x0BCD) ||
368                                 (ch == 0x0BD7) ||
369                                 (ch >= 0x0C01 && ch <= 0x0C03) ||
370                                 (ch >= 0x0C3E && ch <= 0x0C44) ||
371                                 (ch >= 0x0C46 && ch <= 0x0C48) ||
372                                 (ch >= 0x0C4A && ch <= 0x0C4D) ||
373                                 (ch >= 0x0C55 && ch <= 0x0C56) ||
374                                 (ch >= 0x0C82 && ch <= 0x0C83) ||
375                                 (ch >= 0x0CBE && ch <= 0x0CC4) ||
376                                 (ch >= 0x0CC6 && ch <= 0x0CC8) ||
377                                 (ch >= 0x0CCA && ch <= 0x0CCD) ||
378                                 (ch >= 0x0CD5 && ch <= 0x0CD6) ||
379                                 (ch >= 0x0D02 && ch <= 0x0D03) ||
380                                 (ch >= 0x0D3E && ch <= 0x0D43) ||
381                                 (ch >= 0x0D46 && ch <= 0x0D48) ||
382                                 (ch >= 0x0D4A && ch <= 0x0D4D) ||
383                                 (ch == 0x0D57) ||
384                                 (ch == 0x0E31) ||
385                                 (ch >= 0x0E34 && ch <= 0x0E3A) ||
386                                 (ch >= 0x0E47 && ch <= 0x0E4E) ||
387                                 (ch == 0x0EB1) ||
388                                 (ch >= 0x0EB4 && ch <= 0x0EB9) ||
389                                 (ch >= 0x0EBB && ch <= 0x0EBC) ||
390                                 (ch >= 0x0EC8 && ch <= 0x0ECD) ||
391                                 (ch >= 0x0F18 && ch <= 0x0F19) ||
392                                 (ch == 0x0F35) ||
393                                 (ch == 0x0F37) ||
394                                 (ch == 0x0F39) ||
395                                 (ch == 0x0F3E) ||
396                                 (ch == 0x0F3F) ||
397                                 (ch >= 0x0F71 && ch <= 0x0F84) ||
398                                 (ch >= 0x0F86 && ch <= 0x0F8B) ||
399                                 (ch >= 0x0F90 && ch <= 0x0F95) ||
400                                 (ch == 0x0F97) ||
401                                 (ch >= 0x0F99 && ch <= 0x0FAD) ||
402                                 (ch >= 0x0FB1 && ch <= 0x0FB7) ||
403                                 (ch == 0x0FB9) ||
404                                 (ch >= 0x20D0 && ch <= 0x20DC) ||
405                                 (ch == 0x20E1) ||
406                                 (ch >= 0x302A && ch <= 0x302F) ||
407                                 (ch == 0x3099) ||
408                                 (ch == 0x309A);
409                 }
410
411                 private static bool IsExtender (int ch)
412                 {
413                         return
414                                 (ch == 0x00B7) ||
415                                 (ch == 0x02D0) ||
416                                 (ch == 0x02D1) ||
417                                 (ch == 0x0387) ||
418                                 (ch == 0x0640) ||
419                                 (ch == 0x0E46) ||
420                                 (ch == 0x0EC6) ||
421                                 (ch == 0x3005) ||
422                                 (ch >= 0x3031 && ch <= 0x3035) ||
423                                 (ch >= 0x309D && ch <= 0x309E) ||
424                                 (ch >= 0x30FC && ch <= 0x30FE);
425                 }
426 #endif
427         }
428 }