1/*
2 *******************************************************************************
3 *
4 *   Copyright (C) 2003-2006, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *
7 *******************************************************************************
8 *   file name:  testidna.h
9 *   encoding:   US-ASCII
10 *   tab size:   8 (not used)
11 *   indentation:4
12 *
13 *   created on: 2003feb1
14 *   created by: Ram Viswanadha
15 */
16
17#ifndef TESTIDNA_H
18#define TESTIDNA_H
19
20#include "unicode/utypes.h"
21
22#if !UCONFIG_NO_IDNA && !UCONFIG_NO_TRANSLITERATION
23
24#include "intltest.h"
25#include "unicode/parseerr.h"
26#include "unicode/uidna.h"
27
28U_CDECL_BEGIN
29typedef int32_t
30(U_EXPORT2 *TestFunc) (   const UChar *src, int32_t srcLength,
31                UChar *dest, int32_t destCapacity,
32                int32_t options, UParseError *parseError,
33                UErrorCode *status);
34typedef int32_t
35(U_EXPORT2 *CompareFunc) (const UChar *s1, int32_t s1Len,
36                const UChar *s2, int32_t s2Len,
37                int32_t options,
38                UErrorCode *status);
39
40
41U_CDECL_END
42
43// test the API
44
45class NamePrepTransform;
46
47/**
48 * @test
49 * @summary General test of HexadecimalToUnicodeTransliterator
50 */
51class TestIDNA : public IntlTest {
52public:
53    void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
54    void TestDataFile();
55    void TestToASCII();
56    void TestToUnicode();
57    void TestIDNToUnicode();
58    void TestIDNToASCII();
59    void TestCompare();
60    void TestErrorCases();
61    void TestChaining();
62    void TestRootLabelSeparator();
63    void TestCompareReferenceImpl();
64    void TestRefIDNA();
65    void TestIDNAMonkeyTest();
66    void TestConformance();
67    static NamePrepTransform* getInstance(UErrorCode& status);
68    static NamePrepTransform* gPrep;
69    virtual ~TestIDNA();
70
71private:
72    void testToASCII(const char* testName, TestFunc func);
73    void testToUnicode(const char* testName, TestFunc func);
74    void testIDNToUnicode(const char* testName, TestFunc func);
75    void testIDNToASCII(const char* testName, TestFunc func);
76    void testCompare(const char* testName, CompareFunc func);
77    void testChaining(const char* toASCIIName, TestFunc toASCII,
78                    const char* toUnicodeName, TestFunc toUnicode);
79    void debug(const UChar* src, int32_t srcLength, int32_t options);
80    // main testing functions
81    void testAPI(const UChar *src, const UChar *expected, const char *testName,
82             UBool useSTD3ASCIIRules, UErrorCode expectedStatus,
83             UBool doCompare, UBool testUnassigned, TestFunc func, UBool testSTD3ASCIIRules=TRUE);
84
85    void testCompare(const UChar* s1, int32_t s1Len,
86                        const UChar* s2, int32_t s2Len,
87                        const char* testName, CompareFunc func,
88                        UBool isEqual);
89
90    void testErrorCases(const char* IDNToASCIIName, TestFunc IDNToASCII,
91                    const char* IDNToUnicodeName, TestFunc IDNToUnicode);
92
93    void testChaining(const UChar* src,int32_t numIterations,const char* testName,
94                  UBool useSTD3ASCIIRules, UBool caseInsensitive, TestFunc func);
95
96    void testRootLabelSeparator(const char* testName, CompareFunc func,
97                            const char* IDNToASCIIName, TestFunc IDNToASCII,
98                            const char* IDNToUnicodeName, TestFunc IDNToUnicode);
99
100    void testCompareReferenceImpl(const UChar* src, int32_t srcLen);
101
102    UnicodeString testCompareReferenceImpl(UnicodeString& src,
103                                TestFunc refIDNA, const char* refIDNAName,
104                                TestFunc uIDNA, const char* uIDNAName,
105                                int32_t options);
106
107    void testConformance(const char* toASCIIName, TestFunc toASCII,
108                         const char* IDNToASCIIName, TestFunc IDNToASCII,
109                         const char* IDNToUnicodeName, TestFunc IDNToUnicode,
110                         const char* toUnicodeName, TestFunc toUnicode
111                         );
112
113};
114
115// test the TRIE data structure
116int testData(TestIDNA& test);
117
118#endif /* #if !UCONFIG_NO_IDNA */
119
120#endif
121