Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/files/file_path.h"
      6 #include "base/files/scoped_temp_dir.h"
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "chrome/browser/history/android/android_cache_database.h"
      9 #include "chrome/browser/history/android/android_time.h"
     10 #include "chrome/browser/history/history_database.h"
     11 #include "chrome/test/base/testing_profile.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 using base::Time;
     15 using base::TimeDelta;
     16 
     17 namespace history {
     18 
     19 class AndroidCacheDatabaseTest : public testing::Test {
     20  public:
     21   AndroidCacheDatabaseTest() {
     22   }
     23   virtual ~AndroidCacheDatabaseTest() {}
     24 
     25  protected:
     26   virtual void SetUp() {
     27     // Get a temporary directory for the test DB files.
     28     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
     29     base::FilePath history_db_name_ =
     30         temp_dir_.path().AppendASCII("history.db");
     31     android_cache_db_name_ = temp_dir_.path().AppendASCII(
     32         "TestAndroidCache.db");
     33     ASSERT_EQ(sql::INIT_OK, history_db_.Init(history_db_name_));
     34     ASSERT_EQ(sql::INIT_OK,
     35               history_db_.InitAndroidCacheDatabase(android_cache_db_name_));
     36   }
     37 
     38   base::ScopedTempDir temp_dir_;
     39   base::FilePath android_cache_db_name_;
     40   HistoryDatabase history_db_;
     41 };
     42 
     43 TEST(AndroidCacheDatabaseAttachTest, AttachDatabaseInTransactionNesting) {
     44   base::ScopedTempDir temp_dir;
     45   base::FilePath android_cache_db_name;
     46   HistoryDatabase history_db;
     47   ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
     48   base::FilePath history_db_name = temp_dir.path().AppendASCII("history.db");
     49   android_cache_db_name = temp_dir.path().AppendASCII(
     50         "TestAndroidCache.db");
     51   ASSERT_EQ(sql::INIT_OK, history_db.Init(history_db_name));
     52   // Create nested transactions.
     53   history_db.BeginTransaction();
     54   history_db.BeginTransaction();
     55   history_db.BeginTransaction();
     56   int transaction_nesting = history_db.transaction_nesting();
     57   ASSERT_EQ(sql::INIT_OK,
     58             history_db.InitAndroidCacheDatabase(android_cache_db_name));
     59   // The count of nested transaction is still same.
     60   EXPECT_EQ(transaction_nesting, history_db.transaction_nesting());
     61 }
     62 
     63 TEST_F(AndroidCacheDatabaseTest, InitAndroidCacheDatabase) {
     64   // Try to run a sql against the table to verify them exist.
     65   AndroidCacheDatabase* cache_db =
     66       static_cast<AndroidCacheDatabase*>(&history_db_);
     67   EXPECT_TRUE(cache_db->GetDB().Execute(
     68       "DELETE FROM android_cache_db.bookmark_cache"));
     69   EXPECT_TRUE(cache_db->GetDB().Execute(
     70       "DELETE FROM android_cache_db.search_terms"));
     71 }
     72 
     73 TEST_F(AndroidCacheDatabaseTest, SearchTermsTable) {
     74   // Test AddSearchTerm.
     75   Time search_time1 = Time::Now() - TimeDelta::FromDays(1);
     76   base::string16 search_term1(base::UTF8ToUTF16("search term 1"));
     77   SearchTermID id1 = history_db_.AddSearchTerm(search_term1, search_time1);
     78   ASSERT_TRUE(id1);
     79   SearchTermRow row1;
     80   ASSERT_EQ(id1, history_db_.GetSearchTerm(search_term1, &row1));
     81   EXPECT_EQ(search_term1, row1.term);
     82   EXPECT_EQ(ToDatabaseTime(search_time1),
     83             ToDatabaseTime(row1.last_visit_time));
     84   EXPECT_EQ(id1, row1.id);
     85 
     86   // Test UpdateSearchTerm.
     87   SearchTermRow update_row1;
     88   update_row1.term = (base::UTF8ToUTF16("update search term1"));
     89   update_row1.last_visit_time = Time::Now();
     90   ASSERT_TRUE(history_db_.UpdateSearchTerm(id1, update_row1));
     91   EXPECT_EQ(id1, history_db_.GetSearchTerm(update_row1.term, &row1));
     92   EXPECT_EQ(update_row1.term, row1.term);
     93   EXPECT_EQ(ToDatabaseTime(update_row1.last_visit_time),
     94             ToDatabaseTime(row1.last_visit_time));
     95   EXPECT_EQ(id1, row1.id);
     96 
     97   Time search_time2 = Time::Now() - TimeDelta::FromHours(1);
     98   base::string16 search_term2(base::UTF8ToUTF16("search term 2"));
     99   SearchTermID id2 = history_db_.AddSearchTerm(search_term2, search_time2);
    100   ASSERT_TRUE(id2);
    101   ASSERT_TRUE(history_db_.SetKeywordSearchTermsForURL(1, 1, search_term2));
    102   ASSERT_TRUE(history_db_.DeleteUnusedSearchTerms());
    103 
    104   // The search_term1 was removed.
    105   EXPECT_FALSE(history_db_.GetSearchTerm(update_row1.term, NULL));
    106   // The search_term2 should still in the table.
    107   ASSERT_EQ(id2, history_db_.GetSearchTerm(search_term2, &row1));
    108   EXPECT_EQ(id2, row1.id);
    109   EXPECT_EQ(ToDatabaseTime(search_time2),
    110             ToDatabaseTime(row1.last_visit_time));
    111   EXPECT_EQ(search_term2, row1.term);
    112 }
    113 
    114 }  // namespace history
    115