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()
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : loop_(base::MessageLoop::TYPE_DEFAULT),
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      db_thread_(BrowserThread::DB, &loop_) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutocompleteActionPredictorTableTest::~AutocompleteActionPredictorTableTest() {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::SetUp() {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_.reset(new PredictorDatabase(&profile_));
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880DF",
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("goog"), GURL("http://www.google.com/"),
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      1, 0));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880E0",
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("slash"), GURL("http://slashdot.org/"),
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      3, 2));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.push_back(AutocompleteActionPredictorTable::Row(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "BD85DBA2-8C29-49F9-84AE-48E1E90880E1",
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("news"), GURL("http://slashdot.org/"),
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, 1));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TearDown() {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_.reset(NULL);
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  loop_.RunUntilIdle();
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_db_.clear();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t AutocompleteActionPredictorTableTest::CountRecords() const {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Statement s(db_->GetDatabase()->GetUniqueStatement(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "SELECT count(*) FROM network_action_predictor"));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(s.Step());
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<size_t>(s.ColumnInt(0));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::AddAll() {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_db_, AutocompleteActionPredictorTable::Rows());
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(test_db_.size(), CountRecords());
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutocompleteActionPredictorTableTest::RowsAreEqual(
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AutocompleteActionPredictorTable::Row& lhs,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AutocompleteActionPredictorTable::Row& rhs) const {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (lhs.id == rhs.id &&
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.user_text == rhs.user_text &&
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.url == rhs.url &&
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.number_of_hits == rhs.number_of_hits &&
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          lhs.number_of_misses == rhs.number_of_misses);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestGetRow() {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, test_db_[0]),
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows());
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[0].id, &row);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(test_db_[0], row))
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << test_db_[0].id << "\n"
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << row.id;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestAddAndUpdateRows() {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, CountRecords());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Rows rows_to_add;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_add.push_back(test_db_[0]);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_add.push_back(test_db_[1]);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rows_to_add,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, CountRecords());
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row1 = test_db_[1];
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row1.number_of_hits = row1.number_of_hits + 1;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, test_db_[2]),
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(1, row1));
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, CountRecords());
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row updated_row1;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[1].id, &updated_row1);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row1, updated_row1))
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row1.id << "\n"
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row1.id;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row0 = test_db_[0];
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row0.number_of_hits = row0.number_of_hits + 2;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row2 = test_db_[2];
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  row2.number_of_hits = row2.number_of_hits + 2;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Rows rows_to_update;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_update.push_back(row0);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rows_to_update.push_back(row2);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->AddAndUpdateRows(
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutocompleteActionPredictorTable::Rows(),
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rows_to_update);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, CountRecords());
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row updated_row0, updated_row2;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[0].id, &updated_row0);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[2].id, &updated_row2);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row0, updated_row0))
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row0.id << "\n"
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row0.id;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(row2, updated_row2))
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Expected: Row with id " << row2.id << "\n"
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "Got:      Row with id " << updated_row2.id;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestDeleteRows() {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAll();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<AutocompleteActionPredictorTable::Row::Id> id_list;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  id_list.push_back(test_db_[0].id);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  id_list.push_back(test_db_[2].id);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->DeleteRows(id_list);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(test_db_.size() - 2, CountRecords());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteActionPredictorTable::Row row;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->GetRow(test_db_[1].id, &row);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(RowsAreEqual(test_db_[1], row));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutocompleteActionPredictorTableTest::TestDeleteAllRows() {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAll();
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  db_->autocomplete_table()->DeleteAllRows();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, CountRecords());
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteActionPredictorTableTest tests
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, GetRow) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestGetRow();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, AddAndUpdateRows) {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestAddAndUpdateRows();
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, DeleteRows) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteRows();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableTest, DeleteAllRows) {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteAllRows();
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AutocompleteActionPredictorTableReopenTest tests
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, GetRow) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestGetRow();
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, AddAndUpdateRows) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestAddAndUpdateRows();
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, DeleteRows) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteRows();
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutocompleteActionPredictorTableReopenTest, DeleteAllRows) {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestDeleteAllRows();
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace predictors
241