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