17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef SQL_TEST_ERROR_CALLBACK_SUPPORT_H_ 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define SQL_TEST_ERROR_CALLBACK_SUPPORT_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "sql/connection.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace sql { 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Helper to capture any errors into a local variable for testing. 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// For instance: 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// int error = SQLITE_OK; 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// ScopedErrorCallback sec(db, base::Bind(&CaptureErrorCallback, &error)); 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// // Provoke SQLITE_CONSTRAINT on db. 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// EXPECT_EQ(SQLITE_CONSTRAINT, error); 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid CaptureErrorCallback(int* error_pointer, int error, sql::Statement* stmt); 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Helper to set db's error callback and then reset it when it goes 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// out of scope. 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ScopedErrorCallback { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedErrorCallback(sql::Connection* db, 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const sql::Connection::ErrorCallback& cb); 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~ScopedErrorCallback(); 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sql::Connection* db_; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ScopedErrorCallback); 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace sql 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // SQL_TEST_ERROR_CALLBACK_SUPPORT_H_ 37