| // Copyright (c) 2011 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 "chrome/browser/diagnostics/diagnostics_model.h" |
| |
| #include "base/command_line.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| // Basic harness to adquire and release the Diagnostic model object. |
| class DiagnosticsModelTest : public testing::Test { |
| protected: |
| DiagnosticsModelTest() |
| : model_(NULL), |
| cmdline_(CommandLine::NO_PROGRAM) { |
| } |
| |
| virtual ~DiagnosticsModelTest() { } |
| |
| virtual void SetUp() { |
| model_ = MakeDiagnosticsModel(cmdline_); |
| ASSERT_TRUE(model_ != NULL); |
| } |
| |
| virtual void TearDown() { |
| delete model_; |
| } |
| |
| DiagnosticsModel* model_; |
| CommandLine cmdline_; |
| }; |
| |
| // The test observer is used to know if the callbacks are being called. |
| class UTObserver: public DiagnosticsModel::Observer { |
| public: |
| UTObserver() |
| : done_(false), |
| progress_called_(0), |
| finished_(0), |
| id_of_failed_stop_test(-1) { |
| } |
| |
| virtual void OnProgress(int id, int percent, DiagnosticsModel* model) { |
| EXPECT_TRUE(model != NULL); |
| ++progress_called_; |
| } |
| |
| virtual void OnSkipped(int id, DiagnosticsModel* model) { |
| EXPECT_TRUE(model != NULL); |
| } |
| |
| virtual void OnFinished(int id, DiagnosticsModel* model) { |
| EXPECT_TRUE(model != NULL); |
| ++finished_; |
| if (model->GetTest(id).GetResult() == DiagnosticsModel::TEST_FAIL_STOP) { |
| id_of_failed_stop_test = id; |
| ASSERT_TRUE(false); |
| } |
| } |
| |
| virtual void OnDoneAll(DiagnosticsModel* model) { |
| done_ = true; |
| EXPECT_TRUE(model != NULL); |
| } |
| |
| bool done() const { return done_; } |
| |
| int progress_called() const { return progress_called_; } |
| |
| int finished() const { return finished_;} |
| |
| private: |
| bool done_; |
| int progress_called_; |
| int finished_; |
| int id_of_failed_stop_test; |
| }; |
| |
| // We currently have more tests operational on windows. |
| #if defined(OS_WIN) |
| const int kDiagnosticsTestCount = 19; |
| #elif defined(OS_MACOSX) |
| const int kDiagnosticsTestCount = 16; |
| #elif defined(OS_POSIX) |
| const int kDiagnosticsTestCount = 17; |
| #endif |
| |
| // Test that the initial state is correct. |
| TEST_F(DiagnosticsModelTest, BeforeRun) { |
| int available = model_->GetTestAvailableCount(); |
| EXPECT_EQ(kDiagnosticsTestCount, available); |
| EXPECT_EQ(0, model_->GetTestRunCount()); |
| EXPECT_EQ(DiagnosticsModel::TEST_NOT_RUN, model_->GetTest(0).GetResult()); |
| } |
| |
| // Run all the tests, verify that the basic callbacks are run and that the |
| // final state is correct. |
| TEST_F(DiagnosticsModelTest, RunAll) { |
| UTObserver observer; |
| EXPECT_FALSE(observer.done()); |
| model_->RunAll(&observer); |
| EXPECT_TRUE(observer.done()); |
| EXPECT_GT(observer.progress_called(), 0); |
| EXPECT_EQ(kDiagnosticsTestCount, model_->GetTestRunCount()); |
| EXPECT_EQ(kDiagnosticsTestCount, observer.finished()); |
| } |