OLD | NEW |
| (Empty) |
1 /* | |
2 ************************************************************************ | |
3 * Copyright (c) 1997-2003, International Business Machines | |
4 * Corporation and others. All Rights Reserved. | |
5 ************************************************************************ | |
6 */ | |
7 | |
8 #ifndef _NORMCONF | |
9 #define _NORMCONF | |
10 | |
11 #include "unicode/utypes.h" | |
12 | |
13 #if !UCONFIG_NO_NORMALIZATION | |
14 | |
15 #include "unicode/normlzr.h" | |
16 #include "intltest.h" | |
17 | |
18 typedef struct _FileStream FileStream; | |
19 | |
20 class NormalizerConformanceTest : public IntlTest { | |
21 Normalizer normalizer; | |
22 | |
23 public: | |
24 NormalizerConformanceTest(); | |
25 virtual ~NormalizerConformanceTest(); | |
26 | |
27 void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=
NULL); | |
28 | |
29 /** | |
30 * Test the conformance of Normalizer to | |
31 * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt | |
32 */ | |
33 void TestConformance(); | |
34 void TestConformance32(); | |
35 void TestConformance(FileStream *input, int32_t options); | |
36 | |
37 // Specific tests for debugging. These are generally failures taken from | |
38 // the conformance file, but culled out to make debugging easier. | |
39 void TestCase6(void); | |
40 | |
41 private: | |
42 FileStream *openNormalizationTestFile(const char *filename); | |
43 | |
44 /** | |
45 * Verify the conformance of the given line of the Unicode | |
46 * normalization (UTR 15) test suite file. For each line, | |
47 * there are five columns, corresponding to field[0]..field[4]. | |
48 * | |
49 * The following invariants must be true for all conformant implementations | |
50 * c2 == NFC(c1) == NFC(c2) == NFC(c3) | |
51 * c3 == NFD(c1) == NFD(c2) == NFD(c3) | |
52 * c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5) | |
53 * c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5) | |
54 * | |
55 * @param field the 5 columns | |
56 * @param line the source line from the test suite file | |
57 * @return true if the test passes | |
58 */ | |
59 UBool checkConformance(const UnicodeString* field, | |
60 const char *line, | |
61 int32_t options, | |
62 UErrorCode &status); | |
63 | |
64 void iterativeNorm(const UnicodeString& str, | |
65 UNormalizationMode mode, int32_t options, | |
66 UnicodeString& result, | |
67 int8_t dir); | |
68 | |
69 /** | |
70 * @param op name of normalization form, e.g., "KC" | |
71 * @param s string being normalized | |
72 * @param got value received | |
73 * @param exp expected value | |
74 * @param msg description of this test | |
75 * @param return true if got == exp | |
76 */ | |
77 UBool assertEqual(const char *op, | |
78 const UnicodeString& s, | |
79 const UnicodeString& got, | |
80 const UnicodeString& exp, | |
81 const char *msg, | |
82 int32_t field); | |
83 | |
84 /** | |
85 * Split a string into pieces based on the given delimiter | |
86 * character. Then, parse the resultant fields from hex into | |
87 * characters. That is, "0040 0400;0C00;0899" -> new String[] { | |
88 * "\u0040\u0400", "\u0C00", "\u0899" }. The output is assumed to | |
89 * be of the proper length already, and exactly output.length | |
90 * fields are parsed. If there are too few an exception is | |
91 * thrown. If there are too many the extras are ignored. | |
92 * | |
93 * @param buf scratch buffer | |
94 * @return FALSE upon failure | |
95 */ | |
96 UBool hexsplit(const char *s, char delimiter, | |
97 UnicodeString output[], int32_t outputLength); | |
98 | |
99 void _testOneLine(const char *line); | |
100 void compare(const UnicodeString& s1,const UnicodeString& s2); | |
101 }; | |
102 | |
103 #endif /* #if !UCONFIG_NO_NORMALIZATION */ | |
104 | |
105 #endif | |
OLD | NEW |