1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/xpcom/tests/UTFStrings.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,110 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#ifndef utfstrings_h__ 1.9 +#define utfstrings_h__ 1.10 + 1.11 +struct UTFStringsStringPair 1.12 + { 1.13 + char16_t m16[16]; 1.14 + char m8[16]; 1.15 + }; 1.16 + 1.17 +static const UTFStringsStringPair ValidStrings[] = 1.18 + { 1.19 + { { 'a', 'b', 'c', 'd' }, 1.20 + { 'a', 'b', 'c', 'd' } }, 1.21 + { { '1', '2', '3', '4' }, 1.22 + { '1', '2', '3', '4' } }, 1.23 + { { 0x7F, 'A', 0x80, 'B', 0x101, 0x200 }, 1.24 + { 0x7F, 'A', 0xC2, 0x80, 'B', 0xC4, 0x81, 0xC8, 0x80 } }, 1.25 + { { 0x7FF, 0x800, 0x1000 }, 1.26 + { 0xDF, 0xBF, 0xE0, 0xA0, 0x80, 0xE1, 0x80, 0x80 } }, 1.27 + { { 0xD7FF, 0xE000, 0xF00F, 'A', 0xFFF0 }, 1.28 + { 0xED, 0x9F, 0xBF, 0xEE, 0x80, 0x80, 0xEF, 0x80, 0x8F, 'A', 0xEF, 0xBF, 0xB0 } }, 1.29 + { { 0xFFF7, 0xFFFC, 0xFFFD, 0xFFFD }, 1.30 + { 0xEF, 0xBF, 0xB7, 0xEF, 0xBF, 0xBC, 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, 1.31 + { { 0xD800, 0xDC00, 0xD800, 0xDCFF }, 1.32 + { 0xF0, 0x90, 0x80, 0x80, 0xF0, 0x90, 0x83, 0xBF } }, 1.33 + { { 0xDBFF, 0xDFFF, 0xDBB7, 0xDCBA }, 1.34 + { 0xF4, 0x8F, 0xBF, 0xBF, 0xF3, 0xBD, 0xB2, 0xBA } }, 1.35 + { { 0xFFFD, 0xFFFF }, 1.36 + { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBF } }, 1.37 + { { 0xFFFD, 0xFFFE, 0xFFFF }, 1.38 + { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBE, 0xEF, 0xBF, 0xBF } }, 1.39 + }; 1.40 + 1.41 +static const UTFStringsStringPair Invalid16Strings[] = 1.42 + { 1.43 + { { 'a', 'b', 0xD800 }, 1.44 + { 'a', 'b', 0xEF, 0xBF, 0xBD } }, 1.45 + { { 0xD8FF, 'b' }, 1.46 + { 0xEF, 0xBF, 0xBD, 'b' } }, 1.47 + { { 0xD821 }, 1.48 + { 0xEF, 0xBF, 0xBD } }, 1.49 + { { 0xDC21 }, 1.50 + { 0xEF, 0xBF, 0xBD } }, 1.51 + { { 0xDC00, 0xD800, 'b' }, 1.52 + { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 'b' } }, 1.53 + { { 'b', 0xDC00, 0xD800 }, 1.54 + { 'b', 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, 1.55 + { { 0xDC00, 0xD800 }, 1.56 + { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, 1.57 + { { 0xDC00, 0xD800, 0xDC00, 0xD800 }, 1.58 + { 0xEF, 0xBF, 0xBD, 0xF0, 0x90, 0x80, 0x80, 0xEF, 0xBF, 0xBD } }, 1.59 + { { 0xDC00, 0xD800, 0xD800, 0xDC00 }, 1.60 + { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 0xF0, 0x90, 0x80, 0x80 } }, 1.61 + }; 1.62 + 1.63 +static const UTFStringsStringPair Invalid8Strings[] = 1.64 + { 1.65 + { { 'a', 0xFFFD, 'b' }, 1.66 + { 'a', 0xC0, 0x80, 'b' } }, 1.67 + { { 0xFFFD, 0x80 }, 1.68 + { 0xC1, 0xBF, 0xC2, 0x80 } }, 1.69 + { { 0xFFFD }, 1.70 + { 0xC1, 0xBF } }, 1.71 + { { 0xFFFD, 'x', 0x0800 }, 1.72 + { 0xE0, 0x80, 0x80, 'x', 0xE0, 0xA0, 0x80 } }, 1.73 + { { 0xFFFD, 'x', 0xFFFD }, 1.74 + { 0xF0, 0x80, 0x80, 0x80, 'x', 0xF0, 0x80, 0x8F, 0x80 } }, 1.75 + { { 0xFFFD, 0xFFFD }, 1.76 + { 0xF4, 0x90, 0x80, 0x80, 0xF7, 0xBF, 0xBF, 0xBF } }, 1.77 + { { 0xFFFD, 'x', 0xD800, 0xDC00, 0xFFFD }, 1.78 + { 0xF0, 0x8F, 0xBF, 0xBF, 'x', 0xF0, 0x90, 0x80, 0x80, 0xF0, 0x8F, 0xBF, 0xBF } }, 1.79 + { { 0xFFFD, 'x', 0xFFFD }, 1.80 + { 0xF8, 0x80, 0x80, 0x80, 0x80, 'x', 0xF8, 0x88, 0x80, 0x80, 0x80 } }, 1.81 + { { 0xFFFD, 0xFFFD }, 1.82 + { 0xFB, 0xBF, 0xBF, 0xBF, 0xBF, 0xFC, 0xA0, 0x80, 0x80, 0x80, 0x80 } }, 1.83 + { { 0xFFFD, 0xFFFD }, 1.84 + { 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF } }, 1.85 + }; 1.86 + 1.87 +// Don't use this array in debug builds as that intentionally asserts. 1.88 +#ifndef DEBUG 1.89 +static const char Malformed8Strings[][16] = 1.90 + { 1.91 + { 0x80 }, 1.92 + { 'a', 0xC8, 'c' }, 1.93 + { 'a', 0xC0 }, 1.94 + { 'a', 0xE8, 'c' }, 1.95 + { 'a', 0xE8, 0x80, 'c' }, 1.96 + { 'a', 0xE8, 0x80 }, 1.97 + { 0xE8, 0x7F, 0x80 }, 1.98 + { 'a', 0xE8, 0xE8, 0x80 }, 1.99 + { 'a', 0xF4 }, 1.100 + { 'a', 0xF4, 0x80, 0x80, 'c', 'c' }, 1.101 + { 'a', 0xF4, 0x80, 'x', 0x80 }, 1.102 + { 0xF4, 0x80, 0x80, 0x80, 0x80 }, 1.103 + { 'a', 0xFA, 'c' }, 1.104 + { 'a', 0xFA, 0x80, 0x80, 0x7F, 0x80, 'c' }, 1.105 + { 'a', 0xFA, 0x80, 0x80, 0x80, 0x80, 0x80, 'c' }, 1.106 + { 'a', 0xFD }, 1.107 + { 'a', 0xFD, 0x80, 0x80, 0x80, 0x80, 'c' }, 1.108 + { 'a', 0xFD, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, 1.109 + { 'a', 0xFC, 0x80, 0x80, 0x40, 0x80, 0x80, 'c' }, 1.110 + }; 1.111 +#endif 1.112 + 1.113 +#endif