Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: source/test/intltest/ustrtest.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/test/intltest/ustrtest.h ('k') | source/test/iotest/filetst.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /******************************************************************** 1 /********************************************************************
2 * COPYRIGHT: 2 * COPYRIGHT:
3 * Copyright (c) 1997-2014, International Business Machines Corporation and 3 * Copyright (c) 1997-2015, International Business Machines Corporation and
4 * others. All Rights Reserved. 4 * others. All Rights Reserved.
5 ********************************************************************/ 5 ********************************************************************/
6 6
7 #include "ustrtest.h" 7 #include "ustrtest.h"
8 #include "unicode/appendable.h" 8 #include "unicode/appendable.h"
9 #include "unicode/std_string.h" 9 #include "unicode/std_string.h"
10 #include "unicode/unistr.h" 10 #include "unicode/unistr.h"
11 #include "unicode/uchar.h" 11 #include "unicode/uchar.h"
12 #include "unicode/ustring.h" 12 #include "unicode/ustring.h"
13 #include "unicode/locid.h" 13 #include "unicode/locid.h"
14 #include "unicode/ucnv.h" 14 #include "unicode/ucnv.h"
15 #include "unicode/uenum.h" 15 #include "unicode/uenum.h"
16 #include "unicode/utf16.h" 16 #include "unicode/utf16.h"
17 #include "cmemory.h" 17 #include "cmemory.h"
18 #include "charstr.h" 18 #include "charstr.h"
19 19
20 #if 0 20 #if 0
21 #include "unicode/ustream.h" 21 #include "unicode/ustream.h"
22 22
23 #include <iostream> 23 #include <iostream>
24 using namespace std; 24 using namespace std;
25 25
26 #endif 26 #endif
27 27
28 UnicodeStringTest::~UnicodeStringTest() {} 28 UnicodeStringTest::~UnicodeStringTest() {}
29 29
30 void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & name, char *par) 30 void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & name, char *par)
31 { 31 {
32 if (exec) logln("TestSuite UnicodeStringTest: "); 32 if (exec) logln("TestSuite UnicodeStringTest: ");
33 switch (index) { 33 TESTCASE_AUTO_BEGIN;
34 case 0: 34 TESTCASE_AUTO_CLASS(StringCaseTest);
35 name = "StringCaseTest"; 35 TESTCASE_AUTO(TestBasicManipulation);
36 if (exec) { 36 TESTCASE_AUTO(TestCompare);
37 logln("StringCaseTest---"); logln(""); 37 TESTCASE_AUTO(TestExtract);
38 StringCaseTest test; 38 TESTCASE_AUTO(TestRemoveReplace);
39 callTest(test, par); 39 TESTCASE_AUTO(TestSearching);
40 } 40 TESTCASE_AUTO(TestSpacePadding);
41 break; 41 TESTCASE_AUTO(TestPrefixAndSuffix);
42 case 1: name = "TestBasicManipulation"; if (exec) TestBasicManipulation( ); break; 42 TESTCASE_AUTO(TestFindAndReplace);
43 case 2: name = "TestCompare"; if (exec) TestCompare(); break; 43 TESTCASE_AUTO(TestBogus);
44 case 3: name = "TestExtract"; if (exec) TestExtract(); break; 44 TESTCASE_AUTO(TestReverse);
45 case 4: name = "TestRemoveReplace"; if (exec) TestRemoveReplace(); break ; 45 TESTCASE_AUTO(TestMiscellaneous);
46 case 5: name = "TestSearching"; if (exec) TestSearching(); break; 46 TESTCASE_AUTO(TestStackAllocation);
47 case 6: name = "TestSpacePadding"; if (exec) TestSpacePadding(); break; 47 TESTCASE_AUTO(TestUnescape);
48 case 7: name = "TestPrefixAndSuffix"; if (exec) TestPrefixAndSuffix(); b reak; 48 TESTCASE_AUTO(TestCountChar32);
49 case 8: name = "TestFindAndReplace"; if (exec) TestFindAndReplace(); bre ak; 49 TESTCASE_AUTO(TestStringEnumeration);
50 case 9: name = "TestBogus"; if (exec) TestBogus(); break; 50 TESTCASE_AUTO(TestNameSpace);
51 case 10: name = "TestReverse"; if (exec) TestReverse(); break; 51 TESTCASE_AUTO(TestUTF32);
52 case 11: name = "TestMiscellaneous"; if (exec) TestMiscellaneous(); brea k; 52 TESTCASE_AUTO(TestUTF8);
53 case 12: name = "TestStackAllocation"; if (exec) TestStackAllocation(); break; 53 TESTCASE_AUTO(TestReadOnlyAlias);
54 case 13: name = "TestUnescape"; if (exec) TestUnescape(); break; 54 TESTCASE_AUTO(TestAppendable);
55 case 14: name = "TestCountChar32"; if (exec) TestCountChar32(); break; 55 TESTCASE_AUTO(TestUnicodeStringImplementsAppendable);
56 case 15: name = "TestStringEnumeration"; if (exec) TestStringEnumeration (); break; 56 TESTCASE_AUTO(TestSizeofUnicodeString);
57 case 16: name = "TestNameSpace"; if (exec) TestNameSpace(); break; 57 TESTCASE_AUTO(TestStartsWithAndEndsWithNulTerminated);
58 case 17: name = "TestUTF32"; if (exec) TestUTF32(); break; 58 TESTCASE_AUTO(TestMoveSwap);
59 case 18: name = "TestUTF8"; if (exec) TestUTF8(); break; 59 TESTCASE_AUTO_END;
60 case 19: name = "TestReadOnlyAlias"; if (exec) TestReadOnlyAlias(); brea k;
61 case 20: name = "TestAppendable"; if (exec) TestAppendable(); break;
62 case 21: name = "TestUnicodeStringImplementsAppendable"; if (exec) TestU nicodeStringImplementsAppendable(); break;
63 case 22: name = "TestSizeofUnicodeString"; if (exec) TestSizeofUnicodeSt ring(); break;
64 case 23: name = "TestStartsWithAndEndsWithNulTerminated"; if (exec) Test StartsWithAndEndsWithNulTerminated(); break;
65
66 default: name = ""; break; //needed to end loop
67 }
68 } 60 }
69 61
70 void 62 void
71 UnicodeStringTest::TestBasicManipulation() 63 UnicodeStringTest::TestBasicManipulation()
72 { 64 {
73 UnicodeString test1("Now is the time for all men to come swiftly to the ai d of the party.\n"); 65 UnicodeString test1("Now is the time for all men to come swiftly to the ai d of the party.\n");
74 UnicodeString expectedValue; 66 UnicodeString expectedValue;
75 UnicodeString *c; 67 UnicodeString *c;
76 68
77 c=(UnicodeString *)test1.clone(); 69 c=(UnicodeString *)test1.clone();
(...skipping 2013 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 void 2083 void
2092 UnicodeStringTest::TestUnicodeStringImplementsAppendable() { 2084 UnicodeStringTest::TestUnicodeStringImplementsAppendable() {
2093 UnicodeString dest; 2085 UnicodeString dest;
2094 UnicodeStringAppendable app(dest); 2086 UnicodeStringAppendable app(dest);
2095 doTestAppendable(dest, app); 2087 doTestAppendable(dest, app);
2096 } 2088 }
2097 2089
2098 void 2090 void
2099 UnicodeStringTest::TestSizeofUnicodeString() { 2091 UnicodeStringTest::TestSizeofUnicodeString() {
2100 // See the comments in unistr.h near the declaration of UnicodeString's fiel ds. 2092 // See the comments in unistr.h near the declaration of UnicodeString's fiel ds.
2093 // See the API comments for UNISTR_OBJECT_SIZE.
2101 size_t sizeofUniStr=sizeof(UnicodeString); 2094 size_t sizeofUniStr=sizeof(UnicodeString);
2102 size_t expected; 2095 size_t expected=UNISTR_OBJECT_SIZE;
2103 switch(sizeof(void *)) { 2096 if(expected!=sizeofUniStr) {
2104 case 4: 2097 // Possible cause: UNISTR_OBJECT_SIZE may not be a multiple of sizeof(po inter),
2105 expected=32; 2098 // of the compiler might add more internal padding than expected.
2106 break; 2099 errln("sizeof(UnicodeString)=%d, expected UNISTR_OBJECT_SIZE=%d",
2107 case 8: 2100 (int)sizeofUniStr, (int)expected);
2108 expected=40;
2109 break;
2110 default:
2111 logln("This platform has neither 32-bit nor 64-bit pointers.");
2112 return;
2113 } 2101 }
2114 if(expected!=sizeofUniStr) { 2102 if(sizeofUniStr<32) {
2115 errln("sizeof(UnicodeString)=%d, expected %d", (int)sizeofUniStr, (int)e xpected); 2103 errln("sizeof(UnicodeString)=%d < 32, probably too small", (int)sizeofUn iStr);
2104 }
2105 // We assume that the entire UnicodeString object,
2106 // minus the vtable pointer and 2 bytes for flags and short length,
2107 // is available for internal storage of UChars.
2108 int32_t expectedStackBufferLength=((int32_t)UNISTR_OBJECT_SIZE-sizeof(void * )-2)/U_SIZEOF_UCHAR;
2109 UnicodeString s;
2110 const UChar *emptyBuffer=s.getBuffer();
2111 for(int32_t i=0; i<expectedStackBufferLength; ++i) {
2112 s.append((UChar)0x2e);
2113 }
2114 const UChar *fullBuffer=s.getBuffer();
2115 if(fullBuffer!=emptyBuffer) {
2116 errln("unexpected reallocation when filling with assumed stack buffer si ze of %d",
2117 expectedStackBufferLength);
2118 }
2119 const UChar *terminatedBuffer=s.getTerminatedBuffer();
2120 if(terminatedBuffer==emptyBuffer) {
2121 errln("unexpected keeping stack buffer when overfilling assumed stack bu ffer size of %d",
2122 expectedStackBufferLength);
2116 } 2123 }
2117 } 2124 }
2125
2126 void
2127 UnicodeStringTest::TestMoveSwap() {
2128 static const UChar abc[3] = { 0x61, 0x62, 0x63 }; // "abc"
2129 UnicodeString s1(FALSE, abc, UPRV_LENGTHOF(abc)); // read-only alias
2130 UnicodeString s2(100, 0x7a, 100); // 100 * 'z' should be on the heap
2131 UnicodeString s3("defg", 4, US_INV); // in stack buffer
2132 const UChar *p = s2.getBuffer();
2133 s1.swap(s2);
2134 if(s1.getBuffer() != p || s1.length() != 100 || s2.getBuffer() != abc || s2. length() != 3) {
2135 errln("UnicodeString.swap() did not swap");
2136 }
2137 swap(s2, s3);
2138 if(s2 != UNICODE_STRING_SIMPLE("defg") || s3.getBuffer() != abc || s3.length () != 3) {
2139 errln("swap(UnicodeString) did not swap back");
2140 }
2141 UnicodeString s4;
2142 s4.moveFrom(s1);
2143 if(s4.getBuffer() != p || s4.length() != 100 || !s1.isBogus()) {
2144 errln("UnicodeString.moveFrom(heap) did not move");
2145 }
2146 UnicodeString s5;
2147 s5.moveFrom(s2);
2148 if(s5 != UNICODE_STRING_SIMPLE("defg")) {
2149 errln("UnicodeString.moveFrom(stack) did not move");
2150 }
2151 UnicodeString s6;
2152 s6.moveFrom(s3);
2153 if(s6.getBuffer() != abc || s6.length() != 3) {
2154 errln("UnicodeString.moveFrom(alias) did not move");
2155 }
2156 #if U_HAVE_RVALUE_REFERENCES
2157 infoln("TestMoveSwap() with rvalue references");
2158 s1 = static_cast<UnicodeString &&>(s6);
2159 if(s1.getBuffer() != abc || s1.length() != 3) {
2160 errln("UnicodeString move assignment operator did not move");
2161 }
2162 UnicodeString s7(static_cast<UnicodeString &&>(s4));
2163 if(s7.getBuffer() != p || s7.length() != 100 || !s4.isBogus()) {
2164 errln("UnicodeString move constructor did not move");
2165 }
2166 #else
2167 infoln("TestMoveSwap() without rvalue references");
2168 UnicodeString s7;
2169 #endif
2170
2171 // Move self assignment leaves the object valid but in an undefined state.
2172 // Do it to make sure there is no crash,
2173 // but do not check for any particular resulting value.
2174 s1.moveFrom(s1);
2175 s2.moveFrom(s2);
2176 s3.moveFrom(s3);
2177 s4.moveFrom(s4);
2178 s5.moveFrom(s5);
2179 s6.moveFrom(s6);
2180 s7.moveFrom(s7);
2181 // Simple copy assignment must work.
2182 UnicodeString simple = UNICODE_STRING_SIMPLE("simple");
2183 s1 = s6 = s4 = s7 = simple;
2184 if(s1 != simple || s4 != simple || s6 != simple || s7 != simple) {
2185 errln("UnicodeString copy after self-move did not work");
2186 }
2187 }
OLDNEW
« no previous file with comments | « source/test/intltest/ustrtest.h ('k') | source/test/iotest/filetst.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698