Index: chrome/browser/extensions/extension_menu_manager_unittest.cc |
=================================================================== |
--- chrome/browser/extensions/extension_menu_manager_unittest.cc (revision 114114) |
+++ chrome/browser/extensions/extension_menu_manager_unittest.cc (working copy) |
@@ -251,7 +251,6 @@ |
// Now create a third item, initially add it as a child of item1, then move |
// it to be a child of item2. |
ExtensionMenuItem* item3 = CreateTestItem(extension1); |
- |
ASSERT_TRUE(manager_.AddChildItem(item1->id(), item3)); |
ASSERT_EQ(1, item1->child_count()); |
ASSERT_EQ(item3, item1->children()[0]); |
@@ -493,3 +492,64 @@ |
ASSERT_TRUE(info->GetBoolean("editable", &bool_tmp)); |
ASSERT_EQ(params.is_editable, bool_tmp); |
} |
+ |
+// Test that SanitizeRadioButtons will always leave a run of |
+// radio buttons with one item selected. |
+TEST_F(ExtensionMenuManagerTest, SanitizeRadioButtons) { |
+ Extension* extension = AddExtension("test"); |
+ |
+ // A single unchecked item should get checked |
+ ExtensionMenuItem* item1 = CreateTestItem(extension); |
+ |
+ manager_.AddContextItem(extension, item1); |
+ item1->set_type(ExtensionMenuItem::RADIO); |
+ item1->SetChecked(false); |
+ ASSERT_FALSE(item1->checked()); |
+ manager_.SanitizeRadioButtons(); |
+ 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); |
+ manager_.AddContextItem(extension, item2); |
+ ASSERT_FALSE(item1->checked()); |
+ ASSERT_FALSE(item2->checked()); |
+ manager_.SanitizeRadioButtons(); |
+ 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_.SanitizeRadioButtons(); |
+ 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()); |
+ manager_.SanitizeRadioButtons(); |
+ 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* newItem = CreateTestItem(extension); |
+ newItem->set_type(ExtensionMenuItem::RADIO); |
+ newItem->SetChecked(true); |
+ ASSERT_TRUE(item1->checked()); |
+ ASSERT_TRUE(newItem->checked()); |
+ manager_.AddContextItem(extension, newItem); |
+ manager_.SanitizeRadioButtons(); |
+ ASSERT_FALSE(item1->checked()); |
+ ASSERT_TRUE(newItem->checked()); |
+} |
+ |
+ |
Aaron Boodman
2011/12/15 00:53:55
Remove extra blank lines. There should be exactly
|