/*
*******************************************************************************
*
* Copyright (C) 2003-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: convtest.h
* encoding: US-ASCII
* tab size: 8 (not used)
* indentation:4
*
* created on: 2003jul15
* created by: Markus W. Scherer
*
* Test file for data-driven conversion tests.
*/
#ifndef __CONVTEST_H__
#define __CONVTEST_H__
#include "unicode/utypes.h"
#if !UCONFIG_NO_LEGACY_CONVERSION
#include "unicode/ucnv.h"
#include "intltest.h"
struct ConversionCase {
/* setup */
int32_t caseNr;
const char *charset, *cbopt, *name;
UChar subString[16];
char subchar[8];
int8_t setSub;
/* input and expected output */
const uint8_t *bytes;
int32_t bytesLength;
const UChar *unicode;
int32_t unicodeLength;
const int32_t *offsets;
/* UTF-8 version of unicode[unicodeLength] */
const char *utf8;
int32_t utf8Length;
/* options */
UBool finalFlush;
UBool fallbacks;
UErrorCode outErrorCode;
const uint8_t *invalidChars;
const UChar *invalidUChars;
int32_t invalidLength;
/* actual output */
uint8_t resultBytes[200];
UChar resultUnicode[200];
int32_t resultOffsets[200];
int32_t resultLength;
UErrorCode resultErrorCode;
};
class ConversionTest : public IntlTest {
public:
ConversionTest();
virtual ~ConversionTest();
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
void TestToUnicode();
void TestFromUnicode();
void TestGetUnicodeSet();
void TestGetUnicodeSet2();
private:
UBool
ToUnicodeCase(ConversionCase &cc, UConverterToUCallback callback, const char *option);
UBool
FromUnicodeCase(ConversionCase &cc, UConverterFromUCallback callback, const char *option);
UBool
checkToUnicode(ConversionCase &cc, UConverter *cnv, const char *name,
const UChar *result, int32_t resultLength,
const int32_t *resultOffsets,
UErrorCode resultErrorCode);
UBool
checkFromUnicode(ConversionCase &cc, UConverter *cnv, const char *name,
const uint8_t *result, int32_t resultLength,
const int32_t *resultOffsets,
UErrorCode resultErrorCode);
UConverter *
cnv_open(const char *name, UErrorCode &errorCode);
/* for testing direct UTF-8 conversion */
UConverter *utf8Cnv;
};
#endif /* #if !UCONFIG_NO_LEGACY_CONVERSION */
#endif