OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/pickle.h" | 9 #include "base/pickle.h" |
10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 const uint16 testuint16 = 32123; | 23 const uint16 testuint16 = 32123; |
24 const uint32 testuint32 = 1593847192; | 24 const uint32 testuint32 = 1593847192; |
25 const int64 testint64 = -0x7E8CA9253104BDFCLL; | 25 const int64 testint64 = -0x7E8CA9253104BDFCLL; |
26 const uint64 testuint64 = 0xCE8CA9253104BDF7ULL; | 26 const uint64 testuint64 = 0xCE8CA9253104BDF7ULL; |
27 const size_t testsizet = 0xFEDC7654; | 27 const size_t testsizet = 0xFEDC7654; |
28 const float testfloat = 3.1415926935f; | 28 const float testfloat = 3.1415926935f; |
29 const double testdouble = 2.71828182845904523; | 29 const double testdouble = 2.71828182845904523; |
30 const std::string teststring("Hello world"); // note non-aligned string length | 30 const std::string teststring("Hello world"); // note non-aligned string length |
31 const std::wstring testwstring(L"Hello, world"); | 31 const std::wstring testwstring(L"Hello, world"); |
32 const base::string16 teststring16(base::ASCIIToUTF16("Hello, world")); | 32 const base::string16 teststring16(base::ASCIIToUTF16("Hello, world")); |
| 33 const char testrawstring[] = "Hello new world"; // Test raw string writing |
| 34 // Test raw char16 writing, assumes UTF16 encoding is ANSI for alpha chars. |
| 35 const base::char16 testrawstring16[] = {'A', 'l', 'o', 'h', 'a', 0}; |
33 const char testdata[] = "AAA\0BBB\0"; | 36 const char testdata[] = "AAA\0BBB\0"; |
34 const int testdatalen = arraysize(testdata) - 1; | 37 const int testdatalen = arraysize(testdata) - 1; |
35 | 38 |
36 // checks that the result | 39 // checks that the results can be read correctly from the Pickle |
37 void VerifyResult(const Pickle& pickle) { | 40 void VerifyResult(const Pickle& pickle) { |
38 PickleIterator iter(pickle); | 41 PickleIterator iter(pickle); |
39 | 42 |
40 bool outbool; | 43 bool outbool; |
41 EXPECT_TRUE(iter.ReadBool(&outbool)); | 44 EXPECT_TRUE(iter.ReadBool(&outbool)); |
42 EXPECT_FALSE(outbool); | 45 EXPECT_FALSE(outbool); |
43 EXPECT_TRUE(iter.ReadBool(&outbool)); | 46 EXPECT_TRUE(iter.ReadBool(&outbool)); |
44 EXPECT_TRUE(outbool); | 47 EXPECT_TRUE(outbool); |
45 | 48 |
46 int outint; | 49 int outint; |
(...skipping 29 matching lines...) Expand all Loading... |
76 EXPECT_EQ(testfloat, outfloat); | 79 EXPECT_EQ(testfloat, outfloat); |
77 | 80 |
78 double outdouble; | 81 double outdouble; |
79 EXPECT_TRUE(iter.ReadDouble(&outdouble)); | 82 EXPECT_TRUE(iter.ReadDouble(&outdouble)); |
80 EXPECT_EQ(testdouble, outdouble); | 83 EXPECT_EQ(testdouble, outdouble); |
81 | 84 |
82 std::string outstring; | 85 std::string outstring; |
83 EXPECT_TRUE(iter.ReadString(&outstring)); | 86 EXPECT_TRUE(iter.ReadString(&outstring)); |
84 EXPECT_EQ(teststring, outstring); | 87 EXPECT_EQ(teststring, outstring); |
85 | 88 |
86 std::wstring outwstring; | |
87 EXPECT_TRUE(iter.ReadWString(&outwstring)); | |
88 EXPECT_EQ(testwstring, outwstring); | |
89 | |
90 base::string16 outstring16; | 89 base::string16 outstring16; |
91 EXPECT_TRUE(iter.ReadString16(&outstring16)); | 90 EXPECT_TRUE(iter.ReadString16(&outstring16)); |
92 EXPECT_EQ(teststring16, outstring16); | 91 EXPECT_EQ(teststring16, outstring16); |
93 | 92 |
| 93 base::StringPiece outstringpiece; |
| 94 EXPECT_TRUE(iter.ReadStringPiece(&outstringpiece)); |
| 95 EXPECT_EQ(testrawstring, outstringpiece); |
| 96 |
| 97 base::StringPiece16 outstringpiece16; |
| 98 EXPECT_TRUE(iter.ReadStringPiece16(&outstringpiece16)); |
| 99 EXPECT_EQ(testrawstring16, outstringpiece16); |
| 100 |
94 const char* outdata; | 101 const char* outdata; |
95 int outdatalen; | 102 int outdatalen; |
96 EXPECT_TRUE(iter.ReadData(&outdata, &outdatalen)); | 103 EXPECT_TRUE(iter.ReadData(&outdata, &outdatalen)); |
97 EXPECT_EQ(testdatalen, outdatalen); | 104 EXPECT_EQ(testdatalen, outdatalen); |
98 EXPECT_EQ(memcmp(testdata, outdata, outdatalen), 0); | 105 EXPECT_EQ(memcmp(testdata, outdata, outdatalen), 0); |
99 | 106 |
100 // reads past the end should fail | 107 // reads past the end should fail |
101 EXPECT_FALSE(iter.ReadInt(&outint)); | 108 EXPECT_FALSE(iter.ReadInt(&outint)); |
102 } | 109 } |
103 | 110 |
104 } // namespace | 111 } // namespace |
105 | 112 |
106 TEST(PickleTest, EncodeDecode) { | 113 TEST(PickleTest, EncodeDecode) { |
107 Pickle pickle; | 114 Pickle pickle; |
108 | 115 |
109 EXPECT_TRUE(pickle.WriteBool(testbool1)); | 116 EXPECT_TRUE(pickle.WriteBool(testbool1)); |
110 EXPECT_TRUE(pickle.WriteBool(testbool2)); | 117 EXPECT_TRUE(pickle.WriteBool(testbool2)); |
111 EXPECT_TRUE(pickle.WriteInt(testint)); | 118 EXPECT_TRUE(pickle.WriteInt(testint)); |
112 EXPECT_TRUE( | 119 EXPECT_TRUE( |
113 pickle.WriteLongUsingDangerousNonPortableLessPersistableForm(testlong)); | 120 pickle.WriteLongUsingDangerousNonPortableLessPersistableForm(testlong)); |
114 EXPECT_TRUE(pickle.WriteUInt16(testuint16)); | 121 EXPECT_TRUE(pickle.WriteUInt16(testuint16)); |
115 EXPECT_TRUE(pickle.WriteUInt32(testuint32)); | 122 EXPECT_TRUE(pickle.WriteUInt32(testuint32)); |
116 EXPECT_TRUE(pickle.WriteInt64(testint64)); | 123 EXPECT_TRUE(pickle.WriteInt64(testint64)); |
117 EXPECT_TRUE(pickle.WriteUInt64(testuint64)); | 124 EXPECT_TRUE(pickle.WriteUInt64(testuint64)); |
118 EXPECT_TRUE(pickle.WriteSizeT(testsizet)); | 125 EXPECT_TRUE(pickle.WriteSizeT(testsizet)); |
119 EXPECT_TRUE(pickle.WriteFloat(testfloat)); | 126 EXPECT_TRUE(pickle.WriteFloat(testfloat)); |
120 EXPECT_TRUE(pickle.WriteDouble(testdouble)); | 127 EXPECT_TRUE(pickle.WriteDouble(testdouble)); |
121 EXPECT_TRUE(pickle.WriteString(teststring)); | 128 EXPECT_TRUE(pickle.WriteString(teststring)); |
122 EXPECT_TRUE(pickle.WriteWString(testwstring)); | |
123 EXPECT_TRUE(pickle.WriteString16(teststring16)); | 129 EXPECT_TRUE(pickle.WriteString16(teststring16)); |
| 130 EXPECT_TRUE(pickle.WriteString(testrawstring)); |
| 131 EXPECT_TRUE(pickle.WriteString16(testrawstring16)); |
124 EXPECT_TRUE(pickle.WriteData(testdata, testdatalen)); | 132 EXPECT_TRUE(pickle.WriteData(testdata, testdatalen)); |
125 VerifyResult(pickle); | 133 VerifyResult(pickle); |
126 | 134 |
127 // test copy constructor | 135 // test copy constructor |
128 Pickle pickle2(pickle); | 136 Pickle pickle2(pickle); |
129 VerifyResult(pickle2); | 137 VerifyResult(pickle2); |
130 | 138 |
131 // test operator= | 139 // test operator= |
132 Pickle pickle3; | 140 Pickle pickle3; |
133 pickle3 = pickle; | 141 pickle3 = pickle; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 TEST(PickleTest, ZeroLenStr) { | 199 TEST(PickleTest, ZeroLenStr) { |
192 Pickle pickle; | 200 Pickle pickle; |
193 EXPECT_TRUE(pickle.WriteString(std::string())); | 201 EXPECT_TRUE(pickle.WriteString(std::string())); |
194 | 202 |
195 PickleIterator iter(pickle); | 203 PickleIterator iter(pickle); |
196 std::string outstr; | 204 std::string outstr; |
197 EXPECT_TRUE(iter.ReadString(&outstr)); | 205 EXPECT_TRUE(iter.ReadString(&outstr)); |
198 EXPECT_EQ("", outstr); | 206 EXPECT_EQ("", outstr); |
199 } | 207 } |
200 | 208 |
201 TEST(PickleTest, ZeroLenWStr) { | 209 TEST(PickleTest, ZeroLenStr16) { |
202 Pickle pickle; | 210 Pickle pickle; |
203 EXPECT_TRUE(pickle.WriteWString(std::wstring())); | 211 EXPECT_TRUE(pickle.WriteString16(base::string16())); |
204 | 212 |
205 PickleIterator iter(pickle); | 213 PickleIterator iter(pickle); |
206 std::string outstr; | 214 std::string outstr; |
207 EXPECT_TRUE(iter.ReadString(&outstr)); | 215 EXPECT_TRUE(iter.ReadString(&outstr)); |
208 EXPECT_EQ("", outstr); | 216 EXPECT_EQ("", outstr); |
209 } | 217 } |
210 | 218 |
211 TEST(PickleTest, BadLenStr) { | 219 TEST(PickleTest, BadLenStr) { |
212 Pickle pickle; | 220 Pickle pickle; |
213 EXPECT_TRUE(pickle.WriteInt(-2)); | 221 EXPECT_TRUE(pickle.WriteInt(-2)); |
214 | 222 |
215 PickleIterator iter(pickle); | 223 PickleIterator iter(pickle); |
216 std::string outstr; | 224 std::string outstr; |
217 EXPECT_FALSE(iter.ReadString(&outstr)); | 225 EXPECT_FALSE(iter.ReadString(&outstr)); |
218 } | 226 } |
219 | 227 |
220 TEST(PickleTest, BadLenWStr) { | 228 TEST(PickleTest, BadLenStr16) { |
221 Pickle pickle; | 229 Pickle pickle; |
222 EXPECT_TRUE(pickle.WriteInt(-1)); | 230 EXPECT_TRUE(pickle.WriteInt(-1)); |
223 | 231 |
224 PickleIterator iter(pickle); | 232 PickleIterator iter(pickle); |
225 std::wstring woutstr; | 233 base::string16 outstr; |
226 EXPECT_FALSE(iter.ReadWString(&woutstr)); | 234 EXPECT_FALSE(iter.ReadString16(&outstr)); |
227 } | 235 } |
228 | 236 |
229 TEST(PickleTest, FindNext) { | 237 TEST(PickleTest, FindNext) { |
230 Pickle pickle; | 238 Pickle pickle; |
231 EXPECT_TRUE(pickle.WriteInt(1)); | 239 EXPECT_TRUE(pickle.WriteInt(1)); |
232 EXPECT_TRUE(pickle.WriteString("Domo")); | 240 EXPECT_TRUE(pickle.WriteString("Domo")); |
233 | 241 |
234 const char* start = reinterpret_cast<const char*>(pickle.data()); | 242 const char* start = reinterpret_cast<const char*>(pickle.data()); |
235 const char* end = start + pickle.size(); | 243 const char* end = start + pickle.size(); |
236 | 244 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 iter = PickleIterator(str16_pickle); | 392 iter = PickleIterator(str16_pickle); |
385 EXPECT_TRUE(iter.ReadString16(&str16)); | 393 EXPECT_TRUE(iter.ReadString16(&str16)); |
386 EXPECT_EQ(1U, str16.length()); | 394 EXPECT_EQ(1U, str16.length()); |
387 | 395 |
388 // Check we don't fail in a length check with invalid String16 size. | 396 // Check we don't fail in a length check with invalid String16 size. |
389 // (1<<31) * sizeof(char16) == 0, so this is particularly evil. | 397 // (1<<31) * sizeof(char16) == 0, so this is particularly evil. |
390 Pickle bad_len; | 398 Pickle bad_len; |
391 EXPECT_TRUE(bad_len.WriteInt(1 << 31)); | 399 EXPECT_TRUE(bad_len.WriteInt(1 << 31)); |
392 iter = PickleIterator(bad_len); | 400 iter = PickleIterator(bad_len); |
393 EXPECT_FALSE(iter.ReadString16(&str16)); | 401 EXPECT_FALSE(iter.ReadString16(&str16)); |
394 | |
395 // Check we don't fail in a length check with large WStrings. | |
396 Pickle big_len; | |
397 EXPECT_TRUE(big_len.WriteInt(1 << 30)); | |
398 iter = PickleIterator(big_len); | |
399 std::wstring wstr; | |
400 EXPECT_FALSE(iter.ReadWString(&wstr)); | |
401 } | 402 } |
402 | 403 |
403 // Check we can write zero bytes of data and 'data' can be NULL. | 404 // Check we can write zero bytes of data and 'data' can be NULL. |
404 TEST(PickleTest, ZeroLength) { | 405 TEST(PickleTest, ZeroLength) { |
405 Pickle pickle; | 406 Pickle pickle; |
406 EXPECT_TRUE(pickle.WriteData(NULL, 0)); | 407 EXPECT_TRUE(pickle.WriteData(NULL, 0)); |
407 | 408 |
408 PickleIterator iter(pickle); | 409 PickleIterator iter(pickle); |
409 const char* outdata; | 410 const char* outdata; |
410 int outdatalen; | 411 int outdatalen; |
411 EXPECT_TRUE(iter.ReadData(&outdata, &outdatalen)); | 412 EXPECT_TRUE(iter.ReadData(&outdata, &outdatalen)); |
412 EXPECT_EQ(0, outdatalen); | 413 EXPECT_EQ(0, outdatalen); |
413 // We can't assert that outdata is NULL. | 414 // We can't assert that outdata is NULL. |
414 } | 415 } |
415 | 416 |
416 // Check that ReadBytes works properly with an iterator initialized to NULL. | 417 // Check that ReadBytes works properly with an iterator initialized to NULL. |
417 TEST(PickleTest, ReadBytes) { | 418 TEST(PickleTest, ReadBytes) { |
418 Pickle pickle; | 419 Pickle pickle; |
419 int data = 0x7abcd; | 420 int data = 0x7abcd; |
420 EXPECT_TRUE(pickle.WriteBytes(&data, sizeof(data))); | 421 EXPECT_TRUE(pickle.WriteBytes(&data, sizeof(data))); |
421 | 422 |
422 PickleIterator iter(pickle); | 423 PickleIterator iter(pickle); |
423 const char* outdata_char = NULL; | 424 const char* outdata_char = NULL; |
424 EXPECT_TRUE(iter.ReadBytes(&outdata_char, sizeof(data))); | 425 EXPECT_TRUE(iter.ReadBytes(&outdata_char, sizeof(data))); |
425 | 426 |
426 int outdata; | 427 int outdata; |
427 memcpy(&outdata, outdata_char, sizeof(outdata)); | 428 memcpy(&outdata, outdata_char, sizeof(outdata)); |
428 EXPECT_EQ(data, outdata); | 429 EXPECT_EQ(data, outdata); |
429 } | 430 } |
OLD | NEW |