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_UTIL_H_
6#define BASE_TEST_GTEST_XML_UTIL_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace base {
15
16class FilePath;
17struct TestResult;
18
19// Generates an XML output file. Format is very close to GTest, but has
20// extensions needed by the test launcher.
21class XmlUnitTestResultPrinter : public testing::EmptyTestEventListener {
22 public:
23  XmlUnitTestResultPrinter();
24  virtual ~XmlUnitTestResultPrinter();
25
26  // Must be called before adding as a listener. Returns true on success.
27  bool Initialize(const FilePath& output_file_path) WARN_UNUSED_RESULT;
28
29 private:
30  // testing::EmptyTestEventListener:
31  virtual void OnTestCaseStart(const testing::TestCase& test_case) OVERRIDE;
32  virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE;
33  virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE;
34  virtual void OnTestCaseEnd(const testing::TestCase& test_case) OVERRIDE;
35
36  FILE* output_file_;
37
38  DISALLOW_COPY_AND_ASSIGN(XmlUnitTestResultPrinter);
39};
40
41// Produces a vector of test results based on GTest output file.
42// Returns true iff the output file exists and has been successfully parsed.
43// On successful return |crashed| is set to true if the test results
44// are valid but incomplete.
45bool ProcessGTestOutput(const base::FilePath& output_file,
46                        std::vector<TestResult>* results,
47                        bool* crashed) WARN_UNUSED_RESULT;
48
49}  // namespace base
50
51#endif  // BASE_TEST_GTEST_XML_UTIL_H_
52