172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/syncable/model_type.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace syncable { 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace { 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ModelTypeTest : public testing::Test {}; 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// TODO(akalin): Move this to values_test_util.h. 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Takes ownership of |actual|. 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExpectStringValue(const std::string& expected_str, 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StringValue* actual) { 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<StringValue> scoped_actual(actual); 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string actual_str; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(scoped_actual->GetAsString(&actual_str)); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(expected_str, actual_str); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(ModelTypeTest, ModelTypeToValue) { 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (int i = syncable::FIRST_REAL_MODEL_TYPE; 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i < syncable::MODEL_TYPE_COUNT; ++i) { 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelType model_type = ModelTypeFromInt(i); 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue(ModelTypeToString(model_type), 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelTypeToValue(model_type)); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("Top-level folder", 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelTypeToValue(TOP_LEVEL_FOLDER)); 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("Unspecified", 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelTypeToValue(UNSPECIFIED)); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(ModelTypeTest, ModelTypeBitSetToValue) { 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ModelTypeBitSet model_types; 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen model_types.set(syncable::BOOKMARKS); 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen model_types.set(syncable::APPS); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<ListValue> value(ModelTypeBitSetToValue(model_types)); 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2u, value->GetSize()); 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string types[2]; 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(value->GetString(0, &types[0])); 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(value->GetString(1, &types[1])); 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("Bookmarks", types[0]); 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("Apps", types[1]); 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 56dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ModelTypeTest, ModelTypeSetToValue) { 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ModelTypeSet model_types; 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen model_types.insert(syncable::BOOKMARKS); 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen model_types.insert(syncable::APPS); 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<ListValue> value(ModelTypeSetToValue(model_types)); 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(2u, value->GetSize()); 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string types[2]; 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_TRUE(value->GetString(0, &types[0])); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_TRUE(value->GetString(1, &types[1])); 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ("Bookmarks", types[0]); 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ("Apps", types[1]); 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 70dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ModelTypeTest, ModelTypeBitSetFromString) { 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ModelTypeBitSet input, output; 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input.set(BOOKMARKS); 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input.set(AUTOFILL); 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input.set(APPS); 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string input_string = input.to_string(); 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_TRUE(ModelTypeBitSetFromString(input_string, &output)); 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(input, output); 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input_string.clear(); 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output)); 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input_string = "hello world"; 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output)); 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input_string.clear(); 86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int i = 0; i < MODEL_TYPE_COUNT; ++i) 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen input_string += '0' + (i%10); 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output)); 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace syncable 93