local_file_sync_status_unittest.cc revision 2385ea399aae016c0806a4f9ef3c9cfe3d2a39df
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";
20
21const char kOther1[] = "filesystem:http://foo.com/test/dir b";
22const char kOther2[] = "filesystem:http://foo.com/temporary/dir a";
23
24FileSystemURL URL(const char* spec) {
25  return FileSystemURL::CreateForTest((GURL(spec)));
26}
27
28}  // namespace
29
30TEST(LocalFileSyncStatusTest, WritingSimple) {
31  LocalFileSyncStatus status;
32
33  status.StartWriting(URL(kFile));
34  status.StartWriting(URL(kFile));
35  status.EndWriting(URL(kFile));
36
37  EXPECT_TRUE(status.IsWriting(URL(kFile)));
38  EXPECT_TRUE(status.IsWriting(URL(kParent)));
39  EXPECT_TRUE(status.IsWriting(URL(kChild)));
40  EXPECT_FALSE(status.IsWriting(URL(kOther1)));
41  EXPECT_FALSE(status.IsWriting(URL(kOther2)));
42
43  // Adding writers doesn't change the entry's writability.
44  EXPECT_TRUE(status.IsWritable(URL(kFile)));
45  EXPECT_TRUE(status.IsWritable(URL(kParent)));
46  EXPECT_TRUE(status.IsWritable(URL(kChild)));
47  EXPECT_TRUE(status.IsWritable(URL(kOther1)));
48  EXPECT_TRUE(status.IsWritable(URL(kOther2)));
49
50  // Adding writers makes the entry non-syncable.
51  EXPECT_FALSE(status.IsSyncable(URL(kFile)));
52  EXPECT_FALSE(status.IsSyncable(URL(kParent)));
53  EXPECT_FALSE(status.IsSyncable(URL(kChild)));
54  EXPECT_TRUE(status.IsSyncable(URL(kOther1)));
55  EXPECT_TRUE(status.IsSyncable(URL(kOther2)));
56
57  status.EndWriting(URL(kFile));
58
59  EXPECT_FALSE(status.IsWriting(URL(kFile)));
60  EXPECT_FALSE(status.IsWriting(URL(kParent)));
61  EXPECT_FALSE(status.IsWriting(URL(kChild)));
62}
63
64TEST(LocalFileSyncStatusTest, SyncingSimple) {
65  LocalFileSyncStatus status;
66
67  status.StartSyncing(URL(kFile));
68
69  EXPECT_FALSE(status.IsWritable(URL(kFile)));
70  EXPECT_FALSE(status.IsWritable(URL(kParent)));
71  EXPECT_FALSE(status.IsWritable(URL(kChild)));
72  EXPECT_TRUE(status.IsWritable(URL(kOther1)));
73  EXPECT_TRUE(status.IsWritable(URL(kOther2)));
74
75  // New sync cannot be started for entries that are already in syncing.
76  EXPECT_FALSE(status.IsSyncable(URL(kFile)));
77  EXPECT_FALSE(status.IsSyncable(URL(kParent)));
78  EXPECT_FALSE(status.IsSyncable(URL(kChild)));
79  EXPECT_TRUE(status.IsSyncable(URL(kOther1)));
80  EXPECT_TRUE(status.IsSyncable(URL(kOther2)));
81
82  status.EndSyncing(URL(kFile));
83
84  EXPECT_TRUE(status.IsWritable(URL(kFile)));
85  EXPECT_TRUE(status.IsWritable(URL(kParent)));
86  EXPECT_TRUE(status.IsWritable(URL(kChild)));
87}
88
89}  // namespace sync_file_system
90