1 // Copyright (c) 2012 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 "sync/api/sync_error.h"
6
7 #include <string>
8
9 #include "base/location.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace syncer {
13
14 namespace {
15
16 using std::string;
17
18 typedef testing::Test SyncErrorTest;
19
TEST_F(SyncErrorTest,Unset)20 TEST_F(SyncErrorTest, Unset) {
21 SyncError error;
22 EXPECT_FALSE(error.IsSet());
23 }
24
TEST_F(SyncErrorTest,Default)25 TEST_F(SyncErrorTest, Default) {
26 tracked_objects::Location location = FROM_HERE;
27 std::string msg = "test";
28 ModelType type = PREFERENCES;
29 SyncError error(location, SyncError::DATATYPE_ERROR, msg, type);
30 ASSERT_TRUE(error.IsSet());
31 EXPECT_EQ(location.line_number(), error.location().line_number());
32 EXPECT_EQ("datatype error was encountered: ", error.GetMessagePrefix());
33 EXPECT_EQ(msg, error.message());
34 EXPECT_EQ(type, error.model_type());
35 EXPECT_EQ(SyncError::SYNC_ERROR_SEVERITY_ERROR, error.GetSeverity());
36 }
37
TEST_F(SyncErrorTest,LowSeverity)38 TEST_F(SyncErrorTest, LowSeverity) {
39 tracked_objects::Location location = FROM_HERE;
40 std::string msg = "test";
41 ModelType type = PREFERENCES;
42 SyncError error(location, SyncError::DATATYPE_POLICY_ERROR, msg, type);
43 ASSERT_TRUE(error.IsSet());
44 EXPECT_EQ(location.line_number(), error.location().line_number());
45 EXPECT_EQ("disabled due to configuration constraints: ",
46 error.GetMessagePrefix());
47 EXPECT_EQ(msg, error.message());
48 EXPECT_EQ(type, error.model_type());
49 EXPECT_EQ(SyncError::SYNC_ERROR_SEVERITY_INFO, error.GetSeverity());
50 }
51
TEST_F(SyncErrorTest,Reset)52 TEST_F(SyncErrorTest, Reset) {
53 tracked_objects::Location location = FROM_HERE;
54 std::string msg = "test";
55 ModelType type = PREFERENCES;
56
57 SyncError error;
58 EXPECT_FALSE(error.IsSet());
59
60 error.Reset(location, msg, type);
61 ASSERT_TRUE(error.IsSet());
62 EXPECT_EQ(location.line_number(), error.location().line_number());
63 EXPECT_EQ(msg, error.message());
64 EXPECT_EQ(type, error.model_type());
65
66 tracked_objects::Location location2 = FROM_HERE;
67 std::string msg2 = "test";
68 ModelType type2 = PREFERENCES;
69 error.Reset(location2, msg2, type2);
70 ASSERT_TRUE(error.IsSet());
71 EXPECT_EQ(location2.line_number(), error.location().line_number());
72 EXPECT_EQ(msg2, error.message());
73 EXPECT_EQ(type2, error.model_type());
74 }
75
TEST_F(SyncErrorTest,Copy)76 TEST_F(SyncErrorTest, Copy) {
77 tracked_objects::Location location = FROM_HERE;
78 std::string msg = "test";
79 ModelType type = PREFERENCES;
80
81 SyncError error1;
82 EXPECT_FALSE(error1.IsSet());
83 SyncError error2(error1);
84 EXPECT_FALSE(error2.IsSet());
85
86 error1.Reset(location, msg, type);
87 ASSERT_TRUE(error1.IsSet());
88 EXPECT_EQ(location.line_number(), error1.location().line_number());
89 EXPECT_EQ(msg, error1.message());
90 EXPECT_EQ(type, error1.model_type());
91
92 SyncError error3(error1);
93 ASSERT_TRUE(error3.IsSet());
94 EXPECT_EQ(error1.location().line_number(), error3.location().line_number());
95 EXPECT_EQ(error1.message(), error3.message());
96 EXPECT_EQ(error1.model_type(), error3.model_type());
97
98 SyncError error4;
99 EXPECT_FALSE(error4.IsSet());
100 SyncError error5(error4);
101 EXPECT_FALSE(error5.IsSet());
102 }
103
TEST_F(SyncErrorTest,Assign)104 TEST_F(SyncErrorTest, Assign) {
105 tracked_objects::Location location = FROM_HERE;
106 std::string msg = "test";
107 ModelType type = PREFERENCES;
108
109 SyncError error1;
110 EXPECT_FALSE(error1.IsSet());
111 SyncError error2;
112 error2 = error1;
113 EXPECT_FALSE(error2.IsSet());
114
115 error1.Reset(location, msg, type);
116 ASSERT_TRUE(error1.IsSet());
117 EXPECT_EQ(location.line_number(), error1.location().line_number());
118 EXPECT_EQ(msg, error1.message());
119 EXPECT_EQ(type, error1.model_type());
120
121 error2 = error1;
122 ASSERT_TRUE(error2.IsSet());
123 EXPECT_EQ(error1.location().line_number(), error2.location().line_number());
124 EXPECT_EQ(error1.message(), error2.message());
125 EXPECT_EQ(error1.model_type(), error2.model_type());
126
127 error2 = SyncError();
128 EXPECT_FALSE(error2.IsSet());
129 }
130
TEST_F(SyncErrorTest,ToString)131 TEST_F(SyncErrorTest, ToString) {
132 tracked_objects::Location location = FROM_HERE;
133 std::string msg = "test";
134 ModelType type = PREFERENCES;
135 std::string expected = std::string(ModelTypeToString(type)) +
136 " datatype error was encountered: " + msg;
137 LOG(INFO) << "Expect " << expected;
138 SyncError error(location, SyncError::DATATYPE_ERROR, msg, type);
139 EXPECT_TRUE(error.IsSet());
140 EXPECT_NE(string::npos, error.ToString().find(expected));
141
142 SyncError error2;
143 EXPECT_FALSE(error2.IsSet());
144 EXPECT_EQ(std::string(), error2.ToString());
145
146 error2 = error;
147 EXPECT_TRUE(error2.IsSet());
148 EXPECT_NE(string::npos, error.ToString().find(expected));
149 }
150
151 } // namespace
152
153 } // namespace syncer
154