16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2004-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 reapits.c 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*********************************************************************************/ 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*C API TEST FOR Regular Expressions */ 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* This is an API test for ICU regular expressions in C. It doesn't test very many cases, and doesn't 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* try to test the full functionality. It just calls each function and verifies that it 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* works on a basic level. 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* More complete testing of regular expression functionality is done with the C++ tests. 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**/ 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_REGULAR_EXPRESSIONS 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string.h> 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uregex.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utext.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) { \ 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orglog_data_err("Failure at file %s, line %d, error = %s (Are you missing data?)\n", __FILE__, __LINE__, u_errorName(status));}} 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT(expr) {if ((expr)==FALSE) { \ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orglog_data_err("Test Failure at file %s, line %d (Are you missing data?)\n", __FILE__, __LINE__);}} 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TEST_SETUP and TEST_TEARDOWN 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * macros to handle the boilerplate around setting up regex test cases. 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parameteres to setup: 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern: The regex pattern, a (char *) null terminated C string. 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * testString: The string data, also a (char *) C string. 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * flags: Regex flags to set when compiling the pattern 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Put arbitrary test code between SETUP and TEARDOWN. 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 're" is the compiled, ready-to-go regular expression. 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_SETUP(pattern, testString, flags) { \ 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *srcString = NULL; \ 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; \ 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(pattern, flags, NULL, &status); \ 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); \ 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srcString = (UChar *)malloc((strlen(testString)+2)*sizeof(UChar)); \ 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(srcString, testString, strlen(testString)+1); \ 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, srcString, -1, &status); \ 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); \ 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_TEARDOWN \ 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } \ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); \ 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); \ 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(srcString); \ 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param expected utf-8 array of bytes to be expected 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void test_assert_string(const char *expected, const UChar *actual, UBool nulTerm, const char *file, int line) { 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buf_inside_macro[120]; 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = (int32_t)strlen(expected); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool success; 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (nulTerm) { 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrncpy(buf_inside_macro, (actual), len+1); 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buf_inside_macro[len+2] = 0; 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = (strcmp((expected), buf_inside_macro) == 0); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrncpy(buf_inside_macro, (actual), len); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buf_inside_macro[len+1] = 0; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = (strncmp((expected), buf_inside_macro, len) == 0); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (success == FALSE) { 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failure at file %s, line %d, expected \"%s\", got \"%s\"\n", 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org file, line, (expected), buf_inside_macro); 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT_STRING(expected, actual, nulTerm) test_assert_string(expected, actual, nulTerm, __FILE__, __LINE__) 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool equals_utf8_utext(const char *utf8, UText *utext) { 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t u8i = 0; 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 u8c = 0; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 utc = 0; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool stringsEqual = TRUE; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(utext, 0); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (;;) { 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U8_NEXT_UNSAFE(utf8, u8i, u8c); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utc = utext_next32(utext); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u8c == 0 && utc == U_SENTINEL) { 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u8c != utc || u8c == 0) { 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org stringsEqual = FALSE; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return stringsEqual; 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void test_assert_utext(const char *expected, UText *actual, const char *file, int line) { 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(actual, 0); 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!equals_utf8_utext(expected, actual)) { 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failure at file %s, line %d, expected \"%s\", got \"", file, line, expected); 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c = utext_next32From(actual, 0); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (c != U_SENTINEL) { 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (0x20<c && c <0x7e) { 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%c", c); 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%#x", c); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c = UTEXT_NEXT32(actual); 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("\"\n"); 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TEST_ASSERT_UTEXT(const char *expected, const UText *actual) 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note: Expected is a UTF-8 encoded string, _not_ the system code page. 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT_UTEXT(expected, actual) test_assert_utext(expected, actual, __FILE__, __LINE__) 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool testUTextEqual(UText *uta, UText *utb) { 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 ca = 0; 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 cb = 0; 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(uta, 0); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(utb, 0); 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ca = utext_next32(uta); 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cb = utext_next32(utb); 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ca != cb) { 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } while (ca != U_SENTINEL); 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ca == cb; 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRegexCAPI(void); 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBug4315(void); 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUTextAPI(void); 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRefreshInput(void); 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBug8421(void); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addURegexTest(TestNode** root); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addURegexTest(TestNode** root) 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestRegexCAPI, "regex/TestRegexCAPI"); 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBug4315, "regex/TestBug4315"); 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUTextAPI, "regex/TestUTextAPI"); 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestRefreshInput, "regex/TestRefreshInput"); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBug8421, "regex/TestBug8421"); 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Call back function and context struct used for testing 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * regular expression user callbacks. This test is mostly the same as 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the corresponding C++ test in intltest. 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct callBackContext { 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t maxCalls; 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numCalls; 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lastSteps; 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} callBackContext; 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool U_EXPORT2 U_CALLCONV 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestCallbackFn(const void *context, int32_t steps) { 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org callBackContext *info = (callBackContext *)context; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (info->lastSteps+1 != steps) { 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("incorrect steps in callback. Expected %d, got %d\n", info->lastSteps+1, steps); 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org info->lastSteps = steps; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org info->numCalls++; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (info->numCalls < info->maxCalls); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Regular Expression C API Tests 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRegexCAPI(void) { 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *re; 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pat[200]; 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *minus1; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(&minus1, -1, sizeof(minus1)); 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Mimimalist open/close */ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "abc*", sizeof(pat)/2); 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, 0, &status); 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Failed to open regular expression, %s:%d, error is \"%s\" (Are you missing data?)\n", __FILE__, __LINE__, u_errorName(status)); 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Open with all flag values set */ 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UREGEX_CASE_INSENSITIVE | UREGEX_COMMENTS | UREGEX_DOTALL | UREGEX_MULTILINE | UREGEX_UWORD | UREGEX_LITERAL, 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, &status); 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Open with an invalid flag */ 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0x40000000, 0, &status); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_REGEX_INVALID_FLAG); 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Open with an unimplemented flag */ 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, UREGEX_CANON_EQ, 0, &status); 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_REGEX_UNIMPLEMENTED); 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* openC with an invalid parameter */ 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(NULL, 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UREGEX_CASE_INSENSITIVE | UREGEX_COMMENTS | UREGEX_DOTALL | UREGEX_MULTILINE | UREGEX_UWORD, 0, &status); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR && re == NULL); 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* openC with an invalid parameter */ 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_USELESS_COLLATOR_ERROR; 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(NULL, 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UREGEX_CASE_INSENSITIVE | UREGEX_COMMENTS | UREGEX_DOTALL | UREGEX_MULTILINE | UREGEX_UWORD, 0, &status); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_USELESS_COLLATOR_ERROR && re == NULL); 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* openC open from a C string */ 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *p; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len; 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc*", 0, 0, &status); 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p = uregex_pattern(re, &len, &status); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS above should change too... */ 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "abc*", sizeof(pat)/2); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strcmp(pat, p) == 0); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(len==(int32_t)strlen("abc*")); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* TODO: Open with ParseError parameter */ 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * clone 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone1; 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone2; 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone3; 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testString1[30]; 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testString2[30]; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc*", 0, 0, &status); 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone1 = uregex_clone(re, &status); 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone1 != NULL); 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone2 = uregex_clone(re, &status); 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone2 != NULL); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone3 = uregex_clone(clone2, &status); 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone3 != NULL); 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(testString1, "abcccd", sizeof(pat)/2); 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(testString2, "xxxabcccd", sizeof(pat)/2); 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(clone1, testString1, -1, &status); 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(clone1, 0, &status); 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(clone2, testString2, -1, &status); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(clone2, 0, &status); 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==FALSE); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(clone2, 0, &status); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone1); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone2); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone3); 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern() 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *resultPat; 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLen; 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "hello", sizeof(pat)/2); 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultPat = uregex_pattern(re, &resultLen, &status); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS above should change too... */ 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultLen == -1); 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strcmp(resultPat, pat) == 0); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, 3, 0, NULL, &status); 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultPat = uregex_pattern(re, &resultLen, &status); 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS above should change too... */ 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultLen == 3); 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strncmp(resultPat, pat, 3) == 0); 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strlen(resultPat) == 3); 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * flags() 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t t; 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t = uregex_flags(re, &status); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(t == 0); 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t = uregex_flags(re, &status); 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(t == 0); 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, UREGEX_CASE_INSENSITIVE | UREGEX_DOTALL, NULL, &status); 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org t = uregex_flags(re, &status); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(t == (UREGEX_CASE_INSENSITIVE | UREGEX_DOTALL)); 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * setText() and lookingAt() 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[50]; 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[50]; 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "abcccd", sizeof(text1)/2); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "abcccxd", sizeof(text2)/2); 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "abc*d", sizeof(pat)/2); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Operation before doing a setText should fail... */ 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_lookingAt(re, 0, &status); 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT( status== U_REGEX_INVALID_STATE); 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, -1, &status); 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, 5, &status); 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, 6, &status); 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getText() 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[50]; 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[50]; 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *result; 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength; 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "abcccd", sizeof(text1)/2); 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "abcccxd", sizeof(text2)/2); 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "abc*d", sizeof(pat)/2); 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_getText(re, &textLength, &status); 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == text1); 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(textLength == -1); 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, 7, &status); 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_getText(re, &textLength, &status); 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == text2); 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(textLength == 7); 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, 4, &status); 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_getText(re, &textLength, &status); 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == text2); 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(textLength == 4); 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * matches() 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[50]; 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int len; 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar nullString[] = {0,0,0}; 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "abcccde", sizeof(text1)/2); 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "abc*d", sizeof(pat)/2); 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 0, &status); 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, 6, &status); 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 0, &status); 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, 6, &status); 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 1, &status); 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(".?", 0, NULL, &status); 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = u_strlen(text1); 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, len, &status); 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, nullString, -1, &status); 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 0, &status); 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * lookingAt() Used in setText test. 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * find(), findNext, start, end, reset 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[50]; 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "012rx5rx890rxrx...", sizeof(text1)/2); 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("rx", 0, NULL, &status); 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 0, &status); 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 3); 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 5); 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 9, &status); 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 11); 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 13); 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 14, &status); 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_reset(re, 0, &status); 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 3); 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 5); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 6); 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 8); 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_reset(re, 12, &status); 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 13); 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 15); 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * groupCount 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t result; 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc", 0, NULL, &status); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_groupCount(re, &status); 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == 0); 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc(def)(ghi(j))", 0, NULL, &status); 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_groupCount(re, &status); 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == 3); 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * group() 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[80]; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultSz; 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "noise abc interior def, and this is off the end", sizeof(text1)/2); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc(.*?)def", 0, NULL, &status); 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 0, &status); 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture Group 0, the full match. Should succeed. */ 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_group(re, 0, buf, sizeof(buf)/2, &status); 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("abc interior def", buf, TRUE); 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("abc interior def")); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture group #1. Should succeed. */ 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_group(re, 1, buf, sizeof(buf)/2, &status); 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" interior ", buf, TRUE); 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen(" interior ")); 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture group out of range. Error. */ 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_group(re, 2, buf, sizeof(buf)/2, &status); 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_INDEX_OUTOFBOUNDS_ERROR); 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* NULL buffer, pure pre-flight */ 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_group(re, 0, NULL, 0, &status); 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("abc interior def")); 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Too small buffer, truncated string */ 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_group(re, 0, buf, 5, &status); 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("abc i", buf, FALSE); 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[5] == (UChar)0xffff); 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("abc interior def")); 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Output string just fits buffer, no NUL term. */ 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_group(re, 0, buf, (int32_t)strlen("abc interior def"), &status); 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("abc interior def", buf, FALSE); 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("abc interior def")); 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[strlen("abc interior def")] == (UChar)0xffff); 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Regions 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* SetRegion(), getRegion() do something */ 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*", "0123456789ABCDEF", 0) 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar resultString[40]; 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_regionStart(re, &status) == 0); 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_regionEnd(re, &status) == 16); 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 3, 6, &status); 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_regionStart(re, &status) == 3); 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_regionEnd(re, &status) == 6); 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status)); 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_group(re, 0, resultString, sizeof(resultString)/2, &status) == 3) 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("345", resultString, TRUE); 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* find(start=-1) uses regions */ 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*", "0123456789ABCDEF", 0); 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == TRUE); 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 4); 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 6); 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* find (start >=0) does not use regions */ 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*", "0123456789ABCDEF", 0); 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, 0, &status) == TRUE); 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 0); 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 16); 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* findNext() obeys regions */ 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".", "0123456789ABCDEF", 0); 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re,&status) == TRUE); 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 4); 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status) == TRUE); 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 5); 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status) == FALSE); 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* matches(start=-1) uses regions */ 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Also, verify that non-greedy *? succeeds in finding the full match. */ 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*?", "0123456789ABCDEF", 0); 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_matches(re, -1, &status) == TRUE); 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 4); 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 6); 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* matches (start >=0) does not use regions */ 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*?", "0123456789ABCDEF", 0); 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_matches(re, 0, &status) == TRUE); 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 0); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 16); 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* lookingAt(start=-1) uses regions */ 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Also, verify that non-greedy *? finds the first (shortest) match. */ 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*?", "0123456789ABCDEF", 0); 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_lookingAt(re, -1, &status) == TRUE); 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 4); 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 4); 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* lookingAt (start >=0) does not use regions */ 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP(".*?", "0123456789ABCDEF", 0); 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 4, 6, &status); 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_lookingAt(re, 0, &status) == TRUE); 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 0); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 0); 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* hitEnd() */ 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("[a-f]*", "abcdefghij", 0); 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, 0, &status) == TRUE); 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hitEnd(re, &status) == FALSE); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("[a-f]*", "abcdef", 0); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, 0, &status) == TRUE); 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hitEnd(re, &status) == TRUE); 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* requireEnd */ 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abcd", "abcd", 0); 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, 0, &status) == TRUE); 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_requireEnd(re, &status) == FALSE); 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abcd$", "abcd", 0); 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, 0, &status) == TRUE); 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_requireEnd(re, &status) == TRUE); 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* anchoringBounds */ 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abc$", "abcdef", 0); 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hasAnchoringBounds(re, &status) == TRUE); 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_useAnchoringBounds(re, FALSE, &status); 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hasAnchoringBounds(re, &status) == FALSE); 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == FALSE); 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_useAnchoringBounds(re, TRUE, &status); 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 0, 3, &status); 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == TRUE); 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 3); 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Transparent Bounds */ 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abc(?=def)", "abcdef", 0); 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hasTransparentBounds(re, &status) == FALSE); 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_useTransparentBounds(re, TRUE, &status); 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_hasTransparentBounds(re, &status) == TRUE); 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_useTransparentBounds(re, FALSE, &status); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == TRUE); /* No Region */ 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setRegion(re, 0, 3, &status); 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == FALSE); /* with region, opaque bounds */ 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_useTransparentBounds(re, TRUE, &status); 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_find(re, -1, &status) == TRUE); /* with region, transparent bounds */ 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 3); 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replaceFirst() 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar replText[80]; 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[80]; 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultSz; 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "Replace xaax x1x x...x.", sizeof(text1)/2); 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(replText, "<$1>", sizeof(replText)/2); 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("x(.*?)x", 0, NULL, &status); 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Normal case, with match */ 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, buf, sizeof(buf)/2, &status); 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("Replace <aa> x1x x...x.", buf, TRUE); 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("Replace xaax x1x x...x.")); 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* No match. Text should copy to output with no changes. */ 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, -1, &status); 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, buf, sizeof(buf)/2, &status); 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("No match here.", buf, TRUE); 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("No match here.")); 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Match, output just fills buffer, no termination warning. */ 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, buf, strlen("Replace <aa> x1x x...x."), &status); 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("Replace <aa> x1x x...x.", buf, FALSE); 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("Replace xaax x1x x...x.")); 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[resultSz] == (UChar)0xffff); 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Do the replaceFirst again, without first resetting anything. 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Should give the same results. 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, buf, strlen("Replace <aa> x1x x...x."), &status); 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("Replace <aa> x1x x...x.", buf, FALSE); 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("Replace xaax x1x x...x.")); 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[resultSz] == (UChar)0xffff); 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* NULL buffer, zero buffer length */ 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, NULL, 0, &status); 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("Replace xaax x1x x...x.")); 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Buffer too small by one */ 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSz = uregex_replaceFirst(re, replText, -1, buf, strlen("Replace <aa> x1x x...x.")-1, &status); 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("Replace <aa> x1x x...x", buf, FALSE); 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSz == (int32_t)strlen("Replace xaax x1x x...x.")); 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[resultSz] == (UChar)0xffff); 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replaceAll() 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; /* "Replace xaax x1x x...x." */ 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; /* "No match Here" */ 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar replText[80]; /* "<$1>" */ 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar replText2[80]; /* "<<$1>>" */ 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char * pattern = "x(.*?)x"; 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char * expectedResult = "Replace <aa> <1> <...>."; 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char * expectedResult2 = "Replace <<aa>> <<1>> <<...>>."; 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[80]; 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultSize; 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedResultSize; 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t expectedResultSize2; 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "Replace xaax x1x x...x.", sizeof(text1)/2); 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(replText, "<$1>", sizeof(replText)/2); 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(replText2, "<<$1>>", sizeof(replText2)/2); 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedResultSize = strlen(expectedResult); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectedResultSize2 = strlen(expectedResult2); 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(pattern, 0, NULL, &status); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Normal case, with match */ 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, buf, sizeof(buf)/2, &status); 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(expectedResult, buf, TRUE); 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == expectedResultSize); 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* No match. Text should copy to output with no changes. */ 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, -1, &status); 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, buf, sizeof(buf)/2, &status); 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("No match here.", buf, TRUE); 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == u_strlen(text2)); 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Match, output just fills buffer, no termination warning. */ 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, buf, expectedResultSize, &status); 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(expectedResult, buf, FALSE); 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == expectedResultSize); 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[resultSize] == (UChar)0xffff); 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Do the replaceFirst again, without first resetting anything. 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Should give the same results. 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, buf, strlen("Replace xaax x1x x...x."), &status); 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_STRING_NOT_TERMINATED_WARNING); 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("Replace <aa> <1> <...>.", buf, FALSE); 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == (int32_t)strlen("Replace <aa> <1> <...>.")); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[resultSize] == (UChar)0xffff); 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* NULL buffer, zero buffer length */ 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, NULL, 0, &status); 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == (int32_t)strlen("Replace <aa> <1> <...>.")); 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Buffer too small. Try every size, which will tickle edge cases 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in uregex_appendReplacement (used by replaceAll) */ 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<expectedResultSize; i++) { 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char expected[80]; 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText, -1, buf, i, &status); 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(expected, expectedResult); 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected[i] = 0; 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(expected, buf, FALSE); 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == expectedResultSize); 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[i] == (UChar)0xffff); 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Buffer too small. Same as previous test, except this time the replacement 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * text is longer than the match capture group, making the length of the complete 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replacement longer than the original string. 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<expectedResultSize2; i++) { 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char expected[80]; 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(buf, -1, sizeof(buf)); 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultSize = uregex_replaceAll(re, replText2, -1, buf, i, &status); 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(expected, expectedResult2); 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected[i] = 0; 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(expected, buf, FALSE); 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultSize == expectedResultSize2); 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(buf[i] == (UChar)0xffff); 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * appendReplacement() 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[100]; 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar repl[100]; 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[100]; 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *bufPtr; 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bufCap; 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(".*", 0, 0, &status); 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text, "whatever", sizeof(text)/2); 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(repl, "some other", sizeof(repl)/2); 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text, -1, &status); 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* match covers whole target string */ 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_find(re, 0, &status); 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufPtr = buf; 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufCap = sizeof(buf) / 2; 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_appendReplacement(re, repl, -1, &bufPtr, &bufCap, &status); 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("some other", buf, TRUE); 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Match has \u \U escapes */ 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_find(re, 0, &status); 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufPtr = buf; 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufCap = sizeof(buf) / 2; 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(repl, "abc\\u0041\\U00000042 \\\\ $ \\abc", sizeof(repl)/2); 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_appendReplacement(re, repl, -1, &bufPtr, &bufCap, &status); 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("abcAB \\ $ abc", buf, TRUE); 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Bug 6813, parameter check of NULL destCapacity; crashed before fix. */ 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_find(re, 0, &status); 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufPtr = buf; 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_BUFFER_OVERFLOW_ERROR; 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_appendReplacement(re, repl, -1, &bufPtr, NULL, &status); 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * appendTail(). Checked in ReplaceFirst(), replaceAll(). 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * split() 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar textToSplit[80]; 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[200]; 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *fields[10]; 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numFields; 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t requiredCapacity; 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t spaceNeeded; 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t sz; 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(textToSplit, "first : second: third", sizeof(textToSplit)/2); 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(":", 0, NULL, &status); 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Simple split */ 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 10, &status); 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 3); 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second", fields[1], TRUE); 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" third", fields[2], TRUE); 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[3] == NULL); 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = u_strlen(textToSplit) - 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (numFields - 1) + /* Field delimiters do not appear in output */ 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields; /* Each field gets a NUL terminator */ 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available */ 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(":", 0, NULL, &status); 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 2, &status); 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 2); 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second: third", fields[1], TRUE); 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(!memcmp(&fields[2],&minus1,sizeof(UChar*))); 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = u_strlen(textToSplit) - 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (numFields - 1) + /* Field delimiters do not appear in output */ 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields; /* Each field gets a NUL terminator */ 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with a range of output buffer sizes. */ 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = u_strlen(textToSplit) - 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (numFields - 1) + /* Field delimiters do not appear in output */ 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields; /* Each field gets a NUL terminator */ 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (sz=0; sz < spaceNeeded+1; sz++) { 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sz, &requiredCapacity, fields, 10, &status); 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (sz >= spaceNeeded) { 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second", fields[1], TRUE); 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" third", fields[2], TRUE); 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 3); 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[3] == NULL); 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split(), part 2. Patterns with capture groups. The capture group text 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * comes out as additional fields. */ 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar textToSplit[80]; 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[200]; 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *fields[10]; 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numFields; 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t requiredCapacity; 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t spaceNeeded; 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t sz; 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(textToSplit, "first <tag-a> second<tag-b> third", sizeof(textToSplit)/2); 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("<(.*?)>", 0, NULL, &status); 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 10, &status); 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-a", fields[1], TRUE); 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second", fields[2], TRUE); 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-b", fields[3], TRUE); 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" third", fields[4], TRUE); 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[5] == NULL); 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available (2) */ 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 2, &status); 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 2); 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second<tag-b> third", fields[1], TRUE); 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(!memcmp(&fields[2],&minus1,sizeof(UChar*))); 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = strlen("first . second<tag-b> third."); /* "." at NUL positions */ 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available (3) */ 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 3, &status); 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 3); 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-a", fields[1], TRUE); 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second<tag-b> third", fields[2], TRUE); 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(!memcmp(&fields[3],&minus1,sizeof(UChar*))); 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = strlen("first .tag-a. second<tag-b> third."); /* "." at NUL positions */ 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with just enough output strings available (5) */ 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 5, &status); 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-a", fields[1], TRUE); 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second", fields[2], TRUE); 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-b", fields[3], TRUE); 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" third", fields[4], TRUE); 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(!memcmp(&fields[5],&minus1,sizeof(UChar*))); 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = strlen("first .tag-a. second.tag-b. third."); /* "." at NUL positions */ 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split, end of text is a field delimiter. */ 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sz = strlen("first <tag-a> second<tag-b>"); 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, sz, &status); 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, -1, sizeof(fields)); 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_split(re, buf, sizeof(buf)/2, &requiredCapacity, fields, 9, &status); 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("first ", fields[0], TRUE); 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-a", fields[1], TRUE); 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING(" second", fields[2], TRUE); 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("tag-b", fields[3], TRUE); 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("", fields[4], TRUE); 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[5] == NULL); 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[8] == NULL); 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(!memcmp(&fields[9],&minus1,sizeof(UChar*))); 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org spaceNeeded = strlen("first .tag-a. second.tag-b.."); /* "." at NUL positions */ 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(spaceNeeded == requiredCapacity); 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * set/getTimeLimit 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abc$", "abcdef", 0); 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getTimeLimit(re, &status) == 0); 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setTimeLimit(re, 1000, &status); 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getTimeLimit(re, &status) == 1000); 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setTimeLimit(re, -1, &status); 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR); 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getTimeLimit(re, &status) == 1000); 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * set/get Stack Limit 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("abc$", "abcdef", 0); 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getStackLimit(re, &status) == 8000000); 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setStackLimit(re, 40000, &status); 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getStackLimit(re, &status) == 40000); 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setStackLimit(re, -1, &status); 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR); 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_getStackLimit(re, &status) == 40000); 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Get/Set callback functions 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This test is copied from intltest regex/Callbacks 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The pattern and test data will run long enough to cause the callback 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to be invoked. The nested '+' operators give exponential time 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * behavior with increasing string length. 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_SETUP("((.)+\\2)+x", "aaaaaaaaaaaaaaaaaaab", 0) 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org callBackContext cbInfo = {4, 0, 0}; 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const void *pContext = &cbInfo; 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegexMatchCallback *returnedFn = &TestCallbackFn; 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Getting the callback fn when it hasn't been set must return NULL */ 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_getMatchCallback(re, &returnedFn, &pContext, &status); 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(returnedFn == NULL); 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pContext == NULL); 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Set thecallback and do a match. */ 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The callback function should record that it has been called. */ 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setMatchCallback(re, &TestCallbackFn, &cbInfo, &status); 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(cbInfo.numCalls == 0); 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_matches(re, -1, &status) == FALSE); 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(cbInfo.numCalls > 0); 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Getting the callback should return the values that were set above. */ 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_getMatchCallback(re, &returnedFn, &pContext, &status); 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(returnedFn == &TestCallbackFn); 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pContext == &cbInfo); 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_TEARDOWN; 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBug4315(void) { 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode theICUError = U_ZERO_ERROR; 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *theRegEx; 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *textBuff; 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *thePattern; 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar theString[100]; 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *destFields[24]; 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t neededLength1; 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t neededLength2; 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t wordCount = 0; 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t destFieldsSize = 24; 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org thePattern = "ck "; 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(theString, "The quick brown fox jumped over the slow black turtle."); 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* open a regex */ 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org theRegEx = uregex_openC(thePattern, 0, NULL, &theICUError); 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(theICUError); 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* set the input string */ 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(theRegEx, theString, u_strlen(theString), &theICUError); 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(theICUError); 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* split */ 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*explicitly pass NULL and 0 to force the overflow error -> this is where the 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * error occurs! */ 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordCount = uregex_split(theRegEx, NULL, 0, &neededLength1, destFields, 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destFieldsSize, &theICUError); 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(theICUError == U_BUFFER_OVERFLOW_ERROR); 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(wordCount==3); 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(theICUError == U_BUFFER_OVERFLOW_ERROR) 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org theICUError = U_ZERO_ERROR; 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textBuff = (UChar *) malloc(sizeof(UChar) * (neededLength1 + 1)); 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordCount = uregex_split(theRegEx, textBuff, neededLength1+1, &neededLength2, 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org destFields, destFieldsSize, &theICUError); 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(wordCount==3); 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(theICUError); 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(neededLength1 == neededLength2); 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("The qui", destFields[0], TRUE); 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("brown fox jumped over the slow bla", destFields[1], TRUE); 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("turtle.", destFields[2], TRUE); 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(destFields[3] == NULL); 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(textBuff); 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(theRegEx); 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Based on TestRegexCAPI() */ 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUTextAPI(void) { 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *re; 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText patternText = UTEXT_INITIALIZER; 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pat[200]; 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char patternTextUTF8[5] = { 0x61, 0x62, 0x63, 0x2a, 0x00 }; 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Mimimalist open/close */ 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&patternText, patternTextUTF8, -1, &status); 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0, 0, &status); 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Failed to open regular expression, %s:%d, error is \"%s\" (Are you missing data?)\n", __FILE__, __LINE__, u_errorName(status)); 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&patternText); 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Open with all flag values set */ 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UREGEX_CASE_INSENSITIVE | UREGEX_COMMENTS | UREGEX_DOTALL | UREGEX_MULTILINE | UREGEX_UWORD, 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, &status); 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Open with an invalid flag */ 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0x40000000, 0, &status); 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_REGEX_INVALID_FLAG); 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* open with an invalid parameter */ 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(NULL, 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UREGEX_CASE_INSENSITIVE | UREGEX_COMMENTS | UREGEX_DOTALL | UREGEX_MULTILINE | UREGEX_UWORD, 0, &status); 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR && re == NULL); 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * clone 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone1; 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone2; 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *clone3; 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testString1[30]; 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testString2[30]; 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0, 0, &status); 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone1 = uregex_clone(re, &status); 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone1 != NULL); 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone2 = uregex_clone(re, &status); 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone2 != NULL); 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org clone3 = uregex_clone(clone2, &status); 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(clone3 != NULL); 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(testString1, "abcccd", sizeof(pat)/2); 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(testString2, "xxxabcccd", sizeof(pat)/2); 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(clone1, testString1, -1, &status); 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(clone1, 0, &status); 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(clone2, testString2, -1, &status); 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(clone2, 0, &status); 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==FALSE); 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(clone2, 0, &status); 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone1); 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone2); 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(clone3); 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern() and patternText() 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *resultPat; 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLen; 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *resultText; 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_hello[] = { 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00 }; /* hello */ 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_hel[] = { 0x68, 0x65, 0x6c, 0x00 }; /* hel */ 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(pat, "hello", sizeof(pat)/2); /* for comparison */ 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&patternText, str_hello, -1, &status); 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, -1, 0, NULL, &status); 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultPat = uregex_pattern(re, &resultLen, &status); 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS above should change too... */ 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultLen == -1); 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strcmp(resultPat, pat) == 0); 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultText = uregex_patternUText(re, &status); 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_hello, resultText); 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_open(pat, 3, 0, NULL, &status); 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultPat = uregex_pattern(re, &resultLen, &status); 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS above should change too... */ 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultLen == 3); 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strncmp(resultPat, pat, 3) == 0); 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(u_strlen(resultPat) == 3); 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultText = uregex_patternUText(re, &status); 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_hel, resultText); 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * setUText() and lookingAt() 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText text1 = UTEXT_INITIALIZER; 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText text2 = UTEXT_INITIALIZER; 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcccd[] = { 0x62, 0x63, 0x64, 0x64, 0x64, 0x65, 0x00 }; /* abcccd */ 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcccxd[] = { 0x62, 0x63, 0x64, 0x64, 0x64, 0x79, 0x65, 0x00 }; /* abcccxd */ 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcd[] = { 0x62, 0x63, 0x64, 0x2b, 0x65, 0x00 }; /* abc*d */ 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&text1, str_abcccd, -1, &status); 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&text2, str_abcccxd, -1, &status); 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&patternText, str_abcd, -1, &status); 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0, NULL, &status); 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Operation before doing a setText should fail... */ 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_lookingAt(re, 0, &status); 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT( status== U_REGEX_INVALID_STATE); 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text1, &status); 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text2, &status); 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text1, &status); 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_lookingAt(re, 0, &status); 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&text1); 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&text2); 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getText() and getUText() 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText text1 = UTEXT_INITIALIZER; 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText text2 = UTEXT_INITIALIZER; 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2Chars[20]; 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *resultText; 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *result; 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength; 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcccd[] = { 0x62, 0x63, 0x64, 0x64, 0x64, 0x65, 0x00 }; /* abcccd */ 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcccxd[] = { 0x62, 0x63, 0x64, 0x64, 0x64, 0x79, 0x65, 0x00 }; /* abcccxd */ 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcd[] = { 0x62, 0x63, 0x64, 0x2b, 0x65, 0x00 }; /* abc*d */ 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&text1, str_abcccd, -1, &status); 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2Chars, str_abcccxd, sizeof(text2)/2); 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&text2, text2Chars, -1, &status); 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&patternText, str_abcd, -1, &status); 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0, NULL, &status); 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* First set a UText */ 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text1, &status); 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultText = uregex_getUText(re, NULL, &status); 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultText != &text1); 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(resultText, 0); 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(&text1, 0); 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(testUTextEqual(resultText, &text1)); 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(resultText); 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_getText(re, &textLength, &status); /* flattens UText into buffer */ 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (void)result; /* Suppress set but not used warning. */ 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(textLength == -1 || textLength == 6); 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultText = uregex_getUText(re, NULL, &status); 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(resultText != &text1); 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(resultText, 0); 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(&text1, 0); 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(testUTextEqual(resultText, &text1)); 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(resultText); 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Then set a UChar * */ 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2Chars, 7, &status); 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultText = uregex_getUText(re, NULL, &status); 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(resultText, 0); 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_setNativeIndex(&text2, 0); 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(testUTextEqual(resultText, &text2)); 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(resultText); 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_getText(re, &textLength, &status); 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(textLength == 7); 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&text1); 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&text2); 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * matches() 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText text1 = UTEXT_INITIALIZER; 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText nullText = UTEXT_INITIALIZER; 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcccde[] = { 0x61, 0x62, 0x63, 0x63, 0x63, 0x64, 0x65, 0x00 }; /* abcccde */ 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcd[] = { 0x61, 0x62, 0x63, 0x2a, 0x64, 0x00 }; /* abc*d */ 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&text1, str_abcccde, -1, &status); 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&patternText, str_abcd, -1, &status); 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openUText(&patternText, 0, NULL, &status); 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text1, &status); 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 0, &status); 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(".?", 0, NULL, &status); 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &text1, &status); 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 7, &status); 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&nullText, "", -1, &status); 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &nullText, &status); 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_matches(re, 0, &status); 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&text1); 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&nullText); 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * lookingAt() Used in setText test. 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * find(), findNext, start, end, reset 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[50]; 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "012rx5rx890rxrx...", sizeof(text1)/2); 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("rx", 0, NULL, &status); 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 0, &status); 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 3); 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 5); 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 9, &status); 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 11); 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 13); 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 14, &status); 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_reset(re, 0, &status); 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 3); 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 5); 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 6); 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 8); 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_reset(re, 12, &status); 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == TRUE); 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 13); 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_end(re, 0, &status) == 15); 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_findNext(re, &status); 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result == FALSE); 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * group() 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *actual; 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result; 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_abcinteriordef[] = { 0x61, 0x62, 0x63, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x66, 0x00 }; /* abc interior def */ 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_interior[] = { 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x00 }; /* ' interior ' */ 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "noise abc interior def, and this is off the end", sizeof(text1)/2); 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc(.*?)def", 0, NULL, &status); 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_find(re, 0, &status); 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(result==TRUE); 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture Group 0, the full match. Should succeed. */ 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org actual = uregex_groupUTextDeep(re, 0, NULL, &status); 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_abcinteriordef, actual); 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(actual); 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture Group 0 with shallow clone API. Should succeed. */ 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int64_t group_len; 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len16; 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode shallowStatus = U_ZERO_ERROR; 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int64_t nativeIndex; 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *groupChars; 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText groupText = UTEXT_INITIALIZER; 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org actual = uregex_groupUText(re, 0, NULL, &group_len, &status); 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nativeIndex = utext_getNativeIndex(actual); 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Following returns U_INDEX_OUTOFBOUNDS_ERROR... looks like a bug in ucstrFuncs UTextFuncs [utext.cpp] */ 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* len16 = utext_extract(actual, nativeIndex, nativeIndex + group_len, NULL, 0, &shallowStatus); */ 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len16 = (int32_t)group_len; 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org groupChars = (UChar *)malloc(sizeof(UChar)*(len16+1)); 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_extract(actual, nativeIndex, nativeIndex + group_len, groupChars, len16+1, &shallowStatus); 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&groupText, groupChars, len16, &shallowStatus); 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_abcinteriordef, &groupText); 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&groupText); 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(groupChars); 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(actual); 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture group #1. Should succeed. */ 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org actual = uregex_groupUTextDeep(re, 1, NULL, &status); 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_interior, actual); 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(actual); 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Capture group out of range. Error. */ 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org actual = uregex_groupUTextDeep(re, 2, NULL, &status); 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_INDEX_OUTOFBOUNDS_ERROR); 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(utext_nativeLength(actual) == 0); 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(actual); 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replaceFirst() 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText replText = UTEXT_INITIALIZER; 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *result; 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_Replxxx[] = { 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x3c, 0x61, 0x61, 0x3e, 0x20, 0x78, 0x31, 0x78, 0x20, 0x78, 0x2e, 0x2e, 0x2e, 0x78, 0x2e, 0x00 }; /* Replace <aa> x1x x...x. */ 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_Nomatchhere[] = { 0x4e, 0x6f, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x00 }; /* No match here. */ 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_u00411U00000042a[] = { 0x5c, 0x5c, 0x5c, 0x75, 0x30, 0x30, 0x34, 0x31, 0x24, 0x31, 0x5c, 0x55, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x32, 0x24, 0x5c, 0x61, 0x00 }; /* \\\u0041$1\U00000042$\a */ 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_1x[] = { 0x3c, 0x24, 0x31, 0x3e, 0x00 }; /* <$1> */ 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_ReplaceAaaBax1xxx[] = { 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x5c, 0x41, 0x61, 0x61, 0x42, 0x24, 0x61, 0x20, 0x78, 0x31, 0x78, 0x20, 0x78, 0x2e, 0x2e, 0x2e, 0x78, 0x2e, 0x00 }; /* Replace \AaaB$a x1x x...x. */ 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "Replace xaax x1x x...x.", sizeof(text1)/2); 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&replText, str_1x, -1, &status); 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("x(.*?)x", 0, NULL, &status); 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Normal case, with match */ 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_replaceFirstUText(re, &replText, NULL, &status); 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_Replxxx, result); 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(result); 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* No match. Text should copy to output with no changes. */ 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, -1, &status); 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_replaceFirstUText(re, &replText, NULL, &status); 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_Nomatchhere, result); 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(result); 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode escapes */ 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&replText, str_u00411U00000042a, -1, &status); 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_replaceFirstUText(re, &replText, NULL, &status); 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_ReplaceAaaBax1xxx, result); 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(result); 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&replText); 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replaceAll() 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text1[80]; 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText replText = UTEXT_INITIALIZER; 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *result; 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_1[] = { 0x3c, 0x24, 0x31, 0x3e, 0x00 }; /* <$1> */ 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_Replaceaa1[] = { 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x3c, 0x61, 0x61, 0x3e, 0x20, 0x3c, 0x31, 0x3e, 0x20, 0x3c, 0x2e, 0x2e, 0x2e, 0x3e, 0x2e, 0x00 }; /* Replace <aa> <1> <...>. */ 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_Nomatchhere[] = { 0x4e, 0x6f, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x00 }; /* No match here. */ 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text1, "Replace xaax x1x x...x.", sizeof(text1)/2); 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUTF8(&replText, str_1, -1, &status); 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("x(.*?)x", 0, NULL, &status); 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Normal case, with match */ 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text1, -1, &status); 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_replaceAllUText(re, &replText, NULL, &status); 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_Replaceaa1, result); 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(result); 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* No match. Text should copy to output with no changes. */ 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text2, -1, &status); 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = uregex_replaceAllUText(re, &replText, NULL, &status); 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_Nomatchhere, result); 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(result); 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&replText); 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * appendReplacement() 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text[100]; 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar repl[100]; 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[100]; 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *bufPtr; 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bufCap; 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(".*", 0, 0, &status); 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text, "whatever", sizeof(text)/2); 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(repl, "some other", sizeof(repl)/2); 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, text, -1, &status); 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* match covers whole target string */ 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_find(re, 0, &status); 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufPtr = buf; 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufCap = sizeof(buf) / 2; 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_appendReplacement(re, repl, -1, &bufPtr, &bufCap, &status); 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("some other", buf, TRUE); 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Match has \u \U escapes */ 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_find(re, 0, &status); 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufPtr = buf; 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bufCap = sizeof(buf) / 2; 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(repl, "abc\\u0041\\U00000042 \\\\ $ \\abc", sizeof(repl)/2); 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_appendReplacement(re, repl, -1, &bufPtr, &bufCap, &status); 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_STRING("abcAB \\ $ abc", buf, TRUE); 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * appendReplacement(), appendTail() checked in replaceFirst(), replaceAll(). 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * splitUText() 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar textToSplit[80]; 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar text2[80]; 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *fields[10]; 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numFields; 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(textToSplit, "first : second: third", sizeof(textToSplit)/2); 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(text2, "No match here.", sizeof(text2)/2); 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(":", 0, NULL, &status); 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Simple split */ 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, 0, sizeof(fields)); 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 10, &status); 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* 'first ' */ 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_second[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x00 }; /* ' second' */ 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_third[] = { 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* ' third' */ 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 3); 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_second, fields[1]); 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_third, fields[2]); 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[3] == NULL); 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available */ 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC(":", 0, NULL, &status); 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0] = NULL; 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1] = NULL; 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2] = &patternText; 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 2, &status); 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_secondthird[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x3a, 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* second: third */ 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 2); 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_secondthird, fields[1]); 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[2] == &patternText); 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* splitUText(), part 2. Patterns with capture groups. The capture group text 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * comes out as additional fields. */ 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar textToSplit[80]; 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText *fields[10]; 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numFields; 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrncpy(textToSplit, "first <tag-a> second<tag-b> third", sizeof(textToSplit)/2); 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("<(.*?)>", 0, NULL, &status); 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, -1, &status); 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, 0, sizeof(fields)); 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 10, &status); 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_taga[] = { 0x74, 0x61, 0x67, 0x2d, 0x61, 0x00 }; /* tag-a */ 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_second[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x00 }; /* second */ 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_tagb[] = { 0x74, 0x61, 0x67, 0x2d, 0x62, 0x00 }; /* tag-b */ 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_third[] = { 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* third */ 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_taga, fields[1]); 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_second, fields[2]); 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_tagb, fields[3]); 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_third, fields[4]); 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[5] == NULL); 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available (2) */ 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0] = NULL; 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1] = NULL; 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2] = &patternText; 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 2, &status); 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_secondtagbthird[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x3c, 0x74, 0x61, 0x67, 0x2d, 0x62, 0x3e, 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* second<tag-b> third */ 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 2); 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_secondtagbthird, fields[1]); 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[2] == &patternText); 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with too few output strings available (3) */ 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0] = NULL; 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1] = NULL; 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2] = NULL; 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[3] = &patternText; 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 3, &status); 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_taga[] = { 0x74, 0x61, 0x67, 0x2d, 0x61, 0x00 }; /* tag-a */ 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_secondtagbthird[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x3c, 0x74, 0x61, 0x67, 0x2d, 0x62, 0x3e, 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* second<tag-b> third */ 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 3); 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_taga, fields[1]); 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_secondtagbthird, fields[2]); 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[3] == &patternText); 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split with just enough output strings available (5) */ 21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0] = NULL; 21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1] = NULL; 21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2] = NULL; 21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[3] = NULL; 21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[4] = NULL; 21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[5] = &patternText; 21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 5, &status); 21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_taga[] = { 0x74, 0x61, 0x67, 0x2d, 0x61, 0x00 }; /* tag-a */ 21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_second[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x00 }; /* second */ 21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_tagb[] = { 0x74, 0x61, 0x67, 0x2d, 0x62, 0x00 }; /* tag-b */ 21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_third[] = { 0x20, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x00 }; /* third */ 21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_taga, fields[1]); 21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_second, fields[2]); 21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_tagb, fields[3]); 21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_third, fields[4]); 21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[5] == &patternText); 21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Split, end of text is a field delimiter. */ 21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setText(re, textToSplit, strlen("first <tag-a> second<tag-b>"), &status); 21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(fields, 0, sizeof(fields)); 21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[9] = &patternText; 21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numFields = uregex_splitUText(re, fields, 9, &status); 21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The TEST_ASSERT_SUCCESS call above should change too... */ 21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status)) { 21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_first[] = { 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x00 }; /* first */ 21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_taga[] = { 0x74, 0x61, 0x67, 0x2d, 0x61, 0x00 }; /* tag-a */ 21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_second[] = { 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x00 }; /* second */ 21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_tagb[] = { 0x74, 0x61, 0x67, 0x2d, 0x62, 0x00 }; /* tag-b */ 21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char str_empty[] = { 0x00 }; 21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numFields == 5); 21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_first, fields[0]); 21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_taga, fields[1]); 21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_second, fields[2]); 21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_tagb, fields[3]); 21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_UTEXT(str_empty, fields[4]); 21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[5] == NULL); 21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[8] == NULL); 21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(fields[9] == &patternText); 21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < numFields; i++) { 21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(fields[i]); 21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&patternText); 21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRefreshInput(void) { 22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * RefreshInput changes out the input of a URegularExpression without 22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * changing anything else in the match state. Used with Java JNI, 22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * when Java moves the underlying string storage. This test 22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * runs a find() loop, moving the text after the first match. 22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The right number of matches should still be found. 22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testStr[] = {0x41, 0x20, 0x42, 0x20, 0x43, 0x0}; /* = "A B C" */ 22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar movedStr[] = { 0, 0, 0, 0, 0, 0}; 22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *re; 22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText ut1 = UTEXT_INITIALIZER; 22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText ut2 = UTEXT_INITIALIZER; 22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("[ABC]", 0, 0, &status); 22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&ut1, testStr, -1, &status); 22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setUText(re, &ut1, &status); 22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Find the first match "A" in the original string */ 22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status)); 22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 0); 22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Move the string, kill the original string. */ 22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strcpy(movedStr, testStr); 22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_memset(testStr, 0, u_strlen(testStr)); 22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&ut2, movedStr, -1, &status); 22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_refreshUText(re, &ut2, &status); 22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Find the following two matches, now working in the moved string. */ 22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status)); 22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 2); 22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_findNext(re, &status)); 22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(uregex_start(re, 0, &status) == 4); 22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(FALSE == uregex_findNext(re, &status)); 22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestBug8421(void) { 22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Bug 8421: setTimeLimit on a regular expresssion before setting text to be matched 22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * was failing. 22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegularExpression *re; 22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t limit = -1; 22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org re = uregex_openC("abc", 0, 0, &status); 22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org limit = uregex_getTimeLimit(re, &status); 22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(limit == 0); 22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_setTimeLimit(re, 100, &status); 22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org limit = uregex_getTimeLimit(re, &status); 22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(limit == 100); 22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uregex_close(re); 22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */ 2271