1// Copyright (c) 2011 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 CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
6#define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
7#pragma once
8
9#include "base/string16.h"
10#include "chrome/browser/diagnostics/diagnostics_model.h"
11
12class FilePath;
13
14// Represents a single diagnostic test and encapsulates the common
15// functionality across platforms as well.
16// It also Implements the TestInfo interface providing the storage
17// for the outcome of the test.
18// Specific tests need (minimally) only to:
19// 1- override ExecuteImpl() to implement the test.
20// 2- call RecordStopFailure() or RecordFailure() or RecordSuccess()
21//    at the end of the test.
22// 3- Optionally call observer->OnProgress() if the test is long.
23// 4- Optionally call observer->OnSkipped() if the test cannot be run.
24class DiagnosticTest : public DiagnosticsModel::TestInfo {
25 public:
26  // |title| is the human readable, localized string that says that
27  // the objective of the test is.
28  explicit DiagnosticTest(const string16& title);
29
30  virtual ~DiagnosticTest();
31
32  // Runs the test. Returning false signals that no more tests should be run.
33  // The actual outcome of the test should be set using the RecordXX functions.
34  bool Execute(DiagnosticsModel::Observer* observer, DiagnosticsModel* model,
35               size_t index);
36
37  virtual string16 GetTitle();
38
39  virtual DiagnosticsModel::TestResult GetResult();
40
41  virtual string16 GetAdditionalInfo();
42
43  void RecordStopFailure(const string16& additional_info) {
44    RecordOutcome(additional_info, DiagnosticsModel::TEST_FAIL_STOP);
45  }
46
47  void RecordFailure(const string16& additional_info) {
48    RecordOutcome(additional_info, DiagnosticsModel::TEST_FAIL_CONTINUE);
49  }
50
51  void RecordSuccess(const string16& additional_info) {
52    RecordOutcome(additional_info, DiagnosticsModel::TEST_OK);
53  }
54
55  void RecordOutcome(const string16& additional_info,
56                     DiagnosticsModel::TestResult result);
57
58  static FilePath GetUserDefaultProfileDir();
59
60 protected:
61  // The id needs to be overridden by derived classes and must uniquely
62  // identify this test so other test can refer to it.
63  virtual int GetId() = 0;
64  // Derived classes override this method do perform the actual test.
65  virtual bool ExecuteImpl(DiagnosticsModel::Observer* observer) = 0;
66
67  string16 title_;
68  string16 additional_info_;
69  DiagnosticsModel::TestResult result_;
70};
71
72#endif  // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_TEST_H_
73