// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sql/test/sql_test_base.h"

#include "base/files/file_util.h"
#include "sql/test/test_helpers.h"

namespace sql {

SQLTestBase::SQLTestBase() {
}

SQLTestBase::~SQLTestBase() {
}

base::FilePath SQLTestBase::db_path() {
  return temp_dir_.GetPath().AppendASCII("SQLTest.db");
}

sql::Connection& SQLTestBase::db() {
  return db_;
}

bool SQLTestBase::Reopen() {
  db_.Close();
  return db_.Open(db_path());
}

bool SQLTestBase::GetPathExists(const base::FilePath& path) {
  return base::PathExists(path);
}

bool SQLTestBase::CorruptSizeInHeaderOfDB() {
  return sql::test::CorruptSizeInHeader(db_path());
}

void SQLTestBase::WriteJunkToDatabase(WriteJunkType type) {
  base::ScopedFILE file(base::OpenFile(
      db_path(),
      type == TYPE_OVERWRITE_AND_TRUNCATE ? "wb" : "rb+"));
  ASSERT_TRUE(file.get() != NULL);
  ASSERT_EQ(0, fseek(file.get(), 0, SEEK_SET));

  const char* kJunk = "Now is the winter of our discontent.";
  fputs(kJunk, file.get());
}

void SQLTestBase::TruncateDatabase() {
  base::ScopedFILE file(base::OpenFile(db_path(), "rb+"));
  ASSERT_TRUE(file.get() != NULL);
  ASSERT_EQ(0, fseek(file.get(), 0, SEEK_SET));
  ASSERT_TRUE(base::TruncateFile(file.get()));
}

void SQLTestBase::SetUp() {
  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
  ASSERT_TRUE(db_.Open(db_path()));
}

void SQLTestBase::TearDown() {
  db_.Close();
}

}  // namespace sql
