1/*
2 *******************************************************************************
3 *
4 *   Copyright (C) 2003-2014, International Business Machines
5 *   Corporation and others.  All Rights Reserved.
6 *
7 *******************************************************************************
8 *   file name:  convtest.h
9 *   encoding:   US-ASCII
10 *   tab size:   8 (not used)
11 *   indentation:4
12 *
13 *   created on: 2003jul15
14 *   created by: Markus W. Scherer
15 *
16 *   Test file for data-driven conversion tests.
17 */
18
19#ifndef __CONVTEST_H__
20#define __CONVTEST_H__
21
22#include "unicode/utypes.h"
23
24#if !UCONFIG_NO_LEGACY_CONVERSION
25
26#include "unicode/ucnv.h"
27#include "intltest.h"
28
29struct ConversionCase {
30    /* setup */
31    int32_t caseNr;
32    const char *charset, *cbopt, *name;
33    UChar subString[16];
34    char subchar[8];
35    int8_t setSub;
36
37    /* input and expected output */
38    const uint8_t *bytes;
39    int32_t bytesLength;
40    const UChar *unicode;
41    int32_t unicodeLength;
42    const int32_t *offsets;
43
44    /* UTF-8 version of unicode[unicodeLength] */
45    const char *utf8;
46    int32_t utf8Length;
47
48    /* options */
49    UBool finalFlush;
50    UBool fallbacks;
51    UErrorCode outErrorCode;
52    const uint8_t *invalidChars;
53    const UChar *invalidUChars;
54    int32_t invalidLength;
55
56    /* actual output */
57    uint8_t resultBytes[200];
58    UChar resultUnicode[200];
59    int32_t resultOffsets[200];
60    int32_t resultLength;
61
62    UErrorCode resultErrorCode;
63};
64
65class ConversionTest : public IntlTest {
66public:
67    ConversionTest();
68    virtual ~ConversionTest();
69
70    void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
71
72    void TestToUnicode();
73    void TestFromUnicode();
74    void TestGetUnicodeSet();
75    void TestGetUnicodeSet2();
76    void TestDefaultIgnorableCallback();
77
78private:
79    UBool
80    ToUnicodeCase(ConversionCase &cc, UConverterToUCallback callback, const char *option);
81
82    UBool
83    FromUnicodeCase(ConversionCase &cc, UConverterFromUCallback callback, const char *option);
84
85    UBool
86    checkToUnicode(ConversionCase &cc, UConverter *cnv, const char *name,
87                   const UChar *result, int32_t resultLength,
88                   const int32_t *resultOffsets,
89                   UErrorCode resultErrorCode);
90
91    UBool
92    checkFromUnicode(ConversionCase &cc, UConverter *cnv, const char *name,
93                     const uint8_t *result, int32_t resultLength,
94                     const int32_t *resultOffsets,
95                     UErrorCode resultErrorCode);
96
97    UConverter *
98    cnv_open(const char *name, UErrorCode &errorCode);
99
100    /* for testing direct UTF-8 conversion */
101    UConverter *utf8Cnv;
102};
103
104#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */
105
106#endif
107