xref: /aosp_15_r20/external/cronet/base/test/launcher/test_result.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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