1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_FEED_CORE_V2_TEST_TEST_UTIL_H_
#define COMPONENTS_FEED_CORE_V2_TEST_TEST_UTIL_H_
#include <string>
#include <string_view>
#include "base/functional/callback.h"
#include "base/test/protobuf_matchers.h"
#include "base/time/time.h"
#include "components/feed/core/v2/test/proto_printer.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
// Some functionality shared among feed tests.
namespace feed {
using base::test::EqualsProto;
// Although time is mocked through TaskEnvironment, it does drift by small
// amounts.
const base::TimeDelta kEpsilon = base::Milliseconds(5);
#define EXPECT_TIME_EQ(WANT, GOT) \
{ \
base::Time want___ = (WANT), got___ = (GOT); \
if (got___ != want___) { \
EXPECT_LT(want___ - ::feed::kEpsilon, got___); \
EXPECT_GT(want___ + ::feed::kEpsilon, got___); \
} \
}
// This is EXPECT_EQ, but also dumps the string values for ease of reading.
#define EXPECT_STRINGS_EQUAL(WANT, GOT) \
{ \
std::string want___ = (WANT), got___ = (GOT); \
EXPECT_EQ(want___, got___) << "Wanted:\n" \
<< want___ << "\nBut got:\n" \
<< got___; \
}
// Trims whitespace from begin and end of all lines of text.
std::string TrimLines(std::string_view text);
// Does the protobuf argument's ToTextProto() output match message? Allows some
// whitespace differences.
MATCHER_P(EqualsTextProto, message, message) {
std::string actual_string = ToTextProto(arg);
if (TrimLines(actual_string) != TrimLines(message)) {
return testing::ExplainMatchResult(testing::Eq(message), ToTextProto(arg),
result_listener);
} else {
return true;
}
}
// Execute a runloop until `criteria` is true. If the criteria are not true
// after 1000 iterations, ASSERT with the content of
// `failure_message_callback.Run()`.
void RunLoopUntil(base::RepeatingCallback<bool()> criteria,
base::OnceCallback<std::string()> failure_message_callback);
void RunLoopUntil(base::RepeatingCallback<bool()> criteria,
const std::string& failure_message);
} // namespace feed
#endif // COMPONENTS_FEED_CORE_V2_TEST_TEST_UTIL_H_
|