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