Commit d7cf6cd7 authored by scr@chromium.org's avatar scr@chromium.org

Added tests for views flavor of MediaGalleriesDialogTest.

BUG=

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251297 0039d316-1c4b-4281-b951-d872f2087c98
parent 5d77762e
......@@ -78,21 +78,27 @@ MediaGalleriesDialogViews::MediaGalleriesDialogViews(
accepted_(false) {
InitChildViews();
// Ownership of |contents_| is handed off by this call. |window_| will take
// care of deleting itself after calling DeleteDelegate().
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(
controller->web_contents());
DCHECK(web_contents_modal_dialog_manager);
WebContentsModalDialogManagerDelegate* modal_delegate =
web_contents_modal_dialog_manager->delegate();
DCHECK(modal_delegate);
window_ = views::Widget::CreateWindowAsFramelessChild(
this, modal_delegate->GetWebContentsModalDialogHost()->GetHostView());
web_contents_modal_dialog_manager->ShowDialog(window_->GetNativeView());
// May be NULL during tests.
if (controller->web_contents()) {
// Ownership of |contents_| is handed off by this call. |window_| will take
// care of deleting itself after calling DeleteDelegate().
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(
controller->web_contents());
DCHECK(web_contents_modal_dialog_manager);
WebContentsModalDialogManagerDelegate* modal_delegate =
web_contents_modal_dialog_manager->delegate();
DCHECK(modal_delegate);
window_ = views::Widget::CreateWindowAsFramelessChild(
this, modal_delegate->GetWebContentsModalDialogHost()->GetHostView());
web_contents_modal_dialog_manager->ShowDialog(window_->GetNativeView());
}
}
MediaGalleriesDialogViews::~MediaGalleriesDialogViews() {}
MediaGalleriesDialogViews::~MediaGalleriesDialogViews() {
if (!controller_->web_contents())
delete contents_;
}
void MediaGalleriesDialogViews::InitChildViews() {
// Outer dialog layout.
......@@ -318,9 +324,14 @@ bool MediaGalleriesDialogViews::Accept() {
void MediaGalleriesDialogViews::ButtonPressed(views::Button* sender,
const ui::Event& event) {
confirm_available_ = true;
GetWidget()->client_view()->AsDialogClientView()->UpdateDialogButtons();
ButtonPressedAction(sender);
}
void MediaGalleriesDialogViews::ButtonPressedAction(views::Button* sender) {
confirm_available_ = true;
if (sender == add_gallery_button_) {
controller_->OnAddFolderClicked();
return;
......
......@@ -58,9 +58,16 @@ class MediaGalleriesDialogViews : public MediaGalleriesDialog,
ui::MenuSourceType source_type) OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
typedef std::map<MediaGalleryPrefId, views::Checkbox*> CheckboxMap;
typedef std::map<views::Checkbox*, MediaGalleryPrefInfo> NewCheckboxMap;
void ButtonPressedAction(views::Button* sender);
void InitChildViews();
// Adds a checkbox or updates an existing checkbox. Returns true if a new one
......@@ -79,7 +86,7 @@ class MediaGalleriesDialogViews : public MediaGalleriesDialog,
// The containing window (a weak pointer).
views::Widget* window_;
// The contents of the dialog. Owned by |window_|'s RootView.
// The contents of the dialog. Owned by |window_|'s RootView except for tests.
views::View* contents_;
// A map from media gallery ID to views::Checkbox view.
......
// Copyright 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 "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h"
#include "chrome/browser/storage_monitor/storage_info.h"
#include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h"
#include "extensions/common/extension.h"
#include "extensions/common/test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/controls/button/checkbox.h"
using ::testing::_;
using ::testing::NiceMock;
using ::testing::Return;
using ::testing::ReturnPointee;
namespace {
MediaGalleryPrefInfo MakePrefInfoForTesting(MediaGalleryPrefId id) {
MediaGalleryPrefInfo gallery;
gallery.pref_id = id;
gallery.device_id = StorageInfo::MakeDeviceId(StorageInfo::FIXED_MASS_STORAGE,
base::Int64ToString(id));
gallery.display_name = base::ASCIIToUTF16("Display Name");
return gallery;
}
} // namespace
class MediaGalleriesDialogTest : public testing::Test {
public:
MediaGalleriesDialogTest() {}
virtual ~MediaGalleriesDialogTest() {}
virtual void SetUp() OVERRIDE {
dummy_extension_ = extensions::test_util::CreateExtensionWithID("dummy");
}
virtual void TearDown() OVERRIDE {
dummy_extension_ = NULL;
}
const extensions::Extension& dummy_extension() const {
return *dummy_extension_;
}
private:
scoped_refptr<extensions::Extension> dummy_extension_;
DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest);
};
// Tests that checkboxes are initialized according to the contents of
// permissions in the registry.
TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) {
// TODO(gbillock): Get rid of this mock; make something specialized.
NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension());
MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(
MakePrefInfoForTesting(1), true));
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(
MakePrefInfoForTesting(2), false));
EXPECT_CALL(controller, AttachedPermissions()).
WillRepeatedly(Return(attached_permissions));
MediaGalleriesDialogController::GalleryPermissionsVector
unattached_permissions;
EXPECT_CALL(controller, UnattachedPermissions()).
WillRepeatedly(Return(unattached_permissions));
MediaGalleriesDialogViews dialog(&controller);
EXPECT_EQ(2U, dialog.checkbox_map_.size());
views::Checkbox* checkbox1 = dialog.checkbox_map_[1];
EXPECT_TRUE(checkbox1->checked());
views::Checkbox* checkbox2 = dialog.checkbox_map_[2];
EXPECT_FALSE(checkbox2->checked());
}
// Tests that toggling checkboxes updates the controller.
TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) {
NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension());
MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(
MakePrefInfoForTesting(1), true));
EXPECT_CALL(controller, AttachedPermissions()).
WillRepeatedly(Return(attached_permissions));
MediaGalleriesDialogController::GalleryPermissionsVector
unattached_permissions;
EXPECT_CALL(controller, UnattachedPermissions()).
WillRepeatedly(Return(unattached_permissions));
MediaGalleriesDialogViews dialog(&controller);
EXPECT_EQ(1U, dialog.checkbox_map_.size());
views::Checkbox* checkbox = dialog.checkbox_map_[1];
EXPECT_TRUE(checkbox->checked());
EXPECT_CALL(controller, DidToggleGalleryId(1, false));
checkbox->SetChecked(false);
dialog.ButtonPressedAction(checkbox);
EXPECT_CALL(controller, DidToggleGalleryId(1, true));
checkbox->SetChecked(true);
dialog.ButtonPressedAction(checkbox);
}
// Tests that UpdateGallery will add a new checkbox, but only if it refers to
// a gallery that the dialog hasn't seen before.
TEST_F(MediaGalleriesDialogTest, UpdateAdds) {
NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension());
MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
EXPECT_CALL(controller, AttachedPermissions()).
WillRepeatedly(ReturnPointee(&attached_permissions));
MediaGalleriesDialogController::GalleryPermissionsVector
unattached_permissions;
EXPECT_CALL(controller, UnattachedPermissions()).
WillRepeatedly(Return(unattached_permissions));
MediaGalleriesDialogViews dialog(&controller);
EXPECT_TRUE(dialog.checkbox_map_.empty());
MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(gallery1, true));
dialog.UpdateGalleries();
EXPECT_EQ(1U, dialog.checkbox_map_.size());
MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(gallery2, true));
dialog.UpdateGalleries();
EXPECT_EQ(2U, dialog.checkbox_map_.size());
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(gallery2, false));
dialog.UpdateGalleries();
EXPECT_EQ(2U, dialog.checkbox_map_.size());
}
TEST_F(MediaGalleriesDialogTest, ForgetDeletes) {
NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension());
MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
EXPECT_CALL(controller, AttachedPermissions()).
WillRepeatedly(ReturnPointee(&attached_permissions));
MediaGalleriesDialogController::GalleryPermissionsVector
unattached_permissions;
EXPECT_CALL(controller, UnattachedPermissions()).
WillRepeatedly(Return(unattached_permissions));
MediaGalleriesDialogViews dialog(&controller);
EXPECT_TRUE(dialog.checkbox_map_.empty());
MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(gallery1, true));
dialog.UpdateGalleries();
EXPECT_EQ(1U, dialog.checkbox_map_.size());
MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
attached_permissions.push_back(
MediaGalleriesDialogController::GalleryPermission(gallery2, true));
dialog.UpdateGalleries();
EXPECT_EQ(2U, dialog.checkbox_map_.size());
attached_permissions.pop_back();
dialog.UpdateGalleries();
EXPECT_EQ(1U, dialog.checkbox_map_.size());
}
......@@ -1725,6 +1725,7 @@
'browser/ui/views/constrained_window_views_unittest.cc',
'browser/ui/views/crypto_module_password_dialog_view_unittest.cc',
'browser/ui/views/extensions/browser_action_drag_data_unittest.cc',
'browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc',
'browser/ui/views/first_run_bubble_unittest.cc',
'browser/ui/views/frame/browser_view_layout_unittest.cc',
'browser/ui/views/frame/browser_view_unittest.cc',
......
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