| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BASE_TEST_GTEST_UTIL_H_ | 
 | #define BASE_TEST_GTEST_UTIL_H_ | 
 |  | 
 | #include <string> | 
 | #include <utility> | 
 | #include <vector> | 
 |  | 
 | #include "base/compiler_specific.h" | 
 | #include "base/logging.h" | 
 | #include "build_config.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | // EXPECT/ASSERT_DCHECK_DEATH is intended to replace EXPECT/ASSERT_DEBUG_DEATH | 
 | // when the death is expected to be caused by a DCHECK. Contrary to | 
 | // EXPECT/ASSERT_DEBUG_DEATH however, it doesn't execute the statement in non- | 
 | // dcheck builds as DCHECKs are intended to catch things that should never | 
 | // happen and as such executing the statement results in undefined behavior | 
 | // (|statement| is compiled in unsupported configurations nonetheless). | 
 | // Death tests misbehave on Android. | 
 | #if DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID) | 
 |  | 
 | // EXPECT/ASSERT_DCHECK_DEATH tests verify that a DCHECK is hit ("Check failed" | 
 | // is part of the error message), but intentionally do not expose the gtest | 
 | // death test's full |regex| parameter to avoid users having to verify the exact | 
 | // syntax of the error message produced by the DCHECK. | 
 | #define EXPECT_DCHECK_DEATH(statement) EXPECT_DEATH(statement, "Check failed") | 
 | #define ASSERT_DCHECK_DEATH(statement) ASSERT_DEATH(statement, "Check failed") | 
 |  | 
 | #else | 
 | // DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID) | 
 |  | 
 | #define EXPECT_DCHECK_DEATH(statement) \ | 
 |     GTEST_UNSUPPORTED_DEATH_TEST(statement, "Check failed", ) | 
 | #define ASSERT_DCHECK_DEATH(statement) \ | 
 |     GTEST_UNSUPPORTED_DEATH_TEST(statement, "Check failed", return) | 
 |  | 
 | #endif | 
 | // DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID) | 
 |  | 
 | namespace base { | 
 |  | 
 | class FilePath; | 
 |  | 
 | struct TestIdentifier { | 
 |   TestIdentifier(); | 
 |   TestIdentifier(const TestIdentifier& other); | 
 |  | 
 |   std::string test_case_name; | 
 |   std::string test_name; | 
 |   std::string file; | 
 |   int line; | 
 | }; | 
 |  | 
 | // Constructs a full test name given a test case name and a test name, | 
 | // e.g. for test case "A" and test name "B" returns "A.B". | 
 | std::string FormatFullTestName(const std::string& test_case_name, | 
 |                                const std::string& test_name); | 
 |  | 
 | // Returns the full test name with the "DISABLED_" prefix stripped out. | 
 | // e.g. for the full test names "A.DISABLED_B", "DISABLED_A.B", and | 
 | // "DISABLED_A.DISABLED_B", returns "A.B". | 
 | std::string TestNameWithoutDisabledPrefix(const std::string& full_test_name); | 
 |  | 
 | // Returns a vector of gtest-based tests compiled into | 
 | // current executable. | 
 | std::vector<TestIdentifier> GetCompiledInTests(); | 
 |  | 
 | // Writes the list of gtest-based tests compiled into | 
 | // current executable as a JSON file. Returns true on success. | 
 | bool WriteCompiledInTestsToFile(const FilePath& path) WARN_UNUSED_RESULT; | 
 |  | 
 | // Reads the list of gtest-based tests from |path| into |output|. | 
 | // Returns true on success. | 
 | bool ReadTestNamesFromFile( | 
 |     const FilePath& path, | 
 |     std::vector<TestIdentifier>* output) WARN_UNUSED_RESULT; | 
 |  | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_TEST_GTEST_UTIL_H_ |