// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "sync/api/sync_error.h"
#include <string>
#include "base/location.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
namespace {
using std::string;
typedef testing::Test SyncErrorTest;
TEST_F(SyncErrorTest, Unset) {
SyncError error;
EXPECT_FALSE(error.IsSet());
}
TEST_F(SyncErrorTest, Default) {
tracked_objects::Location location = FROM_HERE;
std::string msg = "test";
ModelType type = PREFERENCES;
SyncError error(location, SyncError::DATATYPE_ERROR, msg, type);
ASSERT_TRUE(error.IsSet());
EXPECT_EQ(location.line_number(), error.location().line_number());
EXPECT_EQ("datatype error was encountered: " + msg, error.message());
EXPECT_EQ(type, error.model_type());
}
TEST_F(SyncErrorTest, Reset) {
tracked_objects::Location location = FROM_HERE;
std::string msg = "test";
ModelType type = PREFERENCES;
SyncError error;
EXPECT_FALSE(error.IsSet());
error.Reset(location, msg, type);
ASSERT_TRUE(error.IsSet());
EXPECT_EQ(location.line_number(), error.location().line_number());
EXPECT_EQ(msg, error.message());
EXPECT_EQ(type, error.model_type());
tracked_objects::Location location2 = FROM_HERE;
std::string msg2 = "test";
ModelType type2 = PREFERENCES;
error.Reset(location2, msg2, type2);
ASSERT_TRUE(error.IsSet());
EXPECT_EQ(location2.line_number(), error.location().line_number());
EXPECT_EQ(msg2, error.message());
EXPECT_EQ(type2, error.model_type());
}
TEST_F(SyncErrorTest, Copy) {
tracked_objects::Location location = FROM_HERE;
std::string msg = "test";
ModelType type = PREFERENCES;
SyncError error1;
EXPECT_FALSE(error1.IsSet());
SyncError error2(error1);
EXPECT_FALSE(error2.IsSet());
error1.Reset(location, msg, type);
ASSERT_TRUE(error1.IsSet());
EXPECT_EQ(location.line_number(), error1.location().line_number());
EXPECT_EQ(msg, error1.message());
EXPECT_EQ(type, error1.model_type());
SyncError error3(error1);
ASSERT_TRUE(error3.IsSet());
EXPECT_EQ(error1.location().line_number(), error3.location().line_number());
EXPECT_EQ(error1.message(), error3.message());
EXPECT_EQ(error1.model_type(), error3.model_type());
SyncError error4;
EXPECT_FALSE(error4.IsSet());
SyncError error5(error4);
EXPECT_FALSE(error5.IsSet());
}
TEST_F(SyncErrorTest, Assign) {
tracked_objects::Location location = FROM_HERE;
std::string msg = "test";
ModelType type = PREFERENCES;
SyncError error1;
EXPECT_FALSE(error1.IsSet());
SyncError error2;
error2 = error1;
EXPECT_FALSE(error2.IsSet());
error1.Reset(location, msg, type);
ASSERT_TRUE(error1.IsSet());
EXPECT_EQ(location.line_number(), error1.location().line_number());
EXPECT_EQ(msg, error1.message());
EXPECT_EQ(type, error1.model_type());
error2 = error1;
ASSERT_TRUE(error2.IsSet());
EXPECT_EQ(error1.location().line_number(), error2.location().line_number());
EXPECT_EQ(error1.message(), error2.message());
EXPECT_EQ(error1.model_type(), error2.model_type());
error2 = SyncError();
EXPECT_FALSE(error2.IsSet());
}
TEST_F(SyncErrorTest, ToString) {
tracked_objects::Location location = FROM_HERE;
std::string msg = "test";
ModelType type = PREFERENCES;
std::string expected = std::string(ModelTypeToString(type)) +
" datatype error was encountered: " + msg;
LOG(INFO) << "Expect " << expected;
SyncError error(location, SyncError::DATATYPE_ERROR, msg, type);
EXPECT_TRUE(error.IsSet());
EXPECT_NE(string::npos, error.ToString().find(expected));
SyncError error2;
EXPECT_FALSE(error2.IsSet());
EXPECT_EQ(std::string(), error2.ToString());
error2 = error;
EXPECT_TRUE(error2.IsSet());
EXPECT_NE(string::npos, error.ToString().find(expected));
}
} // namespace
} // namespace syncer