// Copyright 2013 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. #ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_ #define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/diagnostics/diagnostics_model.h" namespace diagnostics { // Console base class used internally. class SimpleConsole; class DiagnosticsWriter : public DiagnosticsModel::Observer { public: // The type of formatting done by this writer. enum FormatType { MACHINE, LOG, HUMAN }; explicit DiagnosticsWriter(FormatType format); virtual ~DiagnosticsWriter(); // How many tests reported failure. int failures() { return failures_; } // What format are we writing things in. FormatType format() const { return format_; } // Write an informational line of text in white over black. String must be // UTF8 encoded. A newline will be added for non-LOG output formats. bool WriteInfoLine(const std::string& info_text); // DiagnosticsModel::Observer overrides virtual void OnTestFinished(int index, DiagnosticsModel* model) OVERRIDE; virtual void OnAllTestsDone(DiagnosticsModel* model) OVERRIDE; virtual void OnRecoveryFinished(int index, DiagnosticsModel* model) OVERRIDE; virtual void OnAllRecoveryDone(DiagnosticsModel* model) OVERRIDE; private: // Write a result block. For humans, it consists of two lines. The first line // has [PASS] or [FAIL] with |name| and the second line has the text in // |extra|. For machine and log formats, we just have [PASS] or [FAIL], // followed by the exact error code and the id. Name and extra strings must be // UTF8 encoded, as they are user-facing strings. bool WriteResult(bool success, const std::string& id, const std::string& name, int outcome_code, const std::string& extra); scoped_ptr console_; // Keeps track of how many tests reported failure. int failures_; FormatType format_; DISALLOW_COPY_AND_ASSIGN(DiagnosticsWriter); }; } // namespace diagnostics #endif // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_