Add macros to check for successful Result

These macros are meant to be used in tests:

  Result<File> maybe_a_file = OpenFile(...);
  EXPECT_OK(maybe_a_file);

On failure, the error is printed.

There's no equivalent EXPECT_NOT_OK() because it is a testing anti-pattern
which causes tests to pass even when the error changed as a result of a
regression. Use EPECT_EQ(result, Error(...)) instead.

Test: cd system/core && atest
Test: m
Change-Id: Ie26f90d3c62620e7b1f10013829ba43ef5364fe1
This commit is contained in:
Bernie Innocenti 2020-02-06 02:51:42 +09:00
parent 4adfde41ea
commit beffc028d6
1 changed files with 23 additions and 0 deletions

View File

@ -204,5 +204,28 @@ inline Error ErrnoErrorf(const char* fmt, const Args&... args) {
template <typename T>
using Result = android::base::expected<T, ResultError>;
// Macros for testing the results of functions that return android::base::Result.
// These also work with base::android::expected.
#define CHECK_RESULT_OK(stmt) \
do { \
const auto& tmp = (stmt); \
CHECK(tmp.ok()) << tmp.error(); \
} while (0)
#define ASSERT_RESULT_OK(stmt) \
do { \
const auto& tmp = (stmt); \
ASSERT_TRUE(tmp.ok()) << tmp.error(); \
} while (0)
#define EXPECT_RESULT_OK(stmt) \
do { \
auto tmp = (stmt); \
EXPECT_TRUE(tmp.ok()) << tmp.error(); \
} while (0)
// TODO: Maybe add RETURN_IF_ERROR() and ASSIGN_OR_RETURN()
} // namespace base
} // namespace android