Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1498)

Unified Diff: chrome/browser/gtk/options/content_exceptions_window_gtk_unittest.cc

Issue 2876032: GTK: Fix sorting in content exception window. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Unit tests Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/gtk/options/content_exceptions_window_gtk_unittest.cc
diff --git a/chrome/browser/gtk/options/content_exceptions_window_gtk_unittest.cc b/chrome/browser/gtk/options/content_exceptions_window_gtk_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..54b0516b46bdf01ca6779058afdd8e3ef645f07d
--- /dev/null
+++ b/chrome/browser/gtk/options/content_exceptions_window_gtk_unittest.cc
@@ -0,0 +1,203 @@
+// 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/gtk/options/content_exceptions_window_gtk.h"
+
+#include "chrome/test/testing_profile.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::ElementsAre;
+
+class ContentExceptionsWindowGtkUnittest : public testing::Test {
+ public:
+ ContentExceptionsWindowGtkUnittest()
+ : ui_thread_(ChromeThread::UI, &message_loop_),
+ host_content_settings_map_(profile_.GetHostContentSettingsMap()),
+ window_(NULL) {
+ }
+
+ void AddException(const std::string& pattern, ContentSetting value) {
+ host_content_settings_map_->SetContentSetting(
+ HostContentSettingsMap::Pattern(pattern),
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT,
+ value);
+ }
+
+ void BuildWindow() {
+ window_.reset(new ContentExceptionsWindowGtk(
+ NULL,
+ host_content_settings_map_,
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT));
+ }
+
+ // Actions:
+ void SelectRows(const std::vector<int>& rows) {
+ gtk_tree_selection_unselect_all(window_->treeview_selection_);
+
+ for (std::vector<int>::const_iterator it = rows.begin(); it != rows.end();
+ ++it) {
+ GtkTreeIter iter;
+ if (!gtk_tree_model_iter_nth_child(window_->sort_list_store_,
+ &iter, NULL, *it)) {
+ NOTREACHED();
+ return;
+ }
+
+ gtk_tree_selection_select_iter(window_->treeview_selection_, &iter);
+ }
+ }
+
+ void Remove() {
+ window_->Remove(window_->remove_button_);
+ }
+
+ // Getters:
+
+ void GetSelectedRows(std::set<std::pair<int, int> >* selected) {
+ window_->GetSelectedModelIndices(selected);
+ }
+
+ int StoreListStoreCount() {
+ return gtk_tree_model_iter_n_children(
+ GTK_TREE_MODEL(window_->sort_list_store_), NULL);
+ }
+
+ int ListStoreCount() {
+ return gtk_tree_model_iter_n_children(
+ GTK_TREE_MODEL(window_->list_store_), NULL);
+ }
+
+ std::set<std::string> Paths() {
+ std::set<std::string> paths;
+ GtkTreeIter iter;
+ bool valid = gtk_tree_model_get_iter_first(
+ GTK_TREE_MODEL(window_->sort_list_store_), &iter);
+
+ while (valid) {
+ gchar* str = NULL;
+ gtk_tree_model_get(GTK_TREE_MODEL(window_->sort_list_store_), &iter,
+ 0, &str, -1);
+ paths.insert(str);
+ g_free(str);
+
+ valid = gtk_tree_model_iter_next(
+ GTK_TREE_MODEL(window_->sort_list_store_), &iter);
+ }
+
+ return paths;
+ }
+
+ // Whether certain widgets are enabled:
+ bool EditButtonSensitive() {
+ return GTK_WIDGET_SENSITIVE(window_->edit_button_);
+ }
+
+ bool RemoveButtonSensitive() {
+ return GTK_WIDGET_SENSITIVE(window_->remove_button_);
+ }
+
+ bool RemoveAllSensitive() {
+ return GTK_WIDGET_SENSITIVE(window_->remove_all_button_);
+ }
+
+ private:
+ MessageLoop message_loop_;
+ ChromeThread ui_thread_;
+
+ TestingProfile profile_;
+ HostContentSettingsMap* host_content_settings_map_;
+
+ scoped_ptr<ContentExceptionsWindowGtk> window_;
+};
+
+TEST_F(ContentExceptionsWindowGtkUnittest, TestEmptyDisplay) {
+ BuildWindow();
+
+ EXPECT_EQ(0, StoreListStoreCount());
+ EXPECT_EQ(0, ListStoreCount());
+
+ EXPECT_FALSE(RemoveAllSensitive());
+}
+
+TEST_F(ContentExceptionsWindowGtkUnittest, TestDisplay) {
+ AddException("a", CONTENT_SETTING_BLOCK);
+ AddException("b", CONTENT_SETTING_ALLOW);
+
+ BuildWindow();
+
+ EXPECT_EQ(2, StoreListStoreCount());
+ EXPECT_EQ(2, ListStoreCount());
+
+ EXPECT_TRUE(RemoveAllSensitive());
+}
+
+TEST_F(ContentExceptionsWindowGtkUnittest, TestSelection) {
+ AddException("a", CONTENT_SETTING_BLOCK);
+
+ BuildWindow();
+
+ EXPECT_FALSE(EditButtonSensitive());
+ EXPECT_FALSE(RemoveButtonSensitive());
+
+ std::vector<int> rows;
+ rows.push_back(0);
+ SelectRows(rows);
+
+ EXPECT_TRUE(EditButtonSensitive());
+ EXPECT_TRUE(RemoveButtonSensitive());
+}
+
+TEST_F(ContentExceptionsWindowGtkUnittest, TestSimpleRemoval) {
+ AddException("a", CONTENT_SETTING_BLOCK);
+ AddException("b", CONTENT_SETTING_ALLOW);
+ AddException("c", CONTENT_SETTING_BLOCK);
+ AddException("d", CONTENT_SETTING_ALLOW);
+
+ BuildWindow();
+
+ std::vector<int> rows;
+ rows.push_back(1);
+ SelectRows(rows);
+
+ Remove();
+
+ EXPECT_EQ(3, StoreListStoreCount());
+ EXPECT_EQ(3, ListStoreCount());
+ EXPECT_TRUE(EditButtonSensitive());
+ EXPECT_TRUE(RemoveButtonSensitive());
+
+ std::set<std::pair<int, int> > selected;
+ GetSelectedRows(&selected);
+
+ ASSERT_EQ(1u, selected.size());
+ EXPECT_EQ(1, selected.begin()->first);
+ EXPECT_EQ(1, selected.begin()->second);
+ EXPECT_THAT(Paths(), ElementsAre("a", "c", "d"));
+}
+
+TEST_F(ContentExceptionsWindowGtkUnittest, TestComplexRemoval) {
+ AddException("a", CONTENT_SETTING_BLOCK);
+ AddException("b", CONTENT_SETTING_ALLOW);
+ AddException("c", CONTENT_SETTING_BLOCK);
+ AddException("d", CONTENT_SETTING_ALLOW);
+ AddException("e", CONTENT_SETTING_BLOCK);
+
+ BuildWindow();
+
+ std::vector<int> rows;
+ rows.push_back(1);
+ rows.push_back(3);
+ SelectRows(rows);
+
+ Remove();
+
+ std::set<std::pair<int, int> > selected;
+ GetSelectedRows(&selected);
+
+ ASSERT_EQ(1u, selected.size());
+ EXPECT_EQ(1, selected.begin()->first);
+ EXPECT_EQ(1, selected.begin()->second);
+ EXPECT_THAT(Paths(), ElementsAre("a", "c", "e"));
+}

Powered by Google App Engine
This is Rietveld 408576698