Commit 0d5778fe authored by estade@chromium.org's avatar estade@chromium.org

add unit tests for MediaGalleriesDialogGtk

BUG=134929
TBR=sky

Review URL: https://chromiumcodereview.appspot.com/10823303

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151564 0039d316-1c4b-4281-b951-d872f2087c98
parent a77ef682
...@@ -25,30 +25,36 @@ MediaGalleriesDialogController::MediaGalleriesDialogController( ...@@ -25,30 +25,36 @@ MediaGalleriesDialogController::MediaGalleriesDialogController(
const Extension& extension, const Extension& extension,
const base::Callback<void(void)>& on_finish) const base::Callback<void(void)>& on_finish)
: tab_contents_(tab_contents), : tab_contents_(tab_contents),
extension_(extension), extension_(&extension),
on_finish_(on_finish), on_finish_(on_finish),
preferences_(MediaGalleriesPreferencesFactory::GetForProfile( preferences_(MediaGalleriesPreferencesFactory::GetForProfile(
tab_contents_->profile())) { tab_contents_->profile())) {
LookUpPermissions(); LookUpPermissions();
dialog_.reset(MediaGalleriesDialog::Create(this)); dialog_.reset(MediaGalleriesDialog::Create(this));
} }
MediaGalleriesDialogController::MediaGalleriesDialogController()
: tab_contents_(NULL),
extension_(NULL),
preferences_(NULL) {}
MediaGalleriesDialogController::~MediaGalleriesDialogController() { MediaGalleriesDialogController::~MediaGalleriesDialogController() {
if (select_folder_dialog_.get()) if (select_folder_dialog_.get())
select_folder_dialog_->ListenerDestroyed(); select_folder_dialog_->ListenerDestroyed();
} }
string16 MediaGalleriesDialogController::GetHeader() { string16 MediaGalleriesDialogController::GetHeader() {
std::string extension_name(extension_ ? extension_->name() : "");
return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_HEADER, return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_HEADER,
UTF8ToUTF16(extension_.name())); UTF8ToUTF16(extension_name));
} }
string16 MediaGalleriesDialogController::GetSubtext() { string16 MediaGalleriesDialogController::GetSubtext() {
if (extension_.HasAPIPermission( if (extension_ && extension_->HasAPIPermission(
extensions::APIPermission::kMediaGalleriesRead)) { extensions::APIPermission::kMediaGalleriesRead)) {
return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_READ_SUBTEXT, return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_READ_SUBTEXT,
UTF8ToUTF16(extension_.name())); UTF8ToUTF16(extension_->name()));
} }
// TODO(estade): handle write et al. // TODO(estade): handle write et al.
return string16(); return string16();
...@@ -149,7 +155,7 @@ void MediaGalleriesDialogController::LookUpPermissions() { ...@@ -149,7 +155,7 @@ void MediaGalleriesDialogController::LookUpPermissions() {
} }
MediaGalleryPrefIdSet permitted = MediaGalleryPrefIdSet permitted =
preferences_->GalleriesForExtension(extension_); preferences_->GalleriesForExtension(*extension_);
for (MediaGalleryPrefIdSet::iterator iter = permitted.begin(); for (MediaGalleryPrefIdSet::iterator iter = permitted.begin();
iter != permitted.end(); ++iter) { iter != permitted.end(); ++iter) {
...@@ -161,7 +167,7 @@ void MediaGalleriesDialogController::SavePermissions() { ...@@ -161,7 +167,7 @@ void MediaGalleriesDialogController::SavePermissions() {
for (KnownGalleryPermissions::iterator iter = known_galleries_.begin(); for (KnownGalleryPermissions::iterator iter = known_galleries_.begin();
iter != known_galleries_.end(); ++iter) { iter != known_galleries_.end(); ++iter) {
preferences_->SetGalleryPermissionForExtension( preferences_->SetGalleryPermissionForExtension(
extension_, iter->first, iter->second.allowed); *extension_, iter->first, iter->second.allowed);
} }
for (NewGalleryPermissions::iterator iter = new_galleries_.begin(); for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
...@@ -174,7 +180,7 @@ void MediaGalleriesDialogController::SavePermissions() { ...@@ -174,7 +180,7 @@ void MediaGalleriesDialogController::SavePermissions() {
MediaGalleryPrefId id = preferences_->AddGallery( MediaGalleryPrefId id = preferences_->AddGallery(
gallery.device_id, gallery.display_name, gallery.path, true); gallery.device_id, gallery.display_name, gallery.path, true);
preferences_->SetGalleryPermissionForExtension( preferences_->SetGalleryPermissionForExtension(
extension_, id, true); *extension_, id, true);
} }
} }
......
...@@ -69,8 +69,9 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener { ...@@ -69,8 +69,9 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener {
string16 GetHeader(); string16 GetHeader();
string16 GetSubtext(); string16 GetSubtext();
void OnAddFolderClicked(); void OnAddFolderClicked();
void GalleryToggled(const MediaGalleryPrefInfo* pref_info, bool enabled); virtual void GalleryToggled(const MediaGalleryPrefInfo* pref_info,
void DialogFinished(bool accepted); bool enabled);
virtual void DialogFinished(bool accepted);
// SelectFileDialog::Listener implementation: // SelectFileDialog::Listener implementation:
virtual void FileSelected(const FilePath& path, virtual void FileSelected(const FilePath& path,
...@@ -84,6 +85,16 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener { ...@@ -84,6 +85,16 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener {
return tab_contents_; return tab_contents_;
} }
protected:
// For use with tests.
MediaGalleriesDialogController();
virtual ~MediaGalleriesDialogController();
// This map excludes those galleries which have been blacklisted; it only
// counts active known galleries.
KnownGalleryPermissions known_galleries_;
private: private:
// This type is for media galleries that have been added via "add gallery" // This type is for media galleries that have been added via "add gallery"
// button, but have not yet been committed to the prefs system and will be // button, but have not yet been committed to the prefs system and will be
...@@ -91,8 +102,6 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener { ...@@ -91,8 +102,6 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener {
// just a list and not a map. // just a list and not a map.
typedef std::list<GalleryPermission> NewGalleryPermissions; typedef std::list<GalleryPermission> NewGalleryPermissions;
virtual ~MediaGalleriesDialogController();
// Populates |known_galleries_|. // Populates |known_galleries_|.
void LookUpPermissions(); void LookUpPermissions();
...@@ -103,12 +112,9 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener { ...@@ -103,12 +112,9 @@ class MediaGalleriesDialogController : public ui::SelectFileDialog::Listener {
TabContents* tab_contents_; TabContents* tab_contents_;
// This is just a reference, but it's assumed that it won't become invalid // This is just a reference, but it's assumed that it won't become invalid
// while the dialog is showing. // while the dialog is showing. Will be NULL only during tests.
const extensions::Extension& extension_; const extensions::Extension* extension_;
// This map excludes those galleries which have been blacklisted; it only
// counts active known galleries.
KnownGalleryPermissions known_galleries_;
NewGalleryPermissions new_galleries_; NewGalleryPermissions new_galleries_;
// We run this callback when done. // We run this callback when done.
......
...@@ -26,7 +26,10 @@ MediaGalleriesDialogGtk::MediaGalleriesDialogGtk( ...@@ -26,7 +26,10 @@ MediaGalleriesDialogGtk::MediaGalleriesDialogGtk(
ignore_toggles_(false), ignore_toggles_(false),
accepted_(false) { accepted_(false) {
InitWidgets(); InitWidgets();
window_ = new ConstrainedWindowGtk(controller->tab_contents(), this);
// May be NULL during tests.
if (controller->tab_contents())
window_ = new ConstrainedWindowGtk(controller->tab_contents(), this);
} }
MediaGalleriesDialogGtk::~MediaGalleriesDialogGtk() { MediaGalleriesDialogGtk::~MediaGalleriesDialogGtk() {
...@@ -124,7 +127,8 @@ void MediaGalleriesDialogGtk::DeleteDelegate() { ...@@ -124,7 +127,8 @@ void MediaGalleriesDialogGtk::DeleteDelegate() {
} }
void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) { void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) {
gtk_widget_set_sensitive(confirm_, TRUE); if (confirm_)
gtk_widget_set_sensitive(confirm_, TRUE);
if (ignore_toggles_) if (ignore_toggles_)
return; return;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <map> #include <map>
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "chrome/browser/media_gallery/media_galleries_dialog_controller.h" #include "chrome/browser/media_gallery/media_galleries_dialog_controller.h"
#include "chrome/browser/ui/gtk/constrained_window_gtk.h" #include "chrome/browser/ui/gtk/constrained_window_gtk.h"
#include "ui/base/gtk/gtk_signal.h" #include "ui/base/gtk/gtk_signal.h"
...@@ -17,6 +18,7 @@ ...@@ -17,6 +18,7 @@
namespace chrome { namespace chrome {
class MediaGalleriesDialogController; class MediaGalleriesDialogController;
class MediaGalleriesDialogTest;
// The media galleries configuration view for Gtk. It will immediately show // The media galleries configuration view for Gtk. It will immediately show
// upon construction. // upon construction.
...@@ -42,6 +44,10 @@ class MediaGalleriesDialogGtk : public MediaGalleriesDialog, ...@@ -42,6 +44,10 @@ class MediaGalleriesDialogGtk : public MediaGalleriesDialog,
CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnCancel); CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnCancel);
private: private:
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, InitializeCheckboxes);
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ToggleCheckboxes);
FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
typedef std::map<const MediaGalleryPrefInfo*, GtkWidget*> CheckboxMap; typedef std::map<const MediaGalleryPrefInfo*, GtkWidget*> CheckboxMap;
// Creates the widget hierarchy. // Creates the widget hierarchy.
......
// Copyright (c) 2012 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/media_gallery/media_galleries_dialog_controller.h"
#include "chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome {
class MediaGalleriesDialogTest : public testing::Test,
public MediaGalleriesDialogController {
public:
MediaGalleriesDialogTest() : toggles_(0) {}
virtual ~MediaGalleriesDialogTest() {}
virtual void DialogFinished(bool accepted) OVERRIDE {}
virtual void GalleryToggled(const MediaGalleryPrefInfo* pref_info,
bool enabled) OVERRIDE {
toggles_++;
MediaGalleriesDialogController::GalleryToggled(pref_info, enabled);
}
protected:
// Counter that tracks the number of times a checkbox has been toggled.
size_t toggles_;
};
// Tests that checkboxes are initialized according to the contents of
// |known_galleries|.
TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) {
MediaGalleryPrefInfo gallery1;
gallery1.pref_id = 1;
known_galleries_[1] = GalleryPermission(gallery1, true);
MediaGalleryPrefInfo gallery2;
gallery2.pref_id = 2;
known_galleries_[2] = GalleryPermission(gallery2, false);
scoped_ptr<MediaGalleriesDialogGtk>
dialog_(new MediaGalleriesDialogGtk(this));
EXPECT_EQ(2U, dialog_->checkbox_map_.size());
GtkWidget* checkbox1 = dialog_->checkbox_map_[&known_galleries_[1].pref_info];
ASSERT_TRUE(GTK_IS_TOGGLE_BUTTON(checkbox1));
EXPECT_TRUE(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox1)));
GtkWidget* checkbox2 = dialog_->checkbox_map_[&known_galleries_[2].pref_info];
ASSERT_TRUE(GTK_IS_TOGGLE_BUTTON(checkbox2));
EXPECT_FALSE(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox2)));
// Initializing checkboxes should not cause them to be toggled.
EXPECT_EQ(0U, toggles_);
}
// Tests that toggling checkboxes updates the controller.
TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) {
MediaGalleryPrefInfo gallery1;
gallery1.pref_id = 1;
known_galleries_[1] = GalleryPermission(gallery1, true);
scoped_ptr<MediaGalleriesDialogGtk>
dialog_(new MediaGalleriesDialogGtk(this));
EXPECT_EQ(1U, dialog_->checkbox_map_.size());
GtkWidget* checkbox =
dialog_->checkbox_map_[&known_galleries_[1].pref_info];
ASSERT_TRUE(GTK_IS_TOGGLE_BUTTON(checkbox));
EXPECT_TRUE(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), FALSE);
EXPECT_FALSE(known_galleries_[1].allowed);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), TRUE);
EXPECT_TRUE(known_galleries_[1].allowed);
EXPECT_EQ(2U, toggles_);
}
// 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) {
scoped_ptr<MediaGalleriesDialogGtk>
dialog_(new MediaGalleriesDialogGtk(this));
EXPECT_TRUE(dialog_->checkbox_map_.empty());
MediaGalleryPrefInfo gallery1;
dialog_->UpdateGallery(&gallery1, true);
EXPECT_EQ(1U, dialog_->checkbox_map_.size());
MediaGalleryPrefInfo gallery2;
dialog_->UpdateGallery(&gallery2, true);
EXPECT_EQ(2U, dialog_->checkbox_map_.size());
dialog_->UpdateGallery(&gallery2, false);
EXPECT_EQ(2U, dialog_->checkbox_map_.size());
}
} // namespace chrome
...@@ -1808,6 +1808,7 @@ ...@@ -1808,6 +1808,7 @@
'browser/ui/gtk/bookmarks/bookmark_editor_gtk_unittest.cc', 'browser/ui/gtk/bookmarks/bookmark_editor_gtk_unittest.cc',
'browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc', 'browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc',
'browser/ui/gtk/event_utils_unittest.cc', 'browser/ui/gtk/event_utils_unittest.cc',
'browser/ui/gtk/extensions/media_galleries_dialog_gtk_unittest.cc',
'browser/ui/gtk/gtk_chrome_shrinkable_hbox_unittest.cc', 'browser/ui/gtk/gtk_chrome_shrinkable_hbox_unittest.cc',
'browser/ui/gtk/gtk_theme_service_unittest.cc', 'browser/ui/gtk/gtk_theme_service_unittest.cc',
'browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc', 'browser/ui/gtk/omnibox/omnibox_popup_view_gtk_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