15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/format_macros.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/shortcuts_database.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/chrome_constants.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match_type.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sql/test/test_helpers.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Helpers -------------------------------------------------------------------- 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ShortcutsDatabaseTestInfo { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid; 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string text; 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string fill_into_edit; 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string destination_url; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string contents; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string contents_class; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string description; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string description_class; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition; 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) AutocompleteMatchType::Type type; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string keyword; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int days_from_now; 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int number_of_hits; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} shortcut_test_db[] = { 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { "BD85DBA2-8C29-49F9-84AE-48E1E90880DF", "goog", "www.google.com", 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "http://www.google.com/", "Google", "0,1,4,0", "Google", "0,1", 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_GENERATED, AutocompleteMatchType::SEARCH_HISTORY, 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "google.com", 1, 100, }, 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { "BD85DBA2-8C29-49F9-84AE-48E1E90880E0", "slash", "slashdot.org", 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "http://slashdot.org/", "slashdot.org", "0,1", 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "Slashdot - News for nerds, stuff that matters", "0,0", 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, AutocompleteMatchType::HISTORY_URL, "", 0, 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 100}, 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { "BD85DBA2-8C29-49F9-84AE-48E1E90880E1", "news", "slashdot.org", 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "http://slashdot.org/", "slashdot.org", "0,1", 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) "Slashdot - News for nerds, stuff that matters", "0,0", 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK, AutocompleteMatchType::HISTORY_TITLE, "", 0, 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5}, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)typedef testing::Test ShortcutsDatabaseMigrationTest; 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Checks that the database at |db| has the version 2 columns iff |is_v2|. 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void CheckV2ColumnExistence(const base::FilePath& db_path, bool is_v2) { 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sql::Connection connection; 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(connection.Open(db_path)); 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(is_v2, connection.DoesColumnExist("omni_box_shortcuts", 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "fill_into_edit")); 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(is_v2, connection.DoesColumnExist("omni_box_shortcuts", 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "transition")); 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(is_v2, connection.DoesColumnExist("omni_box_shortcuts", "type")); 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(is_v2, connection.DoesColumnExist("omni_box_shortcuts", "keyword")); 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace history { 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// ShortcutsDatabaseTest ------------------------------------------------------ 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShortcutsDatabaseTest : public testing::Test { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearDB(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t CountRecords() const; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsDatabase::Shortcut ShortcutFromTestInfo( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShortcutsDatabaseTestInfo& info); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddAll(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ShortcutsDatabase> db_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShortcutsDatabaseTest::SetUp() { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_ = new ShortcutsDatabase( 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile_->GetPath().Append(chrome::kShortcutsDatabaseName)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(db_->Init()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearDB(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShortcutsDatabaseTest::TearDown() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_ = NULL; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShortcutsDatabaseTest::ClearDB() { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s(db_->db_.GetUniqueStatement("DELETE FROM omni_box_shortcuts")); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s.Run()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t ShortcutsDatabaseTest::CountRecords() const { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sql::Statement s(db_->db_.GetUniqueStatement( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SELECT count(*) FROM omni_box_shortcuts")); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(s.Step()); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<size_t>(s.ColumnInt(0)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ShortcutsDatabase::Shortcut ShortcutsDatabaseTest::ShortcutFromTestInfo( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShortcutsDatabaseTestInfo& info) { 12323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return ShortcutsDatabase::Shortcut( 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info.guid, ASCIIToUTF16(info.text), 12523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsDatabase::Shortcut::MatchCore( 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASCIIToUTF16(info.fill_into_edit), GURL(info.destination_url), 12723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASCIIToUTF16(info.contents), info.contents_class, 12823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ASCIIToUTF16(info.description), info.description_class, 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info.transition, info.type, ASCIIToUTF16(info.keyword)), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::Now() - base::TimeDelta::FromDays(info.days_from_now), 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) info.number_of_hits); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShortcutsDatabaseTest::AddAll() { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearDB(); 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (size_t i = 0; i < arraysize(shortcut_test_db); ++i) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_->AddShortcut(ShortcutFromTestInfo(shortcut_test_db[i])); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(arraysize(shortcut_test_db), CountRecords()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Actual tests --------------------------------------------------------------- 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShortcutsDatabaseTest, AddShortcut) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearDB(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, CountRecords()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(db_->AddShortcut(ShortcutFromTestInfo(shortcut_test_db[0]))); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, CountRecords()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(db_->AddShortcut(ShortcutFromTestInfo(shortcut_test_db[1]))); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, CountRecords()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(db_->AddShortcut(ShortcutFromTestInfo(shortcut_test_db[2]))); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, CountRecords()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShortcutsDatabaseTest, UpdateShortcut) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAll(); 15723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ShortcutsDatabase::Shortcut shortcut( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutFromTestInfo(shortcut_test_db[1])); 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) shortcut.match_core.contents = ASCIIToUTF16("gro.todhsals"); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(db_->UpdateShortcut(shortcut)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap shortcuts; 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_->LoadShortcuts(&shortcuts); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap::const_iterator it( 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) shortcuts.find(shortcut.id)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it != shortcuts.end()); 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(it->second.match_core.contents == shortcut.match_core.contents); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShortcutsDatabaseTest, DeleteShortcutsWithIds) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAll(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> shortcut_ids; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcut_ids.push_back(shortcut_test_db[0].guid); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcut_ids.push_back(shortcut_test_db[2].guid); 17423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(db_->DeleteShortcutsWithIDs(shortcut_ids)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(arraysize(shortcut_test_db) - 2, CountRecords()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap shortcuts; 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_->LoadShortcuts(&shortcuts); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap::iterator it = 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcuts.find(shortcut_test_db[0].guid); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it == shortcuts.end()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = shortcuts.find(shortcut_test_db[1].guid); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it != shortcuts.end()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = shortcuts.find(shortcut_test_db[2].guid); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it == shortcuts.end()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(ShortcutsDatabaseTest, DeleteShortcutsWithURL) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAll(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(db_->DeleteShortcutsWithURL("http://slashdot.org/")); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(arraysize(shortcut_test_db) - 2, CountRecords()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap shortcuts; 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_->LoadShortcuts(&shortcuts); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap::iterator it = 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcuts.find(shortcut_test_db[0].guid); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it != shortcuts.end()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = shortcuts.find(shortcut_test_db[1].guid); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it == shortcuts.end()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it = shortcuts.find(shortcut_test_db[2].guid); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it == shortcuts.end()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShortcutsDatabaseTest, DeleteAllShortcuts) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAll(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShortcutsDatabase::GuidToShortcutMap shortcuts; 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_->LoadShortcuts(&shortcuts); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(arraysize(shortcut_test_db), shortcuts.size()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(db_->DeleteAllShortcuts()); 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db_->LoadShortcuts(&shortcuts); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, shortcuts.size()); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2224ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochTEST(ShortcutsDatabaseMigrationTest, MigrateTableAddFillIntoEdit) { 2234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Use the pre-v0 test file to create a test database in a temp dir. 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath sql_path; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &sql_path)); 2264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch sql_path = sql_path.AppendASCII("History").AppendASCII( 2274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#if defined(OS_ANDROID) 2284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "Shortcuts.v1.sql"); 2294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#else 2304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "Shortcuts.no_fill_into_edit.sql"); 2314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ScopedTempDir temp_dir; 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch base::FilePath db_path(temp_dir.path().AppendASCII("TestShortcuts1.db")); 2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(sql::test::CreateDatabaseFromSQL(db_path, sql_path)); 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CheckV2ColumnExistence(db_path, false); 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Create a ShortcutsDatabase from the test database, which will migrate the 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // test database to the current version. 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<ShortcutsDatabase> db(new ShortcutsDatabase(db_path)); 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) db->Init(); 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CheckV2ColumnExistence(db_path, true); 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Check the values in each of the new columns. 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sql::Connection connection; 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(connection.Open(db_path)); 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sql::Statement statement(connection.GetUniqueStatement( 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "SELECT fill_into_edit, url, transition, type, keyword " 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "FROM omni_box_shortcuts")); 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(statement.is_valid()); 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) while (statement.Step()) { 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // |fill_into_edit| should have been copied from the |url|. 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(statement.ColumnString(1), statement.ColumnString(0)); 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // The other three columns have default values. 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ui::PAGE_TRANSITION_TYPED, 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransitionFromInt(statement.ColumnInt(2))); 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(AutocompleteMatchType::HISTORY_TITLE, 26323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static_cast<AutocompleteMatchType::Type>(statement.ColumnInt(3))); 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(statement.ColumnString(4).empty()); 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_TRUE(statement.Succeeded()); 2674ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#if !defined(OS_WIN) 2684ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(temp_dir.Delete()); 2694ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif 2704ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch} 2714ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 2724ad1aa43a48567659193a298fad74f55e00b3dd9Ben MurdochTEST(ShortcutsDatabaseMigrationTest, MigrateV0ToV1) { 2734ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Use the v0 test file to create a test database in a temp dir. 2744ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch base::FilePath sql_path; 2754ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &sql_path)); 2764ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch sql_path = sql_path.AppendASCII("History").AppendASCII("Shortcuts.v0.sql"); 2774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch base::ScopedTempDir temp_dir; 2784ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2794ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch base::FilePath db_path(temp_dir.path().AppendASCII("TestShortcuts2.db")); 2804ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(sql::test::CreateDatabaseFromSQL(db_path, sql_path)); 2814ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 2824ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Create a ShortcutsDatabase from the test database, which will migrate the 2834ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // test database to the current version. 2844ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch { 2854ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch scoped_refptr<ShortcutsDatabase> db(new ShortcutsDatabase(db_path)); 2864ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch db->Init(); 2874ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch } 2884ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 2894ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch // Check that all the old type values got converted to new values. 2904ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch sql::Connection connection; 2914ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(connection.Open(db_path)); 2924ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch sql::Statement statement(connection.GetUniqueStatement( 2934ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch "SELECT count(1) FROM omni_box_shortcuts WHERE type in (9, 10, 11, 12)")); 2944ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ASSERT_TRUE(statement.is_valid()); 2954ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch while (statement.Step()) 2964ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_EQ(0, statement.ColumnInt(0)); 2974ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(statement.Succeeded()); 2984ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#if !defined(OS_WIN) 2994ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch EXPECT_TRUE(temp_dir.Delete()); 3004ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif 3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace history 304