diff options
Diffstat (limited to 'Build/source/libs/icu/icu-4.6/test/intltest/normconf.h')
-rw-r--r-- | Build/source/libs/icu/icu-4.6/test/intltest/normconf.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.6/test/intltest/normconf.h b/Build/source/libs/icu/icu-4.6/test/intltest/normconf.h new file mode 100644 index 00000000000..472c2dfd61f --- /dev/null +++ b/Build/source/libs/icu/icu-4.6/test/intltest/normconf.h @@ -0,0 +1,105 @@ +/* +************************************************************************ +* Copyright (c) 1997-2003, International Business Machines +* Corporation and others. All Rights Reserved. +************************************************************************ +*/ + +#ifndef _NORMCONF +#define _NORMCONF + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_NORMALIZATION + +#include "unicode/normlzr.h" +#include "intltest.h" + +typedef struct _FileStream FileStream; + +class NormalizerConformanceTest : public IntlTest { + Normalizer normalizer; + + public: + NormalizerConformanceTest(); + virtual ~NormalizerConformanceTest(); + + void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL); + + /** + * Test the conformance of Normalizer to + * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt + */ + void TestConformance(); + void TestConformance32(); + void TestConformance(FileStream *input, int32_t options); + + // Specific tests for debugging. These are generally failures taken from + // the conformance file, but culled out to make debugging easier. + void TestCase6(void); + + private: + FileStream *openNormalizationTestFile(const char *filename); + + /** + * Verify the conformance of the given line of the Unicode + * normalization (UTR 15) test suite file. For each line, + * there are five columns, corresponding to field[0]..field[4]. + * + * The following invariants must be true for all conformant implementations + * c2 == NFC(c1) == NFC(c2) == NFC(c3) + * c3 == NFD(c1) == NFD(c2) == NFD(c3) + * c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5) + * c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5) + * + * @param field the 5 columns + * @param line the source line from the test suite file + * @return true if the test passes + */ + UBool checkConformance(const UnicodeString* field, + const char *line, + int32_t options, + UErrorCode &status); + + void iterativeNorm(const UnicodeString& str, + UNormalizationMode mode, int32_t options, + UnicodeString& result, + int8_t dir); + + /** + * @param op name of normalization form, e.g., "KC" + * @param s string being normalized + * @param got value received + * @param exp expected value + * @param msg description of this test + * @param return true if got == exp + */ + UBool assertEqual(const char *op, + const UnicodeString& s, + const UnicodeString& got, + const UnicodeString& exp, + const char *msg, + int32_t field); + + /** + * Split a string into pieces based on the given delimiter + * character. Then, parse the resultant fields from hex into + * characters. That is, "0040 0400;0C00;0899" -> new String[] { + * "\u0040\u0400", "\u0C00", "\u0899" }. The output is assumed to + * be of the proper length already, and exactly output.length + * fields are parsed. If there are too few an exception is + * thrown. If there are too many the extras are ignored. + * + * @param buf scratch buffer + * @return FALSE upon failure + */ + UBool hexsplit(const char *s, char delimiter, + UnicodeString output[], int32_t outputLength); + + void _testOneLine(const char *line); + void compare(const UnicodeString& s1,const UnicodeString& s2); +}; + +#endif /* #if !UCONFIG_NO_NORMALIZATION */ + +#endif |