// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/test/gtest_xml_unittest_result_printer.h" #include "base/files/file_util.h" #include "base/logging.h" #include "base/time/time.h" namespace base { XmlUnitTestResultPrinter::XmlUnitTestResultPrinter() : output_file_(NULL) { } XmlUnitTestResultPrinter::~XmlUnitTestResultPrinter() { if (output_file_) { fprintf(output_file_, "\n"); fflush(output_file_); CloseFile(output_file_); } } bool XmlUnitTestResultPrinter::Initialize(const FilePath& output_file_path) { DCHECK(!output_file_); output_file_ = OpenFile(output_file_path, "w"); if (!output_file_) return false; fprintf(output_file_, "\n\n"); fflush(output_file_); return true; } void XmlUnitTestResultPrinter::OnTestCaseStart( const testing::TestCase& test_case) { fprintf(output_file_, " \n"); fflush(output_file_); } void XmlUnitTestResultPrinter::OnTestStart( const testing::TestInfo& test_info) { // This is our custom extension - it helps to recognize which test was // running when the test binary crashed. Note that we cannot even open the // tag here - it requires e.g. run time of the test to be known. fprintf(output_file_, " \n", test_info.name(), test_info.test_case_name()); fflush(output_file_); } void XmlUnitTestResultPrinter::OnTestEnd(const testing::TestInfo& test_info) { fprintf(output_file_, " \n", test_info.name(), static_cast(test_info.result()->elapsed_time()) / Time::kMillisecondsPerSecond, test_info.test_case_name()); if (test_info.result()->Failed()) { fprintf(output_file_, " \n"); } fprintf(output_file_, " \n"); fflush(output_file_); } void XmlUnitTestResultPrinter::OnTestCaseEnd( const testing::TestCase& test_case) { fprintf(output_file_, " \n"); fflush(output_file_); } } // namespace base