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

Unified Diff: chrome/browser/sync_file_system/sync_file_system_service_unittest.cc

Issue 11421197: Implement SyncFileSystemService::GetFileSyncStatus method (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: indent fix Created 8 years 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
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..7cf12a782063e42e3dfaaf328471c7a59732361d 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));
+
+ 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));
+
+ 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));
+
+ 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));
+
+ 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
« no previous file with comments | « chrome/browser/sync_file_system/sync_file_system_service.cc ('k') | webkit/fileapi/syncable/local_file_sync_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698