/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id$ */ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- #include "XSValueTest.hpp" #include #include #if HAVE_CONFIG_H # include #endif #if defined(XERCES_NEW_IOSTREAMS) #include #else #include #endif #include #include #include #include static const char* null_string=0; static const bool EXP_RET_VALID_TRUE = true; static const bool EXP_RET_VALUE_TRUE = true; static const bool EXP_RET_CANREP_TRUE = true; static const bool EXP_RET_VALID_FALSE = false; static const bool EXP_RET_VALUE_FALSE = false; static const bool EXP_RET_CANREP_FALSE = false; static const XSValue::Status DONT_CARE = XSValue::st_UnknownType; static bool errSeen = false; static const XMLCh* getDataTypeString(const XSValue::DataType dt) { switch(dt) { case XSValue::dt_string: return SchemaSymbols::fgDT_STRING; case XSValue::dt_boolean: return SchemaSymbols::fgDT_BOOLEAN; case XSValue::dt_decimal: return SchemaSymbols::fgDT_DECIMAL; case XSValue::dt_float: return SchemaSymbols::fgDT_FLOAT; case XSValue::dt_double: return SchemaSymbols::fgDT_DOUBLE; case XSValue::dt_duration: return SchemaSymbols::fgDT_DURATION; case XSValue::dt_dateTime: return SchemaSymbols::fgDT_DATETIME; case XSValue::dt_time: return SchemaSymbols::fgDT_TIME; case XSValue::dt_date: return SchemaSymbols::fgDT_DATE; case XSValue::dt_gYearMonth: return SchemaSymbols::fgDT_YEARMONTH; case XSValue::dt_gYear: return SchemaSymbols::fgDT_YEAR; case XSValue::dt_gMonthDay: return SchemaSymbols::fgDT_MONTHDAY; case XSValue::dt_gDay: return SchemaSymbols::fgDT_DAY; case XSValue::dt_gMonth: return SchemaSymbols::fgDT_MONTH; case XSValue::dt_hexBinary: return SchemaSymbols::fgDT_HEXBINARY; case XSValue::dt_base64Binary: return SchemaSymbols::fgDT_BASE64BINARY; case XSValue::dt_anyURI: return SchemaSymbols::fgDT_ANYURI; case XSValue::dt_QName: return SchemaSymbols::fgDT_QNAME; case XSValue::dt_NOTATION: return XMLUni::fgNotationString; case XSValue::dt_normalizedString: return SchemaSymbols::fgDT_NORMALIZEDSTRING; case XSValue::dt_token: return SchemaSymbols::fgDT_TOKEN; case XSValue::dt_language: return SchemaSymbols::fgDT_LANGUAGE; case XSValue::dt_NMTOKEN: return XMLUni::fgNmTokenString; case XSValue::dt_NMTOKENS: return XMLUni::fgNmTokensString; case XSValue::dt_Name: return SchemaSymbols::fgDT_NAME; case XSValue::dt_NCName: return SchemaSymbols::fgDT_NCNAME; case XSValue::dt_ID: return XMLUni::fgIDString; case XSValue::dt_IDREF: return XMLUni::fgIDRefString; case XSValue::dt_IDREFS: return XMLUni::fgIDRefsString; case XSValue::dt_ENTITY: return XMLUni::fgEntityString; case XSValue::dt_ENTITIES: return XMLUni::fgEntitiesString; case XSValue::dt_integer: return SchemaSymbols::fgDT_INTEGER; case XSValue::dt_nonPositiveInteger: return SchemaSymbols::fgDT_NONPOSITIVEINTEGER; case XSValue::dt_negativeInteger: return SchemaSymbols::fgDT_NEGATIVEINTEGER; case XSValue::dt_long: return SchemaSymbols::fgDT_LONG; case XSValue::dt_int: return SchemaSymbols::fgDT_INT; case XSValue::dt_short: return SchemaSymbols::fgDT_SHORT; case XSValue::dt_byte: return SchemaSymbols::fgDT_BYTE; case XSValue::dt_nonNegativeInteger: return SchemaSymbols::fgDT_NONNEGATIVEINTEGER; case XSValue::dt_unsignedLong: return SchemaSymbols::fgDT_ULONG; case XSValue::dt_unsignedInt: return SchemaSymbols::fgDT_UINT; case XSValue::dt_unsignedShort: return SchemaSymbols::fgDT_USHORT; case XSValue::dt_unsignedByte: return SchemaSymbols::fgDT_UBYTE; case XSValue::dt_positiveInteger: return SchemaSymbols::fgDT_POSITIVEINTEGER; default: return 0; } } static bool compareActualValue( const XSValue::DataType datatype , const XSValue::XSValue_Data actValue , const XSValue::XSValue_Data expValue) { switch (datatype) { case XSValue::dt_boolean: if (actValue.fValue.f_bool == expValue.fValue.f_bool) return true; printf("ACTVALUE_TEST Unexpected XSValue for dt_boolean, got %d expected %d\n", actValue.fValue.f_bool, expValue.fValue.f_bool); return false; case XSValue::dt_decimal: if (fabs(actValue.fValue.f_double - expValue.fValue.f_double) < fabs(actValue.fValue.f_double)/1000) return true; printf("ACTVALUE_TEST Unexpected XSValue for datatype %s, got %f expected %f\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_double, expValue.fValue.f_double); return false; case XSValue::dt_double: if (actValue.fValue.f_doubleType.f_doubleEnum == XSValue::DoubleFloatType_Normal) { if (fabs(actValue.fValue.f_double - expValue.fValue.f_double) < fabs(actValue.fValue.f_double)/1000) return true; printf("ACTVALUE_TEST Unexpected XSValue for datatype %s, got %f expected %f\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_double, expValue.fValue.f_double); return false; } else { if (actValue.fValue.f_doubleType.f_doubleEnum == expValue.fValue.f_doubleType.f_doubleEnum) return true; printf("ACTVALUE_TEST Unexpected XSValue enum for datatype %s, got %d expected %d\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_doubleType.f_doubleEnum, expValue.fValue.f_doubleType.f_doubleEnum); return false; } case XSValue::dt_float: if (actValue.fValue.f_floatType.f_floatEnum == XSValue::DoubleFloatType_Normal) { if (fabs(actValue.fValue.f_float - expValue.fValue.f_float) < fabs(actValue.fValue.f_float)/1000) return true; printf("ACTVALUE_TEST Unexpected XSValue for datatype %s, got %f expected %f\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_float, expValue.fValue.f_float); return false; } else { if (actValue.fValue.f_floatType.f_floatEnum == expValue.fValue.f_floatType.f_floatEnum) return true; printf("ACTVALUE_TEST Unexpected XSValue enum for datatype %s, got %d expected %d\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_floatType.f_floatEnum, expValue.fValue.f_floatType.f_floatEnum); return false; } case XSValue::dt_duration: case XSValue::dt_dateTime: case XSValue::dt_time: case XSValue::dt_date: case XSValue::dt_gYearMonth: case XSValue::dt_gYear: case XSValue::dt_gMonthDay: case XSValue::dt_gDay: case XSValue::dt_gMonth: if (actValue.fValue.f_datetime.f_year == expValue.fValue.f_datetime.f_year && actValue.fValue.f_datetime.f_month == expValue.fValue.f_datetime.f_month && actValue.fValue.f_datetime.f_day == expValue.fValue.f_datetime.f_day && actValue.fValue.f_datetime.f_hour == expValue.fValue.f_datetime.f_hour && actValue.fValue.f_datetime.f_min == expValue.fValue.f_datetime.f_min && actValue.fValue.f_datetime.f_second == expValue.fValue.f_datetime.f_second && (fabs(actValue.fValue.f_datetime.f_milisec - expValue.fValue.f_datetime.f_milisec) < 0.01)) return true; printf("ACTVALUE_TEST Unexpected %s XSValue\n", StrX(getDataTypeString(datatype)).localForm()); printf(" Actual year = %d, month = %d, day = %d, hour = %d, min = %d, second = %d, milisec = %f\n", actValue.fValue.f_datetime.f_year, actValue.fValue.f_datetime.f_month, actValue.fValue.f_datetime.f_day, actValue.fValue.f_datetime.f_hour, actValue.fValue.f_datetime.f_min, actValue.fValue.f_datetime.f_second, actValue.fValue.f_datetime.f_milisec); printf(" Expect year = %d, month = %d, day = %d, hour = %d, min = %d, second = %d, milisec = %f\n", expValue.fValue.f_datetime.f_year, expValue.fValue.f_datetime.f_month, expValue.fValue.f_datetime.f_day, expValue.fValue.f_datetime.f_hour, expValue.fValue.f_datetime.f_min, expValue.fValue.f_datetime.f_second, expValue.fValue.f_datetime.f_milisec); return false; case XSValue::dt_hexBinary: // in the tests in this file the hexBinary data is always 2 long... if (actValue.fValue.f_byteVal[0] == expValue.fValue.f_byteVal[0] && actValue.fValue.f_byteVal[1] == expValue.fValue.f_byteVal[1]) return true; printf("ACTVALUE_TEST Unexpected hexBinary value\n"); printf(" Actual Value = %x:%x\n",actValue.fValue.f_byteVal[0],actValue.fValue.f_byteVal[1]); printf(" Expect Value = %x:%x\n",expValue.fValue.f_byteVal[0],expValue.fValue.f_byteVal[1]); return false; case XSValue::dt_base64Binary: // in the tests in this file the base64Binary data is always 9 long (XMLByte[9]) // however, a zero byte is used to indicate when the smaller data stream is empty { for (unsigned int i=0; i<9; i++) { if (!expValue.fValue.f_byteVal[i]) return true; if (actValue.fValue.f_byteVal[i] != expValue.fValue.f_byteVal[i]) { printf("ACTVALUE_TEST Unexpected base64Binary value for byte %d\n", i); printf(" Actual Value = %x\n",actValue.fValue.f_byteVal[i]); printf(" Expect Value = %x\n",expValue.fValue.f_byteVal[i]); return false; } } return true; } case XSValue::dt_string: case XSValue::dt_anyURI: case XSValue::dt_QName: case XSValue::dt_NOTATION: case XSValue::dt_normalizedString: case XSValue::dt_token: case XSValue::dt_language: case XSValue::dt_NMTOKEN: case XSValue::dt_NMTOKENS: case XSValue::dt_Name: case XSValue::dt_NCName: case XSValue::dt_ID: case XSValue::dt_IDREF: case XSValue::dt_IDREFS: case XSValue::dt_ENTITY: case XSValue::dt_ENTITIES: printf("ACTVALUE_TEST no Actual Value for datatype %s\n", StrX(getDataTypeString(datatype)).localForm()); return false; case XSValue::dt_integer: case XSValue::dt_nonPositiveInteger: case XSValue::dt_negativeInteger: case XSValue::dt_long: if (actValue.fValue.f_long == expValue.fValue.f_long) return true; printf("ACTVALUE_TEST Unexpected %s XSValue, got %ld expected %ld\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_long, expValue.fValue.f_long); return false; case XSValue::dt_int: if (actValue.fValue.f_int == expValue.fValue.f_int) return true; printf("ACTVALUE_TEST Unexpected dt_int XSValue, got %d expected %d\n", actValue.fValue.f_int, expValue.fValue.f_int); return false; case XSValue::dt_short: if (actValue.fValue.f_short == expValue.fValue.f_short) return true; printf("ACTVALUE_TEST Unexpected dt_short XSValue, got %d expected %d\n", actValue.fValue.f_short, expValue.fValue.f_short); return false; case XSValue::dt_byte: if (actValue.fValue.f_char == expValue.fValue.f_char) return true; printf("ACTVALUE_TEST Unexpected dt_byte XSValue, got %d expected %d\n", actValue.fValue.f_char, expValue.fValue.f_char); return false; case XSValue::dt_nonNegativeInteger: case XSValue::dt_unsignedLong: case XSValue::dt_positiveInteger: if (actValue.fValue.f_ulong == expValue.fValue.f_ulong) return true; printf("ACTVALUE_TEST Unexpected %s XSValue, got %lu expected %lu\n", StrX(getDataTypeString(datatype)).localForm(), actValue.fValue.f_ulong, expValue.fValue.f_ulong); return false; case XSValue::dt_unsignedInt: if (actValue.fValue.f_uint == expValue.fValue.f_uint) return true; printf("ACTVALUE_TEST Unexpected dt_unsignedIntXSValue, got %d expected %d\n", actValue.fValue.f_uint, expValue.fValue.f_uint); return false; case XSValue::dt_unsignedShort: if (actValue.fValue.f_ushort == expValue.fValue.f_ushort) return true; printf("ACTVALUE_TEST Unexpected dt_unsignedShort XSValue, got %d expected %d\n", actValue.fValue.f_ushort, expValue.fValue.f_ushort); return false; case XSValue::dt_unsignedByte: if (actValue.fValue.f_uchar == expValue.fValue.f_uchar) return true; printf("ACTVALUE_TEST Unexpected dt_unsignedByte XSValue, got %d expected %d\n", actValue.fValue.f_uchar, expValue.fValue.f_uchar); return false; default: printf("ACTVALUE_TEST Unexpected datatype\n"); return false; } } static const char* getStatusString(const XSValue::Status status) { switch (status) { case XSValue::st_Init: return "st_Init"; break; case XSValue::st_NoContent: return "st_NoContent"; break; case XSValue::st_NoCanRep: return "st_NoCanRep"; break; case XSValue::st_NoActVal: return "st_NoActVal"; break; case XSValue::st_NotSupported: return "st_NotSupported"; break; case XSValue::st_CantCreateRegEx: return "st_CantCreateRegEx"; break; case XSValue::st_FOCA0002: return "st_FOCA0002"; break; case XSValue::st_FOCA0001: return "st_FOCA0001"; break; case XSValue::st_FOCA0003: return "st_FOCA0003"; break; case XSValue::st_FODT0003: return "st_FODT0003"; break; case XSValue::st_UnknownType: return "st_UnknownType"; break; default: return "st_UnknownType"; break; } } /** * This is to test methods for XSValue */ #ifdef _DEBUG void VALIDATE_TEST( const char* const data , const XSValue::DataType datatype , bool expRetValid , const XSValue::Status expStatus ) { XSValue::Status myStatus = XSValue::st_Init; bool actRetValid = XSValue::validate( StrX(data).unicodeForm() , datatype , myStatus , XSValue::ver_10 , XMLPlatformUtils::fgMemoryManager); if (actRetValid != expRetValid) { printf("VALIDATE_TEST Validation Fail: data=<%s>, datatype=<%s>, expRetVal=<%d>\n", data, StrX(getDataTypeString(datatype)).localForm(), expRetValid); errSeen = true; } else { if (!expRetValid && expStatus != DONT_CARE && expStatus != myStatus ) { printf("VALIDATE_TEST Context Diff, data=<%s> datatype=<%s>, expStatus=<%s>, actStatus=<%s>\n", data, StrX(getDataTypeString(datatype)).localForm(), getStatusString(expStatus), getStatusString(myStatus)); errSeen = true; } } } #else #define VALIDATE_TEST(data, datatype, expRetValid, expStatus) \ { \ XSValue::Status myStatus = XSValue::st_Init; \ bool actRetValid = XSValue::validate( \ StrX(data).unicodeForm() \ , datatype \ , myStatus \ , XSValue::ver_10 \ , XMLPlatformUtils::fgMemoryManager); \ if (actRetValid != expRetValid) { \ printf("VALIDATE_TEST Validation Fail: \ at line <%d>, data=<%s>, datatype=<%s>, expRetVal=<%d>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm() \ , expRetValid); \ errSeen = true; \ } \ else { \ if (!expRetValid && \ expStatus != DONT_CARE && \ expStatus != myStatus ) { \ printf("VALIDATE_TEST Context Diff, \ at line <%d>, data=<%s> datatype=<%s>, \ expStatus=<%s>, actStatus=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm(), \ getStatusString(expStatus), getStatusString(myStatus)); \ errSeen = true; \ } \ } \ } #endif #ifdef _DEBUG void ACTVALUE_TEST( const char* const data , const XSValue::DataType datatype , bool toValidate , bool expRetValue , const XSValue::Status expStatus , const XSValue::XSValue_Data expValue ) { XSValue::Status myStatus = XSValue::st_Init; XSValue* actRetValue = XSValue::getActualValue( StrX(data).unicodeForm() , datatype , myStatus , XSValue::ver_10 , toValidate , XMLPlatformUtils::fgMemoryManager); if (actRetValue) { if (!expRetValue) { printf("ACTVALUE_TEST XSValue returned: data=<%s>, datatype=<%s>\n", data, StrX(getDataTypeString(datatype)).localForm()); errSeen = true; } else if (!compareActualValue(datatype, actRetValue->fData, expValue)) { errSeen = true; } delete actRetValue; } else { if (expRetValue) { printf("ACTVALUE_TEST No XSValue returned, data=<%s>, datatype=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm()); errSeen = true; } else { if (expStatus != DONT_CARE && expStatus != myStatus ) { printf("ACTVALUE_TEST Context Diff, data=<%s>, datatype=<%s>, expStatus=<%s>, actStatus=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm(), getStatusString(expStatus), getStatusString(myStatus)); errSeen = true; } } } } #else #define ACTVALUE_TEST(data, datatype, toValidate, expRetValue, expStatus, expValue) \ { \ XSValue::Status myStatus = XSValue::st_Init; \ XSValue* actRetValue = XSValue::getActualValue( \ StrX(data).unicodeForm() \ , datatype \ , myStatus \ , XSValue::ver_10 \ , toValidate \ , XMLPlatformUtils::fgMemoryManager); \ if (actRetValue) { \ if (!expRetValue) { \ printf("ACTVALUE_TEST XSValue returned, \ at line <%d> data=<%s>, datatype=<%s>\n" \ ,__LINE__, data, StrX(getDataTypeString(datatype)).localForm()); \ errSeen = true; \ } \ else if (!compareActualValue(datatype, actRetValue->fData, expValue)) { \ errSeen = true; \ } \ delete actRetValue; \ } \ else { \ if (expRetValue) { \ printf("ACTVALUE_TEST No XSValue returned, \ at line <%d> data=<%s>, datatype=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm()); \ errSeen = true; \ } \ else { \ if (expStatus != DONT_CARE && \ expStatus != myStatus) { \ printf("ACTVALUE_TEST Context Diff, \ at line <%d> data=<%s>, datatype=<%s>, \ expStatus=<%s>, actStatus=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm() \ , getStatusString(expStatus), getStatusString(myStatus)); \ errSeen = true; \ } \ } \ } \ } #endif #ifdef _DEBUG void CANREP_TEST(const char* const data , const XSValue::DataType datatype , bool toValidate , bool expRetCanRep , const char* const toCompare , const XSValue::Status expStatus ) { XSValue::Status myStatus = XSValue::st_Init; XMLCh* actRetCanRep = XSValue::getCanonicalRepresentation( StrX(data).unicodeForm() , datatype , myStatus , XSValue::ver_10 , toValidate , XMLPlatformUtils::fgMemoryManager); if (actRetCanRep) { if (!expRetCanRep) { printf("CANREP_TEST CanRep returned, data=<%s>, datatype=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm()); XMLPlatformUtils::fgMemoryManager->deallocate(actRetCanRep); errSeen = true; } else { char* actRetCanRep_inchar = XMLString::transcode(actRetCanRep); if (!XMLString::equals(actRetCanRep_inchar, toCompare)) { printf("CANREP_TEST CanRep Diff , data=<%s>, datatype=<%s>, actCanRep=<%s>, toCompare=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm(), actRetCanRep_inchar, toCompare); errSeen = true; } XMLPlatformUtils::fgMemoryManager->deallocate(actRetCanRep); XMLString::release(&actRetCanRep_inchar); } } else { if (expRetCanRep) { printf("CANREP_TEST No CanRep returned, data=<%s>, datatype=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm()); errSeen = true; } else { if (expStatus != DONT_CARE && expStatus != myStatus ) { printf("CANREP_TEST Context Diff, data=<%s>, datatype=<%s>\n expStatus=<%s>, actStatus=<%s>\n" , data, StrX(getDataTypeString(datatype)).localForm(), getStatusString(expStatus), getStatusString(myStatus)); errSeen = true; } } } } #else #define CANREP_TEST(data, datatype, toValidate, expRetCanRep, toCompare, expStatus) \ { \ XSValue::Status myStatus = XSValue::st_Init; \ XMLCh* actRetCanRep = XSValue::getCanonicalRepresentation( \ StrX(data).unicodeForm() \ , datatype \ , myStatus \ , XSValue::ver_10 \ , toValidate \ , XMLPlatformUtils::fgMemoryManager); \ if (actRetCanRep) { \ if (!expRetCanRep) { \ printf("CANREP_TEST CanRep returned: \ at line <%d> data=<%s>, datatype=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm()); \ XMLPlatformUtils::fgMemoryManager->deallocate(actRetCanRep); \ errSeen = true; \ } \ else { \ char* actRetCanRep_inchar = XMLString::transcode(actRetCanRep); \ if (!XMLString::equals(actRetCanRep_inchar, toCompare)) { \ printf("CANREP_TEST CanRep Diff \ , at line <%d> data=<%s>, datatype=<%s>, \ actCanRep=<%s>, toCompare=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm() \ , actRetCanRep_inchar, toCompare); \ errSeen = true; \ } \ XMLPlatformUtils::fgMemoryManager->deallocate(actRetCanRep); \ XMLString::release(&actRetCanRep_inchar); \ } \ } \ else { \ if (expRetCanRep){ \ printf("CANREP_TEST No CanRep returned, \ at line <%d> data=<%s>, datatype=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm()); \ errSeen = true; \ } \ else { \ if (expStatus != myStatus) { \ printf("CANREP_TEST Context Diff, \ at line <%d> data=<%s>, datatype=<%s>\n \ expStatus=<%s>, actStatus=<%s>\n" \ , __LINE__, data, StrX(getDataTypeString(datatype)).localForm() \ , getStatusString(expStatus), getStatusString(myStatus)); \ errSeen = true; \ } \ } \ } \ } #endif #ifdef _DEBUG void DATATYPE_TEST( const XMLCh* const dt_String , const XSValue::DataType expDataType ) { XSValue::DataType actDataType = XSValue::getDataType(dt_String); if (actDataType != expDataType) { char* dt_str = XMLString::transcode(dt_String); printf("DATATYPE_TEST Fails: data=<%s>, actDataType=<%d>, expDataType=<%d>\n", dt_str, actDataType, expDataType); XMLString::release(&dt_str); errSeen = true; } } #else #define DATATYPE_TEST(dt_String, expDataType) \ { \ XSValue::DataType actDataType = XSValue::getDataType(dt_String); \ if (actDataType != expDataType) \ { \ char* dt_str = XMLString::transcode(dt_String); \ printf("DATATYPE_TEST Fails: data=<%s>, actDataType=<%d>, expDataType=<%d>\n", \ dt_str, actDataType, expDataType); \ XMLString::release(&dt_str); \ errSeen = true; \ } \ } #endif void testNoActVal(const char* const data , const XSValue::DataType datatype , const XSValue::Status expStatus) { XSValue::Status ret_Status = XSValue::st_Init; XSValue* actVal = XSValue::getActualValue(StrX(data).unicodeForm(), datatype, ret_Status); if (actVal) { printf("testNoActVal fails, data=<%s>\n", data); delete actVal; errSeen=true; return; } if (ret_Status != expStatus) { printf("testNoActVal fails, data=<%s> retStatus=<%s> expStatus=<%s>\n", data , getStatusString(ret_Status) , getStatusString(expStatus)); errSeen=true; } } void testNoCanRep(const char* const data , const XSValue::DataType datatype , const XSValue::Status expStatus) { XSValue::Status ret_Status = XSValue::st_Init; XMLCh* canRep = XSValue::getCanonicalRepresentation(StrX(data).unicodeForm(), datatype, ret_Status); if (canRep) { printf("testNoCanRep fails, data=<%s>\n", data); delete canRep; errSeen=true; return; } if (ret_Status != expStatus) { printf("testNoCanRep fails, data=<%s> retStatus=<%s> expStatus=<%s>\n", data , getStatusString(ret_Status) , getStatusString(expStatus)); errSeen=true; } } /*** * Test cases ***/ void test_dt_decimal() { const XSValue::DataType dt = XSValue::dt_decimal; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234.567 \n"; const char lex_v_ran64_v_1[]="18446744073709551615.999"; const char lex_v_ran64_v_2[]="999.18446744073709551615"; const char lex_v_ran64_iv_1[]="18446744073709551616.999"; const char lex_v_ran64_iv_2[]="999.18446744073709551616"; const char lex_v_ran32_v_1[]="4294967295.999"; const char lex_v_ran32_v_2[]="999.4294967295"; // const char lex_v_ran32_iv_1[]="4294967296.999"; // const char lex_v_ran32_iv_2[]="999.4294967296"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234.56.789"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_double = (double)1234.567; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_double = (double)18446744073709551615.999; XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_double = (double)999.18446744073709551615; //XSValue::XSValue_Data act_v_ran64_iv_1;="18446744073709551616.999"; //XSValue::XSValue_Data act_v_ran64_iv_2;="999.18446744073709551616"; #endif XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_double = (double)4294967295.999; XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_double = (double)999.4294967295; //XSValue::XSValue_Data act_v_ran32_iv_1;="4294967296.999"; //XSValue::XSValue_Data act_v_ran32_iv_2;="999.4294967296"; /*** * 3.2.3.2 Canonical representation * * The canonical representation for decimal is defined by prohibiting certain options from the Lexical * representation (3.2.3.1). Specifically, * 1. the preceding optional "+" sign is prohibited. * 2. The decimal point is required. * 3. Leading and trailing zeroes are prohibited subject to the following: * there must be at least one digit to the right and * to the left of the decimal point which may be a zero. ***/ const char data_rawstr_1[]=" -123.45 \n"; const char data_canrep_1[]="-123.45"; const char data_rawstr_2[]="+123.45"; const char data_canrep_2[]="123.45"; const char data_rawstr_3[]="12345"; const char data_canrep_3[]="12345.0"; const char data_rawstr_4[]="000123.45"; const char data_canrep_4[]="123.45"; const char data_rawstr_5[]="123.45000"; const char data_canrep_5[]="123.45"; const char data_rawstr_6[]="00.12345"; const char data_canrep_6[]="0.12345"; const char data_rawstr_7[]="123.00"; const char data_canrep_7[]="123.0"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_1 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); //ACTVALUE_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0001); //ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0001); #else ACTVALUE_TEST(lex_v_ran32_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); //ACTVALUE_TEST(lex_v_ran32_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0001); //ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0001); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(data_rawstr_3, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_3, DONT_CARE); CANREP_TEST(data_rawstr_4, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_4, DONT_CARE); CANREP_TEST(data_rawstr_5, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_5, DONT_CARE); CANREP_TEST(data_rawstr_6, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_6, DONT_CARE); CANREP_TEST(data_rawstr_7, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_7, DONT_CARE); CANREP_TEST(lex_v_ran64_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_1, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_1, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } /*** * FLT_EPSILON 1.192092896e-07F * FLT_MIN 1.175494351e-38F * FLT_MAX 3.402823466e+38F ***/ void test_dt_float() { const XSValue::DataType dt = XSValue::dt_float; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234.e+10 \n"; const char lex_v_ran_v_1[]="+3.402823466e+38"; const char lex_v_ran_v_2[]="-3.402823466e+38"; const char lex_v_ran_v_3[]="+1.175494351e-38"; const char lex_v_ran_v_4[]="-1.175494351e-38"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_float = (float)1234.e+10; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_float = (float)+3.402823466e+38; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_float = (float)-3.402823466e+38; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_3.fValue.f_float = (float)+1.175494351e-38; XSValue::XSValue_Data act_v_ran_v_4; act_v_ran_v_4.fValue.f_float = (float)-1.175494351e-38; const char lex_v_ran_iv_1[]="+3.402823466e+39"; const char lex_v_ran_iv_2[]="-3.402823466e+39"; const char lex_v_ran_iv_3[]="+1.175494351e-46"; const char lex_v_ran_iv_4[]="-1.175494351e-46"; XSValue::XSValue_Data lex_iv_ran_v_1; lex_iv_ran_v_1.fValue.f_float = (float)0.0; lex_iv_ran_v_1.fValue.f_floatType.f_floatEnum = XSValue::DoubleFloatType_PosINF; XSValue::XSValue_Data lex_iv_ran_v_2; lex_iv_ran_v_2.fValue.f_float = (float)0.0; lex_iv_ran_v_2.fValue.f_floatType.f_floatEnum = XSValue::DoubleFloatType_NegINF; XSValue::XSValue_Data lex_iv_ran_v_3; lex_iv_ran_v_3.fValue.f_float = (float)0.0; lex_iv_ran_v_3.fValue.f_floatType.f_floatEnum = XSValue::DoubleFloatType_Zero; XSValue::XSValue_Data lex_iv_ran_v_4; lex_iv_ran_v_4.fValue.f_float = (float)0.0; lex_iv_ran_v_4.fValue.f_floatType.f_floatEnum = XSValue::DoubleFloatType_Zero; const char lex_v_ran_iv_1_canrep[]="INF"; // " 3.402823466E39" const char lex_v_ran_iv_2_canrep[]="-INF"; // "-3.402823466E39"; const char lex_v_ran_iv_3_canrep[]="0"; // " 1.175494351E-46"; const char lex_v_ran_iv_4_canrep[]="0"; // "-1.175494351E-46"; const char lex_iv_1[]="12x.e+10"; const char lex_iv_2[]="12.e+1x"; /*** * 3.2.4.2 Canonical representation * * The canonical representation for float is defined by prohibiting certain options from the Lexical * representation (3.2.4.1). * Specifically, * 1. the exponent must be indicated by "E". * 2. Leading zeroes and the preceding optional "+" sign are prohibited in the exponent. * 3. For the mantissa, the preceding optional "+" sign is prohibited and the decimal point is required. * Leading and trailing zeroes are prohibited subject to the following: * number representations must be normalized such that there is a single digit to the left of the decimal point * and at least a single digit to the right of the decimal point. * ***/ const char data_rawstr_1[]=" -123.45 \n"; const char data_canrep_1[]="-1.2345E2"; const char data_rawstr_2[]="+123.45"; const char data_canrep_2[]="1.2345E2"; const char data_rawstr_3[]="+123.45e+0012"; const char data_canrep_3[]="1.2345E14"; const char data_rawstr_4[]="+100.000e2"; const char data_canrep_4[]="1.0E4"; const char data_rawstr_5[]="00100.23e2"; const char data_canrep_5[]="1.0023E4"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, range valid VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_3 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_4 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, range invalid VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_3 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_4 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // lexical valid, range valid ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); ACTVALUE_TEST(lex_v_ran_v_4, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_4); // lexical valid, range invalid ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_1); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_3); ACTVALUE_TEST(lex_v_ran_iv_4, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_4); // lexical invalid ACTVALUE_TEST(lex_iv_1 , dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2 , dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // lexical valid, range valid CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(data_rawstr_3, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_3, DONT_CARE); CANREP_TEST(data_rawstr_4, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_4, DONT_CARE); CANREP_TEST(data_rawstr_5, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_5, DONT_CARE); // lexical invalid CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); // lexical valid, range invalid (however XML4C ignores that) CANREP_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_3, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_3_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_4, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_4_canrep, DONT_CARE); } } /*** DBL_EPSILON 2.2204460492503131e-016 DBL_MAX 1.7976931348623158e+308 DBL_MIN 2.2250738585072014e-308 ***/ void test_dt_double() { const XSValue::DataType dt = XSValue::dt_double; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234.e+10 \n"; const char lex_v_ran_v_1[]="+1.7976931348623158e+308"; const char lex_v_ran_v_2[]="-1.7976931348623158e+308"; const char lex_v_ran_v_3[]="+2.2250738585072014e-308"; const char lex_v_ran_v_4[]="-2.2250738585072014e-308"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_double = (double)1234.e+10; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_double = (double)+1.7976931348623158e+308; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_double = (double)-1.7976931348623158e+308; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_3.fValue.f_double = (double)+2.2250738585072014e-308; XSValue::XSValue_Data act_v_ran_v_4; act_v_ran_v_4.fValue.f_double = (double)-2.2250738585072014e-308; const char lex_v_ran_iv_1[]="+1.7976931348623158e+309"; const char lex_v_ran_iv_2[]="-1.7976931348623158e+309"; // on linux, hp, aix, the representable range is around e-324 // or e-325, using e-329 to gain consistent result on all // platforms const char lex_v_ran_iv_3[]="+2.2250738585072014e-329"; const char lex_v_ran_iv_4[]="-2.2250738585072014e-329"; const char lex_v_ran_iv_1_canrep[]="INF"; // " 1.7976931348623158E309"; const char lex_v_ran_iv_2_canrep[]="-INF"; // "-1.7976931348623158E309"; const char lex_v_ran_iv_3_canrep[]="0"; // "2.2250738585072014E-329"; const char lex_v_ran_iv_4_canrep[]="0"; // "-2.2250738585072014E-329"; XSValue::XSValue_Data lex_iv_ran_v_1; lex_iv_ran_v_1.fValue.f_double = (double)0.0; lex_iv_ran_v_1.fValue.f_doubleType.f_doubleEnum = XSValue::DoubleFloatType_PosINF; XSValue::XSValue_Data lex_iv_ran_v_2; lex_iv_ran_v_2.fValue.f_double = (double)0.0; lex_iv_ran_v_2.fValue.f_doubleType.f_doubleEnum = XSValue::DoubleFloatType_NegINF; XSValue::XSValue_Data lex_iv_ran_v_3; lex_iv_ran_v_3.fValue.f_double = (double)0.0; lex_iv_ran_v_3.fValue.f_doubleType.f_doubleEnum = XSValue::DoubleFloatType_Zero; XSValue::XSValue_Data lex_iv_ran_v_4; lex_iv_ran_v_4.fValue.f_double = (double)0.0; lex_iv_ran_v_4.fValue.f_doubleType.f_doubleEnum = XSValue::DoubleFloatType_Zero; const char lex_iv_1[]="12x.e+10"; const char lex_iv_2[]="12.e+1x"; /*** * 3.2.5.2 Canonical representation * * The canonical representation for float is defined by prohibiting certain options from the Lexical * representation (3.2.5.1). * Specifically, * 1. the exponent must be indicated by "E". * 2. Leading zeroes and the preceding optional "+" sign are prohibited in the exponent. * 3. For the mantissa, the preceding optional "+" sign is prohibited and the decimal point is required. * Leading and trailing zeroes are prohibited subject to the following: * number representations must be normalized such that there is a single digit to the left of the decimal point * and at least a single digit to the right of the decimal point. * ***/ const char data_rawstr_1[]=" -123.45 \n"; const char data_canrep_1[]="-1.2345E2"; const char data_rawstr_2[]="+123.45"; const char data_canrep_2[]="1.2345E2"; const char data_rawstr_3[]="+123.45e+0012"; const char data_canrep_3[]="1.2345E14"; const char data_rawstr_4[]="+100.000e2"; const char data_canrep_4[]="1.0E4"; const char data_rawstr_5[]="00100.23e2"; const char data_canrep_5[]="1.0023E4"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, range valid VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_3 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_4 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, range invalid however XML4C converts to INF / ZERO VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_3 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_4 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // lexical valid, range valid ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); ACTVALUE_TEST(lex_v_ran_v_4, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_4); // lexical valid, range invalid ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_1); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_3); ACTVALUE_TEST(lex_v_ran_iv_4, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, lex_iv_ran_v_4); // lexical invalid ACTVALUE_TEST(lex_iv_1 , dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2 , dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // lexical valid, range valid CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(data_rawstr_3, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_3, DONT_CARE); CANREP_TEST(data_rawstr_4, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_4, DONT_CARE); CANREP_TEST(data_rawstr_5, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_5, DONT_CARE); // lexical invalid CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); // lexical valid, range invalid (XML4C doesn't treat as invalid) CANREP_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_3, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_3_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_4, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_iv_4_canrep, DONT_CARE); } } /*** * 9223372036854775807 * -9223372036854775808 * 2147483647 * -2147483648 ***/ void test_dt_integer() { const XSValue::DataType dt = XSValue::dt_integer; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234 \n"; const char lex_v_ran64_v_1[]="+9223372036854775807"; const char lex_v_ran64_v_2[]="-9223372036854775808"; const char lex_v_ran64_iv_1[]="+9223372036854775808"; const char lex_v_ran64_iv_2[]="-9223372036854775809"; const char lex_v_ran32_v_1[]="+2147483647"; const char lex_v_ran32_v_2[]="-2147483648"; const char lex_v_ran32_iv_1[]="+2147483648"; const char lex_v_ran32_iv_2[]="-2147483649"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_long = (long)1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_long = (long)+9223372036854775807; XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long = (long)-9223372036854775808; #endif XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_long = (long)+2147483647; XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long = (long)-2147483648; const char lex_v_ran64_v_1_canrep[]="9223372036854775807"; const char lex_v_ran64_v_2_canrep[]="-9223372036854775808"; const char lex_v_ran64_iv_1_canrep[]="9223372036854775808"; const char lex_v_ran64_iv_2_canrep[]="-9223372036854775809"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.13.2 Canonical representation * * The canonical representation for integer is defined by prohibiting certain options from the Lexical * representation (3.3.13.1). Specifically, * 1. the preceding optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_1 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_1); #else ACTVALUE_TEST(lex_v_ran32_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_1); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran64_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_nonPositiveInteger() { const XSValue::DataType dt = XSValue::dt_nonPositiveInteger; bool toValidate = true; const char lex_v_ran_v_1[]=" -1234 \n"; const char lex_v_ran_iv_1[]="+1"; const char lex_v_ran64_v_2[]="-9223372036854775808"; const char lex_v_ran64_iv_2[]="-9223372036854775809"; const char lex_v_ran32_v_2[]="-2147483648"; const char lex_v_ran32_iv_2[]="-2147483649"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_long = (long)-1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long = (long)-9223372036854775808; #endif XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long = (long)-2147483648; const char lex_v_ran64_v_2_canrep[]="-9223372036854775808"; const char lex_v_ran64_iv_2_canrep[]="-9223372036854775809"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.14.2 Canonical representation * * The canonical representation for nonPositiveInteger is defined by prohibiting certain options from the * Lexical representation (3.3.14.1). Specifically, * 1. the sign must be omitted for token "0" and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" 0 \n"; const char data_canrep_1[]="0"; const char data_rawstr_2[]="-00012345"; const char data_canrep_2[]="-12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_2); #else ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_2); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_negativeInteger() { const XSValue::DataType dt = XSValue::dt_negativeInteger; bool toValidate = true; const char lex_v_ran_v_1[]=" -1234 \n"; const char lex_v_ran_iv_1[]="0"; const char lex_v_ran64_v_2[]="-9223372036854775808"; const char lex_v_ran64_iv_2[]="-9223372036854775809"; const char lex_v_ran32_v_2[]="-2147483648"; const char lex_v_ran32_iv_2[]="-2147483649"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_long = (long)-1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long = (long)-9223372036854775808; #endif XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long = (long)-2147483648; const char lex_v_ran64_v_2_canrep[]="-9223372036854775808"; const char lex_v_ran64_iv_2_canrep[]="-9223372036854775809"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.15.2 Canonical representation * * The canonical representation for negativeInteger is defined by prohibiting certain options * from the Lexical representation (3.3.15.1). Specifically, * 1. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" -00012345 \n"; const char data_canrep_1[]="-12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_2); #else ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_2); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_long() { const XSValue::DataType dt = XSValue::dt_long; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234 \n"; const char lex_v_ran64_v_1[]="+9223372036854775807"; const char lex_v_ran64_v_2[]="-9223372036854775808"; const char lex_v_ran64_iv_1[]="+9223372036854775808"; const char lex_v_ran64_iv_2[]="-9223372036854775809"; const char lex_v_ran32_v_1[]="+2147483647"; const char lex_v_ran32_v_2[]="-2147483648"; const char lex_v_ran32_iv_1[]="+2147483648"; const char lex_v_ran32_iv_2[]="-2147483649"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_long = (long)1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_long = (long)+9223372036854775807; XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_long = (long)-9223372036854775808; #endif XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_long = (long)+2147483647; XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_long = (long)-2147483648; const char lex_v_ran64_v_1_canrep[]="9223372036854775807"; const char lex_v_ran64_v_2_canrep[]="-9223372036854775808"; const char lex_v_ran64_iv_1_canrep[]="9223372036854775808"; const char lex_v_ran64_iv_2_canrep[]="-9223372036854775809"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.16.2 Canonical representation * * The canonical representation for long is defined by prohibiting certain options from the * Lexical representation (3.3.16.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran64_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_1 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_1); #else ACTVALUE_TEST(lex_v_ran32_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_1); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran64_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran64_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran64_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran64_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); } void test_dt_int() { const XSValue::DataType dt = XSValue::dt_int; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234 \n"; const char lex_v_ran_v_1[]="+2147483647"; const char lex_v_ran_v_2[]="-2147483648"; const char lex_v_ran_iv_1[]="+2147483648"; const char lex_v_ran_iv_2[]="-2147483649"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_int = (int)1234; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_int = (int)+2147483647; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_int = (int)-2147483648; const char lex_v_ran_v_1_canrep[]="2147483647"; const char lex_v_ran_v_2_canrep[]="-2147483648"; const char lex_v_ran_iv_1_canrep[]="2147483648"; const char lex_v_ran_iv_2_canrep[]="-2147483649"; const char lex_iv_1[]="1234.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.17.2 Canonical representation * * The canonical representation for int is defined by prohibiting certain options from the * Lexical representation (3.3.17.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } // 32767 // -32768 void test_dt_short() { const XSValue::DataType dt = XSValue::dt_short; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234 \n"; const char lex_v_ran_v_1[]="+32767"; const char lex_v_ran_v_2[]="-32768"; const char lex_v_ran_iv_1[]="+32768"; const char lex_v_ran_iv_2[]="-32769"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_short = (short)1234; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_short = (short)+32767; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_short = (short)-32768; const char lex_v_ran_v_1_canrep[]="32767"; const char lex_v_ran_v_2_canrep[]="-32768"; const char lex_v_ran_iv_1_canrep[]="32768"; const char lex_v_ran_iv_2_canrep[]="-32769"; const char lex_iv_1[]="1234.456"; const char lex_iv_2[]="1234b56"; /*** * * 3.3.18.2 Canonical representation * * The canonical representation for short is defined by prohibiting certain options from the * Lexical representation (3.3.18.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } //127 //-128 void test_dt_byte() { const XSValue::DataType dt = XSValue::dt_byte; bool toValidate = true; const char lex_v_ran_v_0[]=" 12 \n"; const char lex_v_ran_v_1[]="+127"; const char lex_v_ran_v_2[]="-128"; const char lex_v_ran_iv_1[]="+128"; const char lex_v_ran_iv_2[]="-129"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_char = (char)12; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_char = (char)+127; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_char = (char)-128; const char lex_v_ran_v_1_canrep[]="127"; const char lex_v_ran_v_2_canrep[]="-128"; const char lex_v_ran_iv_1_canrep[]="128"; const char lex_v_ran_iv_2_canrep[]="-129"; const char lex_iv_1[]="1234.456"; const char lex_iv_2[]="1234b56"; /*** * * 3.3.19.2 Canonical representation * * The canonical representation for byte is defined by prohibiting certain options from the * Lexical representation (3.3.19.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +123 \n"; const char data_canrep_1[]="123"; const char data_rawstr_2[]="000123"; const char data_canrep_2[]="123"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } void test_dt_nonNegativeInteger() { const XSValue::DataType dt = XSValue::dt_nonNegativeInteger; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234 \n"; const char lex_v_ran_iv_1[]="-1"; const char lex_v_ran64_v_2[]="+18446744073709551615"; const char lex_v_ran64_iv_2[]="+18446744073709551616"; const char lex_v_ran32_v_2[]="4294967295"; const char lex_v_ran32_iv_2[]="4294967296"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_ulong = (unsigned long)1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_ulong = (unsigned long)+18446744073709551615; #endif XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_ulong = (unsigned long)4294967295; const char lex_v_ran64_v_2_canrep[]="18446744073709551615"; const char lex_v_ran64_iv_2_canrep[]="18446744073709551616"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.20.2 Canonical representation * * The canonical representation for nonNegativeInteger is defined by prohibiting certain options from the * Lexical representation (3.3.20.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" 0 \n"; const char data_canrep_1[]="0"; const char data_rawstr_2[]="+00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_2); #else ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_2); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } //18446744073709551615 // 4294967295 void test_dt_unsignedLong() { const XSValue::DataType dt = XSValue::dt_unsignedLong; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234 \n"; const char lex_v_ran64_v_1[]="+18446744073709551615"; const char lex_v_ran64_v_2[]="0"; const char lex_v_ran64_iv_1[]="+18446744073709551616"; const char lex_v_ran64_iv_2[]="-1"; const char lex_v_ran32_v_1[]="+4294967295"; const char lex_v_ran32_v_2[]="0"; const char lex_v_ran32_iv_1[]="4294967296"; const char lex_v_ran32_iv_2[]="-1"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_ulong = (unsigned long)1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_1; act_v_ran64_v_1.fValue.f_ulong = (unsigned long)+18446744073709551615; XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_ulong = (unsigned long)0; #endif XSValue::XSValue_Data act_v_ran32_v_1; act_v_ran32_v_1.fValue.f_ulong = (unsigned long)+4294967295; XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_ulong = (unsigned long)0; const char lex_v_ran64_v_1_canrep[]="18446744073709551615"; const char lex_v_ran64_v_2_canrep[]="0"; const char lex_v_ran64_iv_1_canrep[]="18446744073709551616"; const char lex_v_ran64_iv_2_canrep[]="-1"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.16.2 Canonical representation * * The canonical representation for long is defined by prohibiting certain options from the * Lexical representation (3.3.16.1). Specifically, * 1. the the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran64_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_1 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_1); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran64_v_1); #else ACTVALUE_TEST(lex_v_ran32_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_1); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran64_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran64_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran64_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran64_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); } //4294967295 void test_dt_unsignedInt() { const XSValue::DataType dt = XSValue::dt_unsignedInt; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234 \n"; const char lex_v_ran_v_1[]="+4294967295"; const char lex_v_ran_v_2[]="0"; const char lex_v_ran_iv_1[]="4294967296"; const char lex_v_ran_iv_2[]="-1"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_uint = (unsigned int)1234; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_uint = (unsigned int)+4294967295; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_uint = (unsigned int)0; const char lex_v_ran_v_1_canrep[]="4294967295"; const char lex_v_ran_v_2_canrep[]="0"; const char lex_v_ran_iv_1_canrep[]="4294967296"; const char lex_v_ran_iv_2_canrep[]="-1"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.22.2 Canonical representation * * The canonical representation for unsignedInt is defined by prohibiting certain options from the * Lexical representation (3.3.22.1). Specifically, * leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } //65535 void test_dt_unsignedShort() { const XSValue::DataType dt = XSValue::dt_unsignedShort; bool toValidate = true; const char lex_v_ran_v_0[]=" 1234 \n"; const char lex_v_ran_v_1[]="+65535"; const char lex_v_ran_v_2[]="0"; const char lex_v_ran_iv_1[]="+65536"; const char lex_v_ran_iv_2[]="-1"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_ushort = (unsigned short)1234; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_ushort = (unsigned short)+65535; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_ushort = (unsigned short)0; const char lex_v_ran_v_1_canrep[]="65535"; const char lex_v_ran_v_2_canrep[]="0"; const char lex_v_ran_iv_1_canrep[]="65536"; const char lex_v_ran_iv_2_canrep[]="-1"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.23.2 Canonical representation * * The canonical representation for unsignedShort is defined by prohibiting certain options from the * Lexical representation (3.3.23.1). Specifically, * 1. the leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +12345 \n"; const char data_canrep_1[]="12345"; const char data_rawstr_2[]="00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } // 255 void test_dt_unsignedByte() { const XSValue::DataType dt = XSValue::dt_unsignedByte; bool toValidate = true; const char lex_v_ran_v_0[]=" 123 \n"; const char lex_v_ran_v_1[]="+255"; const char lex_v_ran_v_2[]="0"; const char lex_v_ran_iv_1[]="+256"; const char lex_v_ran_iv_2[]="-1"; XSValue::XSValue_Data act_v_ran_v_0; act_v_ran_v_0.fValue.f_uchar = (unsigned char)123; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_uchar = (unsigned char)+255; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_uchar = (unsigned char)0; const char lex_v_ran_v_1_canrep[]="255"; const char lex_v_ran_v_2_canrep[]="0"; const char lex_v_ran_iv_1_canrep[]="256"; const char lex_v_ran_iv_2_canrep[]="-1"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.24.2 Canonical representation * * The canonical representation for unsignedByte is defined by prohibiting certain options from the * Lexical representation (3.3.24.1). Specifically, * 1. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +123 \n"; const char data_canrep_1[]="123"; const char data_rawstr_2[]="000123"; const char data_canrep_2[]="123"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid false st_FOCA0002 * lexical invalid false st_FOCA0002 * ***/ // lexical valid, valid range VALIDATE_TEST(lex_v_ran_v_0 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical valid, invalid range VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_0, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_ran_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_v_ran_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_0); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid 0 st_FOCA0002 * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran_v_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } //validation on CANREP_TEST(lex_v_ran_iv_1, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_v_ran_iv_2, dt, true, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); //validation off CANREP_TEST(lex_v_ran_iv_1, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_1_canrep, DONT_CARE); CANREP_TEST(lex_v_ran_iv_2, dt, false, EXP_RET_CANREP_TRUE, lex_v_ran_iv_2_canrep, DONT_CARE); } void test_dt_positiveInteger() { const XSValue::DataType dt = XSValue::dt_positiveInteger; bool toValidate = true; const char lex_v_ran_v_1[]=" 1234 \n"; const char lex_v_ran_iv_1[]="0"; const char lex_v_ran64_v_2[]="+18446744073709551615"; const char lex_v_ran64_iv_2[]="+18446744073709551616"; const char lex_v_ran32_v_2[]="4294967295"; const char lex_v_ran32_iv_2[]="4294967296"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_ulong = (unsigned long)1234; #if SIZEOF_LONG == 8 XSValue::XSValue_Data act_v_ran64_v_2; act_v_ran64_v_2.fValue.f_ulong = (unsigned long)+18446744073709551615; #endif XSValue::XSValue_Data act_v_ran32_v_2; act_v_ran32_v_2.fValue.f_ulong = (unsigned long)+4294967295; const char lex_v_ran64_v_2_canrep[]="18446744073709551615"; const char lex_v_ran64_iv_2_canrep[]="18446744073709551616"; const char lex_iv_1[]="12b34.456"; const char lex_iv_2[]="1234b56"; /*** * 3.3.25.2 Canonical representation * * The canonical representation for positiveInteger is defined by prohibiting certain options from the * Lexical representation (3.3.25.1). Specifically, * 1. the optional "+" sign is prohibited and * 2. leading zeroes are prohibited. * ***/ const char data_rawstr_1[]=" +1 \n"; const char data_canrep_1[]="1"; const char data_rawstr_2[]="+00012345"; const char data_canrep_2[]="12345"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid * range valid true n/a * range invalid n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_ran_v_1 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_v_ran64_v_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_ran64_iv_2 , dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2 , dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XSValue n/a * range invalid 0 st_Unpresentable * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; ACTVALUE_TEST(lex_v_ran_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); #if SIZEOF_LONG == 8 ACTVALUE_TEST(lex_v_ran64_v_2 , dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran64_v_2); ACTVALUE_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran64_v_2); #else ACTVALUE_TEST(lex_v_ran32_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran32_v_2); ACTVALUE_TEST(lex_v_ran32_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0003, act_v_ran32_v_2); #endif ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran32_v_2); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid * range valid XMLCh n/a * range invalid n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j)? true : false; CANREP_TEST(data_rawstr_1, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_1, DONT_CARE); CANREP_TEST(data_rawstr_2, dt, toValidate, EXP_RET_CANREP_TRUE, data_canrep_2, DONT_CARE); CANREP_TEST(lex_v_ran64_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_ran64_iv_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_ran64_iv_2_canrep, DONT_CARE); CANREP_TEST(lex_iv_1 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2 , dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_boolean() { const XSValue::DataType dt = XSValue::dt_boolean; bool toValidate = true; const char lex_v_1[]=" 1 \n"; const char lex_v_2[]="0"; const char lex_v_3[]="true"; const char lex_v_4[]="false"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_bool = true; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_bool = false; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_3.fValue.f_bool = true; XSValue::XSValue_Data act_v_ran_v_4; act_v_ran_v_4.fValue.f_bool = false; const char lex_iv_1[]="2"; const char lex_v_1_canrep[]="true"; const char lex_v_2_canrep[]="false"; const char lex_v_3_canrep[]="true"; const char lex_v_4_canrep[]="false"; /*** * 3.2.2.2 Canonical representation * * The canonical representation for boolean is the set of literals {true, false}. * ***/ /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid true n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_4, dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // lexical valid ACTVALUE_TEST(lex_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(lex_v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); ACTVALUE_TEST(lex_v_4, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_4); // lexical invalid ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // lexical valid CANREP_TEST(lex_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_2_canrep, DONT_CARE); CANREP_TEST(lex_v_3, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_3_canrep, DONT_CARE); CANREP_TEST(lex_v_4, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_4_canrep, DONT_CARE); // lexical invalid CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_hexBinary() { const XSValue::DataType dt = XSValue::dt_hexBinary; bool toValidate = true; const char lex_v_1[]=" 0fb7 \n"; const char lex_v_2[]="1234"; const char lex_iv_1[]="0gb7"; const char lex_iv_2[]="123"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_1.fValue.f_byteVal = new XMLByte[2]; act_v_ran_v_1.fValue.f_byteVal[0] = 0xf; act_v_ran_v_1.fValue.f_byteVal[1] = 0xb7; act_v_ran_v_2.fValue.f_byteVal = new XMLByte[2]; act_v_ran_v_2.fValue.f_byteVal[0] = 0x12; act_v_ran_v_2.fValue.f_byteVal[1] = 0x34; const char lex_v_1_canrep[]="0FB7"; const char lex_v_2_canrep[]="1234"; /*** * 3.2.15.2 Canonical Rrepresentation * * The canonical representation for hexBinary is defined by prohibiting certain options from the * Lexical Representation (3.2.15.1). Specifically, * 1. the lower case hexadecimal digits ([a-f]) are not allowed. * ***/ /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid true n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // lexical valid ACTVALUE_TEST(lex_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); // lexical invalid ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // lexical valid CANREP_TEST(lex_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_2_canrep, DONT_CARE); // lexical invalid CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_base64Binary() { const XSValue::DataType dt = XSValue::dt_base64Binary; bool toValidate = true; const char lex_v_1[]=" 134x cv56 gui0 \n"; const char lex_v_2[]="wxtz 8e4k"; const char lex_iv_2[]="134xcv56gui"; const char lex_iv_1[]="wxtz8e4"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; //actual values: //"134x cv56 gui0" : D7 7E 31 72 FE 7A 82 E8 B4 //"wxtz 8e4k" : C3 1B 73 F1 EE 24 act_v_ran_v_1.fValue.f_byteVal = new XMLByte[9]; act_v_ran_v_1.fValue.f_byteVal[0] = 0xd7; act_v_ran_v_1.fValue.f_byteVal[1] = 0x7e; act_v_ran_v_1.fValue.f_byteVal[2] = 0x31; act_v_ran_v_1.fValue.f_byteVal[3] = 0x72; act_v_ran_v_1.fValue.f_byteVal[4] = 0xfe; act_v_ran_v_1.fValue.f_byteVal[5] = 0x7a; act_v_ran_v_1.fValue.f_byteVal[6] = 0x82; act_v_ran_v_1.fValue.f_byteVal[7] = 0xe8; act_v_ran_v_1.fValue.f_byteVal[8] = 0xb4; act_v_ran_v_2.fValue.f_byteVal = new XMLByte[9]; act_v_ran_v_2.fValue.f_byteVal[0] = 0xc3; act_v_ran_v_2.fValue.f_byteVal[1] = 0x1b; act_v_ran_v_2.fValue.f_byteVal[2] = 0x73; act_v_ran_v_2.fValue.f_byteVal[3] = 0xf1; act_v_ran_v_2.fValue.f_byteVal[4] = 0xee; act_v_ran_v_2.fValue.f_byteVal[5] = 0x24; act_v_ran_v_2.fValue.f_byteVal[6] = 0; act_v_ran_v_2.fValue.f_byteVal[7] = 0; act_v_ran_v_2.fValue.f_byteVal[8] = 0; const char lex_v_1_canrep[]="134xcv56gui0"; const char lex_v_2_canrep[]="wxtz8e4k"; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * lexical valid true n/a * lexical invalid false st_FOCA0002 * ***/ // lexical valid VALIDATE_TEST(lex_v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(lex_v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); // lexical invalid VALIDATE_TEST(lex_iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(lex_iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XSValue n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // lexical valid ACTVALUE_TEST(lex_v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(lex_v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); // lexical invalid ACTVALUE_TEST(lex_iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(lex_iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * * validation off * ============== * lexical valid XMLCh n/a * lexical invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // lexical valid CANREP_TEST(lex_v_1, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_1_canrep, DONT_CARE); CANREP_TEST(lex_v_2, dt, toValidate, EXP_RET_CANREP_TRUE, lex_v_2_canrep, DONT_CARE); // lexical invalid CANREP_TEST(lex_iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(lex_iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_duration() { const XSValue::DataType dt = XSValue::dt_duration; bool toValidate = true; const char v_1[]=" P1Y1M1DT1H1M1S \n"; const char v_2[]="P1Y1M31DT23H119M120S"; const char v_3[]="-P1Y1M1DT23H"; const char iv_1[]="P-1Y2M3DT10H30M"; const char iv_2[]="P1Y1M1DT1H1M1X"; const char iv_3[]="P1Z1M1DT23H"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 1; act_v_ran_v_1.fValue.f_datetime.f_month = 1; act_v_ran_v_1.fValue.f_datetime.f_day = 1; act_v_ran_v_1.fValue.f_datetime.f_hour = 1; act_v_ran_v_1.fValue.f_datetime.f_min = 1; act_v_ran_v_1.fValue.f_datetime.f_second = 1; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 1; act_v_ran_v_2.fValue.f_datetime.f_month = 1; act_v_ran_v_2.fValue.f_datetime.f_day = 31; act_v_ran_v_2.fValue.f_datetime.f_hour = 23; act_v_ran_v_2.fValue.f_datetime.f_min = 119; act_v_ran_v_2.fValue.f_datetime.f_second = 120; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = -1; act_v_ran_v_3.fValue.f_datetime.f_month = -1; act_v_ran_v_3.fValue.f_datetime.f_day = -1; act_v_ran_v_3.fValue.f_datetime.f_hour = -23; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_date() { const XSValue::DataType dt = XSValue::dt_date; bool toValidate = true; const char v_1[]=" 1991-05-31 \n"; const char v_2[]="9999-06-30Z"; const char v_3[]="99991-07-31+14:00"; const char iv_1[]="2000-12-32"; const char iv_2[]="2001-02-29"; const char iv_3[]="2001-06-31"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; const char v_1_canrep[]="1991-05-31"; const char v_2_canrep[]="9999-06-30Z"; const char v_3_canrep[]="99991-07-30-10:00"; /* * Case Date Actual Value Canonical Value * 1 yyyy-mm-dd yyyy-mm-dd yyyy-mm-dd * 2 yyyy-mm-ddZ yyyy-mm-ddT00:00Z yyyy-mm-ddZ * 3 yyyy-mm-dd+00:00 yyyy-mm-ddT00:00Z yyyy-mm-ddZ * 4 yyyy-mm-dd+00:01 YYYY-MM-DCT23:59Z yyyy-mm-dd+00:01 * 5 yyyy-mm-dd+12:00 YYYY-MM-DCT12:00Z yyyy-mm-dd+12:00 * 6 yyyy-mm-dd+12:01 YYYY-MM-DCT11:59Z YYYY-MM-DC-11:59 * 7 yyyy-mm-dd+14:00 YYYY-MM-DCT10:00Z YYYY-MM-DC-10:00 * 8 yyyy-mm-dd-00:00 yyyy-mm-ddT00:00Z yyyy-mm-ddZ * 9 yyyy-mm-dd-00:01 yyyy-mm-ddT00:01Z yyyy-mm-dd-00:01 * 11 yyyy-mm-dd-11:59 yyyy-mm-ddT11:59Z YYYY-MM-DD-11:59 * 10 yyyy-mm-dd-12:00 yyyy-mm-ddT12:00Z YYYY-MM-DD+12:00 * 12 yyyy-mm-dd-14:00 yyyy-mm-ddT14:00Z YYYY-MM-DD+10:00 */ const char c_1[] = " 1993-05-31 "; const char r_1[] = "1993-05-31"; const char c_2[] = " 1993-05-31Z "; const char r_2[] = "1993-05-31Z"; const char c_3[] = " 1993-05-31+00:00 "; const char r_3[] = "1993-05-31Z"; const char c_4[] = " 1993-05-31+00:01 "; const char r_4[] = "1993-05-31+00:01"; const char c_5[] = " 1993-05-31+12:00 "; const char r_5[] = "1993-05-31+12:00"; const char c_6[] = " 1994-01-01+12:01 "; const char r_6[] = "1993-12-31-11:59"; const char c_7[] = " 1994-01-01+14:00 "; const char r_7[] = "1993-12-31-10:00"; const char c_8[] = " 1993-06-01-00:00 "; const char r_8[] = "1993-06-01Z"; const char c_9[] = " 1993-06-01-00:01 "; const char r_9[] = "1993-06-01-00:01"; const char c_a[] = " 1993-06-01-11:59 "; const char r_a[] = "1993-06-01-11:59"; const char c_b[] = " 1993-05-31-12:00 "; const char r_b[] = "1993-06-01+12:00"; const char c_c[] = " 1993-05-31-14:00 "; const char r_c[] = "1993-06-01+10:00"; act_v_ran_v_1.fValue.f_datetime.f_year = 1991; act_v_ran_v_1.fValue.f_datetime.f_month = 05; act_v_ran_v_1.fValue.f_datetime.f_day = 31; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 9999; act_v_ran_v_2.fValue.f_datetime.f_month = 06; act_v_ran_v_2.fValue.f_datetime.f_day = 30; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 99991; act_v_ran_v_3.fValue.f_datetime.f_month = 07; act_v_ran_v_3.fValue.f_datetime.f_day = 30; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_TRUE, v_1_canrep, DONT_CARE); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_TRUE, v_2_canrep, DONT_CARE); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_TRUE, v_3_canrep, DONT_CARE); CANREP_TEST(c_1, dt, toValidate, EXP_RET_CANREP_TRUE, r_1, DONT_CARE); CANREP_TEST(c_2, dt, toValidate, EXP_RET_CANREP_TRUE, r_2, DONT_CARE); CANREP_TEST(c_3, dt, toValidate, EXP_RET_CANREP_TRUE, r_3, DONT_CARE); CANREP_TEST(c_4, dt, toValidate, EXP_RET_CANREP_TRUE, r_4, DONT_CARE); CANREP_TEST(c_5, dt, toValidate, EXP_RET_CANREP_TRUE, r_5, DONT_CARE); CANREP_TEST(c_6, dt, toValidate, EXP_RET_CANREP_TRUE, r_6, DONT_CARE); CANREP_TEST(c_7, dt, toValidate, EXP_RET_CANREP_TRUE, r_7, DONT_CARE); CANREP_TEST(c_8, dt, toValidate, EXP_RET_CANREP_TRUE, r_8, DONT_CARE); CANREP_TEST(c_9, dt, toValidate, EXP_RET_CANREP_TRUE, r_9, DONT_CARE); CANREP_TEST(c_a, dt, toValidate, EXP_RET_CANREP_TRUE, r_a, DONT_CARE); CANREP_TEST(c_b, dt, toValidate, EXP_RET_CANREP_TRUE, r_b, DONT_CARE); CANREP_TEST(c_c, dt, toValidate, EXP_RET_CANREP_TRUE, r_c, DONT_CARE); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); } } void test_dt_gYearMonth() { const XSValue::DataType dt = XSValue::dt_gYearMonth; bool toValidate = true; const char v_1[]=" 20000-02 \n"; const char v_2[]="0200-11+14:00"; const char v_3[]="2000-02-14:00"; const char iv_1[]="0000-12"; const char iv_2[]="+2000-11"; const char iv_3[]="2000.90-02"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 20000; act_v_ran_v_1.fValue.f_datetime.f_month = 02; act_v_ran_v_1.fValue.f_datetime.f_day = 0; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 200; act_v_ran_v_2.fValue.f_datetime.f_month = 11; act_v_ran_v_2.fValue.f_datetime.f_day = 0; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 2000; act_v_ran_v_3.fValue.f_datetime.f_month = 02; act_v_ran_v_3.fValue.f_datetime.f_day = 0; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_gYear() { const XSValue::DataType dt = XSValue::dt_gYear; bool toValidate = true; const char v_1[]=" 0001-14:00 \n"; const char v_2[]="9999+14:00"; const char v_3[]="-1999"; const char iv_1[]="0000"; const char iv_2[]="+2000"; const char iv_3[]="2000.90"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 1; act_v_ran_v_1.fValue.f_datetime.f_month = 0; act_v_ran_v_1.fValue.f_datetime.f_day = 0; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 9999; act_v_ran_v_2.fValue.f_datetime.f_month = 0; act_v_ran_v_2.fValue.f_datetime.f_day = 0; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = -1999; act_v_ran_v_3.fValue.f_datetime.f_month = 0; act_v_ran_v_3.fValue.f_datetime.f_day = 0; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_gMonthDay() { const XSValue::DataType dt = XSValue::dt_gMonthDay; bool toValidate = true; const char v_1[]=" --01-31+00:01 \n"; const char v_2[]="--03-31-00:01"; const char v_3[]="--04-01"; const char iv_1[]="--14-31"; const char iv_2[]="--12-32"; const char iv_3[]="--02-30"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 0; act_v_ran_v_1.fValue.f_datetime.f_month = 1; act_v_ran_v_1.fValue.f_datetime.f_day = 30; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 0; act_v_ran_v_2.fValue.f_datetime.f_month = 3; act_v_ran_v_2.fValue.f_datetime.f_day = 31; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 0; act_v_ran_v_3.fValue.f_datetime.f_month = 4; act_v_ran_v_3.fValue.f_datetime.f_day = 1; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_gDay() { const XSValue::DataType dt = XSValue::dt_gDay; bool toValidate = true; const char v_1[]=" ---31+01:30 \n"; const char v_2[]="---01-01:30"; const char v_3[]="---28"; const char iv_1[]="---+31"; const char iv_2[]="---28.00"; const char iv_3[]="--31"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 0; act_v_ran_v_1.fValue.f_datetime.f_month = 0; act_v_ran_v_1.fValue.f_datetime.f_day = 30; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 0; act_v_ran_v_2.fValue.f_datetime.f_month = 0; act_v_ran_v_2.fValue.f_datetime.f_day = 1; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 0; act_v_ran_v_3.fValue.f_datetime.f_month = 0; act_v_ran_v_3.fValue.f_datetime.f_day = 28; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_2); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_3); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_gMonth() { const XSValue::DataType dt = XSValue::dt_gMonth; bool toValidate = true; const char v_1[]=" --02+10:10 \n"; const char v_2[]="--10-12:12"; const char v_3[]="--12"; const char iv_1[]="--+11"; const char iv_2[]="---02.09"; const char iv_3[]="--14--"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_1.fValue.f_datetime.f_year = 0; act_v_ran_v_1.fValue.f_datetime.f_month = 2; act_v_ran_v_1.fValue.f_datetime.f_day = 0; act_v_ran_v_1.fValue.f_datetime.f_hour = 0; act_v_ran_v_1.fValue.f_datetime.f_min = 0; act_v_ran_v_1.fValue.f_datetime.f_second = 0; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0; act_v_ran_v_2.fValue.f_datetime.f_year = 0; act_v_ran_v_2.fValue.f_datetime.f_month = 10; act_v_ran_v_2.fValue.f_datetime.f_day = 0; act_v_ran_v_2.fValue.f_datetime.f_hour = 0; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 0; act_v_ran_v_3.fValue.f_datetime.f_month = 12; act_v_ran_v_3.fValue.f_datetime.f_day = 0; act_v_ran_v_3.fValue.f_datetime.f_hour = 0; act_v_ran_v_3.fValue.f_datetime.f_min = 0; act_v_ran_v_3.fValue.f_datetime.f_second = 0; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_2); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_3); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh st_NoCanRep * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh st_NoCanRep * invalid 0 st_NoCanRep * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, (toValidate? XSValue::st_FOCA0002: XSValue::st_NoCanRep)); } } void test_dt_dateTime() { const XSValue::DataType dt = XSValue::dt_dateTime; bool toValidate = true; const char v_1[]=" 2000-12-31T23:59:59.00389 \n"; const char v_2[]="2000-10-01T11:10:20+13:30"; const char v_3[]="2000-10-01T11:10:20-06:00"; const char iv_1[]="0000-12-31T23:59:59"; const char iv_2[]="+2000-11-30T23:59:59Z"; const char iv_3[]="2000-02-28T23:59.1:59Z"; const char iv_4[]="2000-11-30T01:01:01Z99"; const char iv_5[]="2000-02-28T01:01:01Z10:61"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; const char v_1_canrep[]="2000-12-31T23:59:59.00389"; const char v_2_canrep[]="2000-09-30T21:40:20Z"; const char v_3_canrep[]="2000-10-01T17:10:20Z"; act_v_ran_v_1.fValue.f_datetime.f_year = 2000; act_v_ran_v_1.fValue.f_datetime.f_month = 12; act_v_ran_v_1.fValue.f_datetime.f_day = 31; act_v_ran_v_1.fValue.f_datetime.f_hour = 23; act_v_ran_v_1.fValue.f_datetime.f_min = 59; act_v_ran_v_1.fValue.f_datetime.f_second = 59; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0.00389; act_v_ran_v_2.fValue.f_datetime.f_year = 2000; act_v_ran_v_2.fValue.f_datetime.f_month = 9; act_v_ran_v_2.fValue.f_datetime.f_day = 30; act_v_ran_v_2.fValue.f_datetime.f_hour = 21; act_v_ran_v_2.fValue.f_datetime.f_min = 40; act_v_ran_v_2.fValue.f_datetime.f_second = 20; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 2000; act_v_ran_v_3.fValue.f_datetime.f_month = 10; act_v_ran_v_3.fValue.f_datetime.f_day = 1; act_v_ran_v_3.fValue.f_datetime.f_hour = 17; act_v_ran_v_3.fValue.f_datetime.f_min = 10; act_v_ran_v_3.fValue.f_datetime.f_second = 20; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * E2-41 * * 3.2.7.2 Canonical representation * * Except for trailing fractional zero digits in the seconds representation, * '24:00:00' time representations, and timezone (for timezoned values), * the mapping from literals to values is one-to-one. Where there is more * than one possible representation, the canonical representation is as follows: * redundant trailing zero digits in fractional-second literals are prohibited. * An hour representation of '24' is prohibited. Timezoned values are canonically * represented by appending 'Z' to the nontimezoned representation. (All * timezoned dateTime values are UTC.) * * .'24:00:00' -> '00:00:00' * .milisecond: trailing zeros removed * .'Z' * ***/ /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_4, dt, EXP_RET_VALID_FALSE, XSValue::st_FODT0003); VALIDATE_TEST(iv_5, dt, EXP_RET_VALID_FALSE, XSValue::st_FODT0003); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_4, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FODT0003, act_v_ran_v_1); ACTVALUE_TEST(iv_5, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FODT0003, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh n/a * invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_TRUE, v_1_canrep, DONT_CARE); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_TRUE, v_2_canrep, DONT_CARE); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_TRUE, v_3_canrep, DONT_CARE); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_4, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FODT0003); CANREP_TEST(iv_5, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FODT0003); } } void test_dt_time() { const XSValue::DataType dt = XSValue::dt_time; bool toValidate = true; const char v_1[]=" 23:59:59.38900Z \n"; const char v_2[]="24:00:00"; const char v_3[]="23:59:59+00:01"; const char iv_1[]="55:59:59"; const char iv_2[]="03:99:59"; const char iv_3[]="23:59.1:59"; const char iv_4[]="01:01:01Z99"; const char iv_5[]="01:01:01Z10:61"; XSValue::XSValue_Data act_v_ran_v_1; XSValue::XSValue_Data act_v_ran_v_2; XSValue::XSValue_Data act_v_ran_v_3; const char v_1_canrep[]="23:59:59.389Z"; const char v_2_canrep[]="00:00:00"; const char v_3_canrep[]="23:58:59Z"; act_v_ran_v_1.fValue.f_datetime.f_year = 0; act_v_ran_v_1.fValue.f_datetime.f_month = 0; act_v_ran_v_1.fValue.f_datetime.f_day = 0; act_v_ran_v_1.fValue.f_datetime.f_hour = 23; act_v_ran_v_1.fValue.f_datetime.f_min = 59; act_v_ran_v_1.fValue.f_datetime.f_second = 59; act_v_ran_v_1.fValue.f_datetime.f_milisec = 0.389; act_v_ran_v_2.fValue.f_datetime.f_year = 0; act_v_ran_v_2.fValue.f_datetime.f_month = 0; act_v_ran_v_2.fValue.f_datetime.f_day = 0; act_v_ran_v_2.fValue.f_datetime.f_hour = 24; act_v_ran_v_2.fValue.f_datetime.f_min = 0; act_v_ran_v_2.fValue.f_datetime.f_second = 0; act_v_ran_v_2.fValue.f_datetime.f_milisec = 0; act_v_ran_v_3.fValue.f_datetime.f_year = 0; act_v_ran_v_3.fValue.f_datetime.f_month = 0; act_v_ran_v_3.fValue.f_datetime.f_day = 0; act_v_ran_v_3.fValue.f_datetime.f_hour = 23; act_v_ran_v_3.fValue.f_datetime.f_min = 58; act_v_ran_v_3.fValue.f_datetime.f_second = 59; act_v_ran_v_3.fValue.f_datetime.f_milisec = 0; /*** * 3.2.8.2 Canonical representation * * The canonical representation for time is defined by prohibiting certain options * from the Lexical representation (3.2.8.1). Specifically, * 1. either the time zone must be omitted or, * 2. if present, the time zone must be Coordinated Universal Time (UTC) * indicated by a "Z". * 3. Additionally, the canonical representation for midnight is 00:00:00. * ***/ /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_2, dt, EXP_RET_VALID_TRUE, DONT_CARE); VALIDATE_TEST(v_3, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid VALIDATE_TEST(iv_1, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_2, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_3, dt, EXP_RET_VALID_FALSE, XSValue::st_FOCA0002); VALIDATE_TEST(iv_4, dt, EXP_RET_VALID_FALSE, XSValue::st_FODT0003); VALIDATE_TEST(iv_5, dt, EXP_RET_VALID_FALSE, XSValue::st_FODT0003); /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid XSValue n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XSValue n/a * invalid 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_1); ACTVALUE_TEST(v_2, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_2); ACTVALUE_TEST(v_3, dt, toValidate, EXP_RET_VALUE_TRUE, DONT_CARE, act_v_ran_v_3); // invalid ACTVALUE_TEST(iv_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_2, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_3, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FOCA0002, act_v_ran_v_1); ACTVALUE_TEST(iv_4, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FODT0003, act_v_ran_v_1); ACTVALUE_TEST(iv_5, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_FODT0003, act_v_ran_v_1); } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid XMLCh n/a * invalid 0 st_FOCA0002 * * validation off * ============== * valid XMLCh n/a * invalid 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_TRUE, v_1_canrep, DONT_CARE); CANREP_TEST(v_2, dt, toValidate, EXP_RET_CANREP_TRUE, v_2_canrep, DONT_CARE); CANREP_TEST(v_3, dt, toValidate, EXP_RET_CANREP_TRUE, v_3_canrep, DONT_CARE); // invalid CANREP_TEST(iv_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_2, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_3, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FOCA0002); CANREP_TEST(iv_4, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FODT0003); CANREP_TEST(iv_5, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_FODT0003); } } void test_dt_string() { const XSValue::DataType dt = XSValue::dt_string; bool toValidate = true; const char v_1[]="mystring"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_strVal = 0; /*** * * validate * --------- * availability return value context * ---------------------------------------------- * valid true n/a * invalid n/a false st_FOCA0002 * ***/ // valid VALIDATE_TEST(v_1, dt, EXP_RET_VALID_TRUE, DONT_CARE); // invalid /*** * * getActualValue * --------------- * availability return value context * ---------------------------------------------- * validation on * ============= * valid 0 n/a * invalid n/a 0 st_FOCA0002 * * validation off * ============== * valid 0 n/a * invalid n/a 0 st_FOCA0002 * ***/ for (int i = 0; i < 2; i++) { //validation on/off toValidate = ( 0 == i) ? true : false; // valid ACTVALUE_TEST(v_1, dt, toValidate, EXP_RET_VALUE_FALSE, XSValue::st_NoActVal, act_v_ran_v_1); // invalid } /*** * * getCanonicalRepresentation * --------------------------- * availability return value context * ---------------------------------------------- * * validation on * ============= * valid 0 n/a * invalid n/a 0 st_FOCA0002 * * validation off * ============== * valid 0 n/a * invalid n/a 0 st_FOCA0002 * ***/ for (int j = 0; j < 2; j++) { //validation on/off toValidate = ( 0 == j) ? true : false; // valid CANREP_TEST(v_1, dt, toValidate, EXP_RET_CANREP_FALSE, null_string, XSValue::st_NoCanRep); // invalid } } void test_dt_anyURI() { const XSValue::DataType dt = XSValue::dt_anyURI; bool toValidate = true; const char v_1[]=" http://www.schemaTest.org/IBMd3_2_17v01 \n"; const char v_2[]="gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles"; const char v_3[]="ftp://www.noNamespace.edu"; XSValue::XSValue_Data act_v_ran_v_1; act_v_ran_v_1.fValue.f_strVal = 0; XSValue::XSValue_Data act_v_ran_v_2; act_v_ran_v_2.fValue.f_strVal = 0; XSValue::XSValue_Data act_v_ran_v_3; act_v_ran_v_3.fValue.f_strVal = 0; const char iv_1[]="+htp://peiyongz@:90"; const char iv_2[]=">////1.2.3.4."; const char iv_3[]="