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