| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "base/scoped_ptr.h" | 5 #include "base/scoped_ptr.h" |
| 6 #include "base/string_util.h" | 6 #include "base/string_util.h" |
| 7 #include "base/values.h" | 7 #include "base/values.h" |
| 8 #include "chrome/browser/bookmarks/bookmark_codec.h" | 8 #include "chrome/browser/bookmarks/bookmark_codec.h" |
| 9 #include "chrome/browser/bookmarks/bookmark_model.h" | 9 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_model_test_utils.h" | 10 #include "chrome/browser/bookmarks/bookmark_model_test_utils.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 // Computed and stored checksums should not be empty and should be equal. | 99 // Computed and stored checksums should not be empty and should be equal. |
| 100 EXPECT_FALSE(computed_checksum.empty()); | 100 EXPECT_FALSE(computed_checksum.empty()); |
| 101 EXPECT_FALSE(stored_checksum.empty()); | 101 EXPECT_FALSE(stored_checksum.empty()); |
| 102 EXPECT_EQ(computed_checksum, stored_checksum); | 102 EXPECT_EQ(computed_checksum, stored_checksum); |
| 103 | 103 |
| 104 *checksum = computed_checksum; | 104 *checksum = computed_checksum; |
| 105 return value.release(); | 105 return value.release(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 bool Decode(BookmarkCodec* codec, BookmarkModel* model, const Value& value) { | 108 bool Decode(BookmarkCodec* codec, BookmarkModel* model, const Value& value) { |
| 109 int max_id; | 109 int64 max_id; |
| 110 bool result = codec->Decode(AsMutable(model->GetBookmarkBarNode()), | 110 bool result = codec->Decode(AsMutable(model->GetBookmarkBarNode()), |
| 111 AsMutable(model->other_node()), | 111 AsMutable(model->other_node()), |
| 112 &max_id, value); | 112 &max_id, value); |
| 113 model->set_next_node_id(max_id); | 113 model->set_next_node_id(max_id); |
| 114 return result; | 114 return result; |
| 115 } | 115 } |
| 116 | 116 |
| 117 BookmarkModel* DecodeHelper(const Value& value, | 117 BookmarkModel* DecodeHelper(const Value& value, |
| 118 const std::string& expected_stored_checksum, | 118 const std::string& expected_stored_checksum, |
| 119 std::string* computed_checksum, | 119 std::string* computed_checksum, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 *value.get(), enc_checksum, &dec_checksum, true)); | 194 *value.get(), enc_checksum, &dec_checksum, true)); |
| 195 | 195 |
| 196 // Undo the change and make sure the checksum is same as original. | 196 // Undo the change and make sure the checksum is same as original. |
| 197 ASSERT_TRUE(child1_value->SetString(BookmarkCodec::kNameKey, title)); | 197 ASSERT_TRUE(child1_value->SetString(BookmarkCodec::kNameKey, title)); |
| 198 scoped_ptr<BookmarkModel> decoded_model2(DecodeHelper( | 198 scoped_ptr<BookmarkModel> decoded_model2(DecodeHelper( |
| 199 *value.get(), enc_checksum, &dec_checksum, false)); | 199 *value.get(), enc_checksum, &dec_checksum, false)); |
| 200 } | 200 } |
| 201 | 201 |
| 202 TEST_F(BookmarkCodecTest, PersistIDsTest) { | 202 TEST_F(BookmarkCodecTest, PersistIDsTest) { |
| 203 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel3()); | 203 scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel3()); |
| 204 BookmarkCodec encoder(true); | 204 BookmarkCodec encoder; |
| 205 scoped_ptr<Value> model_value(encoder.Encode(model_to_encode.get())); | 205 scoped_ptr<Value> model_value(encoder.Encode(model_to_encode.get())); |
| 206 | 206 |
| 207 BookmarkModel decoded_model(NULL); | 207 BookmarkModel decoded_model(NULL); |
| 208 BookmarkCodec decoder(true); | 208 BookmarkCodec decoder; |
| 209 ASSERT_TRUE(Decode(&decoder, &decoded_model, *model_value.get())); | 209 ASSERT_TRUE(Decode(&decoder, &decoded_model, *model_value.get())); |
| 210 BookmarkModelTestUtils::AssertModelsEqual(model_to_encode.get(), | 210 BookmarkModelTestUtils::AssertModelsEqual(model_to_encode.get(), |
| 211 &decoded_model, | 211 &decoded_model, |
| 212 true); | 212 true); |
| 213 | 213 |
| 214 // Add a couple of more items to the decoded bookmark model and make sure | 214 // Add a couple of more items to the decoded bookmark model and make sure |
| 215 // ID persistence is working properly. | 215 // ID persistence is working properly. |
| 216 const BookmarkNode* bookmark_bar = decoded_model.GetBookmarkBarNode(); | 216 const BookmarkNode* bookmark_bar = decoded_model.GetBookmarkBarNode(); |
| 217 decoded_model.AddURL( | 217 decoded_model.AddURL( |
| 218 bookmark_bar, bookmark_bar->GetChildCount(), kUrl3Title, GURL(kUrl3Url)); | 218 bookmark_bar, bookmark_bar->GetChildCount(), kUrl3Title, GURL(kUrl3Url)); |
| 219 const BookmarkNode* group2_node = decoded_model.AddGroup( | 219 const BookmarkNode* group2_node = decoded_model.AddGroup( |
| 220 bookmark_bar, bookmark_bar->GetChildCount(), kGroup2Title); | 220 bookmark_bar, bookmark_bar->GetChildCount(), kGroup2Title); |
| 221 decoded_model.AddURL(group2_node, 0, kUrl4Title, GURL(kUrl4Url)); | 221 decoded_model.AddURL(group2_node, 0, kUrl4Title, GURL(kUrl4Url)); |
| 222 | 222 |
| 223 BookmarkCodec encoder2(true); | 223 BookmarkCodec encoder2; |
| 224 scoped_ptr<Value> model_value2(encoder2.Encode(&decoded_model)); | 224 scoped_ptr<Value> model_value2(encoder2.Encode(&decoded_model)); |
| 225 | 225 |
| 226 BookmarkModel decoded_model2(NULL); | 226 BookmarkModel decoded_model2(NULL); |
| 227 BookmarkCodec decoder2(true); | 227 BookmarkCodec decoder2; |
| 228 ASSERT_TRUE(Decode(&decoder2, &decoded_model2, *model_value2.get())); | 228 ASSERT_TRUE(Decode(&decoder2, &decoded_model2, *model_value2.get())); |
| 229 BookmarkModelTestUtils::AssertModelsEqual(&decoded_model, | 229 BookmarkModelTestUtils::AssertModelsEqual(&decoded_model, |
| 230 &decoded_model2, | 230 &decoded_model2, |
| 231 true); | 231 true); |
| 232 } | 232 } |
| 233 | 233 |
| 234 class UniqueIDGeneratorTest : public testing::Test { | 234 class UniqueIDGeneratorTest : public testing::Test { |
| 235 protected: | 235 protected: |
| 236 void TestMixed(UniqueIDGenerator* gen) { | 236 void TestMixed(UniqueIDGenerator* gen) { |
| 237 // Few unique numbers. | 237 // Few unique numbers. |
| 238 for (int i = 1; i <= 5; ++i) { | 238 for (int64 i = 1; i <= 5; ++i) { |
| 239 EXPECT_EQ(i, gen->GetUniqueID(i)); | 239 EXPECT_EQ(i, gen->GetUniqueID(i)); |
| 240 } | 240 } |
| 241 | 241 |
| 242 // All numbers from 1 to 5 should produce numbers 6 to 10. | 242 // All numbers from 1 to 5 should produce numbers 6 to 10. |
| 243 for (int i = 1; i <= 5; ++i) { | 243 for (int64 i = 1; i <= 5; ++i) { |
| 244 EXPECT_EQ(5 + i, gen->GetUniqueID(i)); | 244 EXPECT_EQ(5 + i, gen->GetUniqueID(i)); |
| 245 } | 245 } |
| 246 | 246 |
| 247 // 10 should produce 11, then 11 should produce 12, and so on. | 247 // 10 should produce 11, then 11 should produce 12, and so on. |
| 248 for (int i = 1; i <= 5; ++i) { | 248 for (int64 i = 1; i <= 5; ++i) { |
| 249 EXPECT_EQ(10 + i, gen->GetUniqueID(9 + i)); | 249 EXPECT_EQ(10 + i, gen->GetUniqueID(9 + i)); |
| 250 } | 250 } |
| 251 | 251 |
| 252 // Any numbers between 1 and 15 should produce a new numbers in sequence. | 252 // Any numbers between 1 and 15 should produce a new numbers in sequence. |
| 253 EXPECT_EQ(16, gen->GetUniqueID(10)); | 253 EXPECT_EQ(16, gen->GetUniqueID(10)); |
| 254 EXPECT_EQ(17, gen->GetUniqueID(2)); | 254 EXPECT_EQ(17, gen->GetUniqueID(2)); |
| 255 EXPECT_EQ(18, gen->GetUniqueID(14)); | 255 EXPECT_EQ(18, gen->GetUniqueID(14)); |
| 256 EXPECT_EQ(19, gen->GetUniqueID(7)); | 256 EXPECT_EQ(19, gen->GetUniqueID(7)); |
| 257 EXPECT_EQ(20, gen->GetUniqueID(4)); | 257 EXPECT_EQ(20, gen->GetUniqueID(4)); |
| 258 | 258 |
| 259 // Numbers not yet generated should work. | 259 // Numbers not yet generated should work. |
| 260 EXPECT_EQ(100, gen->GetUniqueID(100)); | 260 EXPECT_EQ(100, gen->GetUniqueID(100)); |
| 261 EXPECT_EQ(21, gen->GetUniqueID(21)); | 261 EXPECT_EQ(21, gen->GetUniqueID(21)); |
| 262 EXPECT_EQ(200, gen->GetUniqueID(200)); | 262 EXPECT_EQ(200, gen->GetUniqueID(200)); |
| 263 | 263 |
| 264 // Now any existing number should produce numbers starting from 201. | 264 // Now any existing number should produce numbers starting from 201. |
| 265 EXPECT_EQ(201, gen->GetUniqueID(1)); | 265 EXPECT_EQ(201, gen->GetUniqueID(1)); |
| 266 EXPECT_EQ(202, gen->GetUniqueID(20)); | 266 EXPECT_EQ(202, gen->GetUniqueID(20)); |
| 267 EXPECT_EQ(203, gen->GetUniqueID(21)); | 267 EXPECT_EQ(203, gen->GetUniqueID(21)); |
| 268 EXPECT_EQ(204, gen->GetUniqueID(100)); | 268 EXPECT_EQ(204, gen->GetUniqueID(100)); |
| 269 EXPECT_EQ(205, gen->GetUniqueID(200)); | 269 EXPECT_EQ(205, gen->GetUniqueID(200)); |
| 270 } | 270 } |
| 271 }; | 271 }; |
| 272 | 272 |
| 273 TEST_F(UniqueIDGeneratorTest, SerialNumbersTest) { | 273 TEST_F(UniqueIDGeneratorTest, SerialNumbersTest) { |
| 274 UniqueIDGenerator gen; | 274 UniqueIDGenerator gen; |
| 275 for (int i = 1; i <= 10; ++i) { | 275 for (int64 i = 1; i <= 10; ++i) { |
| 276 EXPECT_EQ(i, gen.GetUniqueID(i)); | 276 EXPECT_EQ(i, gen.GetUniqueID(i)); |
| 277 } | 277 } |
| 278 } | 278 } |
| 279 | 279 |
| 280 TEST_F(UniqueIDGeneratorTest, UniqueSortedNumbersTest) { | 280 TEST_F(UniqueIDGeneratorTest, UniqueSortedNumbersTest) { |
| 281 UniqueIDGenerator gen; | 281 UniqueIDGenerator gen; |
| 282 for (int i = 1; i <= 10; i += 2) { | 282 for (int64 i = 1; i <= 10; i += 2) { |
| 283 EXPECT_EQ(i, gen.GetUniqueID(i)); | 283 EXPECT_EQ(i, gen.GetUniqueID(i)); |
| 284 } | 284 } |
| 285 } | 285 } |
| 286 | 286 |
| 287 TEST_F(UniqueIDGeneratorTest, UniqueUnsortedConsecutiveNumbersTest) { | 287 TEST_F(UniqueIDGeneratorTest, UniqueUnsortedConsecutiveNumbersTest) { |
| 288 UniqueIDGenerator gen; | 288 UniqueIDGenerator gen; |
| 289 int numbers[] = {2, 10, 6, 3, 8, 5, 1, 7, 4, 9}; | 289 int numbers[] = {2, 10, 6, 3, 8, 5, 1, 7, 4, 9}; |
| 290 for (int i = 0; i < ARRAYSIZE(numbers); ++i) { | 290 for (int64 i = 0; i < ARRAYSIZE(numbers); ++i) { |
| 291 EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i])); | 291 EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i])); |
| 292 } | 292 } |
| 293 } | 293 } |
| 294 | 294 |
| 295 TEST_F(UniqueIDGeneratorTest, UniqueUnsortedNumbersTest) { | 295 TEST_F(UniqueIDGeneratorTest, UniqueUnsortedNumbersTest) { |
| 296 UniqueIDGenerator gen; | 296 UniqueIDGenerator gen; |
| 297 int numbers[] = {20, 100, 60, 30, 80, 50, 10, 70, 40, 90}; | 297 int numbers[] = {20, 100, 60, 30, 80, 50, 10, 70, 40, 90}; |
| 298 for (int i = 0; i < ARRAYSIZE(numbers); ++i) { | 298 for (int64 i = 0; i < ARRAYSIZE(numbers); ++i) { |
| 299 EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i])); | 299 EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i])); |
| 300 } | 300 } |
| 301 } | 301 } |
| 302 | 302 |
| 303 TEST_F(UniqueIDGeneratorTest, AllDuplicatesTest) { | 303 TEST_F(UniqueIDGeneratorTest, AllDuplicatesTest) { |
| 304 UniqueIDGenerator gen; | 304 UniqueIDGenerator gen; |
| 305 for (int i = 1; i <= 10; ++i) { | 305 for (int64 i = 1; i <= 10; ++i) { |
| 306 EXPECT_EQ(i, gen.GetUniqueID(1)); | 306 EXPECT_EQ(i, gen.GetUniqueID(1)); |
| 307 } | 307 } |
| 308 } | 308 } |
| 309 | 309 |
| 310 TEST_F(UniqueIDGeneratorTest, MixedTest) { | 310 TEST_F(UniqueIDGeneratorTest, MixedTest) { |
| 311 UniqueIDGenerator gen; | 311 UniqueIDGenerator gen; |
| 312 TestMixed(&gen); | 312 TestMixed(&gen); |
| 313 } | 313 } |
| 314 | 314 |
| 315 TEST_F(UniqueIDGeneratorTest, ResetTest) { | 315 TEST_F(UniqueIDGeneratorTest, ResetTest) { |
| 316 UniqueIDGenerator gen; | 316 UniqueIDGenerator gen; |
| 317 for (int i = 0; i < 5; ++i) { | 317 for (int64 i = 0; i < 5; ++i) { |
| 318 TestMixed(&gen); | 318 TestMixed(&gen); |
| 319 gen.Reset(); | 319 gen.Reset(); |
| 320 } | 320 } |
| 321 } | 321 } |
| OLD | NEW |