Index: sql/test/scoped_error_ignorer.cc |
diff --git a/sql/test/scoped_error_ignorer.cc b/sql/test/scoped_error_ignorer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bd00bdbc929b4a18aa5ff9a641da7e1d9bee9f1b |
--- /dev/null |
+++ b/sql/test/scoped_error_ignorer.cc |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
erikwright (departed)
2013/06/13 01:26:24
2013
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "sql/test/scoped_error_ignorer.h" |
+ |
+#include "base/bind.h" |
+#include "base/logging.h" |
erikwright (departed)
2013/06/13 01:26:24
not required.
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace sql { |
+ |
+ScopedErrorIgnorer::ScopedErrorIgnorer() |
+ : checked_(false) { |
+ Connection::SetErrorIgnorer( |
erikwright (departed)
2013/06/13 01:26:24
include connection.h in this .cc file
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+ base::Bind(&sql::ScopedErrorIgnorer::ShouldIgnore, |
erikwright (departed)
2013/06/13 01:26:24
no sql namespace required here.
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+ base::Unretained(this))); |
+} |
+ |
+ScopedErrorIgnorer::~ScopedErrorIgnorer() { |
+ if (!checked_) |
+ ADD_FAILURE() << " Test must call CheckIgnoredErrors()"; |
erikwright (departed)
2013/06/13 01:26:24
This can also be EXPECT_FALSE(checked) << "...";
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+ |
+ Connection::ResetErrorIgnorer(); |
+} |
+ |
+void ScopedErrorIgnorer::IgnoreError(int err) { |
+ if (ignore_errors_.count(err)) |
+ ADD_FAILURE() << " Error " << err << " is already ignored"; |
erikwright (departed)
2013/06/13 01:26:24
same here.
Scott Hess - ex-Googler
2013/06/13 03:23:27
Done.
|
+ ignore_errors_.insert(err); |
+} |
+ |
+bool ScopedErrorIgnorer::CheckIgnoredErrors() { |
+ checked_ = true; |
+ return errors_ignored_ == ignore_errors_; |
+} |
+ |
+bool ScopedErrorIgnorer::ShouldIgnore(int err) { |
+ // Look for extended code. |
+ if (ignore_errors_.count(err) > 0) { |
+ // Record that the error was seen and ignore it. |
+ errors_ignored_.insert(err); |
+ return true; |
+ } |
+ |
+ // Trim extended codes and check again. |
+ int base_err = err & 0xff; |
+ if (ignore_errors_.count(base_err) > 0) { |
+ // Record that the error was seen and ignore it. |
+ errors_ignored_.insert(base_err); |
+ return true; |
+ } |
+ |
+ // Unexpected error. |
+ ADD_FAILURE() << " Unexpected SQLite error " << err; |
erikwright (departed)
2013/06/13 01:26:24
Personally I wonder why we would DCHECK on unexpec
Scott Hess - ex-Googler
2013/06/13 03:23:27
I am wondering that myself. I can see the utility
|
+ |
+ // TODO(shess): If it never makes sense to pass through an error |
+ // under the test harness, then perhaps the ignore callback |
+ // signature should be changed. |
+ return true; |
+} |
+ |
+} // namespace sql |