Index: chrome/browser/sync/syncable/syncable_unittest.cc |
diff --git a/chrome/browser/sync/syncable/syncable_unittest.cc b/chrome/browser/sync/syncable/syncable_unittest.cc |
index c0ce9bd1fce1f664647b3968825c9182ec81cf93..0950ada4462f45df1948981a423491f89ed14b8e 100644 |
--- a/chrome/browser/sync/syncable/syncable_unittest.cc |
+++ b/chrome/browser/sync/syncable/syncable_unittest.cc |
@@ -207,6 +207,72 @@ TEST_F(SyncableGeneralTest, General) { |
dir.SaveChanges(); |
} |
+TEST_F(SyncableGeneralTest, ChildrenOps) { |
+ Directory dir; |
+ dir.Open(db_path_, "SimpleTest", &delegate_); |
+ |
+ int64 root_metahandle; |
+ { |
+ ReadTransaction rtrans(FROM_HERE, &dir); |
+ Entry e(&rtrans, GET_BY_ID, rtrans.root_id()); |
+ ASSERT_TRUE(e.good()); |
+ root_metahandle = e.Get(META_HANDLE); |
+ } |
+ |
+ int64 written_metahandle; |
+ const Id id = TestIdFactory::FromNumber(99); |
+ std::string name = "Jeff"; |
+ { |
+ ReadTransaction rtrans(FROM_HERE, &dir); |
+ Entry e(&rtrans, GET_BY_ID, id); |
+ ASSERT_FALSE(e.good()); // Hasn't been written yet. |
+ |
+ EXPECT_FALSE(dir.HasChildren(&rtrans, rtrans.root_id())); |
+ EXPECT_TRUE(dir.GetFirstChildId(&rtrans, rtrans.root_id()).IsRoot()); |
+ } |
+ |
+ { |
+ WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); |
+ MutableEntry me(&wtrans, CREATE, wtrans.root_id(), name); |
+ ASSERT_TRUE(me.good()); |
+ me.Put(ID, id); |
+ me.Put(BASE_VERSION, 1); |
+ written_metahandle = me.Get(META_HANDLE); |
+ } |
+ |
+ // Test children ops after something is now in the DB. |
+ { |
+ ReadTransaction rtrans(FROM_HERE, &dir); |
+ Entry e(&rtrans, GET_BY_ID, id); |
+ ASSERT_TRUE(e.good()); |
+ |
+ Entry child(&rtrans, GET_BY_HANDLE, written_metahandle); |
+ ASSERT_TRUE(child.good()); |
+ |
+ EXPECT_TRUE(dir.HasChildren(&rtrans, rtrans.root_id())); |
+ EXPECT_EQ(e.Get(ID), dir.GetFirstChildId(&rtrans, rtrans.root_id())); |
+ } |
+ |
+ { |
+ WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); |
+ MutableEntry me(&wtrans, GET_BY_HANDLE, written_metahandle); |
+ ASSERT_TRUE(me.good()); |
+ me.Put(IS_DEL, true); |
+ } |
+ |
+ // Test children ops after the children have been deleted. |
+ { |
+ ReadTransaction rtrans(FROM_HERE, &dir); |
+ Entry e(&rtrans, GET_BY_ID, id); |
+ ASSERT_TRUE(e.good()); |
+ |
+ EXPECT_FALSE(dir.HasChildren(&rtrans, rtrans.root_id())); |
+ EXPECT_TRUE(dir.GetFirstChildId(&rtrans, rtrans.root_id()).IsRoot()); |
+ } |
+ |
+ dir.SaveChanges(); |
+} |
+ |
TEST_F(SyncableGeneralTest, ClientIndexRebuildsProperly) { |
int64 written_metahandle; |
TestIdFactory factory; |