summaryrefslogtreecommitdiffstats
path: root/chrome/browser/task_manager/task_manager_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/task_manager/task_manager_unittest.cc')
-rw-r--r--chrome/browser/task_manager/task_manager_unittest.cc110
1 files changed, 110 insertions, 0 deletions
diff --git a/chrome/browser/task_manager/task_manager_unittest.cc b/chrome/browser/task_manager/task_manager_unittest.cc
new file mode 100644
index 0000000..44d0e31
--- /dev/null
+++ b/chrome/browser/task_manager/task_manager_unittest.cc
@@ -0,0 +1,110 @@
+// Copyright (c) 2010 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/task_manager/task_manager.h"
+
+#include <string>
+
+#include "app/l10n_util.h"
+#include "base/message_loop.h"
+#include "base/process_util.h"
+#include "base/utf_string_conversions.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+namespace {
+
+#if defined(OS_MACOSX)
+// From task_manager.cc:
+// Activity Monitor shows %cpu with one decimal digit -- be
+// consistent with that.
+const char* kZeroCPUUsage = "0.0";
+#else
+const char* kZeroCPUUsage = "0";
+#endif
+
+class TestResource : public TaskManager::Resource {
+ public:
+ TestResource() : refresh_called_(false) {}
+
+ virtual std::wstring GetTitle() const { return L"test title"; }
+ virtual SkBitmap GetIcon() const { return SkBitmap(); }
+ virtual base::ProcessHandle GetProcess() const {
+ return base::GetCurrentProcessHandle();
+ }
+ virtual bool SupportNetworkUsage() const { return false; }
+ virtual void SetSupportNetworkUsage() { NOTREACHED(); }
+ virtual void Refresh() { refresh_called_ = true; }
+ bool refresh_called() const { return refresh_called_; }
+ void set_refresh_called(bool refresh_called) {
+ refresh_called_ = refresh_called;
+ }
+
+ private:
+ bool refresh_called_;
+};
+
+} // namespace
+
+class TaskManagerTest : public testing::Test {
+};
+
+TEST_F(TaskManagerTest, Basic) {
+ TaskManager task_manager;
+ TaskManagerModel* model = task_manager.model_;
+ EXPECT_EQ(0, model->ResourceCount());
+}
+
+TEST_F(TaskManagerTest, Resources) {
+ TaskManager task_manager;
+ TaskManagerModel* model = task_manager.model_;
+
+ TestResource resource1, resource2;
+
+ task_manager.AddResource(&resource1);
+ ASSERT_EQ(1, model->ResourceCount());
+ EXPECT_TRUE(model->IsResourceFirstInGroup(0));
+ EXPECT_EQ(ASCIIToUTF16("test title"), model->GetResourceTitle(0));
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT),
+ model->GetResourceNetworkUsage(0));
+ EXPECT_EQ(ASCIIToUTF16(kZeroCPUUsage), model->GetResourceCPUUsage(0));
+
+ task_manager.AddResource(&resource2); // Will be in the same group.
+ ASSERT_EQ(2, model->ResourceCount());
+ EXPECT_TRUE(model->IsResourceFirstInGroup(0));
+ EXPECT_FALSE(model->IsResourceFirstInGroup(1));
+ EXPECT_EQ(ASCIIToUTF16("test title"), model->GetResourceTitle(1));
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT).c_str(),
+ model->GetResourceNetworkUsage(1));
+ EXPECT_EQ(ASCIIToUTF16(kZeroCPUUsage), model->GetResourceCPUUsage(1));
+
+ task_manager.RemoveResource(&resource1);
+ // Now resource2 will be first in group.
+ ASSERT_EQ(1, model->ResourceCount());
+ EXPECT_TRUE(model->IsResourceFirstInGroup(0));
+ EXPECT_EQ(ASCIIToUTF16("test title"), model->GetResourceTitle(0));
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_TASK_MANAGER_NA_CELL_TEXT),
+ model->GetResourceNetworkUsage(0));
+ EXPECT_EQ(ASCIIToUTF16(kZeroCPUUsage), model->GetResourceCPUUsage(0));
+
+ task_manager.RemoveResource(&resource2);
+ EXPECT_EQ(0, model->ResourceCount());
+}
+
+// Tests that the model is calling Refresh() on its resources.
+TEST_F(TaskManagerTest, RefreshCalled) {
+ MessageLoop loop;
+ TaskManager task_manager;
+ TaskManagerModel* model = task_manager.model_;
+ TestResource resource;
+
+ task_manager.AddResource(&resource);
+ ASSERT_FALSE(resource.refresh_called());
+ model->update_state_ = TaskManagerModel::TASK_PENDING;
+ model->Refresh();
+ ASSERT_TRUE(resource.refresh_called());
+ task_manager.RemoveResource(&resource);
+}