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

Unified Diff: chrome/browser/bookmarks/bookmark_codec_unittest.cc

Issue 99217: Implement ID persistence for bookmarks:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/bookmarks/bookmark_codec.cc ('k') | chrome/browser/bookmarks/bookmark_model.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/bookmarks/bookmark_codec_unittest.cc
===================================================================
--- chrome/browser/bookmarks/bookmark_codec_unittest.cc (revision 14989)
+++ chrome/browser/bookmarks/bookmark_codec_unittest.cc (working copy)
@@ -5,28 +5,51 @@
#include "base/scoped_ptr.h"
#include "base/string_util.h"
#include "base/values.h"
+#include "chrome/browser/bookmarks/bookmark_codec.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_codec.h"
+#include "chrome/browser/bookmarks/bookmark_model_test_utils.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+const wchar_t kUrl1Title[] = L"url1";
+const wchar_t kUrl1Url[] = L"http://www.url1.com";
+const wchar_t kUrl2Title[] = L"url2";
+const wchar_t kUrl2Url[] = L"http://www.url2.com";
+const wchar_t kUrl3Title[] = L"url3";
+const wchar_t kUrl3Url[] = L"http://www.url3.com";
+const wchar_t kUrl4Title[] = L"url4";
+const wchar_t kUrl4Url[] = L"http://www.url4.com";
+const wchar_t kGroup1Title[] = L"group1";
+const wchar_t kGroup2Title[] = L"group2";
+
+}
+
class BookmarkCodecTest : public testing::Test {
protected:
// Helpers to create bookmark models with different data.
- // Callers own the returned instances.
- BookmarkModel* CreateModelWithOneUrl() {
+ BookmarkModel* CreateTestModel1() {
scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
BookmarkNode* bookmark_bar = model->GetBookmarkBarNode();
- model->AddURL(bookmark_bar, 0, L"foo", GURL(L"http://www.foo.com"));
+ model->AddURL(bookmark_bar, 0, kUrl1Title, GURL(kUrl1Url));
return model.release();
}
- BookmarkModel* CreateModelWithTwoUrls() {
+ BookmarkModel* CreateTestModel2() {
scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
BookmarkNode* bookmark_bar = model->GetBookmarkBarNode();
- model->AddURL(bookmark_bar, 0, L"foo", GURL(L"http://www.foo.com"));
- model->AddURL(bookmark_bar, 1, L"bar", GURL(L"http://www.bar.com"));
+ model->AddURL(bookmark_bar, 0, kUrl1Title, GURL(kUrl1Url));
+ model->AddURL(bookmark_bar, 1, kUrl2Title, GURL(kUrl2Url));
return model.release();
}
+ BookmarkModel* CreateTestModel3() {
+ scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
+ BookmarkNode* bookmark_bar = model->GetBookmarkBarNode();
+ model->AddURL(bookmark_bar, 0, kUrl1Title, GURL(kUrl1Url));
+ BookmarkNode* group1 = model->AddGroup(bookmark_bar, 1, kGroup1Title);
+ model->AddURL(group1, 0, kUrl2Title, GURL(kUrl2Url));
+ return model.release();
+ }
void GetBookmarksBarChildValue(Value* value,
size_t index,
@@ -111,7 +134,7 @@
};
TEST_F(BookmarkCodecTest, ChecksumEncodeDecodeTest) {
- scoped_ptr<BookmarkModel> model_to_encode(CreateModelWithOneUrl());
+ scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel1());
std::string enc_checksum;
scoped_ptr<Value> value(EncodeHelper(model_to_encode.get(), &enc_checksum));
@@ -125,12 +148,12 @@
TEST_F(BookmarkCodecTest, ChecksumEncodeIdenticalModelsTest) {
// Encode two identical models and make sure the check-sums are same as long
// as the data is the same.
- scoped_ptr<BookmarkModel> model1(CreateModelWithOneUrl());
+ scoped_ptr<BookmarkModel> model1(CreateTestModel1());
std::string enc_checksum1;
scoped_ptr<Value> value1(EncodeHelper(model1.get(), &enc_checksum1));
EXPECT_TRUE(value1.get() != NULL);
- scoped_ptr<BookmarkModel> model2(CreateModelWithOneUrl());
+ scoped_ptr<BookmarkModel> model2(CreateTestModel1());
std::string enc_checksum2;
scoped_ptr<Value> value2(EncodeHelper(model2.get(), &enc_checksum2));
EXPECT_TRUE(value2.get() != NULL);
@@ -139,7 +162,7 @@
}
TEST_F(BookmarkCodecTest, ChecksumManualEditTest) {
- scoped_ptr<BookmarkModel> model_to_encode(CreateModelWithOneUrl());
+ scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel1());
std::string enc_checksum;
scoped_ptr<Value> value(EncodeHelper(model_to_encode.get(), &enc_checksum));
@@ -161,3 +184,130 @@
scoped_ptr<BookmarkModel> decoded_model2(DecodeHelper(
*value.get(), enc_checksum, &dec_checksum, false));
}
+
+TEST_F(BookmarkCodecTest, PersistIDsTest) {
+ scoped_ptr<BookmarkModel> model_to_encode(CreateTestModel3());
+ BookmarkCodec encoder(true);
+ scoped_ptr<Value> model_value(encoder.Encode(model_to_encode.get()));
+
+ // Set the next id to 1 to simulate fresh Chrome start.
+ BookmarkNode::SetNextId(1);
+
+ BookmarkModel decoded_model(NULL);
+ BookmarkCodec decoder(true);
+ ASSERT_TRUE(decoder.Decode(&decoded_model, *model_value.get()));
+ BookmarkModelTestUtils::AssertModelsEqual(model_to_encode.get(),
+ &decoded_model,
+ true);
+
+ // Add a couple of more items to the decoded bookmark model and make sure
+ // ID persistence is working properly.
+ BookmarkNode* bookmark_bar = decoded_model.GetBookmarkBarNode();
+ decoded_model.AddURL(
+ bookmark_bar, bookmark_bar->GetChildCount(), kUrl3Title, GURL(kUrl3Url));
+ BookmarkNode* group2_node = decoded_model.AddGroup(
+ bookmark_bar, bookmark_bar->GetChildCount(), kGroup2Title);
+ decoded_model.AddURL(group2_node, 0, kUrl4Title, GURL(kUrl4Url));
+
+ BookmarkCodec encoder2(true);
+ scoped_ptr<Value> model_value2(encoder2.Encode(&decoded_model));
+
+ // Set the next id to 1 to simulate fresh Chrome start.
+ BookmarkNode::SetNextId(1);
+
+ BookmarkModel decoded_model2(NULL);
+ BookmarkCodec decoder2(true);
+ ASSERT_TRUE(decoder2.Decode(&decoded_model2, *model_value2.get()));
+ BookmarkModelTestUtils::AssertModelsEqual(&decoded_model,
+ &decoded_model2,
+ true);
+}
+
+class UniqueIDGeneratorTest : public testing::Test {
+ protected:
+ void TestMixed(UniqueIDGenerator* gen) {
+ // Few unique numbers.
+ for (int i = 1; i <= 5; ++i) {
+ EXPECT_EQ(i, gen->GetUniqueID(i));
+ }
+
+ // All numbers from 1 to 5 should produce numbers 6 to 10.
+ for (int i = 1; i <= 5; ++i) {
+ EXPECT_EQ(5 + i, gen->GetUniqueID(i));
+ }
+
+ // 10 should produce 11, then 11 should produce 12, and so on.
+ for (int i = 1; i <= 5; ++i) {
+ EXPECT_EQ(10 + i, gen->GetUniqueID(9 + i));
+ }
+
+ // Any numbers between 1 and 15 should produce a new numbers in sequence.
+ EXPECT_EQ(16, gen->GetUniqueID(10));
+ EXPECT_EQ(17, gen->GetUniqueID(2));
+ EXPECT_EQ(18, gen->GetUniqueID(14));
+ EXPECT_EQ(19, gen->GetUniqueID(7));
+ EXPECT_EQ(20, gen->GetUniqueID(4));
+
+ // Numbers not yet generated should work.
+ EXPECT_EQ(100, gen->GetUniqueID(100));
+ EXPECT_EQ(21, gen->GetUniqueID(21));
+ EXPECT_EQ(200, gen->GetUniqueID(200));
+
+ // Now any existing number should produce numbers starting from 201.
+ EXPECT_EQ(201, gen->GetUniqueID(1));
+ EXPECT_EQ(202, gen->GetUniqueID(20));
+ EXPECT_EQ(203, gen->GetUniqueID(21));
+ EXPECT_EQ(204, gen->GetUniqueID(100));
+ EXPECT_EQ(205, gen->GetUniqueID(200));
+ }
+};
+
+TEST_F(UniqueIDGeneratorTest, SerialNumbersTest) {
+ UniqueIDGenerator gen;
+ for (int i = 1; i <= 10; ++i) {
+ EXPECT_EQ(i, gen.GetUniqueID(i));
+ }
+}
+
+TEST_F(UniqueIDGeneratorTest, UniquSortedNumbersTest) {
+ UniqueIDGenerator gen;
+ for (int i = 1; i <= 10; i += 2) {
+ EXPECT_EQ(i, gen.GetUniqueID(i));
+ }
+}
+
+TEST_F(UniqueIDGeneratorTest, UniquUnsortedConsecutiveNumbersTest) {
+ UniqueIDGenerator gen;
+ int numbers[] = {2, 10, 6, 3, 8, 5, 1, 7, 4, 9};
+ for (int i = 0; i < ARRAYSIZE(numbers); ++i) {
+ EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i]));
+ }
+}
+
+TEST_F(UniqueIDGeneratorTest, UniquUnsortedNumbersTest) {
+ UniqueIDGenerator gen;
+ int numbers[] = {20, 100, 60, 30, 80, 50, 10, 70, 40, 90};
+ for (int i = 0; i < ARRAYSIZE(numbers); ++i) {
+ EXPECT_EQ(numbers[i], gen.GetUniqueID(numbers[i]));
+ }
+}
+
+TEST_F(UniqueIDGeneratorTest, AllDuplicatesTest) {
+ UniqueIDGenerator gen;
+ for (int i = 1; i <= 10; ++i) {
+ EXPECT_EQ(i, gen.GetUniqueID(1));
+ }
+}
+
+TEST_F(UniqueIDGeneratorTest, MixedTest) {
+ UniqueIDGenerator gen;
+ TestMixed(&gen);
+}
+
+TEST_F(UniqueIDGeneratorTest, ResetTest) {
+ UniqueIDGenerator gen;
+ for (int i = 0; i < 5; ++i) {
+ TestMixed(&gen);
+ gen.Reset();
+ }
+}
« no previous file with comments | « chrome/browser/bookmarks/bookmark_codec.cc ('k') | chrome/browser/bookmarks/bookmark_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698