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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/predictors/autocomplete_action_predictor_table.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/predictors/predictor_database.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/predictors/predictor_database_factory.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sql/statement.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using predictors::AutocompleteActionPredictorTable;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace predictors {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutocompleteActionPredictorTableTest : public testing::Test {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTableTest();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AutocompleteActionPredictorTableTest();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t CountRecords() const;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddAll();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool RowsAreEqual(const AutocompleteActionPredictorTable::Row& lhs,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const AutocompleteActionPredictorTable::Row& rhs) const;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile* profile() { return &profile_; }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test functions that can be run against this text fixture or
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AutocompleteActionPredictorTableReopenTest that inherits from this.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TestGetRow();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TestAddAndUpdateRows();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TestDeleteRows();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TestDeleteAllRows();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Rows test_db_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfile profile_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PredictorDatabase> db_;
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop loop_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread db_thread_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutocompleteActionPredictorTableReopenTest
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public AutocompleteActionPredictorTableTest {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // By calling SetUp twice, we make sure that the table already exists for
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // this fixture.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteActionPredictorTableTest::SetUp();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteActionPredictorTableTest::TearDown();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutocompleteActionPredictorTableTest::SetUp();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutocompleteActionPredictorTableTest::AutocompleteActionPredictorTableTest()
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : db_thread_(BrowserThread::DB, &loop_) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutocompleteActionPredictorTableTest::~AutocompleteActionPredictorTableTest() {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::SetUp() {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_.reset(new PredictorDatabase(&profile_));
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880DF",
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::ASCIIToUTF16("goog"), GURL("http://www.google.com/"),
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, 0));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880E0",
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::ASCIIToUTF16("slash"), GURL("http://slashdot.org/"),
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      3, 2));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880E1",
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::ASCIIToUTF16("news"), GURL("http://slashdot.org/"),
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, 1));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TearDown() {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_.reset(NULL);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.clear();
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t AutocompleteActionPredictorTableTest::CountRecords() const {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(db_->GetDatabase()->GetUniqueStatement(
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT count(*) FROM network_action_predictor"));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.Step());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<size_t>(s.ColumnInt(0));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::AddAll() {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_db_, AutocompleteActionPredictorTable::Rows());
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(test_db_.size(), CountRecords());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutocompleteActionPredictorTableTest::RowsAreEqual(
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AutocompleteActionPredictorTable::Row& lhs,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AutocompleteActionPredictorTable::Row& rhs) const {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (lhs.id == rhs.id &&
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.user_text == rhs.user_text &&
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.url == rhs.url &&
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.number_of_hits == rhs.number_of_hits &&
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.number_of_misses == rhs.number_of_misses);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestGetRow() {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, test_db_[0]),
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows());
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[0].id, &row);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(test_db_[0], row))
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << test_db_[0].id << "\n"
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << row.id;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestAddAndUpdateRows() {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, CountRecords());
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Rows rows_to_add;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_add.push_back(test_db_[0]);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_add.push_back(test_db_[1]);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rows_to_add,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, CountRecords());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row1 = test_db_[1];
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row1.number_of_hits = row1.number_of_hits + 1;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, test_db_[2]),
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, row1));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, CountRecords());
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row updated_row1;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[1].id, &updated_row1);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row1, updated_row1))
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row1.id << "\n"
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row1.id;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row0 = test_db_[0];
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row0.number_of_hits = row0.number_of_hits + 2;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row2 = test_db_[2];
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row2.number_of_hits = row2.number_of_hits + 2;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Rows rows_to_update;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_update.push_back(row0);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_update.push_back(row2);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(),
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rows_to_update);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, CountRecords());
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row updated_row0, updated_row2;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[0].id, &updated_row0);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[2].id, &updated_row2);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row0, updated_row0))
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row0.id << "\n"
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row0.id;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row2, updated_row2))
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row2.id << "\n"
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row2.id;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestDeleteRows() {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAll();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<AutocompleteActionPredictorTable::Row::Id> id_list;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  id_list.push_back(test_db_[0].id);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  id_list.push_back(test_db_[2].id);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->DeleteRows(id_list);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(test_db_.size() - 2, CountRecords());
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[1].id, &row);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(test_db_[1], row));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestDeleteAllRows() {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAll();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->DeleteAllRows();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, CountRecords());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteActionPredictorTableTest tests
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, GetRow) {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestGetRow();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, AddAndUpdateRows) {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestAddAndUpdateRows();
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, DeleteRows) {
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteRows();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, DeleteAllRows) {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteAllRows();
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteActionPredictorTableReopenTest tests
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, GetRow) {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestGetRow();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, AddAndUpdateRows) {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestAddAndUpdateRows();
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, DeleteRows) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteRows();
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, DeleteAllRows) {
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteAllRows();
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace predictors
240