Commit 726c3989 authored by jennyz@chromium.org's avatar jennyz@chromium.org

Test cases for FolderHeaderView. Test the following:

1. Rename a folder name if it is a normal folder.
2. Maximum folder name length.
3. Folder name not editable for oem folder.

BUG=354627
R=xiyuan@chromium.org

Review URL: https://codereview.chromium.org/217473005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260320 0039d316-1c4b-4281-b951-d872f2087c98
parent ed654cca
......@@ -221,6 +221,7 @@
'test/run_all_unittests.cc',
'views/app_list_main_view_unittest.cc',
'views/apps_grid_view_unittest.cc',
'views/folder_header_view_unittest.cc',
'views/search_box_view_unittest.cc',
'views/search_result_list_view_unittest.cc',
'views/test/apps_grid_view_test_api.cc',
......
......@@ -69,7 +69,7 @@ void AppListTestModel::PopulateApps(int n) {
CreateAndAddItem(GetItemName(start_index + i));
}
void AppListTestModel::CreateAndPopulateFolderWithApps(int n) {
AppListFolderItem* AppListTestModel::CreateAndPopulateFolderWithApps(int n) {
DCHECK_GT(n, 1);
int start_index = static_cast<int>(top_level_item_list()->item_count());
AppListTestItem* item = CreateAndAddItem(GetItemName(start_index));
......@@ -78,6 +78,16 @@ void AppListTestModel::CreateAndPopulateFolderWithApps(int n) {
AppListTestItem* new_item = CreateAndAddItem(GetItemName(start_index + i));
merged_item_id = AppListModel::MergeItems(merged_item_id, new_item->id());
}
AppListItem* merged_item = FindItem(merged_item_id);
DCHECK(merged_item->GetItemType() == AppListFolderItem::kItemType);
return static_cast<AppListFolderItem*>(merged_item);
}
AppListFolderItem* AppListTestModel::CreateAndAddOemFolder(
const std::string& id) {
AppListFolderItem* folder =
new AppListFolderItem(id, AppListFolderItem::FOLDER_TYPE_OEM);
return static_cast<AppListFolderItem*>(AddItem(folder));
}
void AppListTestModel::PopulateAppWithId(int id) {
......
......@@ -7,6 +7,7 @@
#include <string>
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_model.h"
......@@ -48,7 +49,9 @@ class AppListTestModel : public AppListModel {
void PopulateApps(int n);
// Creates and populate a folder with |n| test apps in it.
void CreateAndPopulateFolderWithApps(int n);
AppListFolderItem* CreateAndPopulateFolderWithApps(int n);
AppListFolderItem* CreateAndAddOemFolder(const std::string& id);
// Populate the model with an item titled "Item |id|".
void PopulateAppWithId(int id);
......
......@@ -126,6 +126,18 @@ void FolderHeaderView::Update() {
Layout();
}
const base::string16& FolderHeaderView::GetFolderNameForTest() {
return folder_name_view_->text();
}
void FolderHeaderView::SetFolderNameForTest(const base::string16& name) {
folder_name_view_->SetText(name);
}
bool FolderHeaderView::IsFolderNameEnabledForTest() const {
return folder_name_view_->enabled();
}
gfx::Size FolderHeaderView::GetPreferredSize() {
return gfx::Size(kPreferredWidth, kPreferredHeight);
}
......
......@@ -7,6 +7,7 @@
#include <string>
#include "ui/app_list/app_list_export.h"
#include "ui/app_list/app_list_item_observer.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/textfield/textfield_controller.h"
......@@ -22,11 +23,15 @@ class AppListFolderItem;
class AppListFolderView;
class FolderHeaderViewDelegate;
namespace test {
class FolderHeaderViewTest;
}
// FolderHeaderView contains a back button and an editable folder name field.
class FolderHeaderView : public views::View,
public views::TextfieldController,
public views::ButtonListener,
public AppListItemObserver {
class APP_LIST_EXPORT FolderHeaderView : public views::View,
public views::TextfieldController,
public views::ButtonListener,
public AppListItemObserver {
public:
explicit FolderHeaderView(FolderHeaderViewDelegate* delegate);
virtual ~FolderHeaderView();
......@@ -40,10 +45,18 @@ class FolderHeaderView : public views::View,
private:
class FolderNameView;
friend class test::FolderHeaderViewTest;
// Updates UI.
void Update();
// Gets and sets the folder name for test.
const base::string16& GetFolderNameForTest();
void SetFolderNameForTest(const base::string16& name);
// Returns true if folder name is enabled, only for testing use.
bool IsFolderNameEnabledForTest() const;
// views::View overrides:
virtual void Layout() OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
......
......@@ -25,7 +25,6 @@ class FolderHeaderViewDelegate {
virtual void SetItemName(AppListFolderItem* item,
const std::string& name) = 0;
protected:
virtual ~FolderHeaderViewDelegate() {}
};
......
// Copyright (c) 2014 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 "ui/app_list/views/folder_header_view.h"
#include <string>
#include "base/basictypes.h"
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/app_list/app_list_constants.h"
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_model.h"
#include "ui/app_list/test/app_list_test_model.h"
#include "ui/app_list/views/folder_header_view_delegate.h"
#include "ui/views/test/views_test_base.h"
namespace app_list {
namespace test {
namespace {
class TestFolderHeaderViewDelegate : public FolderHeaderViewDelegate {
public:
TestFolderHeaderViewDelegate() {}
virtual ~TestFolderHeaderViewDelegate() {}
// FolderHeaderViewDelegate
virtual void NavigateBack(AppListFolderItem* item,
const ui::Event& event_flags) OVERRIDE {}
virtual void GiveBackFocusToSearchBox() OVERRIDE {}
virtual void SetItemName(AppListFolderItem* item,
const std::string& name) OVERRIDE {
folder_name_ = name;
}
const std::string& folder_name() const { return folder_name_; }
private:
std::string folder_name_;
DISALLOW_COPY_AND_ASSIGN(TestFolderHeaderViewDelegate);
};
} // namespace
class FolderHeaderViewTest : public views::ViewsTestBase {
public:
FolderHeaderViewTest() {}
virtual ~FolderHeaderViewTest() {}
// testing::Test overrides:
virtual void SetUp() OVERRIDE {
views::ViewsTestBase::SetUp();
model_.reset(new AppListTestModel);
delegate_.reset(new TestFolderHeaderViewDelegate);
folder_header_view_.reset(new FolderHeaderView(delegate_.get()));
}
virtual void TearDown() OVERRIDE {
folder_header_view_.reset(); // Release apps grid view before models.
delegate_.reset();
views::ViewsTestBase::TearDown();
}
protected:
void UpdateFolderName(const std::string& name) {
base::string16 folder_name = base::UTF8ToUTF16(name);
folder_header_view_->SetFolderNameForTest(folder_name);
folder_header_view_->ContentsChanged(NULL, folder_name);
}
const std::string GetFolderNameFromUI() {
return base::UTF16ToUTF8(folder_header_view_->GetFolderNameForTest());
}
bool CanEditFolderName() {
return folder_header_view_->IsFolderNameEnabledForTest();
}
scoped_ptr<AppListTestModel> model_;
scoped_ptr<FolderHeaderView> folder_header_view_;
scoped_ptr<TestFolderHeaderViewDelegate> delegate_;
private:
DISALLOW_COPY_AND_ASSIGN(FolderHeaderViewTest);
};
TEST_F(FolderHeaderViewTest, SetFolderName) {
// Creating a folder with empty folder name.
AppListFolderItem* folder_item = model_->CreateAndPopulateFolderWithApps(2);
folder_header_view_->SetFolderItem(folder_item);
EXPECT_EQ("", GetFolderNameFromUI());
EXPECT_TRUE(CanEditFolderName());
// Update UI to set folder name to "test folder".
UpdateFolderName("test folder");
EXPECT_EQ("test folder", delegate_->folder_name());
}
TEST_F(FolderHeaderViewTest, MaxFoldernNameLength) {
// Creating a folder with empty folder name.
AppListFolderItem* folder_item = model_->CreateAndPopulateFolderWithApps(2);
folder_header_view_->SetFolderItem(folder_item);
EXPECT_EQ("", GetFolderNameFromUI());
EXPECT_TRUE(CanEditFolderName());
// Update UI to set folder name to really long one beyond its maxium limit,
// The folder name should be trucated to the maximum length.
std::string max_len_name;
for (size_t i = 0; i < kMaxFolderNameChars; ++i)
max_len_name += "a";
UpdateFolderName(max_len_name);
EXPECT_EQ(max_len_name, delegate_->folder_name());
std::string too_long_name = max_len_name + "a";
UpdateFolderName(too_long_name);
EXPECT_EQ(max_len_name, delegate_->folder_name());
}
TEST_F(FolderHeaderViewTest, OemFolderNameNotEditable) {
AppListFolderItem* folder_item = model_->CreateAndAddOemFolder("oem folder");
folder_header_view_->SetFolderItem(folder_item);
EXPECT_EQ("", GetFolderNameFromUI());
EXPECT_FALSE(CanEditFolderName());
}
} // namespace test
} // namespace app_list
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment