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.
7 #include "base/file_util.h"
8 #include "base/files/scoped_temp_dir.h"
9 #include "sql/connection.h"
10 #include "sql/statement.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/sqlite/sqlite3.h"
14 // Test that certain features are/are-not enabled in our SQLite.
18 class StatementErrorHandler
: public sql::ErrorDelegate
{
20 StatementErrorHandler(int* error
, std::string
* sql_text
)
22 sql_text_(sql_text
) {}
24 virtual ~StatementErrorHandler() {}
26 virtual int OnError(int error
, sql::Connection
* connection
,
27 sql::Statement
* stmt
) OVERRIDE
{
29 const char* sql_txt
= stmt
? stmt
->GetSQLStatement() : NULL
;
30 *sql_text_
= sql_txt
? sql_txt
: "no statement available";
36 std::string
* sql_text_
;
38 DISALLOW_COPY_AND_ASSIGN(StatementErrorHandler
);
41 class SQLiteFeaturesTest
: public testing::Test
{
43 SQLiteFeaturesTest() : error_(SQLITE_OK
) {}
45 virtual void SetUp() {
46 ASSERT_TRUE(temp_dir_
.CreateUniqueTempDir());
47 ASSERT_TRUE(db_
.Open(temp_dir_
.path().AppendASCII("SQLStatementTest.db")));
49 // The error delegate will set |error_| and |sql_text_| when any sqlite
50 // statement operation returns an error code.
51 db_
.set_error_delegate(new StatementErrorHandler(&error_
, &sql_text_
));
54 virtual void TearDown() {
55 // If any error happened the original sql statement can be found in
57 EXPECT_EQ(SQLITE_OK
, error_
);
61 sql::Connection
& db() { return db_
; }
63 int sqlite_error() const {
68 base::ScopedTempDir temp_dir_
;
71 // The error code of the most recent error.
73 // Original statement which has caused the error.
74 std::string sql_text_
;
77 // Do not include fts1 support, it is not useful, and nobody is
79 TEST_F(SQLiteFeaturesTest
, NoFTS1
) {
80 ASSERT_EQ(SQLITE_ERROR
, db().ExecuteAndReturnErrorCode(
81 "CREATE VIRTUAL TABLE foo USING fts1(x)"));
85 // fts2 is used for older history files, so we're signed on for keeping our
86 // version up-to-date. iOS does not include fts2, so this test does not run on
88 // TODO(shess): Think up a crazy way to get out from having to support
90 TEST_F(SQLiteFeaturesTest
, FTS2
) {
91 ASSERT_TRUE(db().Execute("CREATE VIRTUAL TABLE foo USING fts2(x)"));
95 // fts3 is used for current history files, and also for WebDatabase.
96 TEST_F(SQLiteFeaturesTest
, FTS3
) {
97 ASSERT_TRUE(db().Execute("CREATE VIRTUAL TABLE foo USING fts3(x)"));