Index: chrome/browser/download/download_path_reservation_tracker_unittest.cc |
diff --git a/chrome/browser/download/download_path_reservation_tracker_unittest.cc b/chrome/browser/download/download_path_reservation_tracker_unittest.cc |
index de1279b6acbc7549ddac39d5755ff490682c1b4b..8bb301d54ae72ca8ea6b16329e7434291e7e91bc 100644 |
--- a/chrome/browser/download/download_path_reservation_tracker_unittest.cc |
+++ b/chrome/browser/download/download_path_reservation_tracker_unittest.cc |
@@ -27,40 +27,6 @@ using testing::ReturnRefOfCopy; |
namespace { |
-// MockDownloadItem with real observers and state. |
-class FakeDownloadItem : public MockDownloadItem { |
- public: |
- explicit FakeDownloadItem() |
- : state_(IN_PROGRESS) { |
- } |
- virtual ~FakeDownloadItem() { |
- FOR_EACH_OBSERVER(Observer, observers_, OnDownloadDestroyed(this)); |
- EXPECT_FALSE(observers_.might_have_observers()); |
- } |
- virtual void AddObserver(Observer* observer) OVERRIDE { |
- observers_.AddObserver(observer); |
- } |
- virtual void RemoveObserver(Observer* observer) OVERRIDE { |
- observers_.RemoveObserver(observer); |
- } |
- virtual void UpdateObservers() OVERRIDE { |
- FOR_EACH_OBSERVER(Observer, observers_, OnDownloadUpdated(this)); |
- } |
- |
- virtual DownloadState GetState() const OVERRIDE { |
- return state_; |
- } |
- |
- void SetState(DownloadState state) { |
- state_ = state; |
- UpdateObservers(); |
- } |
- |
- private: |
- DownloadState state_; |
- ObserverList<Observer> observers_; |
-}; |
- |
class DownloadPathReservationTrackerTest : public testing::Test { |
public: |
DownloadPathReservationTrackerTest(); |
@@ -69,7 +35,7 @@ class DownloadPathReservationTrackerTest : public testing::Test { |
virtual void SetUp() OVERRIDE; |
virtual void TearDown() OVERRIDE; |
- FakeDownloadItem* CreateDownloadItem(int32 id); |
+ MockDownloadItem* CreateDownloadItem(int32 id); |
base::FilePath GetPathInDownloadsDirectory( |
const base::FilePath::CharType* suffix); |
bool IsPathInUse(const base::FilePath& path); |
@@ -118,13 +84,15 @@ void DownloadPathReservationTrackerTest::TearDown() { |
message_loop_.RunUntilIdle(); |
} |
-FakeDownloadItem* DownloadPathReservationTrackerTest::CreateDownloadItem( |
+MockDownloadItem* DownloadPathReservationTrackerTest::CreateDownloadItem( |
int32 id) { |
- FakeDownloadItem* item = new ::testing::StrictMock<FakeDownloadItem>; |
+ MockDownloadItem* item = new ::testing::StrictMock<MockDownloadItem>; |
EXPECT_CALL(*item, GetId()) |
.WillRepeatedly(Return(id)); |
EXPECT_CALL(*item, GetTargetFilePath()) |
.WillRepeatedly(ReturnRefOfCopy(base::FilePath())); |
+ EXPECT_CALL(*item, GetState()) |
+ .WillRepeatedly(Return(DownloadItem::IN_PROGRESS)); |
return item; |
} |
@@ -179,11 +147,18 @@ DownloadPathReservationTrackerTest::GetLongNamePathInDownloadsDirectory( |
+ suffix).c_str()); |
} |
+void SetDownloadItemState(content::MockDownloadItem* download_item, |
+ content::DownloadItem::DownloadState state) { |
+ EXPECT_CALL(*download_item, GetState()) |
+ .WillRepeatedly(Return(state)); |
+ download_item->NotifyObserversDownloadUpdated(); |
+} |
+ |
} // namespace |
// A basic reservation is acquired and committed. |
TEST_F(DownloadPathReservationTrackerTest, BasicReservation) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
ASSERT_FALSE(IsPathInUse(path)); |
@@ -205,7 +180,7 @@ TEST_F(DownloadPathReservationTrackerTest, BasicReservation) { |
EXPECT_EQ(path.value(), reserved_path.value()); |
// Destroying the item should release the reservation. |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
item.reset(); |
message_loop_.RunUntilIdle(); |
EXPECT_FALSE(IsPathInUse(path)); |
@@ -213,7 +188,7 @@ TEST_F(DownloadPathReservationTrackerTest, BasicReservation) { |
// A download that is interrupted should lose its reservation. |
TEST_F(DownloadPathReservationTrackerTest, InterruptedDownload) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
ASSERT_FALSE(IsPathInUse(path)); |
@@ -235,14 +210,14 @@ TEST_F(DownloadPathReservationTrackerTest, InterruptedDownload) { |
EXPECT_EQ(path.value(), reserved_path.value()); |
// Once the download is interrupted, the path should become available again. |
- item->SetState(DownloadItem::INTERRUPTED); |
+ SetDownloadItemState(item.get(), DownloadItem::INTERRUPTED); |
message_loop_.RunUntilIdle(); |
EXPECT_FALSE(IsPathInUse(path)); |
} |
// A completed download should also lose its reservation. |
TEST_F(DownloadPathReservationTrackerTest, CompleteDownload) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
ASSERT_FALSE(IsPathInUse(path)); |
@@ -267,7 +242,7 @@ TEST_F(DownloadPathReservationTrackerTest, CompleteDownload) { |
// real download, at this point only the path reservation will be released. |
// The path wouldn't be available since it is occupied on disk by the |
// completed download. |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
message_loop_.RunUntilIdle(); |
EXPECT_FALSE(IsPathInUse(path)); |
} |
@@ -275,7 +250,7 @@ TEST_F(DownloadPathReservationTrackerTest, CompleteDownload) { |
// If there are files on the file system, a unique reservation should uniquify |
// around it. |
TEST_F(DownloadPathReservationTrackerTest, ConflictingFiles) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
base::FilePath path1( |
@@ -308,7 +283,7 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingFiles) { |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo (1).txt")).value(), |
reserved_path.value()); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
item.reset(); |
message_loop_.RunUntilIdle(); |
EXPECT_TRUE(IsPathInUse(path)); |
@@ -317,7 +292,7 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingFiles) { |
// Multiple reservations for the same path should uniquify around each other. |
TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
- scoped_ptr<FakeDownloadItem> item1(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item1(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
base::FilePath uniquified_path( |
@@ -345,7 +320,7 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
{ |
// Requesting a reservation for the same path with uniquification results in |
// a uniquified path. |
- scoped_ptr<FakeDownloadItem> item2(CreateDownloadItem(2)); |
+ scoped_ptr<MockDownloadItem> item2(CreateDownloadItem(2)); |
base::FilePath reserved_path2; |
CallGetReservedPath( |
item2.get(), |
@@ -357,7 +332,7 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
EXPECT_TRUE(IsPathInUse(path)); |
EXPECT_TRUE(IsPathInUse(uniquified_path)); |
EXPECT_EQ(uniquified_path.value(), reserved_path2.value()); |
- item2->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item2.get(), DownloadItem::COMPLETE); |
} |
message_loop_.RunUntilIdle(); |
EXPECT_TRUE(IsPathInUse(path)); |
@@ -366,7 +341,7 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
{ |
// Since the previous download item was removed, requesting a reservation |
// for the same path should result in the same uniquified path. |
- scoped_ptr<FakeDownloadItem> item2(CreateDownloadItem(2)); |
+ scoped_ptr<MockDownloadItem> item2(CreateDownloadItem(2)); |
base::FilePath reserved_path2; |
CallGetReservedPath( |
item2.get(), |
@@ -378,13 +353,13 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
EXPECT_TRUE(IsPathInUse(path)); |
EXPECT_TRUE(IsPathInUse(uniquified_path)); |
EXPECT_EQ(uniquified_path.value(), reserved_path2.value()); |
- item2->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item2.get(), DownloadItem::COMPLETE); |
} |
message_loop_.RunUntilIdle(); |
// Now acquire an overwriting reservation. We should end up with the same |
// non-uniquified path for both reservations. |
- scoped_ptr<FakeDownloadItem> item3(CreateDownloadItem(2)); |
+ scoped_ptr<MockDownloadItem> item3(CreateDownloadItem(2)); |
base::FilePath reserved_path3; |
conflict_action = DownloadPathReservationTracker::OVERWRITE; |
CallGetReservedPath( |
@@ -400,8 +375,8 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
EXPECT_EQ(path.value(), reserved_path1.value()); |
EXPECT_EQ(path.value(), reserved_path3.value()); |
- item1->SetState(DownloadItem::COMPLETE); |
- item3->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item1.get(), DownloadItem::COMPLETE); |
+ SetDownloadItemState(item3.get(), DownloadItem::COMPLETE); |
} |
// If a unique path cannot be determined after trying kMaxUniqueFiles |
@@ -410,8 +385,8 @@ TEST_F(DownloadPathReservationTrackerTest, ConflictingReservations) { |
TEST_F(DownloadPathReservationTrackerTest, UnresolvedConflicts) { |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
- scoped_ptr<FakeDownloadItem> items[ |
- DownloadPathReservationTracker::kMaxUniqueFiles + 1]; |
+ scoped_ptr<MockDownloadItem> |
+ items[DownloadPathReservationTracker::kMaxUniqueFiles + 1]; |
DownloadPathReservationTracker::FilenameConflictAction conflict_action = |
DownloadPathReservationTracker::UNIQUIFY; |
bool create_directory = false; |
@@ -442,7 +417,7 @@ TEST_F(DownloadPathReservationTrackerTest, UnresolvedConflicts) { |
EXPECT_TRUE(verified); |
} |
// The next reservation for |path| will fail to be unique. |
- scoped_ptr<FakeDownloadItem> item( |
+ scoped_ptr<MockDownloadItem> item( |
CreateDownloadItem(DownloadPathReservationTracker::kMaxUniqueFiles + 1)); |
base::FilePath reserved_path; |
bool verified = true; |
@@ -456,16 +431,15 @@ TEST_F(DownloadPathReservationTrackerTest, UnresolvedConflicts) { |
EXPECT_FALSE(verified); |
EXPECT_EQ(path.value(), reserved_path.value()); |
- item->SetState(DownloadItem::COMPLETE); |
- for (int i = 0; i <= DownloadPathReservationTracker::kMaxUniqueFiles; i++) { |
- items[i]->SetState(DownloadItem::COMPLETE); |
- } |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
+ for (int i = 0; i <= DownloadPathReservationTracker::kMaxUniqueFiles; i++) |
+ SetDownloadItemState(items[i].get(), DownloadItem::COMPLETE); |
} |
// If the target directory is unwriteable, then callback should be notified that |
// verification failed. |
TEST_F(DownloadPathReservationTrackerTest, UnwriteableDirectory) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
base::FilePath dir(path.DirName()); |
@@ -491,7 +465,7 @@ TEST_F(DownloadPathReservationTrackerTest, UnwriteableDirectory) { |
EXPECT_FALSE(verified); |
EXPECT_EQ(path.BaseName().value(), reserved_path.BaseName().value()); |
} |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
// If the default download directory doesn't exist, then it should be |
@@ -506,7 +480,7 @@ TEST_F(DownloadPathReservationTrackerTest, CreateDefaultDownloadPath) { |
bool create_directory = false; |
{ |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath reserved_path; |
bool verified = true; |
CallGetReservedPath( |
@@ -518,11 +492,11 @@ TEST_F(DownloadPathReservationTrackerTest, CreateDefaultDownloadPath) { |
&verified); |
// Verification fails because the directory doesn't exist. |
EXPECT_FALSE(verified); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
ASSERT_FALSE(IsPathInUse(path)); |
{ |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath reserved_path; |
bool verified = true; |
set_default_download_path(dir); |
@@ -536,14 +510,14 @@ TEST_F(DownloadPathReservationTrackerTest, CreateDefaultDownloadPath) { |
// Verification succeeds because the directory is created. |
EXPECT_TRUE(verified); |
EXPECT_TRUE(base::DirectoryExists(dir)); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
} |
// If the target path of the download item changes, the reservation should be |
// updated to match. |
TEST_F(DownloadPathReservationTrackerTest, UpdatesToTargetPath) { |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path( |
GetPathInDownloadsDirectory(FILE_PATH_LITERAL("foo.txt"))); |
ASSERT_FALSE(IsPathInUse(path)); |
@@ -567,7 +541,7 @@ TEST_F(DownloadPathReservationTrackerTest, UpdatesToTargetPath) { |
// The target path is initially empty. If an OnDownloadUpdated() is issued in |
// this state, we shouldn't lose the reservation. |
ASSERT_EQ(base::FilePath::StringType(), item->GetTargetFilePath().value()); |
- item->UpdateObservers(); |
+ item->NotifyObserversDownloadUpdated(); |
message_loop_.RunUntilIdle(); |
EXPECT_TRUE(IsPathInUse(path)); |
@@ -577,13 +551,13 @@ TEST_F(DownloadPathReservationTrackerTest, UpdatesToTargetPath) { |
ASSERT_FALSE(IsPathInUse(new_target_path)); |
EXPECT_CALL(*item, GetTargetFilePath()) |
.WillRepeatedly(ReturnRef(new_target_path)); |
- item->UpdateObservers(); |
+ item->NotifyObserversDownloadUpdated(); |
message_loop_.RunUntilIdle(); |
EXPECT_FALSE(IsPathInUse(path)); |
EXPECT_TRUE(IsPathInUse(new_target_path)); |
// Destroying the item should release the reservation. |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
item.reset(); |
message_loop_.RunUntilIdle(); |
EXPECT_FALSE(IsPathInUse(new_target_path)); |
@@ -602,7 +576,7 @@ TEST_F(DownloadPathReservationTrackerTest, BasicTruncation) { |
// ".crdownload". So take it into account. Should be removed in the future. |
const size_t max_length = real_max_length - 11; |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path(GetLongNamePathInDownloadsDirectory( |
max_length, FILE_PATH_LITERAL(".txt"))); |
ASSERT_FALSE(IsPathInUse(path)); |
@@ -625,7 +599,7 @@ TEST_F(DownloadPathReservationTrackerTest, BasicTruncation) { |
EXPECT_EQ(max_length, reserved_path.BaseName().value().size()); |
// But the extension is kept unchanged. |
EXPECT_EQ(path.Extension(), reserved_path.Extension()); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
TEST_F(DownloadPathReservationTrackerTest, TruncationConflict) { |
@@ -634,7 +608,7 @@ TEST_F(DownloadPathReservationTrackerTest, TruncationConflict) { |
ASSERT_NE(-1, real_max_length); |
const size_t max_length = real_max_length - 11; |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path(GetLongNamePathInDownloadsDirectory( |
max_length, FILE_PATH_LITERAL(".txt"))); |
base::FilePath path0(GetLongNamePathInDownloadsDirectory( |
@@ -665,7 +639,7 @@ TEST_F(DownloadPathReservationTrackerTest, TruncationConflict) { |
EXPECT_TRUE(IsPathInUse(reserved_path)); |
EXPECT_TRUE(verified); |
EXPECT_EQ(path2, reserved_path); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
TEST_F(DownloadPathReservationTrackerTest, TruncationFail) { |
@@ -674,7 +648,7 @@ TEST_F(DownloadPathReservationTrackerTest, TruncationFail) { |
ASSERT_NE(-1, real_max_length); |
const size_t max_length = real_max_length - 11; |
- scoped_ptr<FakeDownloadItem> item(CreateDownloadItem(1)); |
+ scoped_ptr<MockDownloadItem> item(CreateDownloadItem(1)); |
base::FilePath path(GetPathInDownloadsDirectory( |
(FILE_PATH_LITERAL("a.") + |
base::FilePath::StringType(max_length, 'b')).c_str())); |
@@ -694,7 +668,7 @@ TEST_F(DownloadPathReservationTrackerTest, TruncationFail) { |
&verified); |
// We cannot truncate a path with very long extension. |
EXPECT_FALSE(verified); |
- item->SetState(DownloadItem::COMPLETE); |
+ SetDownloadItemState(item.get(), DownloadItem::COMPLETE); |
} |
#endif |