aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJean-Baptiste Queru <jbq@google.com>2009-07-17 17:41:09 -0700
committerJean-Baptiste Queru <jbq@google.com>2009-07-17 17:41:09 -0700
commita09443ea25f9d6e6cfae4b8e438c7a6ced388a06 (patch)
tree09477b4e0d3b30fe64209b11524b50ae312991a7 /test
parentde821ad1a223bf1b670cfa0205e431bef3f860d3 (diff)
downloadicu4c-a09443ea25f9d6e6cfae4b8e438c7a6ced388a06.tar.gz
import cl @41443
Diffstat (limited to 'test')
-rw-r--r--test/cintltst/reapits.c139
1 files changed, 138 insertions, 1 deletions
diff --git a/test/cintltst/reapits.c b/test/cintltst/reapits.c
index 74fe674f..955bdd23 100644
--- a/test/cintltst/reapits.c
+++ b/test/cintltst/reapits.c
@@ -1,6 +1,6 @@
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 2004-2006, International Business Machines Corporation and
+ * Copyright (c) 2004-2007, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
/********************************************************************************
@@ -544,6 +544,143 @@ static void TestRegexCAPI(void) {
uregex_close(re);
}
+
+ /*
+ * Regions
+ */
+ #define TEST_SETUP(pattern, testString, flags) { \
+ status = U_ZERO_ERROR; \
+ re = uregex_openC(pattern, flags, NULL, &status); \
+ TEST_ASSERT_SUCCESS(status); \
+ UChar *srcString = (UChar *)malloc((strlen(testString)+2)*sizeof(UChar)); \
+ u_uastrncpy(srcString, testString, strlen(testString)+1); \
+ uregex_setText(re, srcString, -1, &status); \
+ TEST_ASSERT_SUCCESS(status);
+
+ #define TEST_TEARDOWN \
+ TEST_ASSERT_SUCCESS(status); \
+ uregex_close(re); \
+ free(srcString); \
+ }
+
+
+
+
+ // SetRegion(), getRegion() do something
+ TEST_SETUP(".*", "0123456789ABCDEF", 0);
+ TEST_ASSERT(uregex_regionStart(re, &status) == 0);
+ TEST_ASSERT(uregex_regionEnd(re, &status) == 16);
+ uregex_setRegion(re, 3, 6, &status);
+ UChar resultString[40];
+ TEST_ASSERT(uregex_regionStart(re, &status) == 3);
+ TEST_ASSERT(uregex_regionEnd(re, &status) == 6);
+ TEST_ASSERT(uregex_findNext(re, &status));
+ TEST_ASSERT(uregex_group(re, 0, resultString, sizeof(resultString)/2, &status) == 3)
+ TEST_ASSERT_STRING("345", resultString, TRUE);
+ TEST_TEARDOWN;
+
+ // find(start=-1) uses regions
+ TEST_SETUP(".*", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_find(re, -1, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 4);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 6);
+ TEST_TEARDOWN;
+
+ // find (start >=0) does not use regions
+ TEST_SETUP(".*", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_find(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 0);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 16);
+ TEST_TEARDOWN;
+
+ // findNext() obeys regions
+ TEST_SETUP(".", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_findNext(re,&status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 4);
+ TEST_ASSERT(uregex_findNext(re, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 5);
+ TEST_ASSERT(uregex_findNext(re, &status) == FALSE);
+ TEST_TEARDOWN;
+
+ // matches(start=-1) uses regions
+ // Also, verify that non-greedy *? succeeds in finding the full match.
+ TEST_SETUP(".*?", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_matches(re, -1, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 4);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 6);
+ TEST_TEARDOWN;
+
+ // matches (start >=0) does not use regions
+ TEST_SETUP(".*?", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_matches(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 0);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 16);
+ TEST_TEARDOWN;
+
+ // lookingAt(start=-1) uses regions
+ // Also, verify that non-greedy *? finds the first (shortest) match.
+ TEST_SETUP(".*?", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_lookingAt(re, -1, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 4);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 4);
+ TEST_TEARDOWN;
+
+ // lookingAt (start >=0) does not use regions
+ TEST_SETUP(".*?", "0123456789ABCDEF", 0);
+ uregex_setRegion(re, 4, 6, &status);
+ TEST_ASSERT(uregex_lookingAt(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_start(re, 0, &status) == 0);
+ TEST_ASSERT(uregex_end(re, 0, &status) == 0);
+ TEST_TEARDOWN;
+
+ // hitEnd()
+ TEST_SETUP("[a-f]*", "abcdefghij", 0);
+ TEST_ASSERT(uregex_find(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_hitEnd(re, &status) == FALSE);
+ TEST_TEARDOWN;
+
+ TEST_SETUP("[a-f]*", "abcdef", 0);
+ TEST_ASSERT(uregex_find(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_hitEnd(re, &status) == TRUE);
+ TEST_TEARDOWN;
+
+ // requireEnd
+ TEST_SETUP("abcd", "abcd", 0);
+ TEST_ASSERT(uregex_find(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_requireEnd(re, &status) == FALSE);
+ TEST_TEARDOWN;
+
+ // requireEnd
+ TEST_SETUP("abcd$", "abcd", 0);
+ TEST_ASSERT(uregex_find(re, 0, &status) == TRUE);
+ TEST_ASSERT(uregex_requireEnd(re, &status) == TRUE);
+ TEST_TEARDOWN;
+
+
+
+#if 0
+ status = U_ZERO_ERROR;
+ uregex_reset(re, 0, &status);
+ TEST_ASSERT(uregex_matches(re, 0, &status)==FALSE);
+ TEST_ASSERT(uregex_lookingAt(re, 0, &status)==TRUE);
+ TEST_ASSERT(uregex_group(re, 0, resultString, sizeof(resultString)/2, &status) == 10)
+ TEST_ASSERT_STRING("0123456789", resultString, TRUE);
+ TEST_ASSERT_SUCCESS(status);
+
+ status = U_ZERO_ERROR;
+ uregex_setRegion(re, 3, 5, &status);
+ TEST_ASSERT(uregex_matches(re, -1, &status));
+ TEST_ASSERT(uregex_group(re, 0, resultString, sizeof(resultString)/2, &status) == 2);
+ TEST_ASSERT_STRING("34", resultString, TRUE);
+ TEST_ASSERT_SUCCESS(status);
+#endif
+
/*
* replaceFirst()