Chromium Code Reviews| Index: sql/test/scoped_error_expecter.h |
| diff --git a/sql/test/scoped_error_expecter.h b/sql/test/scoped_error_expecter.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f2d2bb57ac1f8a2d47054ec400aa89caa585e0d9 |
| --- /dev/null |
| +++ b/sql/test/scoped_error_expecter.h |
| @@ -0,0 +1,72 @@ |
| +// Copyright 2013 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. |
| + |
| +#ifndef SQL_TEST_SCOPED_ERROR_EXPECTER_H_ |
| +#define SQL_TEST_SCOPED_ERROR_EXPECTER_H_ |
| + |
| +#include <set> |
| + |
| +#include "base/macros.h" |
| +#include "sql/connection.h" |
| + |
| +// This is not strictly necessary for the operation of ScopedErrorExpecter, but |
| +// the class is not useful without the SQLite error codes. |
| +#include "third_party/sqlite/sqlite3.h" |
| + |
| +namespace sql { |
| +namespace test { |
| + |
| +// sql::Connection and sql::Statement treat most SQLite errors as fatal in debug |
| +// mode. The goal is to catch SQL errors before code is shipped to production. |
| +// That fatal check makes it hard to write tests for error-handling code. This |
| +// scoper lists errors to expect and treat as non-fatal. Errors are expected |
| +// globally (on all connections). |
| +// |
| +// Since errors can be very context-dependent, the class is pedantic - specific |
| +// errors must be expected, and every expected error must be seen. |
| +// |
| +// NOTE(shess): There are still fatal error cases this does not address. If |
| +// your test is handling database errors and you're hitting a case not handled, |
| +// contact me. |
| +class ScopedErrorExpecter { |
| + public: |
| + ScopedErrorExpecter(); |
| + ~ScopedErrorExpecter(); |
| + |
| + // Add an error to expect. Extended error codes can be specified |
| + // individually, or the base code can be specified to expect errors for the |
| + // entire group (SQLITE_IOERR_* versus SQLITE_IOERR). |
| + void ExpectError(int err); |
| + |
| + // Return |true| if the all of the expected errors were encountered. Failure |
| + // to call this results in an EXPECT failure when the instance is destructed. |
| + bool SawExpectedErrors() WARN_UNUSED_RESULT; |
| + |
| + // Expose sqlite3_libversion_number() so that clients don't have to add a |
| + // dependency on third_party/sqlite. |
| + static int SQLiteLibVersionNumber() WARN_UNUSED_RESULT; |
| + |
| + private: |
| + // Record that an error was observed. |
| + bool ErrorSeen(int err); |
|
Mark P
2016/05/23 19:53:27
Please explain what the return value means.
Scott Hess - ex-Googler
2016/06/03 00:02:12
Done.
|
| + |
| + // Callback passed to Connection::SetErrorExpecter(). |
| + Connection::ErrorExpecterCallback callback_; |
| + |
| + // Record whether SawExpectedErrors() has been called. |
| + bool checked_; |
| + |
| + // Errors to expect. |
| + std::set<int> errors_expected_; |
| + |
| + // Expected errors which have been encountered. |
| + std::set<int> errors_seen_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ScopedErrorExpecter); |
| +}; |
| + |
| +} // namespace test |
| +} // namespace sql |
| + |
| +#endif // SQL_TEST_SCOPED_ERROR_EXPECTER_H_ |