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.
8 #include "base/files/file_util.h"
9 #include "base/files/scoped_temp_dir.h"
10 #include "sql/connection.h"
11 #include "sql/statement.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/sqlite/sqlite3.h"
15 // Test that certain features are/are-not enabled in our SQLite.
19 void CaptureErrorCallback(int* error_pointer
, std::string
* sql_text
,
20 int error
, sql::Statement
* stmt
) {
21 *error_pointer
= error
;
22 const char* text
= stmt
? stmt
->GetSQLStatement() : NULL
;
23 *sql_text
= text
? text
: "no statement available";
26 class SQLiteFeaturesTest
: public testing::Test
{
28 SQLiteFeaturesTest() : error_(SQLITE_OK
) {}
30 virtual void SetUp() {
31 ASSERT_TRUE(temp_dir_
.CreateUniqueTempDir());
32 ASSERT_TRUE(db_
.Open(temp_dir_
.path().AppendASCII("SQLStatementTest.db")));
34 // The error delegate will set |error_| and |sql_text_| when any sqlite
35 // statement operation returns an error code.
36 db_
.set_error_callback(base::Bind(&CaptureErrorCallback
,
37 &error_
, &sql_text_
));
40 virtual void TearDown() {
41 // If any error happened the original sql statement can be found in
43 EXPECT_EQ(SQLITE_OK
, error_
);
47 sql::Connection
& db() { return db_
; }
50 base::ScopedTempDir temp_dir_
;
53 // The error code of the most recent error.
55 // Original statement which has caused the error.
56 std::string sql_text_
;
59 // Do not include fts1 support, it is not useful, and nobody is
61 TEST_F(SQLiteFeaturesTest
, NoFTS1
) {
62 ASSERT_EQ(SQLITE_ERROR
, db().ExecuteAndReturnErrorCode(
63 "CREATE VIRTUAL TABLE foo USING fts1(x)"));
66 #if defined(SQLITE_ENABLE_FTS2)
67 // fts2 is used for older history files, so we're signed on for keeping our
68 // version up-to-date.
69 // TODO(shess): Think up a crazy way to get out from having to support
71 TEST_F(SQLiteFeaturesTest
, FTS2
) {
72 ASSERT_TRUE(db().Execute("CREATE VIRTUAL TABLE foo USING fts2(x)"));
76 // fts3 is used for current history files, and also for WebDatabase.
77 TEST_F(SQLiteFeaturesTest
, FTS3
) {
78 ASSERT_TRUE(db().Execute("CREATE VIRTUAL TABLE foo USING fts3(x)"));