1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 359d709d503bab6e2b61931737e662dd293b40578ccornelius * Copyright (c) 2005-2013, 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; 6159d709d503bab6e2b61931737e662dd293b40578ccornelius (void)gFailed; /* Suppress set but not used warning. */ 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Open */ 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText utLoc = UTEXT_INITIALIZER; 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char * cString = "\x61\x62\x63\x64"; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *utb; 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar c; 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32(uta); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c == 0x41); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utb = utext_close(uta); 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb == NULL); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUTF8(&utLoc, cString, -1, &status); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta == &utLoc); 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_close(&utLoc); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta == &utLoc); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* utext_clone() */ 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t len; 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *utb; 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utb = utext_clone(NULL, uta, FALSE, FALSE, &status); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb != NULL); 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(utb != uta); 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = utext_nativeLength(uta); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(len == u_strlen(uString)); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(utb); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* basic access functions */ 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar32 c; 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t len; 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool b; 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int64_t i; 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(uta!=NULL); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isLengthExpensive(uta); 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru len = utext_nativeLength(uta); 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(len == u_strlen(uString)); 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isLengthExpensive(uta); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==FALSE); 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_char32At(uta, 0); 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32(uta); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_previous32(uta); 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32From(uta, 1); 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_next32From(uta, u_strlen(uString)); 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==U_SENTINEL); 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_previous32From(uta, 2); 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == 1); 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_setNativeIndex(uta, 0); 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, 1); 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==1); 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, u_strlen(uString)-1); 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==TRUE); 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==u_strlen(uString)); 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_moveIndex32(uta, 1); 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b==FALSE); 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_getNativeIndex(uta); 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i==u_strlen(uString)); 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_setNativeIndex(uta, 0); 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_NEXT32(uta); 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = utext_current32(uta); 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[1]); 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_PREVIOUS32(uta); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==uString[0]); 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru c = UTEXT_PREVIOUS32(uta); 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(c==U_SENTINEL); 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* 18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * UText opened on a NULL string with zero length 18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UText *uta; 18985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar32 c; 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho uta = utext_openUChars(NULL, NULL, 0, &status); 19385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_SUCCESS(status); 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho c = UTEXT_NEXT32(uta); 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_ASSERT(c == U_SENTINEL); 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utext_close(uta); 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho uta = utext_openUTF8(NULL, NULL, 0, &status); 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_SUCCESS(status); 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho c = UTEXT_NEXT32(uta); 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho TEST_ASSERT(c == U_SENTINEL); 20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utext_close(uta); 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho { 20785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * extract 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar buf[100]; 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i; 214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test pinning of input bounds */ 215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar uString2[] = {0x41, 0x42, 0x43, 0x44, 0x45, 216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x46, 0x47, 0x48, 0x49, 0x4A, 0}; 217b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar * uString2Ptr = uString2 + 5; 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_extract(uta, 0, 100, NULL, 0, &status); 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status==U_BUFFER_OVERFLOW_ERROR); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == u_strlen(uString)); 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memset(buf, 0, sizeof(buf)); 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = utext_extract(uta, 0, 100, buf, 100, &status); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == u_strlen(uString)); 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru i = u_strcmp(uString, buf); 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(i == 0); 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test pinning of input bounds */ 238b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uta = utext_openUChars(NULL, uString2Ptr, -1, &status); 240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_SUCCESS(status); 241b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 242b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 243b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho memset(buf, 0, sizeof(buf)); 244b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho i = utext_extract(uta, -3, 20, buf, 100, &status); 245b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_SUCCESS(status); 246b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i == u_strlen(uString2Ptr)); 247b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho i = u_strcmp(uString2Ptr, buf); 248b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i == 0); 249b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho utext_close(uta); 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Copy, Replace, isWritable 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Can't create an editable UText from plain C, so all we 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * can easily do is check that errors returned. 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UText *uta; 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar uString[] = {0x41, 0x42, 0x43, 0}; 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool b; 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uta = utext_openUChars(NULL, uString, -1, &status); 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_SUCCESS(status); 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_isWritable(uta); 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b == FALSE); 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru b = utext_hasMetaData(uta); 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(b == FALSE); 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_replace(uta, 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 1, /* start, limit */ 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uString, -1, /* replacement, replacement length */ 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &status); 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status == U_NO_WRITE_PERMISSION); 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_copy(uta, 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 1, /* start, limit */ 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 2, /* destination index */ 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru FALSE, /* move flag */ 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &status); 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TEST_ASSERT(status == U_NO_WRITE_PERMISSION); 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru utext_close(uta); 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 292