OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/indexed_db/indexed_db_leveldb_coding.h" | 5 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | |
9 #include <vector> | 8 #include <vector> |
10 | 9 |
11 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
12 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
13 #include "base/strings/string_piece.h" | 12 #include "base/strings/string_piece.h" |
14 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
15 #include "content/browser/indexed_db/leveldb/leveldb_slice.h" | |
16 #include "content/common/indexed_db/indexed_db_key.h" | 14 #include "content/common/indexed_db/indexed_db_key.h" |
17 #include "content/common/indexed_db/indexed_db_key_path.h" | 15 #include "content/common/indexed_db/indexed_db_key_path.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
19 | 17 |
20 using base::StringPiece; | 18 using base::StringPiece; |
21 using WebKit::WebIDBKey; | 19 using WebKit::WebIDBKey; |
22 using WebKit::WebIDBKeyPath; | 20 using WebKit::WebIDBKeyPath; |
23 | 21 |
24 namespace content { | 22 namespace content { |
25 | 23 |
(...skipping 10 matching lines...) Expand all Loading... |
36 } | 34 } |
37 | 35 |
38 static IndexedDBKey CreateArrayIDBKey(const IndexedDBKey& key1, | 36 static IndexedDBKey CreateArrayIDBKey(const IndexedDBKey& key1, |
39 const IndexedDBKey& key2) { | 37 const IndexedDBKey& key2) { |
40 IndexedDBKey::KeyArray array; | 38 IndexedDBKey::KeyArray array; |
41 array.push_back(key1); | 39 array.push_back(key1); |
42 array.push_back(key2); | 40 array.push_back(key2); |
43 return IndexedDBKey(array); | 41 return IndexedDBKey(array); |
44 } | 42 } |
45 | 43 |
46 static std::vector<char> WrappedEncodeByte(char value) { | 44 static std::string WrappedEncodeByte(char value) { |
47 std::vector<char> buffer; | 45 std::string buffer; |
48 EncodeByte(value, &buffer); | 46 EncodeByte(value, &buffer); |
49 return buffer; | 47 return buffer; |
50 } | 48 } |
51 | 49 |
52 TEST(IndexedDBLevelDBCodingTest, EncodeByte) { | 50 TEST(IndexedDBLevelDBCodingTest, EncodeByte) { |
53 std::vector<char> expected; | 51 std::string expected; |
54 expected.push_back(0); | 52 expected.push_back(0); |
55 unsigned char c; | 53 unsigned char c; |
56 | 54 |
57 c = 0; | 55 c = 0; |
58 expected[0] = c; | 56 expected[0] = c; |
59 EXPECT_EQ(expected, WrappedEncodeByte(c)); | 57 EXPECT_EQ(expected, WrappedEncodeByte(c)); |
60 | 58 |
61 c = 1; | 59 c = 1; |
62 expected[0] = c; | 60 expected[0] = c; |
63 EXPECT_EQ(expected, WrappedEncodeByte(c)); | 61 EXPECT_EQ(expected, WrappedEncodeByte(c)); |
64 | 62 |
65 c = 255; | 63 c = 255; |
66 expected[0] = c; | 64 expected[0] = c; |
67 EXPECT_EQ(expected, WrappedEncodeByte(c)); | 65 EXPECT_EQ(expected, WrappedEncodeByte(c)); |
68 } | 66 } |
69 | 67 |
70 TEST(IndexedDBLevelDBCodingTest, DecodeByte) { | 68 TEST(IndexedDBLevelDBCodingTest, DecodeByte) { |
71 std::vector<unsigned char> test_cases; | 69 std::vector<unsigned char> test_cases; |
72 test_cases.push_back(0); | 70 test_cases.push_back(0); |
73 test_cases.push_back(1); | 71 test_cases.push_back(1); |
74 test_cases.push_back(255); | 72 test_cases.push_back(255); |
75 | 73 |
76 for (size_t i = 0; i < test_cases.size(); ++i) { | 74 for (size_t i = 0; i < test_cases.size(); ++i) { |
77 unsigned char n = test_cases[i]; | 75 unsigned char n = test_cases[i]; |
78 std::vector<char> v; | 76 std::string v; |
79 EncodeByte(n, &v); | 77 EncodeByte(n, &v); |
80 | 78 |
81 unsigned char res; | 79 unsigned char res; |
82 ASSERT_GT(v.size(), static_cast<size_t>(0)); | 80 ASSERT_GT(v.size(), static_cast<size_t>(0)); |
83 StringPiece slice(&*v.begin(), v.size()); | 81 StringPiece slice(v); |
84 EXPECT_TRUE(DecodeByte(&slice, &res)); | 82 EXPECT_TRUE(DecodeByte(&slice, &res)); |
85 EXPECT_EQ(n, res); | 83 EXPECT_EQ(n, res); |
86 EXPECT_TRUE(slice.empty()); | 84 EXPECT_TRUE(slice.empty()); |
87 } | 85 } |
88 | 86 |
89 { | 87 { |
90 StringPiece slice; | 88 StringPiece slice; |
91 unsigned char value; | 89 unsigned char value; |
92 EXPECT_FALSE(DecodeByte(&slice, &value)); | 90 EXPECT_FALSE(DecodeByte(&slice, &value)); |
93 } | 91 } |
94 } | 92 } |
95 | 93 |
96 static std::vector<char> WrappedEncodeBool(bool value) { | 94 static std::string WrappedEncodeBool(bool value) { |
97 std::vector<char> buffer; | 95 std::string buffer; |
98 EncodeBool(value, &buffer); | 96 EncodeBool(value, &buffer); |
99 return buffer; | 97 return buffer; |
100 } | 98 } |
101 | 99 |
102 TEST(IndexedDBLevelDBCodingTest, EncodeBool) { | 100 TEST(IndexedDBLevelDBCodingTest, EncodeBool) { |
103 { | 101 { |
104 std::vector<char> expected; | 102 std::string expected; |
105 expected.push_back(1); | 103 expected.push_back(1); |
106 EXPECT_EQ(expected, WrappedEncodeBool(true)); | 104 EXPECT_EQ(expected, WrappedEncodeBool(true)); |
107 } | 105 } |
108 { | 106 { |
109 std::vector<char> expected; | 107 std::string expected; |
110 expected.push_back(0); | 108 expected.push_back(0); |
111 EXPECT_EQ(expected, WrappedEncodeBool(false)); | 109 EXPECT_EQ(expected, WrappedEncodeBool(false)); |
112 } | 110 } |
113 } | 111 } |
114 | 112 |
115 static int CompareKeys(const std::vector<char>& a, const std::vector<char>& b) { | 113 static int CompareKeys(const std::string& a, const std::string& b) { |
116 bool ok; | 114 bool ok; |
117 int result = CompareEncodedIDBKeys(a, b, &ok); | 115 int result = CompareEncodedIDBKeys(a, b, &ok); |
118 EXPECT_TRUE(ok); | 116 EXPECT_TRUE(ok); |
119 return result; | 117 return result; |
120 } | 118 } |
121 | 119 |
122 TEST(IndexedDBLevelDBCodingTest, MaxIDBKey) { | 120 TEST(IndexedDBLevelDBCodingTest, MaxIDBKey) { |
123 std::vector<char> max_key = MaxIDBKey(); | 121 std::string max_key = MaxIDBKey(); |
124 | 122 |
125 std::vector<char> min_key = MinIDBKey(); | 123 std::string min_key = MinIDBKey(); |
126 std::vector<char> array_key; | 124 std::string array_key; |
127 EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); | 125 EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); |
128 std::vector<char> string_key; | 126 std::string string_key; |
129 EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); | 127 EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); |
130 std::vector<char> number_key; | 128 std::string number_key; |
131 EncodeIDBKey(IndexedDBKey(3.14, WebIDBKey::NumberType), &number_key); | 129 EncodeIDBKey(IndexedDBKey(3.14, WebIDBKey::NumberType), &number_key); |
132 std::vector<char> date_key; | 130 std::string date_key; |
133 EncodeIDBKey(IndexedDBKey(1000000, WebIDBKey::DateType), &date_key); | 131 EncodeIDBKey(IndexedDBKey(1000000, WebIDBKey::DateType), &date_key); |
134 | 132 |
135 EXPECT_GT(CompareKeys(max_key, min_key), 0); | 133 EXPECT_GT(CompareKeys(max_key, min_key), 0); |
136 EXPECT_GT(CompareKeys(max_key, array_key), 0); | 134 EXPECT_GT(CompareKeys(max_key, array_key), 0); |
137 EXPECT_GT(CompareKeys(max_key, string_key), 0); | 135 EXPECT_GT(CompareKeys(max_key, string_key), 0); |
138 EXPECT_GT(CompareKeys(max_key, number_key), 0); | 136 EXPECT_GT(CompareKeys(max_key, number_key), 0); |
139 EXPECT_GT(CompareKeys(max_key, date_key), 0); | 137 EXPECT_GT(CompareKeys(max_key, date_key), 0); |
140 } | 138 } |
141 | 139 |
142 TEST(IndexedDBLevelDBCodingTest, MinIDBKey) { | 140 TEST(IndexedDBLevelDBCodingTest, MinIDBKey) { |
143 std::vector<char> min_key = MinIDBKey(); | 141 std::string min_key = MinIDBKey(); |
144 | 142 |
145 std::vector<char> max_key = MaxIDBKey(); | 143 std::string max_key = MaxIDBKey(); |
146 std::vector<char> array_key; | 144 std::string array_key; |
147 EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); | 145 EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); |
148 std::vector<char> string_key; | 146 std::string string_key; |
149 EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); | 147 EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); |
150 std::vector<char> number_key; | 148 std::string number_key; |
151 EncodeIDBKey(IndexedDBKey(3.14, WebIDBKey::NumberType), &number_key); | 149 EncodeIDBKey(IndexedDBKey(3.14, WebIDBKey::NumberType), &number_key); |
152 std::vector<char> date_key; | 150 std::string date_key; |
153 EncodeIDBKey(IndexedDBKey(1000000, WebIDBKey::DateType), &date_key); | 151 EncodeIDBKey(IndexedDBKey(1000000, WebIDBKey::DateType), &date_key); |
154 | 152 |
155 EXPECT_LT(CompareKeys(min_key, max_key), 0); | 153 EXPECT_LT(CompareKeys(min_key, max_key), 0); |
156 EXPECT_LT(CompareKeys(min_key, array_key), 0); | 154 EXPECT_LT(CompareKeys(min_key, array_key), 0); |
157 EXPECT_LT(CompareKeys(min_key, string_key), 0); | 155 EXPECT_LT(CompareKeys(min_key, string_key), 0); |
158 EXPECT_LT(CompareKeys(min_key, number_key), 0); | 156 EXPECT_LT(CompareKeys(min_key, number_key), 0); |
159 EXPECT_LT(CompareKeys(min_key, date_key), 0); | 157 EXPECT_LT(CompareKeys(min_key, date_key), 0); |
160 } | 158 } |
161 | 159 |
162 static std::vector<char> WrappedEncodeInt(int64 value) { | 160 static std::string WrappedEncodeInt(int64 value) { |
163 std::vector<char> buffer; | 161 std::string buffer; |
164 EncodeInt(value, &buffer); | 162 EncodeInt(value, &buffer); |
165 return buffer; | 163 return buffer; |
166 } | 164 } |
167 | 165 |
168 TEST(IndexedDBLevelDBCodingTest, EncodeInt) { | 166 TEST(IndexedDBLevelDBCodingTest, EncodeInt) { |
169 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(0).size()); | 167 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(0).size()); |
170 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(1).size()); | 168 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(1).size()); |
171 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(255).size()); | 169 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeInt(255).size()); |
172 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeInt(256).size()); | 170 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeInt(256).size()); |
173 EXPECT_EQ(static_cast<size_t>(4), WrappedEncodeInt(0xffffffff).size()); | 171 EXPECT_EQ(static_cast<size_t>(4), WrappedEncodeInt(0xffffffff).size()); |
174 #ifdef NDEBUG | 172 #ifdef NDEBUG |
175 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeInt(-1).size()); | 173 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeInt(-1).size()); |
176 #endif | 174 #endif |
177 } | 175 } |
178 | 176 |
179 TEST(IndexedDBLevelDBCodingTest, DecodeBool) { | 177 TEST(IndexedDBLevelDBCodingTest, DecodeBool) { |
180 { | 178 { |
181 std::vector<char> encoded; | 179 std::string encoded; |
182 encoded.push_back(1); | 180 encoded.push_back(1); |
183 StringPiece slice(&*encoded.begin(), encoded.size()); | 181 StringPiece slice(encoded); |
184 bool value; | 182 bool value; |
185 EXPECT_TRUE(DecodeBool(&slice, &value)); | 183 EXPECT_TRUE(DecodeBool(&slice, &value)); |
186 EXPECT_TRUE(value); | 184 EXPECT_TRUE(value); |
187 EXPECT_TRUE(slice.empty()); | 185 EXPECT_TRUE(slice.empty()); |
188 } | 186 } |
189 { | 187 { |
190 std::vector<char> encoded; | 188 std::string encoded; |
191 encoded.push_back(0); | 189 encoded.push_back(0); |
192 StringPiece slice(&*encoded.begin(), encoded.size()); | 190 StringPiece slice(encoded); |
193 bool value; | 191 bool value; |
194 EXPECT_TRUE(DecodeBool(&slice, &value)); | 192 EXPECT_TRUE(DecodeBool(&slice, &value)); |
195 EXPECT_FALSE(value); | 193 EXPECT_FALSE(value); |
196 EXPECT_TRUE(slice.empty()); | 194 EXPECT_TRUE(slice.empty()); |
197 } | 195 } |
198 { | 196 { |
199 StringPiece slice; | 197 StringPiece slice; |
200 bool value; | 198 bool value; |
201 EXPECT_FALSE(DecodeBool(&slice, &value)); | 199 EXPECT_FALSE(DecodeBool(&slice, &value)); |
202 } | 200 } |
203 } | 201 } |
204 | 202 |
205 TEST(IndexedDBLevelDBCodingTest, DecodeInt) { | 203 TEST(IndexedDBLevelDBCodingTest, DecodeInt) { |
206 std::vector<int64> test_cases; | 204 std::vector<int64> test_cases; |
207 test_cases.push_back(0); | 205 test_cases.push_back(0); |
208 test_cases.push_back(1); | 206 test_cases.push_back(1); |
209 test_cases.push_back(255); | 207 test_cases.push_back(255); |
210 test_cases.push_back(256); | 208 test_cases.push_back(256); |
211 test_cases.push_back(65535); | 209 test_cases.push_back(65535); |
212 test_cases.push_back(655536); | 210 test_cases.push_back(655536); |
213 test_cases.push_back(7711192431755665792ll); | 211 test_cases.push_back(7711192431755665792ll); |
214 test_cases.push_back(0x7fffffffffffffffll); | 212 test_cases.push_back(0x7fffffffffffffffll); |
215 #ifdef NDEBUG | 213 #ifdef NDEBUG |
216 test_cases.push_back(-3); | 214 test_cases.push_back(-3); |
217 #endif | 215 #endif |
218 | 216 |
219 for (size_t i = 0; i < test_cases.size(); ++i) { | 217 for (size_t i = 0; i < test_cases.size(); ++i) { |
220 int64 n = test_cases[i]; | 218 int64 n = test_cases[i]; |
221 std::vector<char> v = WrappedEncodeInt(n); | 219 std::string v = WrappedEncodeInt(n); |
222 ASSERT_GT(v.size(), static_cast<size_t>(0)); | 220 ASSERT_GT(v.size(), static_cast<size_t>(0)); |
223 StringPiece slice(&*v.begin(), v.size()); | 221 StringPiece slice(v); |
224 int64 value; | 222 int64 value; |
225 EXPECT_TRUE(DecodeInt(&slice, &value)); | 223 EXPECT_TRUE(DecodeInt(&slice, &value)); |
226 EXPECT_EQ(n, value); | 224 EXPECT_EQ(n, value); |
227 EXPECT_TRUE(slice.empty()); | 225 EXPECT_TRUE(slice.empty()); |
228 | 226 |
229 // Verify decoding at an offset, to detect unaligned memory access. | 227 // Verify decoding at an offset, to detect unaligned memory access. |
230 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); | 228 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); |
231 slice = StringPiece(&*v.begin() + 1, v.size() - 1); | 229 slice = StringPiece(&*v.begin() + 1, v.size() - 1); |
232 EXPECT_TRUE(DecodeInt(&slice, &value)); | 230 EXPECT_TRUE(DecodeInt(&slice, &value)); |
233 EXPECT_EQ(n, value); | 231 EXPECT_EQ(n, value); |
234 EXPECT_TRUE(slice.empty()); | 232 EXPECT_TRUE(slice.empty()); |
235 } | 233 } |
236 { | 234 { |
237 StringPiece slice; | 235 StringPiece slice; |
238 int64 value; | 236 int64 value; |
239 EXPECT_FALSE(DecodeInt(&slice, &value)); | 237 EXPECT_FALSE(DecodeInt(&slice, &value)); |
240 } | 238 } |
241 } | 239 } |
242 | 240 |
243 static std::vector<char> WrappedEncodeVarInt(int64 value) { | 241 static std::string WrappedEncodeVarInt(int64 value) { |
244 std::vector<char> buffer; | 242 std::string buffer; |
245 EncodeVarInt(value, &buffer); | 243 EncodeVarInt(value, &buffer); |
246 return buffer; | 244 return buffer; |
247 } | 245 } |
248 | 246 |
249 TEST(IndexedDBLevelDBCodingTest, EncodeVarInt) { | 247 TEST(IndexedDBLevelDBCodingTest, EncodeVarInt) { |
250 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeVarInt(0).size()); | 248 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeVarInt(0).size()); |
251 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeVarInt(1).size()); | 249 EXPECT_EQ(static_cast<size_t>(1), WrappedEncodeVarInt(1).size()); |
252 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeVarInt(255).size()); | 250 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeVarInt(255).size()); |
253 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeVarInt(256).size()); | 251 EXPECT_EQ(static_cast<size_t>(2), WrappedEncodeVarInt(256).size()); |
254 EXPECT_EQ(static_cast<size_t>(5), WrappedEncodeVarInt(0xffffffff).size()); | 252 EXPECT_EQ(static_cast<size_t>(5), WrappedEncodeVarInt(0xffffffff).size()); |
(...skipping 15 matching lines...) Expand all Loading... |
270 test_cases.push_back(65535); | 268 test_cases.push_back(65535); |
271 test_cases.push_back(655536); | 269 test_cases.push_back(655536); |
272 test_cases.push_back(7711192431755665792ll); | 270 test_cases.push_back(7711192431755665792ll); |
273 test_cases.push_back(0x7fffffffffffffffll); | 271 test_cases.push_back(0x7fffffffffffffffll); |
274 #ifdef NDEBUG | 272 #ifdef NDEBUG |
275 test_cases.push_back(-3); | 273 test_cases.push_back(-3); |
276 #endif | 274 #endif |
277 | 275 |
278 for (size_t i = 0; i < test_cases.size(); ++i) { | 276 for (size_t i = 0; i < test_cases.size(); ++i) { |
279 int64 n = test_cases[i]; | 277 int64 n = test_cases[i]; |
280 std::vector<char> v = WrappedEncodeVarInt(n); | 278 std::string v = WrappedEncodeVarInt(n); |
281 ASSERT_GT(v.size(), static_cast<size_t>(0)); | 279 ASSERT_GT(v.size(), static_cast<size_t>(0)); |
282 StringPiece slice(&*v.begin(), v.size()); | 280 StringPiece slice(v); |
283 int64 res; | 281 int64 res; |
284 EXPECT_TRUE(DecodeVarInt(&slice, &res)); | 282 EXPECT_TRUE(DecodeVarInt(&slice, &res)); |
285 EXPECT_EQ(n, res); | 283 EXPECT_EQ(n, res); |
286 EXPECT_TRUE(slice.empty()); | 284 EXPECT_TRUE(slice.empty()); |
287 | 285 |
288 slice = StringPiece(&*v.begin(), v.size() - 1); | 286 slice = StringPiece(&*v.begin(), v.size() - 1); |
289 EXPECT_FALSE(DecodeVarInt(&slice, &res)); | 287 EXPECT_FALSE(DecodeVarInt(&slice, &res)); |
290 | 288 |
291 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); | 289 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); |
292 EXPECT_FALSE(DecodeVarInt(&slice, &res)); | 290 EXPECT_FALSE(DecodeVarInt(&slice, &res)); |
293 | 291 |
294 // Verify decoding at an offset, to detect unaligned memory access. | 292 // Verify decoding at an offset, to detect unaligned memory access. |
295 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); | 293 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); |
296 slice = StringPiece(&*v.begin() + 1, v.size() - 1); | 294 slice = StringPiece(&*v.begin() + 1, v.size() - 1); |
297 EXPECT_TRUE(DecodeVarInt(&slice, &res)); | 295 EXPECT_TRUE(DecodeVarInt(&slice, &res)); |
298 EXPECT_EQ(n, res); | 296 EXPECT_EQ(n, res); |
299 EXPECT_TRUE(slice.empty()); | 297 EXPECT_TRUE(slice.empty()); |
300 } | 298 } |
301 } | 299 } |
302 | 300 |
303 static std::vector<char> WrappedEncodeString(string16 value) { | 301 static std::string WrappedEncodeString(string16 value) { |
304 std::vector<char> buffer; | 302 std::string buffer; |
305 EncodeString(value, &buffer); | 303 EncodeString(value, &buffer); |
306 return buffer; | 304 return buffer; |
307 } | 305 } |
308 | 306 |
309 TEST(IndexedDBLevelDBCodingTest, EncodeString) { | 307 TEST(IndexedDBLevelDBCodingTest, EncodeString) { |
310 const char16 test_string_a[] = {'f', 'o', 'o', '\0'}; | 308 const char16 test_string_a[] = {'f', 'o', 'o', '\0'}; |
311 const char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; | 309 const char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; |
312 | 310 |
313 EXPECT_EQ(static_cast<size_t>(0), | 311 EXPECT_EQ(static_cast<size_t>(0), |
314 WrappedEncodeString(ASCIIToUTF16("")).size()); | 312 WrappedEncodeString(ASCIIToUTF16("")).size()); |
(...skipping 13 matching lines...) Expand all Loading... |
328 | 326 |
329 std::vector<string16> test_cases; | 327 std::vector<string16> test_cases; |
330 test_cases.push_back(string16()); | 328 test_cases.push_back(string16()); |
331 test_cases.push_back(ASCIIToUTF16("a")); | 329 test_cases.push_back(ASCIIToUTF16("a")); |
332 test_cases.push_back(ASCIIToUTF16("foo")); | 330 test_cases.push_back(ASCIIToUTF16("foo")); |
333 test_cases.push_back(test_string_a); | 331 test_cases.push_back(test_string_a); |
334 test_cases.push_back(test_string_b); | 332 test_cases.push_back(test_string_b); |
335 | 333 |
336 for (size_t i = 0; i < test_cases.size(); ++i) { | 334 for (size_t i = 0; i < test_cases.size(); ++i) { |
337 const string16& test_case = test_cases[i]; | 335 const string16& test_case = test_cases[i]; |
338 std::vector<char> v = WrappedEncodeString(test_case); | 336 std::string v = WrappedEncodeString(test_case); |
339 | 337 |
340 StringPiece slice; | 338 StringPiece slice; |
341 if (v.size()) { | 339 if (v.size()) { |
342 slice = StringPiece(&*v.begin(), v.size()); | 340 slice = StringPiece(&*v.begin(), v.size()); |
343 } | 341 } |
344 | 342 |
345 string16 result; | 343 string16 result; |
346 EXPECT_TRUE(DecodeString(&slice, &result)); | 344 EXPECT_TRUE(DecodeString(&slice, &result)); |
347 EXPECT_EQ(test_case, result); | 345 EXPECT_EQ(test_case, result); |
348 EXPECT_TRUE(slice.empty()); | 346 EXPECT_TRUE(slice.empty()); |
349 | 347 |
350 // Verify decoding at an offset, to detect unaligned memory access. | 348 // Verify decoding at an offset, to detect unaligned memory access. |
351 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); | 349 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); |
352 slice = StringPiece(&*v.begin() + 1, v.size() - 1); | 350 slice = StringPiece(&*v.begin() + 1, v.size() - 1); |
353 EXPECT_TRUE(DecodeString(&slice, &result)); | 351 EXPECT_TRUE(DecodeString(&slice, &result)); |
354 EXPECT_EQ(test_case, result); | 352 EXPECT_EQ(test_case, result); |
355 EXPECT_TRUE(slice.empty()); | 353 EXPECT_TRUE(slice.empty()); |
356 } | 354 } |
357 } | 355 } |
358 | 356 |
359 static std::vector<char> WrappedEncodeStringWithLength(string16 value) { | 357 static std::string WrappedEncodeStringWithLength(string16 value) { |
360 std::vector<char> buffer; | 358 std::string buffer; |
361 EncodeStringWithLength(value, &buffer); | 359 EncodeStringWithLength(value, &buffer); |
362 return buffer; | 360 return buffer; |
363 } | 361 } |
364 | 362 |
365 TEST(IndexedDBLevelDBCodingTest, EncodeStringWithLength) { | 363 TEST(IndexedDBLevelDBCodingTest, EncodeStringWithLength) { |
366 const char16 test_string_a[] = {'f', 'o', 'o', '\0'}; | 364 const char16 test_string_a[] = {'f', 'o', 'o', '\0'}; |
367 const char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; | 365 const char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; |
368 | 366 |
369 EXPECT_EQ(static_cast<size_t>(1), | 367 EXPECT_EQ(static_cast<size_t>(1), |
370 WrappedEncodeStringWithLength(string16()).size()); | 368 WrappedEncodeStringWithLength(string16()).size()); |
(...skipping 18 matching lines...) Expand all Loading... |
389 std::vector<string16> test_cases; | 387 std::vector<string16> test_cases; |
390 test_cases.push_back(ASCIIToUTF16("")); | 388 test_cases.push_back(ASCIIToUTF16("")); |
391 test_cases.push_back(ASCIIToUTF16("a")); | 389 test_cases.push_back(ASCIIToUTF16("a")); |
392 test_cases.push_back(ASCIIToUTF16("foo")); | 390 test_cases.push_back(ASCIIToUTF16("foo")); |
393 test_cases.push_back(string16(test_string_a)); | 391 test_cases.push_back(string16(test_string_a)); |
394 test_cases.push_back(string16(test_string_b)); | 392 test_cases.push_back(string16(test_string_b)); |
395 test_cases.push_back(string16(long_string)); | 393 test_cases.push_back(string16(long_string)); |
396 | 394 |
397 for (size_t i = 0; i < test_cases.size(); ++i) { | 395 for (size_t i = 0; i < test_cases.size(); ++i) { |
398 string16 s = test_cases[i]; | 396 string16 s = test_cases[i]; |
399 std::vector<char> v = WrappedEncodeStringWithLength(s); | 397 std::string v = WrappedEncodeStringWithLength(s); |
400 ASSERT_GT(v.size(), static_cast<size_t>(0)); | 398 ASSERT_GT(v.size(), static_cast<size_t>(0)); |
401 StringPiece slice(&*v.begin(), v.size()); | 399 StringPiece slice(v); |
402 string16 res; | 400 string16 res; |
403 EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); | 401 EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); |
404 EXPECT_EQ(s, res); | 402 EXPECT_EQ(s, res); |
405 EXPECT_TRUE(slice.empty()); | 403 EXPECT_TRUE(slice.empty()); |
406 | 404 |
407 slice = StringPiece(&*v.begin(), v.size() - 1); | 405 slice = StringPiece(&*v.begin(), v.size() - 1); |
408 EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); | 406 EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); |
409 | 407 |
410 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); | 408 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); |
411 EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); | 409 EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); |
412 | 410 |
413 // Verify decoding at an offset, to detect unaligned memory access. | 411 // Verify decoding at an offset, to detect unaligned memory access. |
414 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); | 412 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); |
415 slice = StringPiece(&*v.begin() + 1, v.size() - 1); | 413 slice = StringPiece(&*v.begin() + 1, v.size() - 1); |
416 EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); | 414 EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); |
417 EXPECT_EQ(s, res); | 415 EXPECT_EQ(s, res); |
418 EXPECT_TRUE(slice.empty()); | 416 EXPECT_TRUE(slice.empty()); |
419 } | 417 } |
420 } | 418 } |
421 | 419 |
422 static int CompareStrings(const std::vector<char>& p, | 420 static int CompareStrings(const std::string& p, const std::string& q) { |
423 const std::vector<char>& q) { | |
424 bool ok; | 421 bool ok; |
425 DCHECK(!p.empty()); | 422 DCHECK(!p.empty()); |
426 DCHECK(!q.empty()); | 423 DCHECK(!q.empty()); |
427 StringPiece slice_p(&*p.begin(), p.size()); | 424 StringPiece slice_p(p); |
428 StringPiece slice_q(&*q.begin(), q.size()); | 425 StringPiece slice_q(q); |
429 int result = CompareEncodedStringsWithLength(&slice_p, &slice_q, &ok); | 426 int result = CompareEncodedStringsWithLength(&slice_p, &slice_q, &ok); |
430 EXPECT_TRUE(ok); | 427 EXPECT_TRUE(ok); |
431 EXPECT_TRUE(slice_p.empty()); | 428 EXPECT_TRUE(slice_p.empty()); |
432 EXPECT_TRUE(slice_q.empty()); | 429 EXPECT_TRUE(slice_q.empty()); |
433 return result; | 430 return result; |
434 } | 431 } |
435 | 432 |
436 TEST(IndexedDBLevelDBCodingTest, CompareEncodedStringsWithLength) { | 433 TEST(IndexedDBLevelDBCodingTest, CompareEncodedStringsWithLength) { |
437 const char16 test_string_a[] = {0x1000, 0x1000, '\0'}; | 434 const char16 test_string_a[] = {0x1000, 0x1000, '\0'}; |
438 const char16 test_string_b[] = {0x1000, 0x1000, 0x1000, '\0'}; | 435 const char16 test_string_b[] = {0x1000, 0x1000, 0x1000, '\0'}; |
(...skipping 18 matching lines...) Expand all Loading... |
457 | 454 |
458 for (size_t i = 0; i < test_cases.size() - 1; ++i) { | 455 for (size_t i = 0; i < test_cases.size() - 1; ++i) { |
459 string16 a = test_cases[i]; | 456 string16 a = test_cases[i]; |
460 string16 b = test_cases[i + 1]; | 457 string16 b = test_cases[i + 1]; |
461 | 458 |
462 EXPECT_LT(a.compare(b), 0); | 459 EXPECT_LT(a.compare(b), 0); |
463 EXPECT_GT(b.compare(a), 0); | 460 EXPECT_GT(b.compare(a), 0); |
464 EXPECT_EQ(a.compare(a), 0); | 461 EXPECT_EQ(a.compare(a), 0); |
465 EXPECT_EQ(b.compare(b), 0); | 462 EXPECT_EQ(b.compare(b), 0); |
466 | 463 |
467 std::vector<char> encoded_a = WrappedEncodeStringWithLength(a); | 464 std::string encoded_a = WrappedEncodeStringWithLength(a); |
468 EXPECT_TRUE(encoded_a.size()); | 465 EXPECT_TRUE(encoded_a.size()); |
469 std::vector<char> encoded_b = WrappedEncodeStringWithLength(b); | 466 std::string encoded_b = WrappedEncodeStringWithLength(b); |
470 EXPECT_TRUE(encoded_a.size()); | 467 EXPECT_TRUE(encoded_a.size()); |
471 | 468 |
472 EXPECT_LT(CompareStrings(encoded_a, encoded_b), 0); | 469 EXPECT_LT(CompareStrings(encoded_a, encoded_b), 0); |
473 EXPECT_GT(CompareStrings(encoded_b, encoded_a), 0); | 470 EXPECT_GT(CompareStrings(encoded_b, encoded_a), 0); |
474 EXPECT_EQ(CompareStrings(encoded_a, encoded_a), 0); | 471 EXPECT_EQ(CompareStrings(encoded_a, encoded_a), 0); |
475 EXPECT_EQ(CompareStrings(encoded_b, encoded_b), 0); | 472 EXPECT_EQ(CompareStrings(encoded_b, encoded_b), 0); |
476 } | 473 } |
477 } | 474 } |
478 | 475 |
479 static std::vector<char> WrappedEncodeDouble(double value) { | 476 static std::string WrappedEncodeDouble(double value) { |
480 std::vector<char> buffer; | 477 std::string buffer; |
481 EncodeDouble(value, &buffer); | 478 EncodeDouble(value, &buffer); |
482 return buffer; | 479 return buffer; |
483 } | 480 } |
484 | 481 |
485 TEST(IndexedDBLevelDBCodingTest, EncodeDouble) { | 482 TEST(IndexedDBLevelDBCodingTest, EncodeDouble) { |
486 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeDouble(0).size()); | 483 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeDouble(0).size()); |
487 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeDouble(3.14).size()); | 484 EXPECT_EQ(static_cast<size_t>(8), WrappedEncodeDouble(3.14).size()); |
488 } | 485 } |
489 | 486 |
490 TEST(IndexedDBLevelDBCodingTest, DecodeDouble) { | 487 TEST(IndexedDBLevelDBCodingTest, DecodeDouble) { |
491 std::vector<double> test_cases; | 488 std::vector<double> test_cases; |
492 test_cases.push_back(3.14); | 489 test_cases.push_back(3.14); |
493 test_cases.push_back(-3.14); | 490 test_cases.push_back(-3.14); |
494 | 491 |
495 for (size_t i = 0; i < test_cases.size(); ++i) { | 492 for (size_t i = 0; i < test_cases.size(); ++i) { |
496 double value = test_cases[i]; | 493 double value = test_cases[i]; |
497 std::vector<char> v = WrappedEncodeDouble(value); | 494 std::string v = WrappedEncodeDouble(value); |
498 ASSERT_GT(v.size(), static_cast<size_t>(0)); | 495 ASSERT_GT(v.size(), static_cast<size_t>(0)); |
499 StringPiece slice(&*v.begin(), v.size()); | 496 StringPiece slice(v); |
500 double result; | 497 double result; |
501 EXPECT_TRUE(DecodeDouble(&slice, &result)); | 498 EXPECT_TRUE(DecodeDouble(&slice, &result)); |
502 EXPECT_EQ(value, result); | 499 EXPECT_EQ(value, result); |
503 EXPECT_TRUE(slice.empty()); | 500 EXPECT_TRUE(slice.empty()); |
504 | 501 |
505 slice = StringPiece(&*v.begin(), v.size() - 1); | 502 slice = StringPiece(&*v.begin(), v.size() - 1); |
506 EXPECT_FALSE(DecodeDouble(&slice, &result)); | 503 EXPECT_FALSE(DecodeDouble(&slice, &result)); |
507 | 504 |
508 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); | 505 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); |
509 EXPECT_FALSE(DecodeDouble(&slice, &result)); | 506 EXPECT_FALSE(DecodeDouble(&slice, &result)); |
510 | 507 |
511 // Verify decoding at an offset, to detect unaligned memory access. | 508 // Verify decoding at an offset, to detect unaligned memory access. |
512 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); | 509 v.insert(v.begin(), static_cast<size_t>(1), static_cast<char>(0)); |
513 slice = StringPiece(&*v.begin() + 1, v.size() - 1); | 510 slice = StringPiece(&*v.begin() + 1, v.size() - 1); |
514 EXPECT_TRUE(DecodeDouble(&slice, &result)); | 511 EXPECT_TRUE(DecodeDouble(&slice, &result)); |
515 EXPECT_EQ(value, result); | 512 EXPECT_EQ(value, result); |
516 EXPECT_TRUE(slice.empty()); | 513 EXPECT_TRUE(slice.empty()); |
517 } | 514 } |
518 } | 515 } |
519 | 516 |
520 TEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKey) { | 517 TEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKey) { |
521 IndexedDBKey expected_key; | 518 IndexedDBKey expected_key; |
522 scoped_ptr<IndexedDBKey> decoded_key; | 519 scoped_ptr<IndexedDBKey> decoded_key; |
523 std::vector<char> v; | 520 std::string v; |
524 StringPiece slice; | 521 StringPiece slice; |
525 | 522 |
526 std::vector<IndexedDBKey> test_cases; | 523 std::vector<IndexedDBKey> test_cases; |
527 test_cases.push_back(IndexedDBKey(1234, WebIDBKey::NumberType)); | 524 test_cases.push_back(IndexedDBKey(1234, WebIDBKey::NumberType)); |
528 test_cases.push_back(IndexedDBKey(7890, WebIDBKey::DateType)); | 525 test_cases.push_back(IndexedDBKey(7890, WebIDBKey::DateType)); |
529 test_cases.push_back(IndexedDBKey(ASCIIToUTF16("Hello World!"))); | 526 test_cases.push_back(IndexedDBKey(ASCIIToUTF16("Hello World!"))); |
530 test_cases.push_back(IndexedDBKey(IndexedDBKey::KeyArray())); | 527 test_cases.push_back(IndexedDBKey(IndexedDBKey::KeyArray())); |
531 | 528 |
532 IndexedDBKey::KeyArray array; | 529 IndexedDBKey::KeyArray array; |
533 array.push_back(IndexedDBKey(1234, WebIDBKey::NumberType)); | 530 array.push_back(IndexedDBKey(1234, WebIDBKey::NumberType)); |
(...skipping 12 matching lines...) Expand all Loading... |
546 EXPECT_TRUE(slice.empty()); | 543 EXPECT_TRUE(slice.empty()); |
547 | 544 |
548 slice = StringPiece(&*v.begin(), v.size() - 1); | 545 slice = StringPiece(&*v.begin(), v.size() - 1); |
549 EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); | 546 EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); |
550 | 547 |
551 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); | 548 slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); |
552 EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); | 549 EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); |
553 } | 550 } |
554 } | 551 } |
555 | 552 |
556 static std::vector<char> WrappedEncodeIDBKeyPath( | 553 static std::string WrappedEncodeIDBKeyPath(const IndexedDBKeyPath& value) { |
557 const IndexedDBKeyPath& value) { | 554 std::string buffer; |
558 std::vector<char> buffer; | |
559 EncodeIDBKeyPath(value, &buffer); | 555 EncodeIDBKeyPath(value, &buffer); |
560 return buffer; | 556 return buffer; |
561 } | 557 } |
562 | 558 |
563 TEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKeyPath) { | 559 TEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKeyPath) { |
564 std::vector<IndexedDBKeyPath> key_paths; | 560 std::vector<IndexedDBKeyPath> key_paths; |
565 std::vector<std::vector<char> > encoded_paths; | 561 std::vector<std::string> encoded_paths; |
566 | 562 |
567 { | 563 { |
568 key_paths.push_back(IndexedDBKeyPath()); | 564 key_paths.push_back(IndexedDBKeyPath()); |
569 char expected[] = {0, 0, // Header | 565 char expected[] = {0, 0, // Header |
570 0 // Type is null | 566 0 // Type is null |
571 }; | 567 }; |
572 encoded_paths.push_back( | 568 encoded_paths.push_back( |
573 std::vector<char>(expected, expected + arraysize(expected))); | 569 std::string(expected, expected + arraysize(expected))); |
574 } | 570 } |
575 | 571 |
576 { | 572 { |
577 key_paths.push_back(IndexedDBKeyPath(string16())); | 573 key_paths.push_back(IndexedDBKeyPath(string16())); |
578 char expected[] = {0, 0, // Header | 574 char expected[] = {0, 0, // Header |
579 1, // Type is string | 575 1, // Type is string |
580 0 // Length is 0 | 576 0 // Length is 0 |
581 }; | 577 }; |
582 encoded_paths.push_back( | 578 encoded_paths.push_back( |
583 std::vector<char>(expected, expected + arraysize(expected))); | 579 std::string(expected, expected + arraysize(expected))); |
584 } | 580 } |
585 | 581 |
586 { | 582 { |
587 key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo"))); | 583 key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo"))); |
588 char expected[] = {0, 0, // Header | 584 char expected[] = {0, 0, // Header |
589 1, // Type is string | 585 1, // Type is string |
590 3, 0, 'f', 0, 'o', 0, 'o' // String length 3, UTF-16BE | 586 3, 0, 'f', 0, 'o', 0, 'o' // String length 3, UTF-16BE |
591 }; | 587 }; |
592 encoded_paths.push_back( | 588 encoded_paths.push_back( |
593 std::vector<char>(expected, expected + arraysize(expected))); | 589 std::string(expected, expected + arraysize(expected))); |
594 } | 590 } |
595 | 591 |
596 { | 592 { |
597 key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo.bar"))); | 593 key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo.bar"))); |
598 char expected[] = {0, 0, // Header | 594 char expected[] = {0, 0, // Header |
599 1, // Type is string | 595 1, // Type is string |
600 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, | 596 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, |
601 'r' // String length 7, UTF-16BE | 597 'r' // String length 7, UTF-16BE |
602 }; | 598 }; |
603 encoded_paths.push_back( | 599 encoded_paths.push_back( |
604 std::vector<char>(expected, expected + arraysize(expected))); | 600 std::string(expected, expected + arraysize(expected))); |
605 } | 601 } |
606 | 602 |
607 { | 603 { |
608 std::vector<string16> array; | 604 std::vector<string16> array; |
609 array.push_back(string16()); | 605 array.push_back(string16()); |
610 array.push_back(ASCIIToUTF16("foo")); | 606 array.push_back(ASCIIToUTF16("foo")); |
611 array.push_back(ASCIIToUTF16("foo.bar")); | 607 array.push_back(ASCIIToUTF16("foo.bar")); |
612 | 608 |
613 key_paths.push_back(IndexedDBKeyPath(array)); | 609 key_paths.push_back(IndexedDBKeyPath(array)); |
614 char expected[] = {0, 0, // Header | 610 char expected[] = {0, 0, // Header |
615 2, 3, // Type is array, length is 3 | 611 2, 3, // Type is array, length is 3 |
616 0, // Member 1 (String length 0) | 612 0, // Member 1 (String length 0) |
617 3, 0, 'f', 0, 'o', 0, 'o', // Member 2 (String length 3) | 613 3, 0, 'f', 0, 'o', 0, 'o', // Member 2 (String length 3) |
618 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, | 614 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, |
619 'r' // Member 3 (String length 7) | 615 'r' // Member 3 (String length 7) |
620 }; | 616 }; |
621 encoded_paths.push_back( | 617 encoded_paths.push_back( |
622 std::vector<char>(expected, expected + arraysize(expected))); | 618 std::string(expected, expected + arraysize(expected))); |
623 } | 619 } |
624 | 620 |
625 ASSERT_EQ(key_paths.size(), encoded_paths.size()); | 621 ASSERT_EQ(key_paths.size(), encoded_paths.size()); |
626 for (size_t i = 0; i < key_paths.size(); ++i) { | 622 for (size_t i = 0; i < key_paths.size(); ++i) { |
627 IndexedDBKeyPath key_path = key_paths[i]; | 623 IndexedDBKeyPath key_path = key_paths[i]; |
628 std::vector<char> encoded = encoded_paths[i]; | 624 std::string encoded = encoded_paths[i]; |
629 | 625 |
630 std::vector<char> v = WrappedEncodeIDBKeyPath(key_path); | 626 std::string v = WrappedEncodeIDBKeyPath(key_path); |
631 EXPECT_EQ(encoded, v); | 627 EXPECT_EQ(encoded, v); |
632 | 628 |
633 StringPiece slice(&*encoded.begin(), encoded.size()); | 629 StringPiece slice(encoded); |
634 IndexedDBKeyPath decoded; | 630 IndexedDBKeyPath decoded; |
635 EXPECT_TRUE(DecodeIDBKeyPath(&slice, &decoded)); | 631 EXPECT_TRUE(DecodeIDBKeyPath(&slice, &decoded)); |
636 EXPECT_EQ(key_path, decoded); | 632 EXPECT_EQ(key_path, decoded); |
637 EXPECT_TRUE(slice.empty()); | 633 EXPECT_TRUE(slice.empty()); |
638 } | 634 } |
639 } | 635 } |
640 | 636 |
641 TEST(IndexedDBLevelDBCodingTest, DecodeLegacyIDBKeyPath) { | 637 TEST(IndexedDBLevelDBCodingTest, DecodeLegacyIDBKeyPath) { |
642 // Legacy encoding of string key paths. | 638 // Legacy encoding of string key paths. |
643 std::vector<IndexedDBKeyPath> key_paths; | 639 std::vector<IndexedDBKeyPath> key_paths; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 keys.push_back(CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey()))); | 700 keys.push_back(CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey()))); |
705 keys.push_back(CreateArrayIDBKey( | 701 keys.push_back(CreateArrayIDBKey( |
706 CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey())))); | 702 CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey())))); |
707 | 703 |
708 for (size_t i = 0; i < keys.size() - 1; ++i) { | 704 for (size_t i = 0; i < keys.size() - 1; ++i) { |
709 const IndexedDBKey& key_a = keys[i]; | 705 const IndexedDBKey& key_a = keys[i]; |
710 const IndexedDBKey& key_b = keys[i + 1]; | 706 const IndexedDBKey& key_b = keys[i + 1]; |
711 | 707 |
712 EXPECT_TRUE(key_a.IsLessThan(key_b)); | 708 EXPECT_TRUE(key_a.IsLessThan(key_b)); |
713 | 709 |
714 std::vector<char> encoded_a; | 710 std::string encoded_a; |
715 EncodeIDBKey(key_a, &encoded_a); | 711 EncodeIDBKey(key_a, &encoded_a); |
716 EXPECT_TRUE(encoded_a.size()); | 712 EXPECT_TRUE(encoded_a.size()); |
717 std::vector<char> encoded_b; | 713 std::string encoded_b; |
718 EncodeIDBKey(key_b, &encoded_b); | 714 EncodeIDBKey(key_b, &encoded_b); |
719 EXPECT_TRUE(encoded_b.size()); | 715 EXPECT_TRUE(encoded_b.size()); |
720 | 716 |
721 std::vector<char> extracted_a; | 717 std::string extracted_a; |
722 std::vector<char> extracted_b; | 718 std::string extracted_b; |
723 StringPiece slice; | 719 StringPiece slice; |
724 | 720 |
725 slice = StringPiece(&*encoded_a.begin(), encoded_a.size()); | 721 slice = StringPiece(encoded_a); |
726 EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_a)); | 722 EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_a)); |
727 EXPECT_TRUE(slice.empty()); | 723 EXPECT_TRUE(slice.empty()); |
728 EXPECT_EQ(encoded_a, extracted_a); | 724 EXPECT_EQ(encoded_a, extracted_a); |
729 | 725 |
730 slice = StringPiece(&*encoded_b.begin(), encoded_b.size()); | 726 slice = StringPiece(encoded_b); |
731 EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_b)); | 727 EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_b)); |
732 EXPECT_TRUE(slice.empty()); | 728 EXPECT_TRUE(slice.empty()); |
733 EXPECT_EQ(encoded_b, extracted_b); | 729 EXPECT_EQ(encoded_b, extracted_b); |
734 | 730 |
735 EXPECT_LT(CompareKeys(extracted_a, extracted_b), 0); | 731 EXPECT_LT(CompareKeys(extracted_a, extracted_b), 0); |
736 EXPECT_GT(CompareKeys(extracted_b, extracted_a), 0); | 732 EXPECT_GT(CompareKeys(extracted_b, extracted_a), 0); |
737 EXPECT_EQ(CompareKeys(extracted_a, extracted_a), 0); | 733 EXPECT_EQ(CompareKeys(extracted_a, extracted_a), 0); |
738 EXPECT_EQ(CompareKeys(extracted_b, extracted_b), 0); | 734 EXPECT_EQ(CompareKeys(extracted_b, extracted_b), 0); |
739 | 735 |
740 slice = StringPiece(&*encoded_a.begin(), encoded_a.size() - 1); | 736 slice = StringPiece(&*encoded_a.begin(), encoded_a.size() - 1); |
741 EXPECT_FALSE(ExtractEncodedIDBKey(&slice, &extracted_a)); | 737 EXPECT_FALSE(ExtractEncodedIDBKey(&slice, &extracted_a)); |
742 } | 738 } |
743 } | 739 } |
744 | 740 |
745 TEST(IndexedDBLevelDBCodingTest, ComparisonTest) { | 741 TEST(IndexedDBLevelDBCodingTest, ComparisonTest) { |
746 std::vector<std::vector<char> > keys; | 742 std::vector<std::string> keys; |
747 keys.push_back(SchemaVersionKey::Encode()); | 743 keys.push_back(SchemaVersionKey::Encode()); |
748 keys.push_back(MaxDatabaseIdKey::Encode()); | 744 keys.push_back(MaxDatabaseIdKey::Encode()); |
749 keys.push_back(DatabaseFreeListKey::Encode(0)); | 745 keys.push_back(DatabaseFreeListKey::Encode(0)); |
750 keys.push_back(DatabaseFreeListKey::EncodeMaxKey()); | 746 keys.push_back(DatabaseFreeListKey::EncodeMaxKey()); |
751 keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16(""))); | 747 keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16(""))); |
752 keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16("a"))); | 748 keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16("a"))); |
753 keys.push_back(DatabaseNameKey::Encode("a", ASCIIToUTF16("a"))); | 749 keys.push_back(DatabaseNameKey::Encode("a", ASCIIToUTF16("a"))); |
754 keys.push_back( | 750 keys.push_back( |
755 DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::ORIGIN_NAME)); | 751 DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::ORIGIN_NAME)); |
756 keys.push_back( | 752 keys.push_back( |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 0)); | 810 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 0)); |
815 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 1)); | 811 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 1)); |
816 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 0)); | 812 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 0)); |
817 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 1)); | 813 keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 1)); |
818 keys.push_back(IndexDataKey::Encode(1, 1, 31, MinIDBKey(), MinIDBKey(), 0)); | 814 keys.push_back(IndexDataKey::Encode(1, 1, 31, MinIDBKey(), MinIDBKey(), 0)); |
819 keys.push_back(IndexDataKey::Encode(1, 2, 30, MinIDBKey(), MinIDBKey(), 0)); | 815 keys.push_back(IndexDataKey::Encode(1, 2, 30, MinIDBKey(), MinIDBKey(), 0)); |
820 keys.push_back( | 816 keys.push_back( |
821 IndexDataKey::EncodeMaxKey(1, 2, std::numeric_limits<int32>::max() - 1)); | 817 IndexDataKey::EncodeMaxKey(1, 2, std::numeric_limits<int32>::max() - 1)); |
822 | 818 |
823 for (size_t i = 0; i < keys.size(); ++i) { | 819 for (size_t i = 0; i < keys.size(); ++i) { |
824 const LevelDBSlice key_a(keys[i]); | 820 EXPECT_EQ(Compare(keys[i], keys[i], false), 0); |
825 EXPECT_EQ(Compare(key_a, key_a, false), 0); | |
826 | 821 |
827 for (size_t j = i + 1; j < keys.size(); ++j) { | 822 for (size_t j = i + 1; j < keys.size(); ++j) { |
828 const LevelDBSlice key_b(keys[j]); | 823 EXPECT_LT(Compare(keys[i], keys[j], false), 0); |
829 EXPECT_LT(Compare(key_a, key_b, false), 0); | 824 EXPECT_GT(Compare(keys[j], keys[i], false), 0); |
830 EXPECT_GT(Compare(key_b, key_a, false), 0); | |
831 } | 825 } |
832 } | 826 } |
833 } | 827 } |
834 | 828 |
835 TEST(IndexedDBLevelDBCodingTest, EncodeVarIntVSEncodeByteTest) { | 829 TEST(IndexedDBLevelDBCodingTest, EncodeVarIntVSEncodeByteTest) { |
836 std::vector<unsigned char> test_cases; | 830 std::vector<unsigned char> test_cases; |
837 test_cases.push_back(0); | 831 test_cases.push_back(0); |
838 test_cases.push_back(1); | 832 test_cases.push_back(1); |
839 test_cases.push_back(127); | 833 test_cases.push_back(127); |
840 | 834 |
841 for (size_t i = 0; i < test_cases.size(); ++i) { | 835 for (size_t i = 0; i < test_cases.size(); ++i) { |
842 unsigned char n = test_cases[i]; | 836 unsigned char n = test_cases[i]; |
843 | 837 |
844 std::vector<char> vA = WrappedEncodeByte(n); | 838 std::string vA = WrappedEncodeByte(n); |
845 std::vector<char> vB = WrappedEncodeVarInt(static_cast<int64>(n)); | 839 std::string vB = WrappedEncodeVarInt(static_cast<int64>(n)); |
846 | 840 |
847 EXPECT_EQ(vA.size(), vB.size()); | 841 EXPECT_EQ(vA.size(), vB.size()); |
848 EXPECT_EQ(*vA.begin(), *vB.begin()); | 842 EXPECT_EQ(*vA.begin(), *vB.begin()); |
849 } | 843 } |
850 } | 844 } |
851 | 845 |
852 } // namespace | 846 } // namespace |
853 | 847 |
854 } // namespace content | 848 } // namespace content |
OLD | NEW |