1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_ 6 #define BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_ 7 8 #include <map> 9 #include <set> 10 #include <string> 11 #include <vector> 12 13 #include "base/callback.h" 14 #include "base/test/launcher/test_result.h" 15 #include "base/threading/thread_checker.h" 16 17 namespace base { 18 19 class CommandLine; 20 class FilePath; 21 22 // A helper class to output results. 23 // Note: as currently XML is the only supported format by gtest, we don't 24 // check output format (e.g. "xml:" prefix) here and output an XML file 25 // unconditionally. 26 // Note: we don't output per-test-case or total summary info like 27 // total failed_test_count, disabled_test_count, elapsed_time and so on. 28 // Only each test (testcase element in the XML) will have the correct 29 // failed/disabled/elapsed_time information. Each test won't include 30 // detailed failure messages either. 31 class TestResultsTracker { 32 public: 33 TestResultsTracker(); 34 ~TestResultsTracker(); 35 36 // Initialize the result tracker. Must be called exactly once before 37 // calling any other methods. Returns true on success. 38 bool Init(const CommandLine& command_line) WARN_UNUSED_RESULT; 39 40 // Called when a test iteration is starting. 41 void OnTestIterationStarting(); 42 43 // Adds |test_name| to the set of discovered tests (this includes all tests 44 // present in the executable, not necessarily run). 45 void AddTest(const std::string& test_name); 46 47 // Adds |test_name| to the set of disabled tests. 48 void AddDisabledTest(const std::string& test_name); 49 50 // Adds |result| to the stored test results. 51 void AddTestResult(const TestResult& result); 52 53 // Prints a summary of current test iteration to stdout. 54 void PrintSummaryOfCurrentIteration() const; 55 56 // Prints a summary of all test iterations (not just the last one) to stdout. 57 void PrintSummaryOfAllIterations() const; 58 59 // Adds a string tag to the JSON summary. This is intended to indicate 60 // conditions that affect the entire test run, as opposed to individual tests. 61 void AddGlobalTag(const std::string& tag); 62 63 // Saves a JSON summary of all test iterations results to |path|. Returns 64 // true on success. 65 bool SaveSummaryAsJSON(const FilePath& path) const WARN_UNUSED_RESULT; 66 67 // Map where keys are test result statuses, and values are sets of tests 68 // which finished with that status. 69 typedef std::map<TestResult::Status, std::set<std::string> > TestStatusMap; 70 71 // Returns a test status map (see above) for current test iteration. 72 TestStatusMap GetTestStatusMapForCurrentIteration() const; 73 74 // Returns a test status map (see above) for all test iterations. 75 TestStatusMap GetTestStatusMapForAllIterations() const; 76 77 private: 78 void GetTestStatusForIteration(int iteration, TestStatusMap* map) const; 79 80 struct AggregateTestResult { 81 AggregateTestResult(); 82 ~AggregateTestResult(); 83 84 std::vector<TestResult> test_results; 85 }; 86 87 struct PerIterationData { 88 PerIterationData(); 89 ~PerIterationData(); 90 91 // Aggregate test results grouped by full test name. 92 typedef std::map<std::string, AggregateTestResult> ResultsMap; 93 ResultsMap results; 94 }; 95 96 ThreadChecker thread_checker_; 97 98 // Set of global tags, i.e. strings indicating conditions that apply to 99 // the entire test run. 100 std::set<std::string> global_tags_; 101 102 // Set of all test names discovered in the current executable. 103 std::set<std::string> all_tests_; 104 105 // Set of all disabled tests in the current executable. 106 std::set<std::string> disabled_tests_; 107 108 // Store test results for each iteration. 109 std::vector<PerIterationData> per_iteration_data_; 110 111 // Index of current iteration (starting from 0). -1 before the first 112 // iteration. 113 int iteration_; 114 115 // File handle of output file (can be NULL if no file). 116 FILE* out_; 117 118 DISALLOW_COPY_AND_ASSIGN(TestResultsTracker); 119 }; 120 121 } // namespace base 122 123 #endif // BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_ 124