1// Copyright (c) 2011 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 "chrome/browser/sync/syncable/model_type.h"
6
7#include <string>
8
9#include "base/memory/scoped_ptr.h"
10#include "base/values.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13namespace syncable {
14namespace {
15
16class ModelTypeTest : public testing::Test {};
17
18// TODO(akalin): Move this to values_test_util.h.
19
20// Takes ownership of |actual|.
21void ExpectStringValue(const std::string& expected_str,
22                       StringValue* actual) {
23  scoped_ptr<StringValue> scoped_actual(actual);
24  std::string actual_str;
25  EXPECT_TRUE(scoped_actual->GetAsString(&actual_str));
26  EXPECT_EQ(expected_str, actual_str);
27}
28
29TEST_F(ModelTypeTest, ModelTypeToValue) {
30  for (int i = syncable::FIRST_REAL_MODEL_TYPE;
31       i < syncable::MODEL_TYPE_COUNT; ++i) {
32    ModelType model_type = ModelTypeFromInt(i);
33    ExpectStringValue(ModelTypeToString(model_type),
34                      ModelTypeToValue(model_type));
35  }
36  ExpectStringValue("Top-level folder",
37                    ModelTypeToValue(TOP_LEVEL_FOLDER));
38  ExpectStringValue("Unspecified",
39                    ModelTypeToValue(UNSPECIFIED));
40}
41
42TEST_F(ModelTypeTest, ModelTypeBitSetToValue) {
43  ModelTypeBitSet model_types;
44  model_types.set(syncable::BOOKMARKS);
45  model_types.set(syncable::APPS);
46
47  scoped_ptr<ListValue> value(ModelTypeBitSetToValue(model_types));
48  EXPECT_EQ(2u, value->GetSize());
49  std::string types[2];
50  EXPECT_TRUE(value->GetString(0, &types[0]));
51  EXPECT_TRUE(value->GetString(1, &types[1]));
52  EXPECT_EQ("Bookmarks", types[0]);
53  EXPECT_EQ("Apps", types[1]);
54}
55
56TEST_F(ModelTypeTest, ModelTypeSetToValue) {
57  ModelTypeSet model_types;
58  model_types.insert(syncable::BOOKMARKS);
59  model_types.insert(syncable::APPS);
60
61  scoped_ptr<ListValue> value(ModelTypeSetToValue(model_types));
62  EXPECT_EQ(2u, value->GetSize());
63  std::string types[2];
64  EXPECT_TRUE(value->GetString(0, &types[0]));
65  EXPECT_TRUE(value->GetString(1, &types[1]));
66  EXPECT_EQ("Bookmarks", types[0]);
67  EXPECT_EQ("Apps", types[1]);
68}
69
70TEST_F(ModelTypeTest, ModelTypeBitSetFromString) {
71  ModelTypeBitSet input, output;
72  input.set(BOOKMARKS);
73  input.set(AUTOFILL);
74  input.set(APPS);
75  std::string input_string = input.to_string();
76  EXPECT_TRUE(ModelTypeBitSetFromString(input_string, &output));
77  EXPECT_EQ(input, output);
78
79  input_string.clear();
80  EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output));
81
82  input_string = "hello world";
83  EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output));
84
85  input_string.clear();
86  for (int i = 0; i < MODEL_TYPE_COUNT; ++i)
87    input_string += '0' + (i%10);
88  EXPECT_FALSE(ModelTypeBitSetFromString(input_string, &output));
89}
90
91}  // namespace
92}  // namespace syncable
93