1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/syncable_id.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/values.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/sync/engine/test_id_factory.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing std::vector; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace syncable { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing browser_sync::TestIdFactory; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SyncableIdTest : public testing::Test { }; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(SyncableIdTest, TestIDCreation) { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch vector<Id> v; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::FromNumber(5)); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::FromNumber(1)); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::FromNumber(-5)); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::MakeLocal("A")); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::MakeLocal("B")); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::MakeServer("A")); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(TestIdFactory::MakeServer("B")); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(Id::CreateFromServerId("-5")); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(Id::CreateFromClientString("A")); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch v.push_back(Id::CreateFromServerId("A")); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (vector<Id>::iterator i = v.begin(); i != v.end(); ++i) { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (vector<Id>::iterator j = v.begin(); j != i; ++j) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_NE(*i, *j) << "mis equated two distinct ids"; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(*i, *i) << "self-equality failed"; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Id copy1 = *i; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Id copy2 = *i; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(copy1, copy2) << "equality after copy failed"; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST(SyncableIdTest, GetLeastIdForLexicographicComparison) { 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen vector<Id> v; 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromServerId("z5")); 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromServerId("z55")); 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromServerId("z6")); 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromClientString("zA-")); 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromClientString("zA--")); 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromServerId("zA--")); 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int i = 0; i <= 255; ++i) { 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string one_character_id; 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen one_character_id.push_back(i); 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen v.push_back(Id::CreateFromClientString(one_character_id)); 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (vector<Id>::iterator i = v.begin(); i != v.end(); ++i) { 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The following looks redundant, but we're testing a custom operator<. 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_LT(Id::GetLeastIdForLexicographicComparison(), *i); 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NE(*i, i->GetLexicographicSuccessor()); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NE(i->GetLexicographicSuccessor(), *i); 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_LT(*i, i->GetLexicographicSuccessor()); 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_GT(i->GetLexicographicSuccessor(), *i); 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (vector<Id>::iterator j = v.begin(); j != v.end(); ++j) { 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (j == i) 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen continue; 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (*j < *i) { 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_LT(j->GetLexicographicSuccessor(), *i); 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_LT(j->GetLexicographicSuccessor(), 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->GetLexicographicSuccessor()); 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_LT(*j, i->GetLexicographicSuccessor()); 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_GT(j->GetLexicographicSuccessor(), *i); 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_GT(j->GetLexicographicSuccessor(), 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->GetLexicographicSuccessor()); 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_GT(*j, i->GetLexicographicSuccessor()); 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// TODO(akalin): Move this to values_test_util.h. 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Takes ownership of |actual|. 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExpectStringValue(const std::string& expected_str, 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StringValue* actual) { 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<StringValue> scoped_actual(actual); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string actual_str; 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(scoped_actual->GetAsString(&actual_str)); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(expected_str, actual_str); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(SyncableIdTest, ToValue) { 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("r", Id::CreateFromServerId("0").ToValue()); 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("svalue", Id::CreateFromServerId("value").ToValue()); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("r", Id::CreateFromClientString("0").ToValue()); 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExpectStringValue("cvalue", Id::CreateFromClientString("value").ToValue()); 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace syncable 110