Automated g4 rollback of changelist 840297420. *** Reason for rollback *** Causes problems for Chrome components builds. *** Original change description *** Deprecate custom QUICHE status matchers. This change should be a functional no-op, and only affects test code. *** PiperOrigin-RevId: 855222459
diff --git a/quiche/common/quiche_status_utils_test.cc b/quiche/common/quiche_status_utils_test.cc index 178e0b4..1adac15 100644 --- a/quiche/common/quiche_status_utils_test.cc +++ b/quiche/common/quiche_status_utils_test.cc
@@ -8,7 +8,6 @@ #include <type_traits> #include "absl/status/status.h" -#include "absl/status/status_matchers.h" #include "absl/status/statusor.h" #include "absl/strings/str_cat.h" #include "quiche/common/platform/api/quiche_logging.h" @@ -50,7 +49,7 @@ return absl::OkStatus(); }; EXPECT_THAT(TestLambda(), - absl_testing::StatusIs(absl::StatusCode::kInternal, "error")); + quiche::test::StatusIs(absl::StatusCode::kInternal, "error")); } TEST(QuicheAssignOrReturnTest, HandlesErrorAndCallsErrorLambda) { @@ -62,12 +61,12 @@ captured_status = status; return status; }); - EXPECT_THAT(captured_status, testing::Optional(absl_testing::StatusIs( + EXPECT_THAT(captured_status, testing::Optional(quiche::test::StatusIs( absl::StatusCode::kInternal, "error"))); return absl::OkStatus(); }; EXPECT_THAT(TestLambda(), - absl_testing::StatusIs(absl::StatusCode::kInternal, "error")); + quiche::test::StatusIs(absl::StatusCode::kInternal, "error")); } TEST(QuicheAssignOrReturnTest, HandlesErrorAndUsesReturnValueFromLambda) { @@ -81,7 +80,7 @@ return absl::OkStatus(); }; EXPECT_THAT(TestLambda(), - absl_testing::StatusIs(absl::StatusCode::kInvalidArgument, + quiche::test::StatusIs(absl::StatusCode::kInvalidArgument, "custom message: error")); } @@ -98,7 +97,7 @@ return absl::OkStatus(); }; EXPECT_THAT(TestLambda(), - absl_testing::StatusIs(absl::StatusCode::kInternal, "error")); + quiche::test::StatusIs(absl::StatusCode::kInternal, "error")); } // Demonstrates that we can use `QUICHE_LOG` in an on-error lambda. @@ -113,7 +112,7 @@ return absl::OkStatus(); }; EXPECT_THAT(TestLambda(), - absl_testing::StatusIs(absl::StatusCode::kInternal, "error")); + quiche::test::StatusIs(absl::StatusCode::kInternal, "error")); } struct FinickyNonCopyableInt {
diff --git a/quiche/common/test_tools/quiche_test_utils.h b/quiche/common/test_tools/quiche_test_utils.h index 6777171..a09b6cf 100644 --- a/quiche/common/test_tools/quiche_test_utils.h +++ b/quiche/common/test_tools/quiche_test_utils.h
@@ -7,8 +7,8 @@ #include <string> -#include "absl/base/macros.h" // IWYU pragma: keep for ABSL_REFACTOR_INLINE -#include "absl/status/status_matchers.h" +#include "absl/status/status.h" +#include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "quiche/common/platform/api/quiche_iovec.h" // IWYU pragma: keep for iovec #include "quiche/common/platform/api/quiche_test.h" @@ -23,8 +23,9 @@ namespace test { void CompareCharArraysWithHexError(const std::string& description, - const char* actual, int actual_len, - const char* expected, int expected_len); + const char* actual, const int actual_len, + const char* expected, + const int expected_len); // Create iovec that points to that data that `str` points to. iovec MakeIOVector(absl::string_view str); @@ -34,37 +35,55 @@ // This function checks if IDNAs are supported. bool GoogleUrlSupportsIdnaForTest(); -[[deprecated( - "Use absl_testing::IsOk directly.")]] ABSL_REFACTOR_INLINE inline auto -IsOk() { - return absl_testing::IsOk(); +// Takes either a Status or StatusOr<T>, and returns just the Status. +inline const absl::Status& ExtractStatus(const absl::Status& status) { + return status; +} +template <typename T> +const absl::Status& ExtractStatus(const absl::StatusOr<T>& status_or) { + return status_or.status(); } -template <typename InnerMatcherT> -[[deprecated( - "Use absl_testing::IsOkAndHolds " - "directly.")]] ABSL_REFACTOR_INLINE inline auto -IsOkAndHolds(InnerMatcherT&& matcher) { - return absl_testing::IsOkAndHolds(matcher); +// Abseil does not provide absl::Status-related macros, so we have to provide +// those instead. +MATCHER(IsOk, "Checks if an instance of absl::Status is ok.") { + if (arg.ok()) { + return true; + } + *result_listener << "Expected status OK, got " << ExtractStatus(arg); + return false; } -template <typename InnerMatcherT> -[[deprecated( - "Use absl_testing::StatusIs directly.")]] ABSL_REFACTOR_INLINE inline auto -StatusIs(InnerMatcherT&& matcher) { - return absl_testing::StatusIs(matcher); +MATCHER_P(IsOkAndHolds, matcher, + "Matcher against the inner value of absl::StatusOr") { + if (!arg.ok()) { + *result_listener << "Expected status OK, got " << arg.status(); + return false; + } + return ::testing::ExplainMatchResult(matcher, arg.value(), result_listener); } -template <typename MatcherT, typename MessageT> -[[deprecated( - "Use absl_testing::StatusIs directly.")]] ABSL_REFACTOR_INLINE inline auto -StatusIs(MatcherT&& matcher, MessageT&& message) { - return absl_testing::StatusIs(matcher, message); +MATCHER_P(StatusIs, code, "Matcher against only a specific status code") { + if (ExtractStatus(arg).code() != code) { + *result_listener << "Expected status " << absl::StatusCodeToString(code) + << ", got " << ExtractStatus(arg); + return false; + } + return true; } -// We can't deprecate these directly, since they're macros. -#define QUICHE_EXPECT_OK(arg) EXPECT_THAT(arg, ::quiche::test::IsOk()) -#define QUICHE_ASSERT_OK(arg) ASSERT_THAT(arg, ::quiche::test::IsOk()) +MATCHER_P2(StatusIs, code, matcher, "Matcher against a specific status code") { + if (ExtractStatus(arg).code() != code) { + *result_listener << "Expected status " << absl::StatusCodeToString(code) + << ", got " << ExtractStatus(arg); + return false; + } + return ::testing::ExplainMatchResult(matcher, ExtractStatus(arg).message(), + result_listener); +} + +#define QUICHE_EXPECT_OK(arg) EXPECT_THAT((arg), ::quiche::test::IsOk()) +#define QUICHE_ASSERT_OK(arg) ASSERT_THAT((arg), ::quiche::test::IsOk()) } // namespace test } // namespace quiche