Index: icu46/source/test/cintltst/utexttst.c |
=================================================================== |
--- icu46/source/test/cintltst/utexttst.c (revision 0) |
+++ icu46/source/test/cintltst/utexttst.c (revision 0) |
@@ -0,0 +1,272 @@ |
+/******************************************************************** |
+ * COPYRIGHT: |
+ * Copyright (c) 2005-2009, International Business Machines Corporation and |
+ * others. All Rights Reserved. |
+ ********************************************************************/ |
+/* |
+* File utexttst.c |
+* |
+* Modification History: |
+* |
+* Date Name Description |
+* 06/13/2005 Andy Heninger Creation |
+******************************************************************************* |
+*/ |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/utext.h" |
+#include "unicode/ustring.h" |
+#include "cintltst.h" |
+#include "memory.h" |
+#include "string.h" |
+ |
+ |
+static void TestAPI(void); |
+void addUTextTest(TestNode** root); |
+ |
+ |
+void |
+addUTextTest(TestNode** root) |
+{ |
+ addTest(root, &TestAPI , "tsutil/UTextTest/TestAPI"); |
+} |
+ |
+ |
+#define TEST_ASSERT(x) \ |
+ {if ((x)==FALSE) {log_err("Test failure in file %s at line %d\n", __FILE__, __LINE__);\ |
+ gFailed = TRUE;\ |
+ }} |
+ |
+ |
+#define TEST_SUCCESS(status) \ |
+ {if (U_FAILURE(status)) {log_err("Test failure in file %s at line %d. Error = \"%s\"\n", \ |
+ __FILE__, __LINE__, u_errorName(status)); \ |
+ gFailed = TRUE;\ |
+ }} |
+ |
+ |
+ |
+/* |
+ * TestAPI verify that the UText API is accessible from C programs. |
+ * This is not intended to be a complete test of the API functionality. That is |
+ * in the C++ intltest program. |
+ * This test is intended to check that everything can be accessed and built in |
+ * a pure C enviornment. |
+ */ |
+ |
+ |
+static void TestAPI(void) { |
+ UErrorCode status = U_ZERO_ERROR; |
+ UBool gFailed = FALSE; |
+ |
+ /* Open */ |
+ { |
+ UText utLoc = UTEXT_INITIALIZER; |
+ const char * cString = "\x61\x62\x63\x64"; |
+ UChar uString[] = {0x41, 0x42, 0x43, 0}; |
+ UText *uta; |
+ UText *utb; |
+ UChar c; |
+ |
+ uta = utext_openUChars(NULL, uString, -1, &status); |
+ TEST_SUCCESS(status); |
+ c = utext_next32(uta); |
+ TEST_ASSERT(c == 0x41); |
+ utb = utext_close(uta); |
+ TEST_ASSERT(utb == NULL); |
+ |
+ uta = utext_openUTF8(&utLoc, cString, -1, &status); |
+ TEST_SUCCESS(status); |
+ TEST_ASSERT(uta == &utLoc); |
+ |
+ uta = utext_close(&utLoc); |
+ TEST_ASSERT(uta == &utLoc); |
+ } |
+ |
+ /* utext_clone() */ |
+ { |
+ UChar uString[] = {0x41, 0x42, 0x43, 0}; |
+ int64_t len; |
+ UText *uta; |
+ UText *utb; |
+ |
+ status = U_ZERO_ERROR; |
+ uta = utext_openUChars(NULL, uString, -1, &status); |
+ TEST_SUCCESS(status); |
+ utb = utext_clone(NULL, uta, FALSE, FALSE, &status); |
+ TEST_SUCCESS(status); |
+ TEST_ASSERT(utb != NULL); |
+ TEST_ASSERT(utb != uta); |
+ len = utext_nativeLength(uta); |
+ TEST_ASSERT(len == u_strlen(uString)); |
+ utext_close(uta); |
+ utext_close(utb); |
+ } |
+ |
+ /* basic access functions */ |
+ { |
+ UChar uString[] = {0x41, 0x42, 0x43, 0}; |
+ UText *uta; |
+ UChar32 c; |
+ int64_t len; |
+ UBool b; |
+ int64_t i; |
+ |
+ status = U_ZERO_ERROR; |
+ uta = utext_openUChars(NULL, uString, -1, &status); |
+ TEST_ASSERT(uta!=NULL); |
+ TEST_SUCCESS(status); |
+ b = utext_isLengthExpensive(uta); |
+ TEST_ASSERT(b==TRUE); |
+ len = utext_nativeLength(uta); |
+ TEST_ASSERT(len == u_strlen(uString)); |
+ b = utext_isLengthExpensive(uta); |
+ TEST_ASSERT(b==FALSE); |
+ |
+ c = utext_char32At(uta, 0); |
+ TEST_ASSERT(c==uString[0]); |
+ |
+ c = utext_current32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ |
+ c = utext_next32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ c = utext_current32(uta); |
+ TEST_ASSERT(c==uString[1]); |
+ |
+ c = utext_previous32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ c = utext_current32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ |
+ c = utext_next32From(uta, 1); |
+ TEST_ASSERT(c==uString[1]); |
+ c = utext_next32From(uta, u_strlen(uString)); |
+ TEST_ASSERT(c==U_SENTINEL); |
+ |
+ c = utext_previous32From(uta, 2); |
+ TEST_ASSERT(c==uString[1]); |
+ i = utext_getNativeIndex(uta); |
+ TEST_ASSERT(i == 1); |
+ |
+ utext_setNativeIndex(uta, 0); |
+ b = utext_moveIndex32(uta, 1); |
+ TEST_ASSERT(b==TRUE); |
+ i = utext_getNativeIndex(uta); |
+ TEST_ASSERT(i==1); |
+ |
+ b = utext_moveIndex32(uta, u_strlen(uString)-1); |
+ TEST_ASSERT(b==TRUE); |
+ i = utext_getNativeIndex(uta); |
+ TEST_ASSERT(i==u_strlen(uString)); |
+ |
+ b = utext_moveIndex32(uta, 1); |
+ TEST_ASSERT(b==FALSE); |
+ i = utext_getNativeIndex(uta); |
+ TEST_ASSERT(i==u_strlen(uString)); |
+ |
+ utext_setNativeIndex(uta, 0); |
+ c = UTEXT_NEXT32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ c = utext_current32(uta); |
+ TEST_ASSERT(c==uString[1]); |
+ |
+ c = UTEXT_PREVIOUS32(uta); |
+ TEST_ASSERT(c==uString[0]); |
+ c = UTEXT_PREVIOUS32(uta); |
+ TEST_ASSERT(c==U_SENTINEL); |
+ |
+ |
+ utext_close(uta); |
+ } |
+ |
+ { |
+ /* |
+ * UText opened on a NULL string with zero length |
+ */ |
+ UText *uta; |
+ UChar32 c; |
+ |
+ status = U_ZERO_ERROR; |
+ uta = utext_openUChars(NULL, NULL, 0, &status); |
+ TEST_SUCCESS(status); |
+ c = UTEXT_NEXT32(uta); |
+ TEST_ASSERT(c == U_SENTINEL); |
+ utext_close(uta); |
+ |
+ uta = utext_openUTF8(NULL, NULL, 0, &status); |
+ TEST_SUCCESS(status); |
+ c = UTEXT_NEXT32(uta); |
+ TEST_ASSERT(c == U_SENTINEL); |
+ utext_close(uta); |
+ } |
+ |
+ |
+ { |
+ /* |
+ * extract |
+ */ |
+ UText *uta; |
+ UChar uString[] = {0x41, 0x42, 0x43, 0}; |
+ UChar buf[100]; |
+ int32_t i; |
+ |
+ status = U_ZERO_ERROR; |
+ uta = utext_openUChars(NULL, uString, -1, &status); |
+ TEST_SUCCESS(status); |
+ |
+ status = U_ZERO_ERROR; |
+ i = utext_extract(uta, 0, 100, NULL, 0, &status); |
+ TEST_ASSERT(status==U_BUFFER_OVERFLOW_ERROR); |
+ TEST_ASSERT(i == u_strlen(uString)); |
+ |
+ status = U_ZERO_ERROR; |
+ memset(buf, 0, sizeof(buf)); |
+ i = utext_extract(uta, 0, 100, buf, 100, &status); |
+ TEST_SUCCESS(status); |
+ TEST_ASSERT(i == u_strlen(uString)); |
+ i = u_strcmp(uString, buf); |
+ TEST_ASSERT(i == 0); |
+ utext_close(uta); |
+ } |
+ |
+ { |
+ /* |
+ * Copy, Replace, isWritable |
+ * Can't create an editable UText from plain C, so all we |
+ * can easily do is check that errors returned. |
+ */ |
+ UText *uta; |
+ UChar uString[] = {0x41, 0x42, 0x43, 0}; |
+ UBool b; |
+ |
+ status = U_ZERO_ERROR; |
+ uta = utext_openUChars(NULL, uString, -1, &status); |
+ TEST_SUCCESS(status); |
+ |
+ b = utext_isWritable(uta); |
+ TEST_ASSERT(b == FALSE); |
+ |
+ b = utext_hasMetaData(uta); |
+ TEST_ASSERT(b == FALSE); |
+ |
+ utext_replace(uta, |
+ 0, 1, /* start, limit */ |
+ uString, -1, /* replacement, replacement length */ |
+ &status); |
+ TEST_ASSERT(status == U_NO_WRITE_PERMISSION); |
+ |
+ |
+ utext_copy(uta, |
+ 0, 1, /* start, limit */ |
+ 2, /* destination index */ |
+ FALSE, /* move flag */ |
+ &status); |
+ TEST_ASSERT(status == U_NO_WRITE_PERMISSION); |
+ |
+ utext_close(uta); |
+ } |
+ |
+ |
+} |
+ |
Property changes on: icu46/source/test/cintltst/utexttst.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |