17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_ 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/basictypes.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/diagnostics/diagnostics_model.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace diagnostics { 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Console base class used internally. 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass SimpleConsole; 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsWriter : public DiagnosticsModel::Observer { 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The type of formatting done by this writer. 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch enum FormatType { 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MACHINE, 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LOG, 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch HUMAN 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch explicit DiagnosticsWriter(FormatType format); 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~DiagnosticsWriter(); 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // How many tests reported failure. 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int failures() { return failures_; } 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // What format are we writing things in. 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FormatType format() const { return format_; } 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Write an informational line of text in white over black. String must be 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // UTF8 encoded. A newline will be added for non-LOG output formats. 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool WriteInfoLine(const std::string& info_text); 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // DiagnosticsModel::Observer overrides 403240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void OnTestFinished(int index, DiagnosticsModel* model) OVERRIDE; 413240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void OnAllTestsDone(DiagnosticsModel* model) OVERRIDE; 423240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void OnRecoveryFinished(int index, DiagnosticsModel* model) OVERRIDE; 433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void OnAllRecoveryDone(DiagnosticsModel* model) OVERRIDE; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Write a result block. For humans, it consists of two lines. The first line 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // has [PASS] or [FAIL] with |name| and the second line has the text in 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // |extra|. For machine and log formats, we just have [PASS] or [FAIL], 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // followed by the exact error code and the id. Name and extra strings must be 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // UTF8 encoded, as they are user-facing strings. 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool WriteResult(bool success, 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& id, 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& name, 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int outcome_code, 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& extra); 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<SimpleConsole> console_; 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Keeps track of how many tests reported failure. 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int failures_; 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FormatType format_; 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(DiagnosticsWriter); 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace diagnostics 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_WRITER_H_ 69