local_file_sync_status_unittest.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/sync_file_system/local/local_file_sync_status.h" 6 7#include "base/basictypes.h" 8#include "testing/gtest/include/gtest/gtest.h" 9#include "url/gurl.h" 10 11using fileapi::FileSystemURL; 12 13namespace sync_file_system { 14 15namespace { 16 17const char kParent[] = "filesystem:http://foo.com/test/dir a"; 18const char kFile[] = "filesystem:http://foo.com/test/dir a/dir b"; 19const char kChild[] = "filesystem:http://foo.com/test/dir a/dir b/file"; 20const char kHasPeriod[] = "filesystem:http://foo.com/test/dir a.dir b"; 21 22const char kOther1[] = "filesystem:http://foo.com/test/dir b"; 23const char kOther2[] = "filesystem:http://foo.com/temporary/dir a"; 24 25FileSystemURL URL(const char* spec) { 26 return FileSystemURL::CreateForTest((GURL(spec))); 27} 28 29} // namespace 30 31TEST(LocalFileSyncStatusTest, WritingSimple) { 32 LocalFileSyncStatus status; 33 34 status.StartWriting(URL(kFile)); 35 status.StartWriting(URL(kFile)); 36 status.EndWriting(URL(kFile)); 37 38 EXPECT_TRUE(status.IsWriting(URL(kFile))); 39 EXPECT_TRUE(status.IsWriting(URL(kParent))); 40 EXPECT_TRUE(status.IsWriting(URL(kChild))); 41 EXPECT_FALSE(status.IsWriting(URL(kOther1))); 42 EXPECT_FALSE(status.IsWriting(URL(kOther2))); 43 44 // Adding writers doesn't change the entry's writability. 45 EXPECT_TRUE(status.IsWritable(URL(kFile))); 46 EXPECT_TRUE(status.IsWritable(URL(kParent))); 47 EXPECT_TRUE(status.IsWritable(URL(kChild))); 48 EXPECT_TRUE(status.IsWritable(URL(kOther1))); 49 EXPECT_TRUE(status.IsWritable(URL(kOther2))); 50 51 // Adding writers makes the entry non-syncable. 52 EXPECT_FALSE(status.IsSyncable(URL(kFile))); 53 EXPECT_FALSE(status.IsSyncable(URL(kParent))); 54 EXPECT_FALSE(status.IsSyncable(URL(kChild))); 55 EXPECT_TRUE(status.IsSyncable(URL(kOther1))); 56 EXPECT_TRUE(status.IsSyncable(URL(kOther2))); 57 58 status.EndWriting(URL(kFile)); 59 60 EXPECT_FALSE(status.IsWriting(URL(kFile))); 61 EXPECT_FALSE(status.IsWriting(URL(kParent))); 62 EXPECT_FALSE(status.IsWriting(URL(kChild))); 63} 64 65TEST(LocalFileSyncStatusTest, SyncingSimple) { 66 LocalFileSyncStatus status; 67 68 status.StartSyncing(URL(kFile)); 69 70 EXPECT_FALSE(status.IsWritable(URL(kFile))); 71 EXPECT_FALSE(status.IsWritable(URL(kParent))); 72 EXPECT_FALSE(status.IsWritable(URL(kChild))); 73 EXPECT_TRUE(status.IsWritable(URL(kOther1))); 74 EXPECT_TRUE(status.IsWritable(URL(kOther2))); 75 76 // New sync cannot be started for entries that are already in syncing. 77 EXPECT_FALSE(status.IsSyncable(URL(kFile))); 78 EXPECT_FALSE(status.IsSyncable(URL(kParent))); 79 EXPECT_FALSE(status.IsSyncable(URL(kChild))); 80 EXPECT_TRUE(status.IsSyncable(URL(kOther1))); 81 EXPECT_TRUE(status.IsSyncable(URL(kOther2))); 82 83 status.EndSyncing(URL(kFile)); 84 85 EXPECT_TRUE(status.IsWritable(URL(kFile))); 86 EXPECT_TRUE(status.IsWritable(URL(kParent))); 87 EXPECT_TRUE(status.IsWritable(URL(kChild))); 88} 89 90TEST(LocalFileSyncStatusTest, WritingOnPathsWithPeriod) { 91 LocalFileSyncStatus status; 92 93 status.StartWriting(URL(kParent)); 94 status.StartWriting(URL(kHasPeriod)); 95 96 EXPECT_TRUE(status.IsChildOrParentWriting(URL(kFile))); 97 98 status.EndWriting(URL(kParent)); 99 status.StartWriting(URL(kFile)); 100 101 EXPECT_TRUE(status.IsChildOrParentWriting(URL(kParent))); 102} 103 104TEST(LocalFileSyncStatusTest, SyncingOnPathsWithPeriod) { 105 LocalFileSyncStatus status; 106 107 status.StartSyncing(URL(kParent)); 108 status.StartSyncing(URL(kHasPeriod)); 109 110 EXPECT_TRUE(status.IsChildOrParentSyncing(URL(kFile))); 111 112 status.EndSyncing(URL(kParent)); 113 status.StartSyncing(URL(kFile)); 114 115 EXPECT_TRUE(status.IsChildOrParentSyncing(URL(kParent))); 116} 117 118} // namespace sync_file_system 119