#ifndef BASE_TEST_GTEST_UTIL_H_
#define BASE_TEST_GTEST_UTIL_H_
#include <string>
#include <utility>
#include <vector>
#include "base/check.h"
#include "base/debug/debugging_buildflags.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#if DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && \
!BUILDFLAG(DCHECK_IS_CONFIGURABLE) && !BUILDFLAG(IS_ANDROID)
#define EXPECT_DCHECK_DEATH(statement) EXPECT_DEATH(statement, "DCHECK failed")
#define EXPECT_DCHECK_DEATH_WITH(statement, msg) EXPECT_DEATH(statement, msg)
#define ASSERT_DCHECK_DEATH(statement) ASSERT_DEATH(statement, "DCHECK failed")
#define ASSERT_DCHECK_DEATH_WITH(statement, msg) ASSERT_DEATH(statement, msg)
#else
#define EXPECT_DCHECK_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "DCHECK failed", )
#define EXPECT_DCHECK_DEATH_WITH(statement, msg) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, msg, )
#define ASSERT_DCHECK_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "DCHECK failed", return)
#define ASSERT_DCHECK_DEATH_WITH(statement, msg) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, msg, return)
#endif
#if defined(GTEST_HAS_DEATH_TEST) && !BUILDFLAG(IS_ANDROID)
#if CHECK_WILL_STREAM()
#define EXPECT_CHECK_DEATH(statement) EXPECT_DEATH(statement, "Check failed")
#define EXPECT_CHECK_DEATH_WITH(statement, msg) EXPECT_DEATH(statement, msg)
#define ASSERT_CHECK_DEATH(statement) ASSERT_DEATH(statement, "Check failed")
#define EXPECT_NOTREACHED_DEATH(statement) \
EXPECT_DEATH(statement, "NOTREACHED hit")
#define ASSERT_NOTREACHED_DEATH(statement) \
ASSERT_DEATH(statement, "NOTREACHED hit")
#else
#define EXPECT_CHECK_DEATH(statement) EXPECT_DEATH(statement, "")
#define EXPECT_CHECK_DEATH_WITH(statement, msg) EXPECT_DEATH(statement, "")
#define ASSERT_CHECK_DEATH(statement) ASSERT_DEATH(statement, "")
#define EXPECT_NOTREACHED_DEATH(statement) EXPECT_DEATH(statement, "")
#define ASSERT_NOTREACHED_DEATH(statement) ASSERT_DEATH(statement, "")
#endif
#else
#define EXPECT_CHECK_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", )
#define EXPECT_CHECK_DEATH_WITH(statement, msg) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", )
#define ASSERT_CHECK_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", return)
#define EXPECT_NOTREACHED_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", )
#define ASSERT_NOTREACHED_DEATH(statement) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", return)
#endif
#if defined(GTEST_HAS_DEATH_TEST) && !BUILDFLAG(IS_ANDROID)
#define BASE_EXPECT_DEATH EXPECT_DEATH
#else
#define BASE_EXPECT_DEATH(statement, matcher) \
GTEST_UNSUPPORTED_DEATH_TEST(statement, "", )
#endif
namespace base {
class FilePath;
struct TestIdentifier {
TestIdentifier();
TestIdentifier(const TestIdentifier& other);
TestIdentifier& operator=(const TestIdentifier& other);
std::string test_case_name;
std::string test_name;
std::string file;
int line;
};
std::string FormatFullTestName(const std::string& test_case_name,
const std::string& test_name);
std::string TestNameWithoutDisabledPrefix(const std::string& full_test_name);
std::vector<TestIdentifier> GetCompiledInTests();
[[nodiscard]] bool WriteCompiledInTestsToFile(const FilePath& path);
[[nodiscard]] bool ReadTestNamesFromFile(const FilePath& path,
std::vector<TestIdentifier>* output);
}
#endif