| 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"));
|
| +}
|
|
|