16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2001-2013, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************** 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File custrtrn.C 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Ram String transformations test 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************* 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/****************************************************************************/ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string.h> 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ures.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ustr_imp.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cwchar.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addUCharTransformTest(TestNode** root); 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToUTF32(void); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToUTF32_surrogates(void); 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromUTF32(void); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromUTF32_surrogates(void); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_UChar_UTF8_API(void); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_FromUTF8(void); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_FromUTF8Lenient(void); 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_UChar_WCHART_API(void); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_widestrs(void); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_WCHART_LongString(void); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToJavaModifiedUTF8(void); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromJavaModifiedUTF8(void); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNullEmptySource(void); 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgaddUCharTransformTest(TestNode** root) 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strToUTF32, "custrtrn/Test_strToUTF32"); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strToUTF32_surrogates, "custrtrn/Test_strToUTF32_surrogates"); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strFromUTF32, "custrtrn/Test_strFromUTF32"); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strFromUTF32_surrogates, "custrtrn/Test_strFromUTF32_surrogates"); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_UChar_UTF8_API, "custrtrn/Test_UChar_UTF8_API"); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_FromUTF8, "custrtrn/Test_FromUTF8"); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_FromUTF8Lenient, "custrtrn/Test_FromUTF8Lenient"); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_UChar_WCHART_API, "custrtrn/Test_UChar_WCHART_API"); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_widestrs, "custrtrn/Test_widestrs"); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_WCHART_LongString, "custrtrn/Test_WCHART_LongString"); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strToJavaModifiedUTF8, "custrtrn/Test_strToJavaModifiedUTF8"); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &Test_strFromJavaModifiedUTF8, "custrtrn/Test_strFromJavaModifiedUTF8"); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestNullEmptySource, "custrtrn/TestNullEmptySource"); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar32 src32[]={ 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00A8, 0x3003, 0x3005, 0x2015, 0xFF5E, 0x2016, 0x2026, 0x2018, 0x000D, 0x000A, 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x2019, 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x000D, 0x000A, 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3016, 0x3017, 0x3010, 0x000D, 0x000A, 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x3011, 0x00B1, 0x00D7, 0x00F7, 0x2236, 0x2227, 0x7FC1, 0x8956, 0x000D, 0x000A, 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x000D, 0x000A, 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x57F7, 0x000D, 0x000A, 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x57F4, 0x57F9, 0x57FA, 0x57FC, 0x5800, 0x5802, 0x5805, 0x5806, 0x000D, 0x000A, 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x580A, 0x581E, 0x6BB5, 0x6BB7, 0x6BBA, 0x6BBC, 0x9CE2, 0x977C, 0x000D, 0x000A, 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6BBF, 0x6BC1, 0x6BC5, 0x6BC6, 0x6BCB, 0x6BCD, 0x6BCF, 0x6BD2, 0x000D, 0x000A, 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6BD3, 0x6BD4, 0x6BD6, 0x6BD7, 0x6BD8, 0x6BDB, 0x6BEB, 0x6BEC, 0x000D, 0x000A, 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6C05, 0x6C08, 0x6C0F, 0x6C11, 0x6C13, 0x6C23, 0x6C34, 0x0041, 0x000D, 0x000A, 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x000D, 0x000A, 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x000D, 0x000A, 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x005B, 0x9792, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, 0x9CD3, 0x000D, 0x000A, 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9CD4, 0x9CD5, 0x9CD7, 0x9CD8, 0x9CD9, 0x9CDC, 0x9CDD, 0x9CDF, 0x000D, 0x000A, 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9785, 0x9791, 0x00BD, 0x0390, 0x0385, 0x0386, 0x0388, 0x0389, 0x000D, 0x000A, 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x038E, 0x038F, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x000D, 0x000A, 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x038A, 0x038C, 0x039C, 0x000D, 0x000A, 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test non-BMP code points */ 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A699, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A69C, 0x0002A69D, 0x0002A69E, 0x0002A69F, 0x0002A6A0, 0x0002A6A5, 0x0002A6A6, 0x0002A6A7, 0x0002A6A8, 0x0002A6AB, 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A6AC, 0x0002A6AD, 0x0002A6AE, 0x0002A6AF, 0x0002A6B0, 0x0002A6B1, 0x0002A6B3, 0x0002A6B5, 0x0002A6B6, 0x0002A6B7, 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A6B8, 0x0002A6B9, 0x0002A6BA, 0x0002A6BB, 0x0002A6BC, 0x0002A6BD, 0x0002A6BE, 0x0002A6BF, 0x0002A6C0, 0x0002A6C1, 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A6C2, 0x0002A6C3, 0x0002A6C4, 0x0002A6C8, 0x0002A6CA, 0x0002A6CB, 0x0002A6CD, 0x0002A6CE, 0x0002A6CF, 0x0002A6D0, 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0002A6D1, 0x0002A6D2, 0x0002A6D3, 0x0002A6D4, 0x0002A6D5, 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4DB3, 0x4DB4, 0x4DB5, 0x4E00, 0x4E00, 0x4E01, 0x4E02, 0x4E03, 0x000D, 0x000A, 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x33E0, 0x33E6, 0x000D, 0x000A, 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4E05, 0x4E07, 0x4E04, 0x4E08, 0x4E08, 0x4E09, 0x4E0A, 0x4E0B, 0x000D, 0x000A, 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4E0C, 0x0021, 0x0022, 0x0023, 0x0024, 0xFF40, 0xFF41, 0xFF42, 0x000D, 0x000A, 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0x000D, 0x000A,0x0000 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar src16[] = { 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00A8, 0x3003, 0x3005, 0x2015, 0xFF5E, 0x2016, 0x2026, 0x2018, 0x000D, 0x000A, 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x2019, 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x000D, 0x000A, 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3016, 0x3017, 0x3010, 0x000D, 0x000A, 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x3011, 0x00B1, 0x00D7, 0x00F7, 0x2236, 0x2227, 0x7FC1, 0x8956, 0x000D, 0x000A, 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x000D, 0x000A, 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x57F7, 0x000D, 0x000A, 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x57F4, 0x57F9, 0x57FA, 0x57FC, 0x5800, 0x5802, 0x5805, 0x5806, 0x000D, 0x000A, 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x580A, 0x581E, 0x6BB5, 0x6BB7, 0x6BBA, 0x6BBC, 0x9CE2, 0x977C, 0x000D, 0x000A, 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6BBF, 0x6BC1, 0x6BC5, 0x6BC6, 0x6BCB, 0x6BCD, 0x6BCF, 0x6BD2, 0x000D, 0x000A, 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6BD3, 0x6BD4, 0x6BD6, 0x6BD7, 0x6BD8, 0x6BDB, 0x6BEB, 0x6BEC, 0x000D, 0x000A, 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6C05, 0x6C08, 0x6C0F, 0x6C11, 0x6C13, 0x6C23, 0x6C34, 0x0041, 0x000D, 0x000A, 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x000D, 0x000A, 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x000D, 0x000A, 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x005B, 0x9792, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, 0x9CD3, 0x000D, 0x000A, 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9CD4, 0x9CD5, 0x9CD7, 0x9CD8, 0x9CD9, 0x9CDC, 0x9CDD, 0x9CDF, 0x000D, 0x000A, 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x9785, 0x9791, 0x00BD, 0x0390, 0x0385, 0x0386, 0x0388, 0x0389, 0x000D, 0x000A, 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x038E, 0x038F, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x000D, 0x000A, 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x038A, 0x038C, 0x039C, 0x000D, 0x000A, 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test non-BMP code points */ 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDE99, 0xD869, 0xDE9C, 0xD869, 0xDE9D, 0xD869, 0xDE9E, 0xD869, 0xDE9F, 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEA0, 0xD869, 0xDEA5, 0xD869, 0xDEA6, 0xD869, 0xDEA7, 0xD869, 0xDEA8, 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEAB, 0xD869, 0xDEAC, 0xD869, 0xDEAD, 0xD869, 0xDEAE, 0xD869, 0xDEAF, 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEB0, 0xD869, 0xDEB1, 0xD869, 0xDEB3, 0xD869, 0xDEB5, 0xD869, 0xDEB6, 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEB7, 0xD869, 0xDEB8, 0xD869, 0xDEB9, 0xD869, 0xDEBA, 0xD869, 0xDEBB, 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEBC, 0xD869, 0xDEBD, 0xD869, 0xDEBE, 0xD869, 0xDEBF, 0xD869, 0xDEC0, 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDEC1, 0xD869, 0xDEC2, 0xD869, 0xDEC3, 0xD869, 0xDEC4, 0xD869, 0xDEC8, 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDECA, 0xD869, 0xDECB, 0xD869, 0xDECD, 0xD869, 0xDECE, 0xD869, 0xDECF, 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDED0, 0xD869, 0xDED1, 0xD869, 0xDED2, 0xD869, 0xDED3, 0xD869, 0xDED4, 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xD869, 0xDED5, 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4DB3, 0x4DB4, 0x4DB5, 0x4E00, 0x4E00, 0x4E01, 0x4E02, 0x4E03, 0x000D, 0x000A, 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x33E0, 0x33E6, 0x000D, 0x000A, 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4E05, 0x4E07, 0x4E04, 0x4E08, 0x4E08, 0x4E09, 0x4E0A, 0x4E0B, 0x000D, 0x000A, 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x4E0C, 0x0021, 0x0022, 0x0023, 0x0024, 0xFF40, 0xFF41, 0xFF42, 0x000D, 0x000A, 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0x000D, 0x000A,0x0000 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToUTF32(void){ 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 u32Target[400]; 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t u32DestLen; 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i= 0; 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* first with length */ 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u32DestLen = -2; 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, 0, &u32DestLen, src16, LENGTHOF(src16),&err); 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != LENGTHOF(src32)) { 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight with length): " 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_BUFFER_OVERFLOW_ERROR\n", 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)u32DestLen, (long)LENGTHOF(src32), u_errorName(err)); 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u32DestLen = -2; 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(src32)+1, &u32DestLen, src16, LENGTHOF(src16),&err); 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != LENGTHOF(src32)) { 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(with length): " 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_ZERO_ERROR\n", 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)u32DestLen, (long)LENGTHOF(src32), u_errorName(err)); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< u32DestLen; i++){ 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%08X, ",uTarget[i]); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< LENGTHOF(src32); i++){ 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u32Target[i] != src32[i]){ 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strToUTF32(with length) failed expected: %04X got: %04X at index: %i \n", src32[i], u32Target[i],i); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u32Target[i] != 0){ 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strToUTF32(with length) failed expected: %04X got: %04X at index: %i \n", 0, u32Target[i],i); 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* now NUL-terminated */ 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u32DestLen = -2; 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(NULL,0, &u32DestLen, src16, -1,&err); 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != LENGTHOF(src32)-1) { 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight with NUL-termination): " 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_BUFFER_OVERFLOW_ERROR\n", 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)u32DestLen, (long)LENGTHOF(src32)-1, u_errorName(err)); 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u32DestLen = -2; 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(src32), &u32DestLen, src16, -1,&err); 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != LENGTHOF(src32)-1) { 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(with NUL-termination): " 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_ZERO_ERROR\n", 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)u32DestLen, (long)LENGTHOF(src32)-1, u_errorName(err)); 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< LENGTHOF(src32); i++){ 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u32Target[i] != src32[i]){ 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strToUTF32(NUL-termination) failed expected: %04X got: %04X \n", src32[i], u32Target[i]); 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test unpaired surrogates */ 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToUTF32_surrogates() { 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 u32Target[400]; 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len16, u32DestLen; 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numSubstitutions; 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar surr16[] = { 0x41, 0xd900, 0x61, 0xdc00, 0x5a, 0xd900, 0xdc00, 0x7a, 0 }; 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 expected[] = { 0x5a, 0x50000, 0x7a, 0 }; 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 expected_FFFD[] = { 0x41, 0xfffd, 0x61, 0xfffd, 0x5a, 0x50000, 0x7a, 0 }; 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 expected_12345[] = { 0x41, 0x12345, 0x61, 0x12345, 0x5a, 0x50000, 0x7a, 0 }; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len16 = LENGTHOF(surr16); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < 4; ++i) { 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, 0, &u32DestLen, surr16+i, len16-i, &err); 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight surr16+%ld) sets %s != U_INVALID_CHAR_FOUND\n", 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16+i, len16-i, &err); 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(surr16+%ld) sets %s != U_INVALID_CHAR_FOUND\n", 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(NULL, 0, &u32DestLen, surr16+i, -1, &err); 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight surr16+%ld/NUL) sets %s != U_INVALID_CHAR_FOUND\n", 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16+i, -1, &err); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(surr16+%ld/NUL) sets %s != U_INVALID_CHAR_FOUND\n", 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, 0, &u32DestLen, surr16+4, len16-4-1, &err); 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != 3) { 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight surr16+4) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16+4, len16-4-1, &err); 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != 3 || uprv_memcmp(u32Target, expected, 4*4)) { 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(surr16+4) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(NULL, 0, &u32DestLen, surr16+4, -1, &err); 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != 3) { 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(preflight surr16+4/NUL) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16+4, -1, &err); 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != 3 || uprv_memcmp(u32Target, expected, 4*4)) { 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(surr16+4/NUL) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* with substitution character */ 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions = -1; 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32WithSub(u32Target, 0, &u32DestLen, surr16, len16-1, 0xfffd, &numSubstitutions, &err); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != 7 || numSubstitutions != 2) { 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32WithSub(preflight surr16) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32WithSub(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16, len16-1, 0xfffd, &numSubstitutions, &err); 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != 7 || numSubstitutions != 2 || uprv_memcmp(u32Target, expected_FFFD, 8*4)) { 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32WithSub(surr16) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32WithSub(NULL, 0, &u32DestLen, surr16, -1, 0x12345, &numSubstitutions, &err); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || u32DestLen != 7 || numSubstitutions != 2) { 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32WithSub(preflight surr16/NUL) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32WithSub(u32Target, LENGTHOF(u32Target), &u32DestLen, surr16, -1, 0x12345, &numSubstitutions, &err); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || u32DestLen != 7 || numSubstitutions != 2 || uprv_memcmp(u32Target, expected_12345, 8*4)) { 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32WithSub(surr16/NUL) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromUTF32(void){ 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar uTarget[400]; 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uDestLen; 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i= 0; 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* first with length */ 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = -2; 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget,0,&uDestLen,src32,LENGTHOF(src32),&err); 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != LENGTHOF(src16)) { 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight with length): " 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_BUFFER_OVERFLOW_ERROR\n", 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)uDestLen, (long)LENGTHOF(src16), u_errorName(err)); 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = -2; 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(src16)+1,&uDestLen,src32,LENGTHOF(src32),&err); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != LENGTHOF(src16)) { 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(with length): " 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_ZERO_ERROR\n", 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)uDestLen, (long)LENGTHOF(src16), u_errorName(err)); 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< uDestLen; i++){ 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%04X, ",uTarget[i]); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uDestLen; i++){ 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uTarget[i] != src16[i]){ 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strFromUTF32(with length) failed expected: %04X got: %04X at index: %i \n", src16[i] ,uTarget[i],i); 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uTarget[i] != 0){ 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strFromUTF32(with length) failed expected: %04X got: %04X at index: %i \n", 0,uTarget[i],i); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* now NUL-terminated */ 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = -2; 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(NULL,0,&uDestLen,src32,-1,&err); 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != LENGTHOF(src16)-1) { 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight with NUL-termination): " 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_BUFFER_OVERFLOW_ERROR\n", 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)uDestLen, (long)LENGTHOF(src16)-1, u_errorName(err)); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = -2; 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(src16),&uDestLen,src32,-1,&err); 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != LENGTHOF(src16)-1) { 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(with NUL-termination): " 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "length %ld != %ld and %s != U_ZERO_ERROR\n", 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)uDestLen, (long)LENGTHOF(src16)-1, u_errorName(err)); 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uDestLen; i++){ 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uTarget[i] != src16[i]){ 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strFromUTF32(with NUL-termination) failed expected: %04X got: %04X \n", src16[i] ,uTarget[i]); 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test surrogate code points */ 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromUTF32_surrogates() { 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar uTarget[400]; 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len32, uDestLen; 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numSubstitutions; 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 surr32[] = { 0x41, 0xd900, 0x61, 0xdc00, -1, 0x110000, 0x5a, 0x50000, 0x7a, 0 }; 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar expected[] = { 0x5a, 0xd900, 0xdc00, 0x7a, 0 }; 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar expected_FFFD[] = { 0x41, 0xfffd, 0x61, 0xfffd, 0xfffd, 0xfffd, 0x5a, 0xd900, 0xdc00, 0x7a, 0 }; 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar expected_12345[] = { 0x41, 0xd808, 0xdf45, 0x61, 0xd808, 0xdf45, 0xd808, 0xdf45, 0xd808, 0xdf45, 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x5a, 0xd900, 0xdc00, 0x7a, 0 }; 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len32 = LENGTHOF(surr32); 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < 6; ++i) { 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, 0, &uDestLen, surr32+i, len32-i, &err); 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight surr32+%ld) sets %s != U_INVALID_CHAR_FOUND\n", 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(uTarget), &uDestLen, surr32+i, len32-i, &err); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(surr32+%ld) sets %s != U_INVALID_CHAR_FOUND\n", 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(NULL, 0, &uDestLen, surr32+i, -1, &err); 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight surr32+%ld/NUL) sets %s != U_INVALID_CHAR_FOUND\n", 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(uTarget), &uDestLen, surr32+i, -1, &err); 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_INVALID_CHAR_FOUND) { 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(surr32+%ld/NUL) sets %s != U_INVALID_CHAR_FOUND\n", 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)i, u_errorName(err)); 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, 0, &uDestLen, surr32+6, len32-6-1, &err); 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != 4) { 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight surr32+6) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(uTarget), &uDestLen, surr32+6, len32-6-1, &err); 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != 4 || u_memcmp(uTarget, expected, 5)) { 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(surr32+6) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(NULL, 0, &uDestLen, surr32+6, -1, &err); 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != 4) { 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(preflight surr32+6/NUL) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(uTarget, LENGTHOF(uTarget), &uDestLen, surr32+6, -1, &err); 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != 4 || u_memcmp(uTarget, expected, 5)) { 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(surr32+6/NUL) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* with substitution character */ 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions = -1; 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32WithSub(uTarget, 0, &uDestLen, surr32, len32-1, 0xfffd, &numSubstitutions, &err); 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != 10 || numSubstitutions != 4) { 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32WithSub(preflight surr32) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32WithSub(uTarget, LENGTHOF(uTarget), &uDestLen, surr32, len32-1, 0xfffd, &numSubstitutions, &err); 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != 10 || numSubstitutions != 4 || u_memcmp(uTarget, expected_FFFD, 11)) { 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32WithSub(surr32) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32WithSub(NULL, 0, &uDestLen, surr32, -1, 0x12345, &numSubstitutions, &err); 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_BUFFER_OVERFLOW_ERROR || uDestLen != 14 || numSubstitutions != 4) { 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32WithSub(preflight surr32/NUL) sets %s != U_BUFFER_OVERFLOW_ERROR or an unexpected length\n", 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32WithSub(uTarget, LENGTHOF(uTarget), &uDestLen, surr32, -1, 0x12345, &numSubstitutions, &err); 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err != U_ZERO_ERROR || uDestLen != 14 || numSubstitutions != 4 || u_memcmp(uTarget, expected_12345, 15)) { 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32WithSub(surr32/NUL) sets %s != U_ZERO_ERROR or does not produce the expected string\n", 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err)); 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_UChar_UTF8_API(void){ 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar uTemp[1]; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char u8Temp[1]; 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* uTarget=uTemp; 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* u8Src; 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t u8SrcLen = 0; 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uTargetLength = 0; 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uDestLen=0; 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* uSrc = src16; 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uSrcLen = sizeof(src16)/2; 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char* u8Target = u8Temp; 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t u8TargetLength =0; 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t u8DestLen =0; 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool failed = FALSE; 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i= 0; 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numSubstitutions; 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight */ 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Temp[0] = 0x12; 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8(u8Target,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR && u8Temp[0] == 0x12){ 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Target = (char*) malloc (sizeof(uint8_t) * (u8DestLen+1)); 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8TargetLength = u8DestLen; 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Target[u8TargetLength] = (char)0xfe; 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen = -1; 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8(u8Target,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || u8DestLen != u8TargetLength || u8Target[u8TargetLength] != (char)0xfe){ 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8 failed after preflight. Error: %s\n", u_errorName(err)); 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Should have gotten U_BUFFER_OVERFLOW_ERROR"); 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = FALSE; 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< u8DestLen; i++){ 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%04X, ",u8Target[i]); 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< u8DestLen; i++){ 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u8Target[i] != src8[i]){ 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strToUTF8() failed expected: %04X got: %04X \n", src8[i], u8Target[i]); 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8() failed \n"); 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Src = u8Target; 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8SrcLen = u8DestLen; 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight */ 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTemp[0] = 0x1234; 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(uTarget,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR && uTemp[0] == 0x1234){ 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTarget = (UChar*) malloc( sizeof(UChar) * (uDestLen+1)); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTargetLength = uDestLen; 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTarget[uTargetLength] = 0xfff0; 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = -1; 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(uTarget,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(preflight) should have gotten U_BUFFER_OVERFLOW_ERROR\n"); 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< uDestLen; i++){ 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%04X, ",uTarget[i]); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || uDestLen != uTargetLength || uTarget[uTargetLength] != 0xfff0) { 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = TRUE; 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uTarget[i] != src16[i]){ 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strFromUTF8() failed expected: \\u%04X got: \\u%04X at index: %i \n", src16[i] ,uTarget[i],i); 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(after preflighting) failed\n"); 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(u8Target); 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uTarget); 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8SrcLen = -1; 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTargetLength = 0; 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uSrcLen =-1; 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8TargetLength=0; 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = FALSE; 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight */ 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8(NULL,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Target = (char*) malloc (sizeof(uint8_t) * (u8DestLen+1)); 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8TargetLength = u8DestLen; 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8(u8Target,u8TargetLength, &u8DestLen, uSrc, uSrcLen,&err); 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Should have gotten U_BUFFER_OVERFLOW_ERROR"); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = FALSE; 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< u8DestLen; i++){ 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%04X, ",u8Target[i]); 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< u8DestLen; i++){ 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u8Target[i] != src8[i]){ 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strToUTF8() failed expected: %04X got: %04X \n", src8[i], u8Target[i]); 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8() failed \n"); 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8Src = u8Target; 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8SrcLen = u8DestLen; 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight */ 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(NULL,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTarget = (UChar*) malloc( sizeof(UChar) * (uDestLen+1)); 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uTargetLength = uDestLen; 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(uTarget,uTargetLength,&uDestLen,u8Src,u8SrcLen,&err); 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Should have gotten U_BUFFER_OVERFLOW_ERROR"); 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for(i=0; i< uDestLen; i++){ 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("0x%04X, ",uTarget[i]); 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i%10==0){ 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uTarget[i] != src16[i]){ 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_strFromUTF8() failed expected: \\u%04X got: \\u%04X at index: %i \n", src16[i] ,uTarget[i],i); 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8() failed \n"); 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(u8Target); 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uTarget); 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test UTF-8 with single surrogates - illegal in Unicode 3.2 */ 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withLead16[]={ 0x1800, 0xd89a, 0x0061 }, 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16[]={ 0x1800, 0xdcba, 0x0061, 0 }, 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16SubFFFD[]={ 0x1800, 0xfffd, 0x0061, 0 }, /* sub==U+FFFD */ 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16Sub50005[]={ 0x1800, 0xd900, 0xdc05, 0x0061, 0 }; /* sub==U+50005 */ 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withLead8[]={ 0xe1, 0xa0, 0x80, 0xed, 0xa2, 0x9a, 0x61 }, 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail8[]={ 0xe1, 0xa0, 0x80, 0xed, 0xb2, 0xba, 0x61, 0 }, 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail8Sub1A[]={ 0xe1, 0xa0, 0x80, 0x1a, 0x61, 0 }, /* sub==U+001A */ 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail8SubFFFD[]={ 0xe1, 0xa0, 0x80, 0xef, 0xbf, 0xbd, 0x61, 0 }; /* sub==U+FFFD */ 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar out16[10]; 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char out8[10]; 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (err=U_ZERO_ERROR, u_strToUTF8(out8, LENGTHOF(out8), NULL, withLead16, LENGTHOF(withLead16), &err), err!=U_INVALID_CHAR_FOUND) || 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (err=U_ZERO_ERROR, u_strToUTF8(out8, LENGTHOF(out8), NULL, withTrail16, -1, &err), err!=U_INVALID_CHAR_FOUND) || 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (err=U_ZERO_ERROR, u_strFromUTF8(out16, LENGTHOF(out16), NULL, (const char *)withLead8, LENGTHOF(withLead8), &err), err!=U_INVALID_CHAR_FOUND) || 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (err=U_ZERO_ERROR, u_strFromUTF8(out16, LENGTHOF(out16), NULL, (const char *)withTrail8, -1, &err), err!=U_INVALID_CHAR_FOUND) 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strTo/FromUTF8(string with single surrogate) fails to report error\n"); 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test error handling with substitution characters */ 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* from UTF-8 with length */ 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out16[0]=0x55aa; 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen=0; 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)withTrail8, uprv_strlen((const char *)withTrail8), 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x50005, &numSubstitutions, 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || uDestLen!=u_strlen(withTrail16Sub50005) || 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen+1) || 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=1) { 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8WithSub(length) failed\n"); 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* from UTF-8 with NUL termination */ 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out16[0]=0x55aa; 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen=0; 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)withTrail8, -1, 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || uDestLen!=u_strlen(withTrail16SubFFFD) || 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=u_memcmp(withTrail16SubFFFD, out16, uDestLen+1) || 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=1) { 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8WithSub(NUL termination) failed\n"); 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight from UTF-8 with NUL termination */ 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out16[0]=0x55aa; 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen=0; 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(out16, 1, &uDestLen, 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)withTrail8, -1, 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x50005, &numSubstitutions, 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_BUFFER_OVERFLOW_ERROR || uDestLen!=u_strlen(withTrail16Sub50005) || numSubstitutions!=1) { 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8WithSub(preflight/NUL termination) failed\n"); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* to UTF-8 with length */ 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out8[0]=(char)0xf5; 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen=0; 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16, u_strlen(withTrail16), 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || u8DestLen!=uprv_strlen((const char *)withTrail8SubFFFD) || 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen+1) || 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=1) { 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strToUTF8WithSub(length) failed\n"); 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* to UTF-8 with NUL termination */ 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out8[0]=(char)0xf5; 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen=0; 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16, -1, 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1a, &numSubstitutions, 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || u8DestLen!=uprv_strlen((const char *)withTrail8Sub1A) || 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=uprv_memcmp((const char *)withTrail8Sub1A, out8, u8DestLen+1) || 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=1) { 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strToUTF8WithSub(NUL termination) failed\n"); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflight to UTF-8 with NUL termination */ 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out8[0]=(char)0xf5; 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen=0; 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(out8, 1, &u8DestLen, 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16, -1, 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_BUFFER_OVERFLOW_ERROR || u8DestLen!=uprv_strlen((const char *)withTrail8SubFFFD) || 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=1) { 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strToUTF8WithSub(preflight/NUL termination) failed\n"); 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test that numSubstitutions==0 if there are no substitutions */ 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* from UTF-8 with length (just first 3 bytes which are valid) */ 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out16[0]=0x55aa; 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen=0; 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)withTrail8, 3, 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x50005, &numSubstitutions, 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || uDestLen!=1 || 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen) || 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0) { 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8WithSub(no subs) failed\n"); 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* to UTF-8 with length (just first UChar which is valid) */ 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out8[0]=(char)0xf5; 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen=0; 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16, 1, 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || u8DestLen!=3 || 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen) || 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0) { 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strToUTF8WithSub(no subs) failed\n"); 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test that numSubstitutions==0 if subchar==U_SENTINEL (no subchar) */ 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* from UTF-8 with length (just first 3 bytes which are valid) */ 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out16[0]=0x55aa; 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen=0; 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(out16, LENGTHOF(out16), &uDestLen, 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)withTrail8, 3, 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SENTINEL, &numSubstitutions, 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || uDestLen!=1 || 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=u_memcmp(withTrail16Sub50005, out16, uDestLen) || 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0) { 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8WithSub(no subchar) failed\n"); 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* to UTF-8 with length (just first UChar which is valid) */ 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions=-1; 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out8[0]=(char)0xf5; 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u8DestLen=0; 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(out8, LENGTHOF(out8), &u8DestLen, 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org withTrail16, 1, 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SENTINEL, &numSubstitutions, 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &err); 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err) || u8DestLen!=3 || 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=uprv_memcmp((const char *)withTrail8SubFFFD, out8, u8DestLen) || 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0) { 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strToUTF8WithSub(no subchar) failed\n"); 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test with an illegal lead byte that would be followed by more than 3 trail bytes. 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See ticket #10371. 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char src[1]={ 0xf8 }; 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar out16[10]; 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(out16, LENGTHOF(out16), NULL, src, 1, &err); 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_INVALID_CHAR_FOUND) { 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(5-byte lead byte) failed\n"); 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* compare if two strings are equal, but match 0xfffd in the second string with anything in the first */ 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgequalAnyFFFD(const UChar *s, const UChar *t, int32_t length) { 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar c1, c2; 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while(length>0) { 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c1=*s++; 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c2=*t++; 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c1!=c2 && c2!=0xfffd) { 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org --length; 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test u_strFromUTF8Lenient() */ 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTest_FromUTF8(void) { 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test case from icu-support list 20071130 "u_strFromUTF8() returns U_INVALID_CHAR_FOUND(10)" 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t bytes[]={ 0xe0, 0xa5, 0x9c, 0 }; 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar dest[64]; 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *destPointer; 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t destLength; 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3 bytes input, one UChar output (U+095C) */ 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-99; 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destPointer=u_strFromUTF8(NULL, 0, &destLength, (const char *)bytes, 3, &errorCode); 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_BUFFER_OVERFLOW_ERROR || destPointer!=NULL || destLength!=1) { 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(preflight srcLength=3) fails: destLength=%ld - %s\n", 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)destLength, u_errorName(errorCode)); 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4 bytes input, two UChars output (U+095C U+0000) */ 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-99; 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destPointer=u_strFromUTF8(NULL, 0, &destLength, (const char *)bytes, 4, &errorCode); 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_BUFFER_OVERFLOW_ERROR || destPointer!=NULL || destLength!=2) { 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(preflight srcLength=4) fails: destLength=%ld - %s\n", 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)destLength, u_errorName(errorCode)); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* NUL-terminated 3 bytes input, one UChar output (U+095C) */ 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-99; 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destPointer=u_strFromUTF8(NULL, 0, &destLength, (const char *)bytes, -1, &errorCode); 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_BUFFER_OVERFLOW_ERROR || destPointer!=NULL || destLength!=1) { 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(preflight srcLength=-1) fails: destLength=%ld - %s\n", 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)destLength, u_errorName(errorCode)); 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3 bytes input, one UChar output (U+095C), transform not just preflight */ 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=dest[1]=99; 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-99; 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destPointer=u_strFromUTF8(dest, LENGTHOF(dest), &destLength, (const char *)bytes, 3, &errorCode); 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode) || destPointer!=dest || destLength!=1 || dest[0]!=0x95c || dest[1]!=0) { 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_strFromUTF8(transform srcLength=3) fails: destLength=%ld - %s\n", 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)destLength, u_errorName(errorCode)); 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test u_strFromUTF8Lenient() */ 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTest_FromUTF8Lenient(void) { 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Multiple input strings, each NUL-terminated. 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Terminate with a string starting with 0xff. 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t bytes[]={ 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* well-formed UTF-8 */ 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0xc3, 0x9f, 0xe0, 0xa0, 0x80, 0xf0, 0xa0, 0x80, 0x80, 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x62, 0xc3, 0xa0, 0xe0, 0xa0, 0x81, 0xf0, 0xa0, 0x80, 0x81, 0, 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* various malformed sequences */ 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xc3, 0xc3, 0x9f, 0xc3, 0xa0, 0xe0, 0x80, 0x8a, 0xf0, 0x41, 0x42, 0x43, 0, 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* truncated input */ 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xc3, 0, 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0, 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xa0, 0, 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xf0, 0, 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xf0, 0x90, 0, 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xf0, 0x90, 0x80, 0, 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* non-ASCII characters in the last few bytes */ 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0xc3, 0x9f, 0xe0, 0xa0, 0x80, 0, 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0xe0, 0xa0, 0x80, 0xc3, 0x9f, 0, 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* empty string */ 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* finish */ 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xff, 0 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Multiple output strings, each NUL-terminated. 0xfffd matches anything. */ 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar uchars[]={ 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0xdf, 0x800, 0xd840, 0xdc00, 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x62, 0xe0, 0x801, 0xd840, 0xdc01, 0, 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0x9f, 0xe0, 0xa, 0xfffd, 0xfffd, 0, 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0, 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0xdf, 0x800, 0, 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x800, 0xdf, 0, 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar dest[64]; 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *pb; 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *pu, *pDest; 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t srcLength, destLength0, destLength; 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int number; 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* verify checking for some illegal arguments */ 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, 1, &destLength, NULL, -1, &errorCode); 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0x1234) { 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(src=NULL) failed\n"); 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(NULL, 1, &destLength, (const char *)bytes, -1, &errorCode); 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(dest=NULL[1]) failed\n"); 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_MEMORY_ALLOCATION_ERROR; 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, 1, &destLength, (const char *)bytes, -1, &errorCode); 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_MEMORY_ALLOCATION_ERROR || dest[0]!=0x1234) { 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(U_MEMORY_ALLOCATION_ERROR) failed\n"); 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_MEMORY_ALLOCATION_ERROR; 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, 1, &destLength, (const char *)bytes, -1, NULL); 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(dest[0]!=0x1234) { 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(pErrorCode=NULL) failed\n"); 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test normal behavior */ 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org number=0; /* string number for log_err() */ 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(pb=(const char *)bytes, pu=uchars; 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pb!=(char)0xff; 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pb+=srcLength+1, pu+=destLength0+1, ++number 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcLength=uprv_strlen(pb); 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength0=u_strlen(pu); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflighting with NUL-termination */ 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(NULL, 0, &destLength, pb, -1, &errorCode); 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!= (destLength0==0 ? U_STRING_NOT_TERMINATED_WARNING : U_BUFFER_OVERFLOW_ERROR) || 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=NULL || dest[0]!=0x1234 || destLength!=destLength0 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d preflighting with NUL-termination) failed\n", number); 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflighting/some capacity with NUL-termination */ 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength>0) { 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[destLength0-1]=0x1234; 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, destLength0-1, &destLength, pb, -1, &errorCode); 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_BUFFER_OVERFLOW_ERROR || 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[destLength0-1]!=0x1234 || destLength!=destLength0 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d preflighting/some capacity with NUL-termination) failed\n", number); 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* conversion with NUL-termination, much capacity */ 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=dest[destLength0]=0x1234; 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, LENGTHOF(dest), &destLength, pb, -1, &errorCode); 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_ZERO_ERROR || 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=dest || dest[destLength0]!=0 || 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d conversion with NUL-termination, much capacity) failed\n", number); 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* conversion with NUL-termination, exact capacity */ 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=dest[destLength0]=0x1234; 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, destLength0, &destLength, pb, -1, &errorCode); 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_STRING_NOT_TERMINATED_WARNING || 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=dest || dest[destLength0]!=0x1234 || 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d conversion with NUL-termination, exact capacity) failed\n", number); 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflighting with length */ 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=0x1234; 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(NULL, 0, &destLength, pb, srcLength, &errorCode); 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!= (destLength0==0 ? U_STRING_NOT_TERMINATED_WARNING : U_BUFFER_OVERFLOW_ERROR) || 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=NULL || dest[0]!=0x1234 || destLength!=srcLength 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d preflighting with length) failed\n", number); 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preflighting/some capacity with length */ 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength>0) { 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[srcLength-1]=0x1234; 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, srcLength-1, &destLength, pb, srcLength, &errorCode); 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_BUFFER_OVERFLOW_ERROR || 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[srcLength-1]!=0x1234 || destLength!=srcLength 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d preflighting/some capacity with length) failed\n", number); 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* conversion with length, much capacity */ 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=dest[destLength0]=0x1234; 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, LENGTHOF(dest), &destLength, pb, srcLength, &errorCode); 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_ZERO_ERROR || 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=dest || dest[destLength0]!=0 || 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d conversion with length, much capacity) failed\n", number); 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* conversion with length, srcLength capacity */ 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[0]=dest[srcLength]=dest[destLength0]=0x1234; 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength=-1; 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest=u_strFromUTF8Lenient(dest, srcLength, &destLength, pb, srcLength, &errorCode); 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(srcLength==destLength0) { 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_STRING_NOT_TERMINATED_WARNING || 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=dest || dest[destLength0]!=0x1234 || 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d conversion with length, srcLength capacity/not terminated) failed\n", number); 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (errorCode!=U_ZERO_ERROR || 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pDest!=dest || dest[destLength0]!=0 || 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destLength!=destLength0 || !equalAnyFFFD(dest, pu, destLength) 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(%d conversion with length, srcLength capacity/terminated) failed\n", number); 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const uint16_t src16j[] = { 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x000D, 0x000A, 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x000D, 0x000A, 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0000, 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Test only ASCII */ 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const uint16_t src16WithNulls[] = { 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0000, 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0048, 0x0049, 0x004A, 0x000D, 0x000A, 0x0000, 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0000, 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0050, 0x0051, 0x0052, 0x000D, 0x000A, 0x0000, 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0000, 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 0x0000, 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0000, 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0058, 0x0059, 0x005A, 0x000D, 0x000A, 0x0000, 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test only ASCII */ 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0054, 0x0000 */ 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_UChar_WCHART_API(void){ 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err = U_ZERO_ERROR; 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* uSrc = src16j; 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uSrcLen = sizeof(src16j)/2; 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t* wDest = NULL; 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wDestLen = 0; 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t reqLen= 0 ; 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool failed = FALSE; 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* uDest = NULL; 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uDestLen = 0; 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i =0; 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Bad UErrorCode arguments. Make sure that the API doesn't crash, and that Purify doesn't complain. */ 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strFromWCS(NULL,0,NULL,NULL,0,NULL) != NULL) { 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromWCS() should return NULL with a bad argument\n"); 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strToWCS(NULL,0,NULL,NULL,0,NULL) != NULL) { 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS() should return NULL with a bad argument\n"); 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* NULL source & destination. */ 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(NULL,0,NULL,NULL,0,&err); 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_STRING_NOT_TERMINATED_WARNING) { 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromWCS(NULL, NULL) failed. Error: %s \n", u_errorName(err)); 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(NULL,0,NULL,NULL,0,&err); 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_STRING_NOT_TERMINATED_WARNING) { 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS(NULL, NULL) failed. Error: %s \n", u_errorName(err)); 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight*/ 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen = reqLen+1; 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight */ 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,reqLen,&err); 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err =U_ZERO_ERROR; 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = (UChar*) malloc(sizeof(UChar) * (reqLen+1)); 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = reqLen + 1; 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,reqLen,&err); 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else if(U_FAILURE(err)){ 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromWCS() failed. Error: %s \n", u_errorName(err)); 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uDest[i] != src16j[i]){ 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_str*WCS() failed for unterminated string expected: \\u%04X got: \\u%04X at index: %i \n", src16j[i] ,uDest[i],i); 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err)){ 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = TRUE; 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS() failed \n"); 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(wDest); 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uDest); 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test with embeded nulls */ 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uSrc = src16WithNulls; 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uSrcLen = sizeof(src16WithNulls)/2; 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen =0; 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen =0; 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest = NULL; 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = NULL; 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight*/ 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen = reqLen+1; 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err); 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight */ 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,reqLen,&err); 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err =U_ZERO_ERROR; 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = (UChar*) malloc(sizeof(UChar) * (reqLen+1)); 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = reqLen + 1; 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,reqLen,&err); 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!U_FAILURE(err)) { 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uDest[i] != src16WithNulls[i]){ 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_str*WCS() failed for string with nulls expected: \\u%04X got: \\u%04X at index: %i \n", src16WithNulls[i] ,uDest[i],i); 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err)){ 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = TRUE; 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS() failed \n"); 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(wDest); 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uDest); 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uSrc = src16j; 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uSrcLen = sizeof(src16j)/2; 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen =0; 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen =0; 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest = NULL; 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = NULL; 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen = 0; 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight*/ 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,-1,&err); 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen = reqLen+1; 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,-1,&err); 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = 0; 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight */ 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,-1,&err); 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err == U_BUFFER_OVERFLOW_ERROR){ 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err =U_ZERO_ERROR; 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = (UChar*) malloc(sizeof(UChar) * (reqLen+1)); 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = reqLen + 1; 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,-1,&err); 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!U_FAILURE(err)) { 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uDest[i] != src16j[i]){ 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_str*WCS() failed for null terminated string expected: \\u%04X got: \\u%04X at index: %i \n", src16j[i] ,uDest[i],i); 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(err)){ 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = TRUE; 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS() failed \n"); 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(wDest); 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uDest); 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test u_terminateWChars(). 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * All u_terminateXYZ() use the same implementation macro; 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * we test this function to improve API coverage. 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t buffer[10]; 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buffer[3]=0x20ac; 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen=u_terminateWChars(buffer, LENGTHOF(buffer), 3, &err); 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_ZERO_ERROR || wDestLen!=3 || buffer[3]!=0) { 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_terminateWChars(buffer, all, 3, zero) failed: %s length %d [3]==U+%04x\n", 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err), wDestLen, buffer[3]); 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buffer[3]=0x20ac; 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen=u_terminateWChars(buffer, 3, 3, &err); 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_STRING_NOT_TERMINATED_WARNING || wDestLen!=3 || buffer[3]!=0x20ac) { 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_terminateWChars(buffer, 3, 3, zero) failed: %s length %d [3]==U+%04x\n", 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err), wDestLen, buffer[3]); 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_STRING_NOT_TERMINATED_WARNING; 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buffer[3]=0x20ac; 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen=u_terminateWChars(buffer, LENGTHOF(buffer), 3, &err); 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_ZERO_ERROR || wDestLen!=3 || buffer[3]!=0) { 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_terminateWChars(buffer, all, 3, not-terminated) failed: %s length %d [3]==U+%04x\n", 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err), wDestLen, buffer[3]); 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err=U_ZERO_ERROR; 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buffer[3]=0x20ac; 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen=u_terminateWChars(buffer, 2, 3, &err); 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(err!=U_BUFFER_OVERFLOW_ERROR || wDestLen!=3 || buffer[3]!=0x20ac) { 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_terminateWChars(buffer, 2, 3, zero) failed: %s length %d [3]==U+%04x\n", 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(err), wDestLen, buffer[3]); 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_widestrs() 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t ws[100]; 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar rts[100]; 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wcap = sizeof(ws) / sizeof(*ws); 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wl; 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t rtcap = sizeof(rts) / sizeof(*rts); 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t rtl; 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t *wcs; 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *cp; 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *errname; 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ustr[] = {'h', 'e', 'l', 'l', 'o', 0}; 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ul = sizeof(ustr)/sizeof(*ustr) -1; 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char astr[100]; 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err; 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wcs = u_strToWCS(ws, wcap, &wl, ustr, ul, &err); 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(err)) { 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errname = u_errorName(err); 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("test_widestrs: u_strToWCS error: %s!\n",errname); 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(ul!=wl){ 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS: ustr = %s, ul = %d, ws = %S, wl = %d!\n", u_austrcpy(astr, ustr), ul, ws, wl); 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wl = (int32_t)uprv_wcslen(wcs); 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cp = u_strFromWCS(rts, rtcap, &rtl, wcs, wl, &err); 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (void)cp; /* Suppress set but not used warning. */ 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(err)) { 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errname = u_errorName(err); 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "test_widestrs: ucnv_wcstombs error: %s!\n",errname); 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(wl != rtl){ 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromWCS: wcs = %S, wl = %d,rts = %s, rtl = %d!\n", wcs, wl, u_austrcpy(astr, rts), rtl); 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTest_WCHART_LongString(){ 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* testdatapath=loadTestData(&status); 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UResourceBundle *theBundle = ures_open(testdatapath, "testtypes", &status); 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t strLen =0; 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* str = ures_getStringByKey(theBundle, "testinclude",&strLen,&status); 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* uSrc = str; 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uSrcLen = strLen; 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wDestLen =0, reqLen=0, i=0; 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t uDestLen =0; 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t* wDest = NULL; 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* uDest = NULL; 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool failed = FALSE; 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Loaded string of %d UChars\n", uSrcLen); 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Could not get testinclude resource from testtypes bundle. Error: %s\n",u_errorName(status)); 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight*/ 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,-1,&status); 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_BUFFER_OVERFLOW_ERROR){ 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1)); 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wDestLen = reqLen+1; 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(wDest,wDestLen,&reqLen,uSrc,-1,&status); 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("To %d*%d-byte wchar_ts\n", reqLen,sizeof(wchar_t)); 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int j; 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(j=0;j>=0&&j<reqLen;j++) { 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(wDest[j]!=uSrc[j]) { 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Diff %04X vs %04X @ %d\n", wDest[j],uSrc[j],j); 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = 0; 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* pre-flight */ 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,-1,&status); 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status == U_BUFFER_OVERFLOW_ERROR){ 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status =U_ZERO_ERROR; 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDest = (UChar*) malloc(sizeof(UChar) * (reqLen+1)); 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_memset(uDest,0xFFFF,reqLen+1); 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uDestLen = reqLen + 1; 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(uDest, uDestLen,&reqLen,wDest,-1,&status); 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Back to %d UChars\n", reqLen); 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(U_WCHAR_IS_UTF16) 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("U_WCHAR_IS_UTF16\n"); 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif defined(U_WCHAR_IS_UTF32) 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("U_WCHAR_IS_UTF32\n"); 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("U_WCHAR_IS_idunno (not UTF)\n"); 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(reqLen!=uSrcLen) { 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error: dest len is %d but expected src len %d\n", reqLen, uSrcLen); 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i< uSrcLen; i++){ 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uDest[i] != str[i]){ 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("u_str*WCS() failed for null terminated string expected: \\u%04X got: \\u%04X at index: %i \n", str[i], uDest[i],i); 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed =TRUE; 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failed = TRUE; 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(failed){ 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS() failed \n"); 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(wDest); 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(uDest); 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* close the bundle */ 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ures_close(theBundle); 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_info("Not testing u_str*WCS because (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) and wchar is neither utf16 nor utf32"); 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strToJavaModifiedUTF8() { 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar src[]={ 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0xe1, 0xe2, 0xe3, 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe01, 0xe02, 0xe03, 0xe001, 0xe002, 0xe003, 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd800, 0xdc00, 0xdc00, 0xd800, 0, 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdbff, 0xdfff, 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0xed, 0xe0e, 0x6f 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t expected[]={ 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0xc3, 0xa1, 0xc3, 0xa2, 0xc3, 0xa3, 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xb8, 0x81, 0xe0, 0xb8, 0x82, 0xe0, 0xb8, 0x83, 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xee, 0x80, 0x81, 0xee, 0x80, 0x82, 0xee, 0x80, 0x83, 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xed, 0xa0, 0x80, 0xed, 0xb0, 0x80, 0xed, 0xb0, 0x80, 0xed, 0xa0, 0x80, 0xc0, 0x80, 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xed, 0xaf, 0xbf, 0xed, 0xbf, 0xbf, 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0xc3, 0xad, 0xe0, 0xb8, 0x8e, 0x6f 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar shortSrc[]={ 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe01, 0xe1, 0x61 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t shortExpected[]={ 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xb8, 0x81, 0xc3, 0xa1, 0x61 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar asciiNul[]={ 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t asciiNulExpected[]={ 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char dest[200]; 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *p; 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, expectedTerminatedLength; 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedTerminatedLength=(int32_t)(strstr((const char *)expected, "\xc0\x80")- 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)expected); 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), &length, 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || 0!=memcmp(dest, expected, length) || 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(normal) failed - %s\n", u_errorName(errorCode)); 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), NULL, 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=memcmp(dest, expected, LENGTHOF(expected)) || 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[LENGTHOF(expected)]!=0 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(normal, pLength=NULL) failed - %s\n", u_errorName(errorCode)); 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, LENGTHOF(expected), &length, 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_STRING_NOT_TERMINATED_WARNING || p!=dest || 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || 0!=memcmp(dest, expected, length) || 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=(char)0xff 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(tight) failed - %s\n", u_errorName(errorCode)); 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), &length, src, -1, &errorCode); 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=expectedTerminatedLength || 0!=memcmp(dest, expected, length) || 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(NUL-terminated) failed - %s\n", u_errorName(errorCode)); 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), NULL, src, -1, &errorCode); 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=memcmp(dest, expected, expectedTerminatedLength) || 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[expectedTerminatedLength]!=0 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(NUL-terminated, pLength=NULL) failed - %s\n", u_errorName(errorCode)); 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, LENGTHOF(expected)/2, &length, 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || dest[LENGTHOF(expected)/2]!=(char)0xff 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(overflow) failed - %s\n", u_errorName(errorCode)); 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(NULL, 0, &length, 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || dest[0]!=(char)0xff 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(pure preflighting) failed - %s\n", u_errorName(errorCode)); 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), &length, 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org shortSrc, LENGTHOF(shortSrc), &errorCode); 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(shortExpected) || 0!=memcmp(dest, shortExpected, length) || 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(short) failed - %s\n", u_errorName(errorCode)); 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), &length, 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org asciiNul, -1, &errorCode); 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(asciiNulExpected) || 0!=memcmp(dest, asciiNulExpected, length) || 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(asciiNul) failed - %s\n", u_errorName(errorCode)); 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, (int32_t)sizeof(dest), &length, 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 0, &errorCode); 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=0 || dest[0]!=0 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(empty) failed - %s\n", u_errorName(errorCode)); 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* illegal arguments */ 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(NULL, sizeof(dest), &length, 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=(char)0xff) { 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(dest=NULL) failed - %s\n", u_errorName(errorCode)); 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, -1, &length, 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src, LENGTHOF(src), &errorCode); 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=(char)0xff) { 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(destCapacity<0) failed - %s\n", u_errorName(errorCode)); 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, sizeof(dest), &length, 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, LENGTHOF(src), &errorCode); 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=(char)0xff) { 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(src=NULL) failed - %s\n", u_errorName(errorCode)); 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=-5; 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strToJavaModifiedUTF8(dest, sizeof(dest), &length, 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, -1, &errorCode); 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=(char)0xff) { 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(src=NULL, srcLength<0) failed - %s\n", u_errorName(errorCode)); 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void Test_strFromJavaModifiedUTF8() { 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t src[]={ 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0xc3, 0xa1, 0xc3, 0xa2, 0xc3, 0xa3, 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xb8, 0x81, 0xe0, 0xb8, 0x82, 0xe0, 0xb8, 0x83, 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xee, 0x80, 0x81, 0xee, 0x80, 0x82, 0xee, 0x80, 0x83, 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xed, 0xa0, 0x80, 0xed, 0xb0, 0x80, 0xed, 0xb0, 0x80, 0xed, 0xa0, 0x80, 0, 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xed, 0xaf, 0xbf, 0xed, 0xbf, 0xbf, 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x81, 0xc0, 0xe0, 0xb8, 0xf0, 0x90, 0x80, 0x80, /* invalid sequences */ 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0x81, 0xac, 0xe0, 0x83, 0xad, /* non-shortest forms are allowed */ 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xb8, 0x8e, 0x6f 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar expected[]={ 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0xe1, 0xe2, 0xe3, 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe01, 0xe02, 0xe03, 0xe001, 0xe002, 0xe003, 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd800, 0xdc00, 0xdc00, 0xd800, 0, 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdbff, 0xdfff, 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0xfffd, 0xfffd, 0xfffd, 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x6c, 0xed, 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0e, 0x6f 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t shortSrc[]={ 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe0, 0xb8, 0x81, 0xc3, 0xa1, 0x61 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar shortExpected[]={ 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe01, 0xe1, 0x61 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t asciiNul[]={ 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63, 0 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar asciiNulExpected[]={ 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x61, 0x62, 0x63 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const uint8_t invalid[]={ 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x81, 0xc0, 0xe0, 0xb8, 0xf0, 0x90, 0x80, 0x80 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar invalidExpectedFFFD[]={ 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, 0xfffd, 0xfffd, 0xfffd 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar invalidExpected50000[]={ 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd900, 0xdc00, 0xd900, 0xdc00, 0xd900, 0xdc00, 0xd900, 0xdc00 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar dest[200]; 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *p; 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, expectedTerminatedLength; 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numSubstitutions; 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedTerminatedLength=(int32_t)(u_strchr(expected, 0)-expected); 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || 0!=memcmp(dest, expected, length) || 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=LENGTHOF(invalidExpectedFFFD) 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(normal) failed - %s\n", u_errorName(errorCode)); 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), NULL, 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=memcmp(dest, expected, LENGTHOF(expected)) || 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[LENGTHOF(expected)]!=0 || 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=LENGTHOF(invalidExpectedFFFD) 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(normal, pLength=NULL) failed - %s\n", u_errorName(errorCode)); 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, NULL, &errorCode); 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || 0!=memcmp(dest, expected, length) || 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(normal, pNumSubstitutions=NULL) failed - %s\n", u_errorName(errorCode)); 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, LENGTHOF(expected), &length, 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_STRING_NOT_TERMINATED_WARNING || p!=dest || 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || 0!=memcmp(dest, expected, length) || 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0xffff || 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=LENGTHOF(invalidExpectedFFFD) 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(tight) failed - %s\n", u_errorName(errorCode)); 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, -1, 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=expectedTerminatedLength || 0!=memcmp(dest, expected, length) || 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(NUL-terminated) failed - %s\n", u_errorName(errorCode)); 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), NULL, 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, -1, 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0!=memcmp(dest, expected, expectedTerminatedLength) || 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[expectedTerminatedLength]!=0 || 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(NUL-terminated, pLength=NULL) failed - %s\n", u_errorName(errorCode)); 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, -1, 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, NULL, &errorCode); 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=expectedTerminatedLength || 0!=memcmp(dest, expected, length) || 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(NUL-terminated, pNumSubstitutions=NULL) failed - %s\n", u_errorName(errorCode)); 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, LENGTHOF(expected)/2, &length, 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || dest[LENGTHOF(expected)/2]!=0xffff 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(overflow) failed - %s\n", u_errorName(errorCode)); 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(NULL, 0, &length, 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(expected) || dest[0]!=0xffff 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(pure preflighting) failed - %s\n", u_errorName(errorCode)); 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)shortSrc, LENGTHOF(shortSrc), 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(shortExpected) || 0!=memcmp(dest, shortExpected, length) || 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(short) failed - %s\n", u_errorName(errorCode)); 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)asciiNul, -1, 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(asciiNulExpected) || 0!=memcmp(dest, asciiNulExpected, length) || 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(asciiNul) failed - %s\n", u_errorName(errorCode)); 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 0, 0xfffd, &numSubstitutions, &errorCode); 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=0 || dest[0]!=0 || 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(empty) failed - %s\n", u_errorName(errorCode)); 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)invalid, LENGTHOF(invalid), 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(invalidExpectedFFFD) || 0!=memcmp(dest, invalidExpectedFFFD, length) || 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=LENGTHOF(invalidExpectedFFFD) 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(invalid->fffd) failed - %s\n", u_errorName(errorCode)); 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)invalid, LENGTHOF(invalid), 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x50000, &numSubstitutions, &errorCode); 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( U_FAILURE(errorCode) || p!=dest || 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length!=LENGTHOF(invalidExpected50000) || 0!=memcmp(dest, invalidExpected50000, length) || 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest[length]!=0 || 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=LENGTHOF(invalidExpectedFFFD) /* not ...50000 */ 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(invalid->50000) failed - %s\n", u_errorName(errorCode)); 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)invalid, LENGTHOF(invalid), 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SENTINEL, &numSubstitutions, &errorCode); 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_INVALID_CHAR_FOUND || dest[0]!=0xffff || numSubstitutions!=0) { 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(invalid->error) failed - %s\n", u_errorName(errorCode)); 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, (int32_t)sizeof(dest), &length, 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SENTINEL, &numSubstitutions, &errorCode); 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( errorCode!=U_INVALID_CHAR_FOUND || 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length>=LENGTHOF(expected) || dest[LENGTHOF(expected)-1]!=0xffff || 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numSubstitutions!=0 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(normal->error) failed - %s\n", u_errorName(errorCode)); 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* illegal arguments */ 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(NULL, sizeof(dest), &length, 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(dest=NULL) failed - %s\n", u_errorName(errorCode)); 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, -1, &length, 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(destCapacity<0) failed - %s\n", u_errorName(errorCode)); 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, sizeof(dest), &length, 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, LENGTHOF(src), 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffd, &numSubstitutions, &errorCode); 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(src=NULL) failed - %s\n", u_errorName(errorCode)); 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, sizeof(dest), &length, 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, -1, 0xfffd, &numSubstitutions, &errorCode); 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(src=NULL, srcLength<0) failed - %s\n", u_errorName(errorCode)); 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, sizeof(dest), &length, 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x110000, &numSubstitutions, &errorCode); 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(subchar=U_SENTINEL) failed - %s\n", u_errorName(errorCode)); 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(dest, 0xff, sizeof(dest)); 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=numSubstitutions=-5; 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p=u_strFromJavaModifiedUTF8WithSub(dest, sizeof(dest), &length, 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (const char *)src, LENGTHOF(src), 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdfff, &numSubstitutions, &errorCode); 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || dest[0]!=0xffff) { 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(subchar is surrogate) failed - %s\n", u_errorName(errorCode)); 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test that string transformation functions permit NULL source pointer when source length==0 */ 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNullEmptySource() { 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char dest8[4]={ 3, 3, 3, 3 }; 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar dest16[4]={ 3, 3, 3, 3 }; 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 dest32[4]={ 3, 3, 3, 3 }; 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wchar_t destW[4]={ 3, 3, 3, 3 }; 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* u_strFromXyz() */ 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8(dest16, LENGTHOF(dest16), &length, NULL, 0, &errorCode); 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8(source=NULL, sourceLength=0) failed\n"); 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8WithSub(dest16, LENGTHOF(dest16), &length, NULL, 0, 0xfffd, NULL, &errorCode); 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8WithSub(source=NULL, sourceLength=0) failed\n"); 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF8Lenient(dest16, LENGTHOF(dest16), &length, NULL, 0, &errorCode); 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF8Lenient(source=NULL, sourceLength=0) failed\n"); 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32(dest16, LENGTHOF(dest16), &length, NULL, 0, &errorCode); 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32(source=NULL, sourceLength=0) failed\n"); 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromUTF32WithSub(dest16, LENGTHOF(dest16), &length, NULL, 0, 0xfffd, NULL, &errorCode); 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromUTF32WithSub(source=NULL, sourceLength=0) failed\n"); 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromJavaModifiedUTF8WithSub(dest16, LENGTHOF(dest16), &length, NULL, 0, 0xfffd, NULL, &errorCode); 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromJavaModifiedUTF8WithSub(source=NULL, sourceLength=0) failed\n"); 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* u_strToXyz() */ 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest8[0]=3; 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8(dest8, LENGTHOF(dest8), &length, NULL, 0, &errorCode); 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest8[0]!=0 || dest8[1]!=3) { 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8(source=NULL, sourceLength=0) failed\n"); 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest8[0]=3; 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF8WithSub(dest8, LENGTHOF(dest8), &length, NULL, 0, 0xfffd, NULL, &errorCode); 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest8[0]!=0 || dest8[1]!=3) { 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF8(source=NULL, sourceLength=0) failed\n"); 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest32[0]=3; 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32(dest32, LENGTHOF(dest32), &length, NULL, 0, &errorCode); 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest32[0]!=0 || dest32[1]!=3) { 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32(source=NULL, sourceLength=0) failed\n"); 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest32[0]=3; 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToUTF32WithSub(dest32, LENGTHOF(dest32), &length, NULL, 0, 0xfffd, NULL, &errorCode); 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest32[0]!=0 || dest32[1]!=3) { 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToUTF32WithSub(source=NULL, sourceLength=0) failed\n"); 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest8[0]=3; 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToJavaModifiedUTF8(dest8, LENGTHOF(dest8), &length, NULL, 0, &errorCode); 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest8[0]!=0 || dest8[1]!=3) { 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToJavaModifiedUTF8(source=NULL, sourceLength=0) failed\n"); 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if (defined(U_WCHAR_IS_UTF16) || defined(U_WCHAR_IS_UTF32)) || (!UCONFIG_NO_CONVERSION && !UCONFIG_NO_LEGACY_CONVERSION) 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dest16[0]=3; 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strFromWCS(dest16, LENGTHOF(dest16), &length, NULL, 0, &errorCode); 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || dest16[0]!=0 || dest16[1]!=3) { 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFromWCS(source=NULL, sourceLength=0) failed\n"); 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destW[0]=3; 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=3; 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strToWCS(destW, LENGTHOF(destW), &length, NULL, 0, &errorCode); 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode!=U_ZERO_ERROR || length!=0 || destW[0]!=0 || destW[1]!=3) { 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strToWCS(source=NULL, sourceLength=0) failed\n"); 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2124