Index: chrome/browser/download/download_item_unittest.cc |
diff --git a/chrome/browser/download/download_item_unittest.cc b/chrome/browser/download/download_item_unittest.cc |
index 85edae9c42a7d7f08a555eaef4b632ca01454405..ded452c7392cefef46565d6d793245d1e96d97a2 100644 |
--- a/chrome/browser/download/download_item_unittest.cc |
+++ b/chrome/browser/download/download_item_unittest.cc |
@@ -251,3 +251,61 @@ TEST_F(DownloadItemTest, NotificationAfterTogglePause) { |
item->TogglePause(); |
ASSERT_TRUE(observer.CheckUpdated()); |
} |
+ |
+static char external_data_test_string[] = "External data test"; |
+static int destructor_called = 0; |
+ |
+class TestExternalData : public DownloadItem::ExternalData { |
+ public: |
+ int value; |
+ virtual ~TestExternalData() { |
+ destructor_called++; |
+ } |
+}; |
+ |
+TEST_F(DownloadItemTest, ExternalData) { |
+ DownloadItem* item = CreateDownloadItem(DownloadItem::IN_PROGRESS); |
+ |
+ // Shouldn't be anything there before set. |
+ EXPECT_EQ(NULL, item->GetExternalData(&external_data_test_string)); |
+ |
+ TestExternalData* test1(new TestExternalData()); |
+ test1->value = 2; |
+ |
+ // Should be able to get back what you set. |
+ item->SetExternalData(&external_data_test_string, test1); |
+ TestExternalData* test_result = |
+ static_cast<TestExternalData*>( |
+ item->GetExternalData(&external_data_test_string)); |
+ EXPECT_EQ(test1, test_result); |
+ |
+ // Destructor should be called if value overwritten. New value |
+ // should then be retrievable. |
+ TestExternalData* test2(new TestExternalData()); |
+ test2->value = 3; |
+ EXPECT_EQ(0, destructor_called); |
+ item->SetExternalData(&external_data_test_string, test2); |
+ EXPECT_EQ(1, destructor_called); |
+ EXPECT_EQ(test2, item->GetExternalData(&external_data_test_string)); |
asanka
2011/11/16 03:52:19
Nit: This is comparing a TestExternalData* and a E
Randy Smith (Not in Mondays)
2011/11/18 02:02:57
Done.
|
+ |
+ // Overwriting with the same value shouldn't do anything. |
+ EXPECT_EQ(1, destructor_called); |
+ item->SetExternalData(&external_data_test_string, test2); |
+ EXPECT_EQ(1, destructor_called); |
+ EXPECT_EQ(test2, item->GetExternalData(&external_data_test_string)); |
+ |
+ // Ovewrriting with NULL should result in destruction. |
asanka
2011/11/16 03:52:19
Nit: Overwriting
Randy Smith (Not in Mondays)
2011/11/18 02:02:57
Done.
|
+ item->SetExternalData(&external_data_test_string, NULL); |
+ EXPECT_EQ(2, destructor_called); |
+ |
+ // Destroying the download item should destroy the external data. |
+ |
+ // Need to get this download onto the download history so that it'll |
+ // be deleted on Remove() |
+ download_manager_->OnItemAddedToPersistentStore(item->id(), 1); |
+ TestExternalData* test3(new TestExternalData()); |
+ item->SetExternalData(&external_data_test_string, test3); |
+ EXPECT_EQ(test3, item->GetExternalData(&external_data_test_string)); |
+ item->Remove(); |
+ EXPECT_EQ(3, destructor_called); |
+} |