|  | // Copyright 2013 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_LAUNCHER_TEST_RESULT_H_ | 
|  | #define BASE_TEST_LAUNCHER_TEST_RESULT_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/time/time.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | // Structure contains result of a single EXPECT/ASSERT/SUCCESS. | 
|  | struct TestResultPart { | 
|  | enum Type { | 
|  | kSuccess,          // SUCCESS | 
|  | kNonFatalFailure,  // EXPECT | 
|  | kFatalFailure,     // ASSERT | 
|  | }; | 
|  | Type type; | 
|  |  | 
|  | TestResultPart(); | 
|  | ~TestResultPart(); | 
|  |  | 
|  | TestResultPart(const TestResultPart& other); | 
|  | TestResultPart(TestResultPart&& other); | 
|  | TestResultPart& operator=(const TestResultPart& other); | 
|  | TestResultPart& operator=(TestResultPart&& other); | 
|  |  | 
|  | // Convert type to string and back. | 
|  | static bool TypeFromString(const std::string& str, Type* type); | 
|  | std::string TypeAsString() const; | 
|  |  | 
|  | // Filename and line of EXPECT/ASSERT. | 
|  | std::string file_name; | 
|  | int line_number; | 
|  |  | 
|  | // Message without stacktrace, etc. | 
|  | std::string summary; | 
|  |  | 
|  | // Complete message. | 
|  | std::string message; | 
|  | }; | 
|  |  | 
|  | // Structure containing result of a single test. | 
|  | struct TestResult { | 
|  | enum Status { | 
|  | TEST_UNKNOWN,           // Status not set. | 
|  | TEST_SUCCESS,           // Test passed. | 
|  | TEST_FAILURE,           // Assertion failure (e.g. EXPECT_TRUE, not DCHECK). | 
|  | TEST_FAILURE_ON_EXIT,   // Passed but executable exit code was non-zero. | 
|  | TEST_TIMEOUT,           // Test timed out and was killed. | 
|  | TEST_CRASH,             // Test crashed (includes CHECK/DCHECK failures). | 
|  | TEST_SKIPPED,           // Test skipped (not run at all). | 
|  | TEST_EXCESSIVE_OUTPUT,  // Test exceeded output limit. | 
|  | }; | 
|  |  | 
|  | TestResult(); | 
|  | ~TestResult(); | 
|  |  | 
|  | TestResult(const TestResult& other); | 
|  | TestResult(TestResult&& other); | 
|  | TestResult& operator=(const TestResult& other); | 
|  | TestResult& operator=(TestResult&& other); | 
|  |  | 
|  | // Returns the test status as string (e.g. for display). | 
|  | std::string StatusAsString() const; | 
|  |  | 
|  | // Returns the test name (e.g. "B" for "A.B"). | 
|  | std::string GetTestName() const; | 
|  |  | 
|  | // Returns the test case name (e.g. "A" for "A.B"). | 
|  | std::string GetTestCaseName() const; | 
|  |  | 
|  | // Returns true if the test has completed (i.e. the test binary exited | 
|  | // normally, possibly with an exit code indicating failure, but didn't crash | 
|  | // or time out in the middle of the test). | 
|  | bool completed() const { | 
|  | return status == TEST_SUCCESS || | 
|  | status == TEST_FAILURE || | 
|  | status == TEST_FAILURE_ON_EXIT || | 
|  | status == TEST_EXCESSIVE_OUTPUT; | 
|  | } | 
|  |  | 
|  | // Full name of the test (e.g. "A.B"). | 
|  | std::string full_name; | 
|  |  | 
|  | Status status; | 
|  |  | 
|  | // Time it took to run the test. | 
|  | base::TimeDelta elapsed_time; | 
|  |  | 
|  | // Output of just this test (optional). | 
|  | std::string output_snippet; | 
|  |  | 
|  | // Information about failed expectations. | 
|  | std::vector<TestResultPart> test_result_parts; | 
|  | }; | 
|  |  | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_TEST_LAUNCHER_TEST_RESULT_H_ |