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 20 TEST_F(SyncErrorTest, Unset) { 21 SyncError error; 22 EXPECT_FALSE(error.IsSet()); 23 } 24 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: " + msg, error.message()); 33 EXPECT_EQ(type, error.model_type()); 34 } 35 36 TEST_F(SyncErrorTest, Reset) { 37 tracked_objects::Location location = FROM_HERE; 38 std::string msg = "test"; 39 ModelType type = PREFERENCES; 40 41 SyncError error; 42 EXPECT_FALSE(error.IsSet()); 43 44 error.Reset(location, msg, type); 45 ASSERT_TRUE(error.IsSet()); 46 EXPECT_EQ(location.line_number(), error.location().line_number()); 47 EXPECT_EQ(msg, error.message()); 48 EXPECT_EQ(type, error.model_type()); 49 50 tracked_objects::Location location2 = FROM_HERE; 51 std::string msg2 = "test"; 52 ModelType type2 = PREFERENCES; 53 error.Reset(location2, msg2, type2); 54 ASSERT_TRUE(error.IsSet()); 55 EXPECT_EQ(location2.line_number(), error.location().line_number()); 56 EXPECT_EQ(msg2, error.message()); 57 EXPECT_EQ(type2, error.model_type()); 58 } 59 60 TEST_F(SyncErrorTest, Copy) { 61 tracked_objects::Location location = FROM_HERE; 62 std::string msg = "test"; 63 ModelType type = PREFERENCES; 64 65 SyncError error1; 66 EXPECT_FALSE(error1.IsSet()); 67 SyncError error2(error1); 68 EXPECT_FALSE(error2.IsSet()); 69 70 error1.Reset(location, msg, type); 71 ASSERT_TRUE(error1.IsSet()); 72 EXPECT_EQ(location.line_number(), error1.location().line_number()); 73 EXPECT_EQ(msg, error1.message()); 74 EXPECT_EQ(type, error1.model_type()); 75 76 SyncError error3(error1); 77 ASSERT_TRUE(error3.IsSet()); 78 EXPECT_EQ(error1.location().line_number(), error3.location().line_number()); 79 EXPECT_EQ(error1.message(), error3.message()); 80 EXPECT_EQ(error1.model_type(), error3.model_type()); 81 82 SyncError error4; 83 EXPECT_FALSE(error4.IsSet()); 84 SyncError error5(error4); 85 EXPECT_FALSE(error5.IsSet()); 86 } 87 88 TEST_F(SyncErrorTest, Assign) { 89 tracked_objects::Location location = FROM_HERE; 90 std::string msg = "test"; 91 ModelType type = PREFERENCES; 92 93 SyncError error1; 94 EXPECT_FALSE(error1.IsSet()); 95 SyncError error2; 96 error2 = error1; 97 EXPECT_FALSE(error2.IsSet()); 98 99 error1.Reset(location, msg, type); 100 ASSERT_TRUE(error1.IsSet()); 101 EXPECT_EQ(location.line_number(), error1.location().line_number()); 102 EXPECT_EQ(msg, error1.message()); 103 EXPECT_EQ(type, error1.model_type()); 104 105 error2 = error1; 106 ASSERT_TRUE(error2.IsSet()); 107 EXPECT_EQ(error1.location().line_number(), error2.location().line_number()); 108 EXPECT_EQ(error1.message(), error2.message()); 109 EXPECT_EQ(error1.model_type(), error2.model_type()); 110 111 error2 = SyncError(); 112 EXPECT_FALSE(error2.IsSet()); 113 } 114 115 TEST_F(SyncErrorTest, ToString) { 116 tracked_objects::Location location = FROM_HERE; 117 std::string msg = "test"; 118 ModelType type = PREFERENCES; 119 std::string expected = std::string(ModelTypeToString(type)) + 120 " datatype error was encountered: " + msg; 121 LOG(INFO) << "Expect " << expected; 122 SyncError error(location, SyncError::DATATYPE_ERROR, msg, type); 123 EXPECT_TRUE(error.IsSet()); 124 EXPECT_NE(string::npos, error.ToString().find(expected)); 125 126 SyncError error2; 127 EXPECT_FALSE(error2.IsSet()); 128 EXPECT_EQ(std::string(), error2.ToString()); 129 130 error2 = error; 131 EXPECT_TRUE(error2.IsSet()); 132 EXPECT_NE(string::npos, error.ToString().find(expected)); 133 } 134 135 } // namespace 136 137 } // namespace syncer 138