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

Unified Diff: chrome/browser/extensions/extension_menu_manager_unittest.cc

Issue 8935016: Contributed by Eriq Augustine <eriq.augustine@gmail.com> (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 8 years, 11 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
« no previous file with comments | « chrome/browser/extensions/extension_menu_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_menu_manager_unittest.cc
===================================================================
--- chrome/browser/extensions/extension_menu_manager_unittest.cc (revision 117097)
+++ chrome/browser/extensions/extension_menu_manager_unittest.cc (working copy)
@@ -493,3 +493,95 @@
ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp));
ASSERT_EQ(params.is_editable, bool_tmp);
}
+
+// Test that there is always only one radio item selected.
+TEST_F(ExtensionMenuManagerTest, SanitizeRadioButtons) {
+ Extension* extension = AddExtension("test");
+
+ // A single unchecked item should get checked
+ ExtensionMenuItem* item1 = CreateTestItem(extension);
+
+ item1->set_type(ExtensionMenuItem::RADIO);
+ item1->SetChecked(false);
+ ASSERT_FALSE(item1->checked());
+ manager_.AddContextItem(extension, item1);
+ ASSERT_TRUE(item1->checked());
+
+ // In a run of two unchecked items, the first should get selected.
+ item1->SetChecked(false);
+ ExtensionMenuItem* item2 = CreateTestItem(extension);
+ item2->set_type(ExtensionMenuItem::RADIO);
+ item2->SetChecked(false);
+ ASSERT_FALSE(item1->checked());
+ ASSERT_FALSE(item2->checked());
+ manager_.AddContextItem(extension, item2);
+ ASSERT_TRUE(item1->checked());
+ ASSERT_FALSE(item2->checked());
+
+ // If multiple items are checked, only the last item should get checked.
+ item1->SetChecked(true);
+ item2->SetChecked(true);
+ ASSERT_TRUE(item1->checked());
+ ASSERT_TRUE(item2->checked());
+ manager_.ItemUpdated(item1->id());
+ ASSERT_FALSE(item1->checked());
+ ASSERT_TRUE(item2->checked());
+
+ // If the checked item is removed, the new first item should get checked.
+ item1->SetChecked(false);
+ item2->SetChecked(true);
+ ASSERT_FALSE(item1->checked());
+ ASSERT_TRUE(item2->checked());
+ manager_.RemoveContextMenuItem(item2->id());
+ item2 = NULL;
+ ASSERT_TRUE(item1->checked());
+
+ // If a checked item is added to a run that already has a checked item,
+ // then the new item should get checked.
+ item1->SetChecked(true);
+ ExtensionMenuItem* new_item = CreateTestItem(extension);
+ new_item->set_type(ExtensionMenuItem::RADIO);
+ new_item->SetChecked(true);
+ ASSERT_TRUE(item1->checked());
+ ASSERT_TRUE(new_item->checked());
+ manager_.AddContextItem(extension, new_item);
+ ASSERT_FALSE(item1->checked());
+ ASSERT_TRUE(new_item->checked());
+ // Make sure that children are checked as well.
+ ExtensionMenuItem* parent = CreateTestItem(extension);
+ manager_.AddContextItem(extension, parent);
+ ExtensionMenuItem* child1 = CreateTestItem(extension);
+ child1->set_type(ExtensionMenuItem::RADIO);
+ child1->SetChecked(false);
+ ExtensionMenuItem* child2 = CreateTestItem(extension);
+ child2->set_type(ExtensionMenuItem::RADIO);
+ child2->SetChecked(true);
+ ASSERT_FALSE(child1->checked());
+ ASSERT_TRUE(child2->checked());
+
+ manager_.AddChildItem(parent->id(), child1);
+ ASSERT_TRUE(child1->checked());
+
+ manager_.AddChildItem(parent->id(), child2);
+ ASSERT_FALSE(child1->checked());
+ ASSERT_TRUE(child2->checked());
+
+ // Removing the checked item from the children should cause the
+ // remaining child to be checked.
+ manager_.RemoveContextMenuItem(child2->id());
+ child2 = NULL;
+ ASSERT_TRUE(child1->checked());
+
+ // This should NOT cause |new_item| to be deseleted because
+ // |parent| will be seperating the two runs of radio items.
+ manager_.ChangeParent(child1->id(), NULL);
+ ASSERT_TRUE(new_item->checked());
+ ASSERT_TRUE(child1->checked());
+
+ // Removing |parent| should cause only |child1| to be selected.
+ manager_.RemoveContextMenuItem(parent->id());
+ parent = NULL;
+ ASSERT_FALSE(new_item->checked());
+ ASSERT_TRUE(child1->checked());
+}
+
« no previous file with comments | « chrome/browser/extensions/extension_menu_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698