1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2005-2011, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File utexttst.c 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 06/13/2005 Andy Heninger Creation 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utext.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "memory.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "string.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestAPI(void); 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addUTextTest(TestNode** root); 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruaddUTextTest(TestNode** root) 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &TestAPI , "tsutil/UTextTest/TestAPI"); 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TEST_ASSERT(x) \ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru {if ((x)==FALSE) {log_err("Test failure in file %s at line %d\n", __FILE__, __LINE__);\ 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru gFailed = TRUE;\ 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }} 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define TEST_SUCCESS(status) \ 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru {if (U_FAILURE(status)) {log_err("Test failure in file %s at line %d. Error = \"%s\"\n", \ 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru __FILE__, __LINE__, u_errorName(status)); \ 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru gFailed = TRUE;\ 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }} 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * TestAPI verify that the UText API is accessible from C programs. 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * This is not intended to be a complete test of the API functionality. That is 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in the C++ intltest program. 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * This test is intended to check that everything can be accessed and built in 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * a pure C enviornment. 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestAPI(void) { 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool gFailed = FALSE; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Open */ 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText utLoc = UTEXT_INITIALIZER; 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char * cString = "\x61\x62\x63\x64"; 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *utb; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar c; 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32(uta); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c == 0x41); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utb = utext_close(uta); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb == NULL); 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUTF8(&utLoc, cString, -1, &status); 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta == &utLoc); 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_close(&utLoc); 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta == &utLoc); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* utext_clone() */ 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t len; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *utb; 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utb = utext_clone(NULL, uta, FALSE, FALSE, &status); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb != NULL); 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb != uta); 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = utext_nativeLength(uta); 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(len == u_strlen(uString)); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(utb); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* basic access functions */ 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar32 c; 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t len; 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool b; 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t i; 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta!=NULL); 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isLengthExpensive(uta); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = utext_nativeLength(uta); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(len == u_strlen(uString)); 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isLengthExpensive(uta); 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==FALSE); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_char32At(uta, 0); 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32(uta); 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_previous32(uta); 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32From(uta, 1); 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32From(uta, u_strlen(uString)); 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==U_SENTINEL); 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_previous32From(uta, 2); 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == 1); 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_setNativeIndex(uta, 0); 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, 1); 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==1); 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, u_strlen(uString)-1); 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==u_strlen(uString)); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, 1); 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==FALSE); 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==u_strlen(uString)); 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_setNativeIndex(uta, 0); 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_NEXT32(uta); 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_PREVIOUS32(uta); 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_PREVIOUS32(uta); 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==U_SENTINEL); 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* 18585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * UText opened on a NULL string with zero length 18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UText *uta; 18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar32 c; 18985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho uta = utext_openUChars(NULL, NULL, 0, &status); 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_SUCCESS(status); 19385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho c = UTEXT_NEXT32(uta); 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_ASSERT(c == U_SENTINEL); 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utext_close(uta); 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho uta = utext_openUTF8(NULL, NULL, 0, &status); 19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_SUCCESS(status); 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho c = UTEXT_NEXT32(uta); 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_ASSERT(c == U_SENTINEL); 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utext_close(uta); 20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho { 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * extract 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar buf[100]; 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i; 213b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test pinning of input bounds */ 214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar uString2[] = {0x41, 0x42, 0x43, 0x44, 0x45, 215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x46, 0x47, 0x48, 0x49, 0x4A, 0}; 216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar * uString2Ptr = uString2 + 5; 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_extract(uta, 0, 100, NULL, 0, &status); 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status==U_BUFFER_OVERFLOW_ERROR); 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == u_strlen(uString)); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memset(buf, 0, sizeof(buf)); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_extract(uta, 0, 100, buf, 100, &status); 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == u_strlen(uString)); 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = u_strcmp(uString, buf); 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == 0); 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 235b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test pinning of input bounds */ 237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 238b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uta = utext_openUChars(NULL, uString2Ptr, -1, &status); 239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_SUCCESS(status); 240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 241b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 242b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho memset(buf, 0, sizeof(buf)); 243b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho i = utext_extract(uta, -3, 20, buf, 100, &status); 244b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_SUCCESS(status); 245b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i == u_strlen(uString2Ptr)); 246b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho i = u_strcmp(uString2Ptr, buf); 247b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i == 0); 248b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho utext_close(uta); 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copy, Replace, isWritable 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Can't create an editable UText from plain C, so all we 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * can easily do is check that errors returned. 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool b; 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isWritable(uta); 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b == FALSE); 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_hasMetaData(uta); 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b == FALSE); 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_replace(uta, 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 1, /* start, limit */ 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uString, -1, /* replacement, replacement length */ 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &status); 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status == U_NO_WRITE_PERMISSION); 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_copy(uta, 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 1, /* start, limit */ 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 2, /* destination index */ 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru FALSE, /* move flag */ 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &status); 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status == U_NO_WRITE_PERMISSION); 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 291