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_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
6 #define BASE_TEST_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
7 
8 #include <stdio.h>
9 
10 #include "base/compiler_specific.h"
11 #include "base/macros.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace base {
15 
16 class FilePath;
17 
18 // Generates an XML output file. Format is very close to GTest, but has
19 // extensions needed by the test launcher.
20 class XmlUnitTestResultPrinter : public testing::EmptyTestEventListener {
21  public:
22   XmlUnitTestResultPrinter();
23   ~XmlUnitTestResultPrinter() override;
24 
25   // Must be called before adding as a listener. Returns true on success.
26   bool Initialize(const FilePath& output_file_path) WARN_UNUSED_RESULT;
27 
28   // CHECK/DCHECK failed. Print file/line and message to the xml.
29   void OnAssert(const char* file,
30                 int line,
31                 const std::string& summary,
32                 const std::string& message);
33 
34  private:
35   // testing::EmptyTestEventListener:
36   void OnTestCaseStart(const testing::TestCase& test_case) override;
37   void OnTestStart(const testing::TestInfo& test_info) override;
38   void OnTestEnd(const testing::TestInfo& test_info) override;
39   void OnTestCaseEnd(const testing::TestCase& test_case) override;
40 
41   void WriteTestPartResult(const char* file,
42                            int line,
43                            testing::TestPartResult::Type type,
44                            const std::string& summary,
45                            const std::string& message);
46 
47   FILE* output_file_;
48   bool open_failed_;
49 
50   DISALLOW_COPY_AND_ASSIGN(XmlUnitTestResultPrinter);
51 };
52 
53 }  // namespace base
54 
55 #endif  // BASE_TEST_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
56