| Index: chrome/browser/ui/views/new_task_manager_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/new_task_manager_view_browsertest.cc b/chrome/browser/ui/views/new_task_manager_view_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2e27afb5e689e780e1f4275c03167d84fc2fe4a5
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/new_task_manager_view_browsertest.cc
|
| @@ -0,0 +1,144 @@
|
| +// Copyright 2015 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 "base/prefs/pref_service.h"
|
| +#include "base/prefs/scoped_user_pref_update.h"
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/ui/browser_dialogs.h"
|
| +#include "chrome/browser/ui/views/new_task_manager_view.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chrome/test/base/in_process_browser_test.h"
|
| +#include "content/public/test/test_utils.h"
|
| +#include "ui/views/controls/table/table_view.h"
|
| +
|
| +namespace task_management {
|
| +
|
| +class NewTaskManagerViewTest : public InProcessBrowserTest {
|
| + public:
|
| + NewTaskManagerViewTest() {}
|
| + ~NewTaskManagerViewTest() override {}
|
| +
|
| + void TearDownOnMainThread() override {
|
| + // Make sure the task manager is closed (if any).
|
| + chrome::HideTaskManager();
|
| + content::RunAllPendingInMessageLoop();
|
| + ASSERT_FALSE(GetView());
|
| +
|
| + InProcessBrowserTest::TearDownOnMainThread();
|
| + }
|
| +
|
| + NewTaskManagerView* GetView() const {
|
| + return NewTaskManagerView::GetInstanceForTests();
|
| + }
|
| +
|
| + views::TableView* GetTable() const {
|
| + return GetView() ? GetView()->tab_table_ : nullptr;
|
| + }
|
| +
|
| + void ClearStoredColumnSettings() const {
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + if (!local_state)
|
| + FAIL();
|
| +
|
| + DictionaryPrefUpdate dict_update(local_state,
|
| + prefs::kTaskManagerColumnVisibility);
|
| + dict_update->Clear();
|
| + }
|
| +
|
| + void ToggleColumnVisibility(NewTaskManagerView* view, int col_id) {
|
| + DCHECK(view);
|
| + view->ToggleColumnVisibility(col_id);
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(NewTaskManagerViewTest);
|
| +};
|
| +
|
| +// Tests that all defined columns have a corresponding string IDs for keying
|
| +// into the user preferences dictionary.
|
| +IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, AllColumnsHaveStringIds) {
|
| + for (size_t i = 0; i < kColumnsSize; ++i)
|
| + EXPECT_NE("", GetColumnIdAsString(kColumns[i].id));
|
| +}
|
| +
|
| +// In the case of no settings stored in the user preferences local store, test
|
| +// that the task manager table starts with the default columns visibility as
|
| +// stored in |kColumns|.
|
| +IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, TableStartsWithDefaultColumns) {
|
| + ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
|
| +
|
| + chrome::ShowTaskManager(browser());
|
| + views::TableView* table = GetTable();
|
| + ASSERT_TRUE(table);
|
| +
|
| + EXPECT_FALSE(table->is_sorted());
|
| + for (size_t i = 0; i < kColumnsSize; ++i) {
|
| + EXPECT_EQ(kColumns[i].default_visibility,
|
| + table->IsColumnVisible(kColumns[i].id));
|
| + }
|
| +}
|
| +
|
| +// Tests that changing columns visibility and sort order will be stored upon
|
| +// closing the task manager view and restored when re-opened.
|
| +IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, ColumnsSettingsAreRestored) {
|
| + ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
|
| +
|
| + chrome::ShowTaskManager(browser());
|
| + NewTaskManagerView* view = GetView();
|
| + ASSERT_TRUE(view);
|
| + views::TableView* table = GetTable();
|
| + ASSERT_TRUE(table);
|
| +
|
| + // Toggle the visibility of all columns.
|
| + EXPECT_FALSE(table->is_sorted());
|
| + for (size_t i = 0; i < kColumnsSize; ++i) {
|
| + EXPECT_EQ(kColumns[i].default_visibility,
|
| + table->IsColumnVisible(kColumns[i].id));
|
| + ToggleColumnVisibility(view, kColumns[i].id);
|
| + }
|
| +
|
| + // Sort by the first visible and initially ascending sortable column.
|
| + bool is_sorted = false;
|
| + int sorted_col_id = -1;
|
| + for (size_t i = 0; i < table->visible_columns().size(); ++i) {
|
| + const ui::TableColumn& column = table->visible_columns()[i].column;
|
| + if (column.sortable && column.initial_sort_is_ascending) {
|
| + // Toggle the sort twice for a descending sort.
|
| + table->ToggleSortOrder(static_cast<int>(i));
|
| + table->ToggleSortOrder(static_cast<int>(i));
|
| + is_sorted = true;
|
| + return;
|
| + }
|
| + }
|
| +
|
| + if (is_sorted) {
|
| + EXPECT_TRUE(table->is_sorted());
|
| + EXPECT_FALSE(table->sort_descriptors().front().ascending);
|
| + EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
|
| + }
|
| +
|
| + // Close the task manager view and re-open. Expect the inverse of the default
|
| + // visibility, and the last sort order.
|
| + chrome::HideTaskManager();
|
| + content::RunAllPendingInMessageLoop();
|
| + ASSERT_FALSE(GetView());
|
| + chrome::ShowTaskManager(browser());
|
| + view = GetView();
|
| + ASSERT_TRUE(view);
|
| + table = GetTable();
|
| + ASSERT_TRUE(table);
|
| +
|
| + if (is_sorted) {
|
| + EXPECT_TRUE(table->is_sorted());
|
| + EXPECT_FALSE(table->sort_descriptors().front().ascending);
|
| + EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
|
| + }
|
| + for (size_t i = 0; i < kColumnsSize; ++i) {
|
| + EXPECT_EQ(!kColumns[i].default_visibility,
|
| + table->IsColumnVisible(kColumns[i].id));
|
| + }
|
| +}
|
| +
|
| +} // namespace task_management
|
| +
|
|
|