Chromium Code Reviews| Index: chrome/browser/sync_file_system/sync_file_system_service_unittest.cc |
| diff --git a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc |
| index 53c7fe4340d305c36148cd60a02a8e27102e9144..a50c56bafd5a32c2c7042b1a1225a872f813c660 100644 |
| --- a/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc |
| +++ b/chrome/browser/sync_file_system/sync_file_system_service_unittest.cc |
| @@ -44,10 +44,19 @@ namespace { |
| const char kOrigin[] = "http://example.com"; |
| const char kServiceName[] = "test"; |
| +template <typename R> struct AssignTrait { |
| + typedef const R& ArgumentType; |
| +}; |
| + |
| +template <> struct AssignTrait<fileapi::SyncFileStatus> { |
| + typedef fileapi::SyncFileStatus ArgumentType; |
| +}; |
| + |
| template <typename R> |
| void AssignValueAndQuit(base::RunLoop* run_loop, |
| SyncStatusCode* status_out, R* value_out, |
| - SyncStatusCode status, const R& value) { |
| + SyncStatusCode status, |
| + typename AssignTrait<R>::ArgumentType value) { |
| DCHECK(status_out); |
| DCHECK(value_out); |
| DCHECK(run_loop); |
| @@ -507,8 +516,7 @@ TEST_F(SyncFileSystemServiceTest, SimpleSyncFlowWithFileBusy) { |
| EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_, _)) |
| .WillOnce(MockSyncOperationCallback(fileapi::SYNC_STATUS_FILE_BUSY, |
| kFile, |
| - fileapi::SYNC_OPERATION_NONE)) |
| - .RetiresOnSaturation(); |
| + fileapi::SYNC_OPERATION_NONE)); |
| // ProcessRemoteChange should be called again when the becomes |
| // not busy. |
| @@ -538,4 +546,90 @@ TEST_F(SyncFileSystemServiceTest, SimpleSyncFlowWithFileBusy) { |
| event.Wait(); |
| } |
| +TEST_F(SyncFileSystemServiceTest, GetFileSyncStatus) { |
| + InitializeApp(); |
| + |
| + const FileSystemURL kFile(file_system_->URL("foo")); |
| + |
| + fileapi::SyncStatusCode status; |
| + fileapi::SyncFileStatus sync_file_status; |
| + |
| + // 1. The file is not in conflicting nor in pending change state. |
| + { |
| + base::RunLoop run_loop; |
| + EXPECT_CALL(*mock_remote_service(), IsConflicting(kFile)) |
| + .WillOnce(Return(false)); |
|
nhiroki
2012/12/03 08:47:24
nit: 6 -> 4 indents?
kinuko
2012/12/03 09:08:42
Done.
|
| + |
| + status = fileapi::SYNC_STATUS_UNKNOWN; |
| + sync_file_status = fileapi::SYNC_FILE_STATUS_UNKNOWN; |
| + sync_service_->GetFileSyncStatus( |
| + kFile, |
| + base::Bind(&AssignValueAndQuit<fileapi::SyncFileStatus>, |
| + &run_loop, &status, &sync_file_status)); |
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(fileapi::SYNC_STATUS_OK, status); |
| + EXPECT_EQ(fileapi::SYNC_FILE_STATUS_SYNCED, sync_file_status); |
| + } |
| + |
| + // 2. Conflicting case. |
| + { |
| + base::RunLoop run_loop; |
| + EXPECT_CALL(*mock_remote_service(), IsConflicting(kFile)) |
| + .WillOnce(Return(true)); |
|
nhiroki
2012/12/03 08:47:24
ditto.
kinuko
2012/12/03 09:08:42
Done.
|
| + |
| + status = fileapi::SYNC_STATUS_UNKNOWN; |
| + sync_file_status = fileapi::SYNC_FILE_STATUS_UNKNOWN; |
| + sync_service_->GetFileSyncStatus( |
| + kFile, |
| + base::Bind(&AssignValueAndQuit<fileapi::SyncFileStatus>, |
| + &run_loop, &status, &sync_file_status)); |
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(fileapi::SYNC_STATUS_OK, status); |
| + EXPECT_EQ(fileapi::SYNC_FILE_STATUS_CONFLICTING, sync_file_status); |
| + } |
| + |
| + // 3. The file has pending local changes. |
| + { |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_->CreateFile(kFile)); |
| + |
| + base::RunLoop run_loop; |
| + EXPECT_CALL(*mock_remote_service(), IsConflicting(kFile)) |
| + .WillOnce(Return(false)); |
|
nhiroki
2012/12/03 08:47:24
ditto.
kinuko
2012/12/03 09:08:42
Done.
|
| + |
| + status = fileapi::SYNC_STATUS_UNKNOWN; |
| + sync_file_status = fileapi::SYNC_FILE_STATUS_UNKNOWN; |
| + sync_service_->GetFileSyncStatus( |
| + kFile, |
| + base::Bind(&AssignValueAndQuit<fileapi::SyncFileStatus>, |
| + &run_loop, &status, &sync_file_status)); |
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(fileapi::SYNC_STATUS_OK, status); |
| + EXPECT_EQ(fileapi::SYNC_FILE_STATUS_HAS_PENDING_CHANGES, sync_file_status); |
| + } |
| + |
| + // 4. The file has a conflict and pending local changes. In this case |
| + // we return SYNC_FILE_STATUS_CONFLICTING. |
| + { |
| + EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_->TruncateFile(kFile, 1U)); |
| + |
| + base::RunLoop run_loop; |
| + EXPECT_CALL(*mock_remote_service(), IsConflicting(kFile)) |
| + .WillOnce(Return(true)); |
|
nhiroki
2012/12/03 08:47:24
ditto.
kinuko
2012/12/03 09:08:42
Done.
|
| + |
| + status = fileapi::SYNC_STATUS_UNKNOWN; |
| + sync_file_status = fileapi::SYNC_FILE_STATUS_UNKNOWN; |
| + sync_service_->GetFileSyncStatus( |
| + kFile, |
| + base::Bind(&AssignValueAndQuit<fileapi::SyncFileStatus>, |
| + &run_loop, &status, &sync_file_status)); |
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(fileapi::SYNC_STATUS_OK, status); |
| + EXPECT_EQ(fileapi::SYNC_FILE_STATUS_CONFLICTING, sync_file_status); |
| + } |
| +} |
| + |
| } // namespace sync_file_system |