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