1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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 "base/basictypes.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_piece.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_types.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/typed_url_model_associator.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing browser_sync::TypedUrlModelAssociator; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TypedUrlModelAssociatorTest : public testing::Test { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static history::URLRow MakeTypedUrlRow(const char* url, 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* title, 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int typed_count, 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 last_visit, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool hidden, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector* visits) { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gurl(url); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow history_url(gurl); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.set_title(UTF8ToUTF16(title)); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.set_typed_count(typed_count); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.set_last_visit( 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time::FromInternalValue(last_visit)); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.set_hidden(hidden); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visits->push_back(history::VisitRow( 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.id(), history_url.last_visit(), 0, 0, 0)); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_url.set_visit_count(visits->size()); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return history_url; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static sync_pb::TypedUrlSpecifics MakeTypedUrlSpecifics(const char* url, 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* title, 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int typed_count, 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 last_visit, 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool hidden) { 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics typed_url; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_url.set_url(url); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_url.set_title(title); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_url.set_typed_count(typed_count); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_url.set_hidden(hidden); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typed_url.add_visit(last_visit); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return typed_url; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static bool URLsEqual(history::URLRow& lhs, history::URLRow& rhs) { 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (lhs.url().spec().compare(rhs.url().spec()) == 0) && 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (lhs.title().compare(rhs.title()) == 0) && 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (lhs.visit_count() == rhs.visit_count()) && 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (lhs.typed_count() == rhs.typed_count()) && 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (lhs.hidden() == rhs.hidden()); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TypedUrlModelAssociatorTest, MergeUrls) { 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector visits1; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow row1(MakeTypedUrlRow("http://pie.com/", "pie", 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false, &visits1)); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics specs1(MakeTypedUrlSpecifics("http://pie.com/", 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "pie", 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false)); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow new_row1(GURL("http://pie.com/")); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits1; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(TypedUrlModelAssociator::DIFF_NONE, 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::MergeUrls(specs1, row1, &visits1, 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_row1, &new_visits1)); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector visits2; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow row2(MakeTypedUrlRow("http://pie.com/", "pie", 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false, &visits2)); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics specs2(MakeTypedUrlSpecifics("http://pie.com/", 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "pie", 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, true)); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector expected_visits2; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow expected2(MakeTypedUrlRow("http://pie.com/", "pie", 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, true, &expected_visits2)); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow new_row2(GURL("http://pie.com/")); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits2; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(TypedUrlModelAssociator::DIFF_ROW_CHANGED, 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::MergeUrls(specs2, row2, &visits2, 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_row2, &new_visits2)); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(URLsEqual(new_row2, expected2)); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector visits3; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow row3(MakeTypedUrlRow("http://pie.com/", "pie", 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false, &visits3)); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics specs3(MakeTypedUrlSpecifics("http://pie.com/", 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "pie2", 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, true)); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector expected_visits3; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow expected3(MakeTypedUrlRow("http://pie.com/", "pie2", 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, true, &expected_visits3)); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow new_row3(GURL("http://pie.com/")); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits3; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(TypedUrlModelAssociator::DIFF_ROW_CHANGED | 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DIFF_TITLE_CHANGED, 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::MergeUrls(specs3, row3, &visits3, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_row3, &new_visits3)); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(URLsEqual(new_row3, expected3)); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector visits4; 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow row4(MakeTypedUrlRow("http://pie.com/", "pie", 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 4, false, &visits4)); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics specs4(MakeTypedUrlSpecifics("http://pie.com/", 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "pie2", 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, true)); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector expected_visits4; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow expected4(MakeTypedUrlRow("http://pie.com/", "pie", 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false, &expected_visits4)); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow new_row4(GURL("http://pie.com/")); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits4; 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(TypedUrlModelAssociator::DIFF_NODE_CHANGED | 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DIFF_VISITS_ADDED, 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::MergeUrls(specs4, row4, &visits4, 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_row4, &new_visits4)); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(URLsEqual(new_row4, expected4)); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector visits5; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow row5(MakeTypedUrlRow("http://pie.com/", "pie", 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1, 4, false, &visits5)); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics specs5(MakeTypedUrlSpecifics("http://pie.com/", 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "pie", 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false)); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector expected_visits5; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow expected5(MakeTypedUrlRow("http://pie.com/", "pie", 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2, 3, false, &expected_visits5)); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::URLRow new_row5(GURL("http://pie.com/")); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits5; 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(TypedUrlModelAssociator::DIFF_ROW_CHANGED | 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DIFF_VISITS_ADDED, 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::MergeUrls(specs5, row5, &visits5, 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_row5, &new_visits5)); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(URLsEqual(new_row5, expected5)); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TypedUrlModelAssociatorTest, DiffVisitsSame) { 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector old_visits; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics new_url; 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits[] = { 1024, 2065, 65534, 1237684 }; 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits); ++c) { 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch old_visits.push_back(history::VisitRow( 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, base::Time::FromInternalValue(visits[c]), 0, 0, 0)); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_url.add_visit(visits[c]); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector removed_visits; 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DiffVisits(old_visits, new_url, 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_visits, &removed_visits); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(new_visits.empty()); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(removed_visits.empty()); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TypedUrlModelAssociatorTest, DiffVisitsRemove) { 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector old_visits; 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics new_url; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_left[] = { 1, 1024, 1500, 2065, 6000, 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65534, 1237684, 2237684 }; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_right[] = { 1024, 2065, 65534, 1237684 }; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_removed[] = { 1, 1500, 6000, 2237684 }; 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_left); ++c) { 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch old_visits.push_back(history::VisitRow( 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, base::Time::FromInternalValue(visits_left[c]), 0, 0, 0)); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_right); ++c) { 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_url.add_visit(visits_right[c]); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector removed_visits; 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DiffVisits(old_visits, new_url, 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_visits, &removed_visits); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(new_visits.empty()); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(removed_visits.size() == arraysize(visits_removed)); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_removed); ++c) { 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(removed_visits[c].visit_time.ToInternalValue(), 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visits_removed[c]); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TypedUrlModelAssociatorTest, DiffVisitsAdd) { 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector old_visits; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::TypedUrlSpecifics new_url; 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_left[] = { 1024, 2065, 65534, 1237684 }; 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_right[] = { 1, 1024, 1500, 2065, 6000, 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65534, 1237684, 2237684 }; 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int64 visits_added[] = { 1, 1500, 6000, 2237684 }; 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_left); ++c) { 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch old_visits.push_back(history::VisitRow( 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 0, base::Time::FromInternalValue(visits_left[c]), 0, 0, 0)); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_right); ++c) { 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_url.add_visit(visits_right[c]); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<base::Time> new_visits; 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector removed_visits; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypedUrlModelAssociator::DiffVisits(old_visits, new_url, 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &new_visits, &removed_visits); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(removed_visits.empty()); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(new_visits.size() == arraysize(visits_added)); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t c = 0; c < arraysize(visits_added); ++c) { 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(new_visits[c].ToInternalValue(), 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch visits_added[c]); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 226