1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_LAUNCHER_TEST_RESULT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_LAUNCHER_TEST_RESULT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <map> 9*6777b538SAndroid Build Coastguard Worker #include <optional> 10*6777b538SAndroid Build Coastguard Worker #include <string> 11*6777b538SAndroid Build Coastguard Worker #include <vector> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h" 14*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace base { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // Structure contains result of a single EXPECT/ASSERT/SUCCESS/SKIP. 19*6777b538SAndroid Build Coastguard Worker struct TestResultPart { 20*6777b538SAndroid Build Coastguard Worker enum Type { 21*6777b538SAndroid Build Coastguard Worker kSuccess, // SUCCESS 22*6777b538SAndroid Build Coastguard Worker kNonFatalFailure, // EXPECT 23*6777b538SAndroid Build Coastguard Worker kFatalFailure, // ASSERT 24*6777b538SAndroid Build Coastguard Worker kSkip, // SKIP 25*6777b538SAndroid Build Coastguard Worker }; 26*6777b538SAndroid Build Coastguard Worker Type type; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker TestResultPart(); 29*6777b538SAndroid Build Coastguard Worker ~TestResultPart(); 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker TestResultPart(const TestResultPart& other); 32*6777b538SAndroid Build Coastguard Worker TestResultPart(TestResultPart&& other); 33*6777b538SAndroid Build Coastguard Worker TestResultPart& operator=(const TestResultPart& other); 34*6777b538SAndroid Build Coastguard Worker TestResultPart& operator=(TestResultPart&& other); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Convert type to string and back. 37*6777b538SAndroid Build Coastguard Worker static bool TypeFromString(const std::string& str, Type* type); 38*6777b538SAndroid Build Coastguard Worker std::string TypeAsString() const; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Filename and line of EXPECT/ASSERT. 41*6777b538SAndroid Build Coastguard Worker std::string file_name; 42*6777b538SAndroid Build Coastguard Worker int line_number; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // Message without stacktrace, etc. 45*6777b538SAndroid Build Coastguard Worker std::string summary; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Complete message. 48*6777b538SAndroid Build Coastguard Worker std::string message; 49*6777b538SAndroid Build Coastguard Worker }; 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker // Structure containing result of a single test. 52*6777b538SAndroid Build Coastguard Worker struct TestResult { 53*6777b538SAndroid Build Coastguard Worker enum Status { 54*6777b538SAndroid Build Coastguard Worker TEST_UNKNOWN, // Status not set. 55*6777b538SAndroid Build Coastguard Worker TEST_SUCCESS, // Test passed. 56*6777b538SAndroid Build Coastguard Worker TEST_FAILURE, // Assertion failure (e.g. EXPECT_TRUE, not DCHECK). 57*6777b538SAndroid Build Coastguard Worker TEST_FAILURE_ON_EXIT, // Passed but executable exit code was non-zero. 58*6777b538SAndroid Build Coastguard Worker TEST_TIMEOUT, // Test timed out and was killed. 59*6777b538SAndroid Build Coastguard Worker TEST_CRASH, // Test crashed (includes CHECK/DCHECK failures). 60*6777b538SAndroid Build Coastguard Worker TEST_SKIPPED, // Test skipped (not run at all). 61*6777b538SAndroid Build Coastguard Worker TEST_EXCESSIVE_OUTPUT, // Test exceeded output limit. 62*6777b538SAndroid Build Coastguard Worker TEST_NOT_RUN, // Test has not yet been run. 63*6777b538SAndroid Build Coastguard Worker }; 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker TestResult(); 66*6777b538SAndroid Build Coastguard Worker ~TestResult(); 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker TestResult(const TestResult& other); 69*6777b538SAndroid Build Coastguard Worker TestResult(TestResult&& other); 70*6777b538SAndroid Build Coastguard Worker TestResult& operator=(const TestResult& other); 71*6777b538SAndroid Build Coastguard Worker TestResult& operator=(TestResult&& other); 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Worker // Returns the test status as string (e.g. for display). 74*6777b538SAndroid Build Coastguard Worker std::string StatusAsString() const; 75*6777b538SAndroid Build Coastguard Worker 76*6777b538SAndroid Build Coastguard Worker // Returns the test name (e.g. "B" for "A.B"). 77*6777b538SAndroid Build Coastguard Worker std::string GetTestName() const; 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker // Returns the test case name (e.g. "A" for "A.B"). 80*6777b538SAndroid Build Coastguard Worker std::string GetTestCaseName() const; 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker // Add link in the xml output. 83*6777b538SAndroid Build Coastguard Worker // See more in gtest_links.h. 84*6777b538SAndroid Build Coastguard Worker void AddLink(const std::string& name, const std::string& url); 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker // Add tag in the xml output. 87*6777b538SAndroid Build Coastguard Worker // See more in gtest_tags.h. 88*6777b538SAndroid Build Coastguard Worker void AddTag(const std::string& name, const std::string& value); 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker // Add property in the xml output. 91*6777b538SAndroid Build Coastguard Worker void AddProperty(const std::string& name, const std::string& value); 92*6777b538SAndroid Build Coastguard Worker 93*6777b538SAndroid Build Coastguard Worker // Returns true if the test has completed (i.e. the test binary exited 94*6777b538SAndroid Build Coastguard Worker // normally, possibly with an exit code indicating failure, but didn't crash 95*6777b538SAndroid Build Coastguard Worker // or time out in the middle of the test). completedTestResult96*6777b538SAndroid Build Coastguard Worker bool completed() const { 97*6777b538SAndroid Build Coastguard Worker return status == TEST_SUCCESS || 98*6777b538SAndroid Build Coastguard Worker status == TEST_FAILURE || 99*6777b538SAndroid Build Coastguard Worker status == TEST_FAILURE_ON_EXIT || 100*6777b538SAndroid Build Coastguard Worker status == TEST_EXCESSIVE_OUTPUT; 101*6777b538SAndroid Build Coastguard Worker } 102*6777b538SAndroid Build Coastguard Worker 103*6777b538SAndroid Build Coastguard Worker // Full name of the test (e.g. "A.B"). 104*6777b538SAndroid Build Coastguard Worker std::string full_name; 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker Status status; 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker // Start time of child test process, the field is optional the test could be 109*6777b538SAndroid Build Coastguard Worker // NOT_RUN. 110*6777b538SAndroid Build Coastguard Worker std::optional<base::Time> timestamp; 111*6777b538SAndroid Build Coastguard Worker 112*6777b538SAndroid Build Coastguard Worker // Thread id of the runner that launching the child process, which is also 113*6777b538SAndroid Build Coastguard Worker // recorded in TestLauncherTracer. 114*6777b538SAndroid Build Coastguard Worker std::optional<base::PlatformThreadId> thread_id; 115*6777b538SAndroid Build Coastguard Worker 116*6777b538SAndroid Build Coastguard Worker // The process num of child process launched it's recorded as event name in 117*6777b538SAndroid Build Coastguard Worker // TestLauncherTracer. 118*6777b538SAndroid Build Coastguard Worker // It's used instead of process id to distinguish processes that process id 119*6777b538SAndroid Build Coastguard Worker // might be reused by OS. 120*6777b538SAndroid Build Coastguard Worker std::optional<int> process_num; 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker // Time it took to run the test. 123*6777b538SAndroid Build Coastguard Worker base::TimeDelta elapsed_time; 124*6777b538SAndroid Build Coastguard Worker 125*6777b538SAndroid Build Coastguard Worker // Output of just this test (optional). 126*6777b538SAndroid Build Coastguard Worker std::string output_snippet; 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker // Information about failed expectations. 129*6777b538SAndroid Build Coastguard Worker std::vector<TestResultPart> test_result_parts; 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Worker // The key is link name. 132*6777b538SAndroid Build Coastguard Worker std::map<std::string, std::string> links; 133*6777b538SAndroid Build Coastguard Worker 134*6777b538SAndroid Build Coastguard Worker // The key is property name. 135*6777b538SAndroid Build Coastguard Worker std::map<std::string, std::string> properties; 136*6777b538SAndroid Build Coastguard Worker 137*6777b538SAndroid Build Coastguard Worker // The key is tag name. 138*6777b538SAndroid Build Coastguard Worker std::map<std::string, std::vector<std::string>> tags; 139*6777b538SAndroid Build Coastguard Worker }; 140*6777b538SAndroid Build Coastguard Worker 141*6777b538SAndroid Build Coastguard Worker } // namespace base 142*6777b538SAndroid Build Coastguard Worker 143*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_LAUNCHER_TEST_RESULT_H_ 144