1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_stoc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <sal/main.h> 32*cdf0e10cSrcweir #include <osl/diagnose.h> 33*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 34*cdf0e10cSrcweir #include <cppuhelper/servicefactory.hxx> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hpp> 37*cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp> 38*cdf0e10cSrcweir #include <com/sun/star/script/XTypeConverter.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/reflection/FieldAccessMode.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/registry/XImplementationRegistration.hpp> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #include <float.h> 43*cdf0e10cSrcweir #include <stdio.h> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir using namespace rtl; 47*cdf0e10cSrcweir using namespace cppu; 48*cdf0e10cSrcweir using namespace osl; 49*cdf0e10cSrcweir using namespace com::sun::star::uno; 50*cdf0e10cSrcweir using namespace com::sun::star::lang; 51*cdf0e10cSrcweir using namespace com::sun::star::script; 52*cdf0e10cSrcweir using namespace com::sun::star::reflection; 53*cdf0e10cSrcweir using namespace com::sun::star::registry; 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir const double MIN_DOUBLE = -DBL_MAX; 56*cdf0e10cSrcweir const double MAX_DOUBLE = DBL_MAX; 57*cdf0e10cSrcweir const double MIN_FLOAT = -FLT_MAX; 58*cdf0e10cSrcweir const double MAX_FLOAT = FLT_MAX; 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir //================================================================================================== 61*cdf0e10cSrcweir static void printValue( const Any & rVal ) 62*cdf0e10cSrcweir { 63*cdf0e10cSrcweir // print value 64*cdf0e10cSrcweir OString aStr( OUStringToOString( rVal.getValueType().getTypeName(), RTL_TEXTENCODING_ISO_8859_1 ) ); 65*cdf0e10cSrcweir printf( "(%s)", aStr.getStr() ); 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir switch (rVal.getValueTypeClass()) 68*cdf0e10cSrcweir { 69*cdf0e10cSrcweir case TypeClass_VOID: 70*cdf0e10cSrcweir printf( "void" ); 71*cdf0e10cSrcweir break; 72*cdf0e10cSrcweir case TypeClass_ANY: 73*cdf0e10cSrcweir if (rVal.hasValue()) 74*cdf0e10cSrcweir printValue( *(Any *)rVal.getValue() ); 75*cdf0e10cSrcweir break; 76*cdf0e10cSrcweir case TypeClass_BOOLEAN: 77*cdf0e10cSrcweir printf( "%s", (*(sal_Bool *)rVal.getValue() ? "true" : "false") ); 78*cdf0e10cSrcweir break; 79*cdf0e10cSrcweir case TypeClass_CHAR: 80*cdf0e10cSrcweir { 81*cdf0e10cSrcweir char ar[2]; 82*cdf0e10cSrcweir ar[0] = (char)*(sal_Unicode *)rVal.getValue(); 83*cdf0e10cSrcweir ar[1] = 0; 84*cdf0e10cSrcweir printf( ar ); 85*cdf0e10cSrcweir break; 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir case TypeClass_BYTE: 88*cdf0e10cSrcweir printf( "%x", (int)*(sal_Int8 *)rVal.getValue() ); 89*cdf0e10cSrcweir break; 90*cdf0e10cSrcweir case TypeClass_SHORT: 91*cdf0e10cSrcweir printf( "%x", *(sal_Int16 *)rVal.getValue() ); 92*cdf0e10cSrcweir break; 93*cdf0e10cSrcweir case TypeClass_UNSIGNED_SHORT: 94*cdf0e10cSrcweir printf( "%x", *(sal_uInt16 *)rVal.getValue() ); 95*cdf0e10cSrcweir break; 96*cdf0e10cSrcweir case TypeClass_LONG: 97*cdf0e10cSrcweir printf( "%lx", static_cast<long>(*(sal_Int32 *)rVal.getValue()) ); 98*cdf0e10cSrcweir break; 99*cdf0e10cSrcweir case TypeClass_UNSIGNED_LONG: 100*cdf0e10cSrcweir printf( "%lx", static_cast<unsigned long>(*(sal_uInt32 *)rVal.getValue()) ); 101*cdf0e10cSrcweir break; 102*cdf0e10cSrcweir case TypeClass_HYPER: 103*cdf0e10cSrcweir printf( "%lx", (long)*(sal_Int64 *)rVal.getValue() ); 104*cdf0e10cSrcweir break; 105*cdf0e10cSrcweir case TypeClass_UNSIGNED_HYPER: 106*cdf0e10cSrcweir printf( "%lx", (unsigned long)*(sal_uInt64 *)rVal.getValue() ); 107*cdf0e10cSrcweir break; 108*cdf0e10cSrcweir case TypeClass_FLOAT: 109*cdf0e10cSrcweir printf( "%f", *(float *)rVal.getValue() ); 110*cdf0e10cSrcweir break; 111*cdf0e10cSrcweir case TypeClass_DOUBLE: 112*cdf0e10cSrcweir printf( "%g", *(double *)rVal.getValue() ); 113*cdf0e10cSrcweir break; 114*cdf0e10cSrcweir case TypeClass_STRING: 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir OString aStr2( OUStringToOString( *(OUString *)rVal.getValue(), RTL_TEXTENCODING_ISO_8859_1 ) ); 117*cdf0e10cSrcweir printf( aStr2.getStr() ); 118*cdf0e10cSrcweir break; 119*cdf0e10cSrcweir } 120*cdf0e10cSrcweir case TypeClass_ENUM: 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir typelib_EnumTypeDescription * pEnumTD = 0; 123*cdf0e10cSrcweir TYPELIB_DANGER_GET( (typelib_TypeDescription **)&pEnumTD, rVal.getValueTypeRef() ); 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir for ( sal_Int32 nPos = pEnumTD->nEnumValues; nPos--; ) 126*cdf0e10cSrcweir { 127*cdf0e10cSrcweir if (pEnumTD->pEnumValues[nPos] == *(int *)rVal.getValue()) 128*cdf0e10cSrcweir { 129*cdf0e10cSrcweir printf( OUStringToOString(pEnumTD->ppEnumNames[nPos]->buffer, RTL_TEXTENCODING_ASCII_US).getStr() ); 130*cdf0e10cSrcweir TYPELIB_DANGER_RELEASE( (typelib_TypeDescription *)pEnumTD ); 131*cdf0e10cSrcweir return; 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir } 134*cdf0e10cSrcweir TYPELIB_DANGER_RELEASE( (typelib_TypeDescription *)pEnumTD ); 135*cdf0e10cSrcweir printf( ">ENUM not found!<" ); 136*cdf0e10cSrcweir break; 137*cdf0e10cSrcweir } 138*cdf0e10cSrcweir case TypeClass_SEQUENCE: 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir uno_Sequence * pSeq = *(uno_Sequence **)rVal.getValue(); 141*cdf0e10cSrcweir typelib_TypeDescription * pSeqTD = 0; 142*cdf0e10cSrcweir TYPELIB_DANGER_GET( &pSeqTD, rVal.getValueTypeRef() ); 143*cdf0e10cSrcweir typelib_TypeDescription * pElemTD = 0; 144*cdf0e10cSrcweir TYPELIB_DANGER_GET( &pElemTD, ((typelib_IndirectTypeDescription *)pSeqTD)->pType ); 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir sal_Int32 nLen = pSeq->nElements; 147*cdf0e10cSrcweir if (nLen) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir printf( "{ " ); 150*cdf0e10cSrcweir for ( sal_Int32 nPos = 0; nPos < nLen; ++nPos ) 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir printValue( Any( ((char *)pSeq->elements) + (nPos * pElemTD->nSize), pElemTD ) ); 153*cdf0e10cSrcweir if (nPos < (nLen-1)) 154*cdf0e10cSrcweir printf( ", " ); 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir printf( " }" ); 157*cdf0e10cSrcweir } 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir TYPELIB_DANGER_RELEASE( pElemTD ); 160*cdf0e10cSrcweir TYPELIB_DANGER_RELEASE( pSeqTD ); 161*cdf0e10cSrcweir break; 162*cdf0e10cSrcweir } 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir default: 165*cdf0e10cSrcweir printf( ">not printable<" ); 166*cdf0e10cSrcweir break; 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir static Reference< XTypeConverter > s_xConverter; 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir //================================================================================================== 173*cdf0e10cSrcweir static sal_Bool convertTo( const Type & rDestType, const Any & rVal, sal_Bool bExpectSuccess ) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir sal_Bool bCanConvert = sal_False; 176*cdf0e10cSrcweir Any aRet; 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir OString aExcMsg; 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir try 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir aRet = s_xConverter->convertTo( rVal, rDestType ); 183*cdf0e10cSrcweir bCanConvert = sal_True; 184*cdf0e10cSrcweir } 185*cdf0e10cSrcweir catch (Exception & rExc) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir aExcMsg = OUStringToOString( rExc.Message, RTL_TEXTENCODING_ASCII_US ); 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir if (bExpectSuccess && !bCanConvert) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir printf( "# conversion of " ); 193*cdf0e10cSrcweir printValue( rVal ); 194*cdf0e10cSrcweir printf( " to " ); 195*cdf0e10cSrcweir printf( OUStringToOString(rDestType.getTypeName(), RTL_TEXTENCODING_ASCII_US).getStr() ); 196*cdf0e10cSrcweir printf( " failed, but success was expected! [" ); 197*cdf0e10cSrcweir printf( aExcMsg.getStr() ); 198*cdf0e10cSrcweir printf( "]\n" ); 199*cdf0e10cSrcweir aRet = s_xConverter->convertTo( rVal, rDestType ); 200*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 201*cdf0e10cSrcweir // for debugging, to trace again 202*cdf0e10cSrcweir try 203*cdf0e10cSrcweir { 204*cdf0e10cSrcweir aRet = s_xConverter->convertTo( rVal, rDestType ); 205*cdf0e10cSrcweir } 206*cdf0e10cSrcweir catch (Exception &) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir #endif 210*cdf0e10cSrcweir return sal_False; 211*cdf0e10cSrcweir } 212*cdf0e10cSrcweir if (!bExpectSuccess && bCanConvert) 213*cdf0e10cSrcweir { 214*cdf0e10cSrcweir printf( "# conversion of " ); 215*cdf0e10cSrcweir printValue( rVal ); 216*cdf0e10cSrcweir printf( " to " ); 217*cdf0e10cSrcweir printValue( aRet ); 218*cdf0e10cSrcweir printf( " was successful, but was not expected to be!\n" ); 219*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 220*cdf0e10cSrcweir // for debugging, to trace again 221*cdf0e10cSrcweir aRet = s_xConverter->convertTo( rVal, rDestType ); 222*cdf0e10cSrcweir #endif 223*cdf0e10cSrcweir return sal_False; 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir #ifdef __RECONVERSION_OUTPUT__ 227*cdf0e10cSrcweir //= re-conversion output = 228*cdf0e10cSrcweir if (bCanConvert) 229*cdf0e10cSrcweir { 230*cdf0e10cSrcweir // re convert to original type 231*cdf0e10cSrcweir sal_Bool bReConvert = sal_False; 232*cdf0e10cSrcweir Any aRet2; 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir try 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir aRet2 = s_xConverter->convertTo( aRet, rVal.getValueType() ); 237*cdf0e10cSrcweir bReConvert = sal_True; 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir catch (Exception & rExc) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir aExcMsg = OUStringToOString( rExc.Message, RTL_TEXTENCODING_ISO_8859_1 ); 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir if (bReConvert) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir if (rVal != aRet2) 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir printf( "# re-conversion of " ); 249*cdf0e10cSrcweir printValue( rVal ); 250*cdf0e10cSrcweir printf( " to " ); 251*cdf0e10cSrcweir printValue( aRet ); 252*cdf0e10cSrcweir printf( " to " ); 253*cdf0e10cSrcweir printValue( aRet2 ); 254*cdf0e10cSrcweir printf( ": first and last do not match!\n" ); 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir else 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir printf( "# re-conversion of " ); 260*cdf0e10cSrcweir printValue( aRet ); 261*cdf0e10cSrcweir printf( " to " ); 262*cdf0e10cSrcweir printf( rVal.getValueType().getTypeName().getStr() ); 263*cdf0e10cSrcweir printf( " failed! [" ); 264*cdf0e10cSrcweir printf( aExcMsg.getStr() ); 265*cdf0e10cSrcweir printf( "]\n" ); 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir } 268*cdf0e10cSrcweir #endif 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir return sal_True; 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir //================================================================================================== 275*cdf0e10cSrcweir typedef struct _ConvBlock 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir Any _value; 278*cdf0e10cSrcweir sal_Bool _toString, _toDouble, _toFloat; 279*cdf0e10cSrcweir sal_Bool _toUINT32, _toINT32, _toUINT16, _toINT16, _toBYTE, _toBOOL, _toChar; 280*cdf0e10cSrcweir sal_Bool _toTypeClass, _toSeqINT16, _toSeqAny; 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir _ConvBlock() 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir _ConvBlock( const Any & rValue_, 286*cdf0e10cSrcweir sal_Bool toString_, sal_Bool toDouble_, sal_Bool toFloat_, 287*cdf0e10cSrcweir sal_Bool toUINT32_, sal_Bool toINT32_, sal_Bool toUINT16_, sal_Bool toINT16_, 288*cdf0e10cSrcweir sal_Bool toBYTE_, sal_Bool toBOOL_, sal_Bool toChar_, 289*cdf0e10cSrcweir sal_Bool toTypeClass_, sal_Bool toSeqINT16_, sal_Bool toSeqAny_ ) 290*cdf0e10cSrcweir : _value( rValue_ ) 291*cdf0e10cSrcweir , _toString( toString_ ), _toDouble( toDouble_ ), _toFloat( toFloat_ ) 292*cdf0e10cSrcweir , _toUINT32( toUINT32_ ), _toINT32( toINT32_ ), _toUINT16( toUINT16_ ), _toINT16( toINT16_ ) 293*cdf0e10cSrcweir , _toBYTE( toBYTE_ ), _toBOOL( toBOOL_ ), _toChar( toChar_ ) 294*cdf0e10cSrcweir , _toTypeClass( toTypeClass_ ), _toSeqINT16( toSeqINT16_ ), _toSeqAny( toSeqAny_ ) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir } ConvBlock; 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir //================================================================================================== 301*cdf0e10cSrcweir static sal_Int32 initBlocks( ConvBlock * pTestBlocks ) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir Any aVal; 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir sal_uInt32 nElems = 0; 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir // ==BYTE== 308*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0xff" ); 309*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 310*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "255" ); 311*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 312*cdf0e10cSrcweir aVal <<= (sal_Int8)0xffu; 313*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 314*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 315*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x80" ); 316*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 317*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "128" ); 318*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 319*cdf0e10cSrcweir aVal <<= (sal_Int8)( 0x80u ); 320*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 321*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 322*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x7f" ); 323*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 324*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "127" ); 325*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 326*cdf0e10cSrcweir aVal <<= (sal_Int8)( 0x7f ); 327*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ); 328*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 329*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "5" ); 330*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0 ); 331*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "+5" ); 332*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 333*cdf0e10cSrcweir aVal <<= (sal_Int8)( 5 ); 334*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 335*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 336*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-5" ); 337*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0 ); 338*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 339*cdf0e10cSrcweir aVal <<= (sal_Int8)( -5 ); 340*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 341*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 342*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "256" ); 343*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 344*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 345*cdf0e10cSrcweir // ==UINT16== 346*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "65535" ); 347*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ); 348*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0xffff" ); 349*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ); 350*cdf0e10cSrcweir aVal <<= (sal_uInt16)( 0xffff ); 351*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0 ); 352*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 353*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "32768" ); 354*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ); 355*cdf0e10cSrcweir aVal <<= (sal_uInt16)( 0x8000 ); 356*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0 ); 357*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 358*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "32767" ); 359*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 360*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x7fff" ); 361*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 362*cdf0e10cSrcweir aVal <<= (sal_uInt16)( 0x7fff ); 363*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 ); 364*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 365*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "256" ); 366*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 367*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x100" ); 368*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ); 369*cdf0e10cSrcweir aVal <<= (sal_uInt16)( 0x100 ); 370*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 ); 371*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 372*cdf0e10cSrcweir aVal <<= (sal_uInt16)( 5 ); 373*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 374*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 375*cdf0e10cSrcweir aVal <<= (sal_uInt16)( -5 ); // is 0xfffb 376*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0 ); 377*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 378*cdf0e10cSrcweir // ==INT16== 379*cdf0e10cSrcweir aVal <<= (sal_Int16)( -1 ); 380*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 381*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 382*cdf0e10cSrcweir aVal <<= (sal_Int16)( -0x8000 ); 383*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0 ); 384*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 385*cdf0e10cSrcweir aVal <<= (sal_Int16)( 0x7fff ); 386*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 ); 387*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 388*cdf0e10cSrcweir aVal <<= (sal_Int16)( 0x100 ); 389*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 ); 390*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 391*cdf0e10cSrcweir aVal <<= (sal_Int16)( 5 ); 392*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 393*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 394*cdf0e10cSrcweir aVal <<= (sal_Int16)( -5 ); 395*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 396*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 397*cdf0e10cSrcweir // ==UINT32== 398*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "+4294967295" ); 399*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 400*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "4294967295" ); 401*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 402*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0xffffffff" ); 403*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 404*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 0xffffffff ); 405*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 406*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 407*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-2147483648" ); 408*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 409*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-0x80000000" ); 410*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 411*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 412*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 0x80000000 ); 413*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 414*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 415*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "2147483647" ); 416*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 417*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x7fffffff" ); 418*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 419*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 0x7fffffff ); 420*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 421*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 422*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "65536" ); 423*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 424*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x10000" ); 425*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ); 426*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 0x10000 ); 427*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 428*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 429*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 0x8000 ); 430*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0 ); 431*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 432*cdf0e10cSrcweir aVal <<= (sal_uInt32)( 5 ); 433*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 434*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 435*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0xfffffffb" ); 436*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 437*cdf0e10cSrcweir aVal <<= (sal_uInt32)( -5 ); // is 0xfffffffb 438*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 439*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 440*cdf0e10cSrcweir // ==INT32== 441*cdf0e10cSrcweir aVal <<= (sal_Int32)( 0xffffffff ); // is -1 442*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 443*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 444*cdf0e10cSrcweir aVal <<= (sal_Int32)( 0x80000000 ); 445*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 446*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 447*cdf0e10cSrcweir aVal <<= (sal_Int32)( 0x7fffffff ); 448*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 449*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 450*cdf0e10cSrcweir aVal <<= (sal_Int32)( 0x10000 ); 451*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 452*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 453*cdf0e10cSrcweir aVal <<= (sal_Int32)( -0x8001 ); 454*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 455*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 456*cdf0e10cSrcweir aVal <<= (sal_Int32)( 5 ); 457*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 458*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 459*cdf0e10cSrcweir aVal <<= (sal_Int32)( -5 ); 460*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0 ); 461*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 462*cdf0e10cSrcweir // ==FLOAT== 463*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-3.4e+38" ); 464*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 465*cdf0e10cSrcweir aVal <<= (float)( MIN_FLOAT ); 466*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 467*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 468*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "+3.4e+38" ); 469*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 470*cdf0e10cSrcweir aVal <<= (float)( MAX_FLOAT ); 471*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 472*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 473*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "9e-20" ); 474*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 475*cdf0e10cSrcweir aVal <<= (float)( 9e-20 ); 476*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 477*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 478*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "+.7071067811865" ); 479*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 480*cdf0e10cSrcweir aVal <<= (float)( .7071067811865 ); 481*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 482*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 483*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "3.14159265359" ); 484*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 485*cdf0e10cSrcweir aVal <<= (float)( 3.14159265359 ); 486*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 487*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 488*cdf0e10cSrcweir aVal <<= (float)( 5 ); 489*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 490*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 491*cdf0e10cSrcweir // ==DOUBLE== 492*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-1.7976931348623155e+308" ); 493*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 494*cdf0e10cSrcweir aVal <<= (double)( MIN_DOUBLE ); 495*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 496*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 497*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "1.7976931348623155e+308" ); 498*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 499*cdf0e10cSrcweir aVal <<= (double)( MAX_DOUBLE ); 500*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 501*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 502*cdf0e10cSrcweir aVal <<= (double)( MIN_FLOAT ); 503*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 504*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 505*cdf0e10cSrcweir aVal <<= (double)( MAX_FLOAT ); 506*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 507*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 508*cdf0e10cSrcweir aVal <<= (double)( -((double)0x80000000) ); 509*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 510*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 511*cdf0e10cSrcweir aVal <<= (double)( -((double)0x80000001) ); 512*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 513*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 514*cdf0e10cSrcweir aVal <<= (double)( 0x7fffffff ); 515*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 ); 516*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 517*cdf0e10cSrcweir aVal <<= (double)( 0x80000000 ); 518*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 519*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 520*cdf0e10cSrcweir aVal <<= (double)( 0xffffffff ); 521*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 522*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 523*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0x100000000" ); 524*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); 525*cdf0e10cSrcweir #ifndef OS2 526*cdf0e10cSrcweir aVal <<= (double)( SAL_CONST_INT64(0x100000000) ); 527*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 528*cdf0e10cSrcweir #endif 529*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 530*cdf0e10cSrcweir aVal <<= (double)( 5 ); 531*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 ); 532*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 533*cdf0e10cSrcweir // ==CHAR== 534*cdf0e10cSrcweir sal_Unicode c = 'A'; 535*cdf0e10cSrcweir aVal.setValue( &c, ::getCharCppuType() ); 536*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ); 537*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 538*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "A" ); 539*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ); 540*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 541*cdf0e10cSrcweir // ==BOOL== 542*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "0" ); 543*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ); 544*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 545*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "1" ); 546*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ); 547*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 548*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "False" ); 549*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 550*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 551*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "true" ); 552*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ); 553*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 554*cdf0e10cSrcweir 555*cdf0e10cSrcweir sal_Bool bTmp = sal_True; 556*cdf0e10cSrcweir aVal.setValue( &bTmp, getBooleanCppuType() ); 557*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ); 558*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 559*cdf0e10cSrcweir // ==ZERO STRINGS== 560*cdf0e10cSrcweir aVal <<= OUString(); 561*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 562*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 563*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-" ); 564*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0 ); 565*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 566*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "-0" ); 567*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 568*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 569*cdf0e10cSrcweir // ==TYPECLASS ENUM== 570*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "eNuM" ); 571*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ); 572*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 573*cdf0e10cSrcweir aVal <<= OUString::createFromAscii( "DOUBLE" ); 574*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ); 575*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 576*cdf0e10cSrcweir int e = 1; 577*cdf0e10cSrcweir aVal.setValue( &e, ::getCppuType( (const TypeClass *)0 ) ); 578*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0 ); 579*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 580*cdf0e10cSrcweir aVal.setValue( &e, ::getCppuType( (const FieldAccessMode *)0 ) ); 581*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ); 582*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 583*cdf0e10cSrcweir // ==SEQ of INT== 584*cdf0e10cSrcweir Sequence< sal_Int32 > aINT32Seq( 3 ), aINT32Seq2( 3 ); 585*cdf0e10cSrcweir sal_Int32 * pINT32Seq = aINT32Seq.getArray(); 586*cdf0e10cSrcweir pINT32Seq[0] = -32768; 587*cdf0e10cSrcweir pINT32Seq[1] = 0; 588*cdf0e10cSrcweir pINT32Seq[2] = 32767; 589*cdf0e10cSrcweir aVal <<= aINT32Seq; 590*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ); 591*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 592*cdf0e10cSrcweir pINT32Seq = aINT32Seq2.getArray(); 593*cdf0e10cSrcweir pINT32Seq[0] = -32768; 594*cdf0e10cSrcweir pINT32Seq[1] = -32769; 595*cdf0e10cSrcweir pINT32Seq[2] = 32767; 596*cdf0e10cSrcweir aVal <<= aINT32Seq2; 597*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ); 598*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 599*cdf0e10cSrcweir // ==SEQ of ANY== 600*cdf0e10cSrcweir Sequence< Any > aAnySeq( 2 ), aAnySeq2( 2 ), aAnySeq3( 2 ); 601*cdf0e10cSrcweir Any * pAnySeq = aAnySeq.getArray(); 602*cdf0e10cSrcweir pAnySeq[0] = makeAny( aINT32Seq ); 603*cdf0e10cSrcweir pAnySeq[1] = makeAny( OUString::createFromAscii("lala") ); 604*cdf0e10cSrcweir aVal <<= aAnySeq; 605*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ); 606*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 607*cdf0e10cSrcweir pAnySeq = aAnySeq2.getArray(); 608*cdf0e10cSrcweir pAnySeq[0] <<= (sal_Int32)4711; 609*cdf0e10cSrcweir pAnySeq[1] <<= OUString::createFromAscii("0815"); 610*cdf0e10cSrcweir aVal <<= aAnySeq2; 611*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ); 612*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 613*cdf0e10cSrcweir pAnySeq = aAnySeq3.getArray(); 614*cdf0e10cSrcweir pAnySeq[0] <<= OUString::createFromAscii("TypeClass_UNION"); 615*cdf0e10cSrcweir pAnySeq[1] <<= OUString::createFromAscii("TypeClass_ENUM"); 616*cdf0e10cSrcweir aVal <<= aAnySeq3; 617*cdf0e10cSrcweir pTestBlocks[nElems++] = ConvBlock( aVal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ); 618*cdf0e10cSrcweir // st,do,fl,u3,i3,u1,i1,by,bo,ch,tc,si,sa 619*cdf0e10cSrcweir return nElems; 620*cdf0e10cSrcweir } 621*cdf0e10cSrcweir 622*cdf0e10cSrcweir //================================================================================================== 623*cdf0e10cSrcweir static void test_Conversion( const Reference< XMultiServiceFactory > & xMgr ) 624*cdf0e10cSrcweir { 625*cdf0e10cSrcweir printf( "test_Conversion(): start...\n" ); 626*cdf0e10cSrcweir 627*cdf0e10cSrcweir Reference< XTypeConverter > xConverter( xMgr->createInstance( 628*cdf0e10cSrcweir OUString::createFromAscii( "com.sun.star.script.Converter" ) ), UNO_QUERY ); 629*cdf0e10cSrcweir 630*cdf0e10cSrcweir ConvBlock * pTestBlocks = new ConvBlock[256]; 631*cdf0e10cSrcweir sal_Int32 nPos = initBlocks( pTestBlocks ); 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir s_xConverter = xConverter; 634*cdf0e10cSrcweir while (nPos--) 635*cdf0e10cSrcweir { 636*cdf0e10cSrcweir const ConvBlock& rBlock = pTestBlocks[nPos]; 637*cdf0e10cSrcweir const Any & rVal = rBlock._value; 638*cdf0e10cSrcweir 639*cdf0e10cSrcweir convertTo( ::getCppuType( (const OUString *)0 ), rVal, rBlock._toString ); 640*cdf0e10cSrcweir convertTo( ::getCppuType( (const float *)0 ), rVal, rBlock._toFloat ); 641*cdf0e10cSrcweir convertTo( ::getCppuType( (const double *)0 ), rVal, rBlock._toDouble ); 642*cdf0e10cSrcweir convertTo( ::getCppuType( (const sal_uInt32 *)0 ), rVal, rBlock._toUINT32 ); 643*cdf0e10cSrcweir convertTo( ::getCppuType( (const sal_Int32 *)0 ), rVal, rBlock._toINT32 ); 644*cdf0e10cSrcweir convertTo( ::getCppuType( (const sal_uInt16 *)0 ), rVal, rBlock._toUINT16 ); 645*cdf0e10cSrcweir convertTo( ::getCppuType( (const sal_Int16 *)0 ), rVal, rBlock._toINT16 ); 646*cdf0e10cSrcweir convertTo( ::getCppuType( (const sal_Int8 *)0 ), rVal, rBlock._toBYTE ); 647*cdf0e10cSrcweir convertTo( ::getBooleanCppuType(), rVal, rBlock._toBOOL ); 648*cdf0e10cSrcweir convertTo( ::getCharCppuType(), rVal, rBlock._toChar ); 649*cdf0e10cSrcweir convertTo( ::getCppuType( (const TypeClass *)0 ), rVal, rBlock._toTypeClass ); 650*cdf0e10cSrcweir convertTo( ::getCppuType( (const Sequence< sal_Int16 > *)0 ), rVal, rBlock._toSeqINT16 ); 651*cdf0e10cSrcweir convertTo( ::getCppuType( (const Sequence< Any > *)0 ), rVal, rBlock._toSeqAny ); 652*cdf0e10cSrcweir 653*cdf0e10cSrcweir convertTo( ::getVoidCppuType(), rVal, sal_True ); // anything converts to void 654*cdf0e10cSrcweir } 655*cdf0e10cSrcweir s_xConverter.clear(); 656*cdf0e10cSrcweir 657*cdf0e10cSrcweir delete [] pTestBlocks; 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir Any aRet; 660*cdf0e10cSrcweir aRet = xConverter->convertTo( Any( &xMgr, ::getCppuType( (const Reference< XMultiServiceFactory > *)0 ) ), 661*cdf0e10cSrcweir ::getCppuType( (const Reference< XServiceInfo > *)0 ) ); 662*cdf0e10cSrcweir aRet = xConverter->convertTo( aRet, ::getCppuType( (const Reference< XMultiServiceFactory > *)0 ) ); 663*cdf0e10cSrcweir aRet = xConverter->convertTo( aRet, ::getCppuType( (const Reference< XServiceInfo > *)0 ) ); 664*cdf0e10cSrcweir aRet <<= SAL_CONST_INT64(0x7fffffffffffffff); 665*cdf0e10cSrcweir aRet = xConverter->convertTo( aRet, ::getCppuType( (const sal_uInt64 *)0 ) ); 666*cdf0e10cSrcweir OSL_ASSERT( *(const sal_uInt64 *)aRet.getValue() == SAL_CONST_UINT64(0x7fffffffffffffff) ); 667*cdf0e10cSrcweir aRet <<= SAL_CONST_UINT64(0xffffffffffffffff); 668*cdf0e10cSrcweir aRet = xConverter->convertTo( aRet, ::getCppuType( (const sal_uInt64 *)0 ) ); 669*cdf0e10cSrcweir OSL_ASSERT( *(const sal_uInt64 *)aRet.getValue() == SAL_CONST_UINT64(0xffffffffffffffff) ); 670*cdf0e10cSrcweir aRet <<= SAL_CONST_INT64(-1); 671*cdf0e10cSrcweir aRet = xConverter->convertTo( aRet, ::getCppuType( (const sal_Int8 *)0 ) ); 672*cdf0e10cSrcweir OSL_ASSERT( *(const sal_Int8 *)aRet.getValue() == (-1) ); 673*cdf0e10cSrcweir printf( "test_Conversion(): end.\n" ); 674*cdf0e10cSrcweir } 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir SAL_IMPLEMENT_MAIN() 677*cdf0e10cSrcweir { 678*cdf0e10cSrcweir Reference< XMultiServiceFactory > xMgr( createRegistryServiceFactory( OUString::createFromAscii("stoctest.rdb") ) ); 679*cdf0e10cSrcweir 680*cdf0e10cSrcweir try 681*cdf0e10cSrcweir { 682*cdf0e10cSrcweir Reference< XImplementationRegistration > xImplReg( 683*cdf0e10cSrcweir xMgr->createInstance( OUString::createFromAscii("com.sun.star.registry.ImplementationRegistration") ), UNO_QUERY ); 684*cdf0e10cSrcweir OSL_ENSURE( xImplReg.is(), "### no impl reg!" ); 685*cdf0e10cSrcweir 686*cdf0e10cSrcweir OUString aLibName( 687*cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("stocservices.uno" SAL_DLLEXTENSION) ); 688*cdf0e10cSrcweir xImplReg->registerImplementation( 689*cdf0e10cSrcweir OUString::createFromAscii("com.sun.star.loader.SharedLibrary"), 690*cdf0e10cSrcweir aLibName, Reference< XSimpleRegistry >() ); 691*cdf0e10cSrcweir 692*cdf0e10cSrcweir test_Conversion( xMgr ); 693*cdf0e10cSrcweir } 694*cdf0e10cSrcweir catch (Exception & rExc) 695*cdf0e10cSrcweir { 696*cdf0e10cSrcweir OSL_ENSURE( sal_False, "### exception occured!" ); 697*cdf0e10cSrcweir OString aMsg( OUStringToOString( rExc.Message, RTL_TEXTENCODING_ASCII_US ) ); 698*cdf0e10cSrcweir OSL_TRACE( "### exception occured: " ); 699*cdf0e10cSrcweir OSL_TRACE( aMsg.getStr() ); 700*cdf0e10cSrcweir OSL_TRACE( "\n" ); 701*cdf0e10cSrcweir } 702*cdf0e10cSrcweir 703*cdf0e10cSrcweir Reference< XComponent >( xMgr, UNO_QUERY )->dispose(); 704*cdf0e10cSrcweir return 0; 705*cdf0e10cSrcweir } 706