Index: chrome/browser/extensions/extension_menu_manager_unittest.cc |
=================================================================== |
--- chrome/browser/extensions/extension_menu_manager_unittest.cc (revision 50770) |
+++ chrome/browser/extensions/extension_menu_manager_unittest.cc (working copy) |
@@ -10,6 +10,7 @@ |
#include "base/values.h" |
#include "chrome/browser/extensions/extension_menu_manager.h" |
#include "chrome/browser/extensions/extension_message_service.h" |
+#include "chrome/browser/extensions/test_extension_prefs.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/extensions/extension_constants.h" |
@@ -30,25 +31,24 @@ |
ExtensionMenuManagerTest() {} |
~ExtensionMenuManagerTest() {} |
- // Returns a test item with some default values you can override if you want |
- // to by passing in |properties| (currently just extension_id). Caller owns |
- // the return value and is responsible for freeing it. |
- static ExtensionMenuItem* CreateTestItem(DictionaryValue* properties) { |
- std::string extension_id = "0123456789"; // A default dummy value. |
- if (properties && properties->HasKey(L"extension_id")) |
- EXPECT_TRUE(properties->GetString(L"extension_id", &extension_id)); |
- |
+ // Returns a test item. |
+ static ExtensionMenuItem* CreateTestItem(Extension* extension) { |
ExtensionMenuItem::Type type = ExtensionMenuItem::NORMAL; |
ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::ALL); |
ExtensionMenuItem::ContextList enabled_contexts = contexts; |
- std::string title = "test"; |
- |
- return new ExtensionMenuItem(extension_id, title, false, type, contexts, |
+ return new ExtensionMenuItem(extension->id(), "test", false, type, contexts, |
enabled_contexts); |
} |
+ // Creates and returns a test Extension. The caller does *not* own the return |
+ // value. |
+ Extension* AddExtension(std::string name) { |
+ return prefs_.AddExtension(name); |
+ } |
+ |
protected: |
ExtensionMenuManager manager_; |
+ TestExtensionPrefs prefs_; |
private: |
DISALLOW_COPY_AND_ASSIGN(ExtensionMenuManagerTest); |
@@ -56,10 +56,12 @@ |
// Tests adding, getting, and removing items. |
TEST_F(ExtensionMenuManagerTest, AddGetRemoveItems) { |
+ Extension* extension = AddExtension("test"); |
+ |
// Add a new item, make sure you can get it back. |
- ExtensionMenuItem* item1 = CreateTestItem(NULL); |
+ ExtensionMenuItem* item1 = CreateTestItem(extension); |
ASSERT_TRUE(item1 != NULL); |
- int id1 = manager_.AddContextItem(item1); // Ownership transferred. |
+ int id1 = manager_.AddContextItem(extension, item1); |
ASSERT_GT(id1, 0); |
ASSERT_EQ(item1, manager_.GetItemById(id1)); |
const ExtensionMenuItem::List* items = |
@@ -68,8 +70,8 @@ |
ASSERT_EQ(item1, items->at(0)); |
// Add a second item, make sure it comes back too. |
- ExtensionMenuItem* item2 = CreateTestItem(NULL); |
- int id2 = manager_.AddContextItem(item2); // Ownership transferred. |
+ ExtensionMenuItem* item2 = CreateTestItem(extension); |
+ int id2 = manager_.AddContextItem(extension, item2); |
ASSERT_GT(id2, 0); |
ASSERT_NE(id1, id2); |
ASSERT_EQ(item2, manager_.GetItemById(id2)); |
@@ -79,9 +81,9 @@ |
ASSERT_EQ(item2, items->at(1)); |
// Try adding item 3, then removing it. |
- ExtensionMenuItem* item3 = CreateTestItem(NULL); |
+ ExtensionMenuItem* item3 = CreateTestItem(extension); |
std::string extension_id = item3->extension_id(); |
- int id3 = manager_.AddContextItem(item3); // Ownership transferred. |
+ int id3 = manager_.AddContextItem(extension, item3); |
ASSERT_GT(id3, 0); |
ASSERT_EQ(item3, manager_.GetItemById(id3)); |
ASSERT_EQ(3u, manager_.MenuItems(extension_id)->size()); |
@@ -95,23 +97,22 @@ |
// Test adding/removing child items. |
TEST_F(ExtensionMenuManagerTest, ChildFunctions) { |
- DictionaryValue properties; |
- properties.SetString(L"extension_id", "1111"); |
- ExtensionMenuItem* item1 = CreateTestItem(&properties); |
+ Extension* extension1 = AddExtension("1111"); |
+ Extension* extension2 = AddExtension("2222"); |
+ Extension* extension3 = AddExtension("3333"); |
- properties.SetString(L"extension_id", "2222"); |
- ExtensionMenuItem* item2 = CreateTestItem(&properties); |
- ExtensionMenuItem* item2_child = CreateTestItem(&properties); |
- ExtensionMenuItem* item2_grandchild = CreateTestItem(&properties); |
+ ExtensionMenuItem* item1 = CreateTestItem(extension1); |
+ ExtensionMenuItem* item2 = CreateTestItem(extension2); |
+ ExtensionMenuItem* item2_child = CreateTestItem(extension2); |
+ ExtensionMenuItem* item2_grandchild = CreateTestItem(extension2); |
// This third item we expect to fail inserting, so we use a scoped_ptr to make |
// sure it gets deleted. |
- properties.SetString(L"extension_id", "3333"); |
- scoped_ptr<ExtensionMenuItem> item3(CreateTestItem(&properties)); |
+ scoped_ptr<ExtensionMenuItem> item3(CreateTestItem(extension3)); |
// Add in the first two items. |
- int id1 = manager_.AddContextItem(item1); // Ownership transferred. |
- int id2 = manager_.AddContextItem(item2); // Ownership transferred. |
+ int id1 = manager_.AddContextItem(extension1, item1); |
+ int id2 = manager_.AddContextItem(extension2, item2); |
ASSERT_NE(id1, id2); |
@@ -150,13 +151,15 @@ |
// Tests changing parents. |
TEST_F(ExtensionMenuManagerTest, ChangeParent) { |
+ Extension* extension1 = AddExtension("1111"); |
+ |
// First create two items and add them both to the manager. |
- ExtensionMenuItem* item1 = CreateTestItem(NULL); |
- ExtensionMenuItem* item2 = CreateTestItem(NULL); |
+ ExtensionMenuItem* item1 = CreateTestItem(extension1); |
+ ExtensionMenuItem* item2 = CreateTestItem(extension1); |
- int id1 = manager_.AddContextItem(item1); |
+ int id1 = manager_.AddContextItem(extension1, item1); |
ASSERT_GT(id1, 0); |
- int id2 = manager_.AddContextItem(item2); |
+ int id2 = manager_.AddContextItem(extension1, item2); |
ASSERT_GT(id2, 0); |
const ExtensionMenuItem::List* items = |
@@ -167,7 +170,7 @@ |
// 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(NULL); |
+ ExtensionMenuItem* item3 = CreateTestItem(extension1); |
int id3 = manager_.AddChildItem(id1, item3); |
ASSERT_GT(id3, 0); |
@@ -218,10 +221,9 @@ |
ASSERT_EQ(item3, item1->children()[0]); |
// Make sure you can't move a node to be a child of another extension's item. |
- DictionaryValue properties; |
- properties.SetString(L"extension_id", "4444"); |
- ExtensionMenuItem* item4 = CreateTestItem(&properties); |
- int id4 = manager_.AddContextItem(item4); |
+ Extension* extension2 = AddExtension("2222"); |
+ ExtensionMenuItem* item4 = CreateTestItem(extension2); |
+ int id4 = manager_.AddContextItem(extension2, item4); |
ASSERT_GT(id4, 0); |
ASSERT_FALSE(manager_.ChangeParent(id4, id1)); |
ASSERT_FALSE(manager_.ChangeParent(id1, id4)); |
@@ -233,46 +235,33 @@ |
// Tests that we properly remove an extension's menu item when that extension is |
// unloaded. |
TEST_F(ExtensionMenuManagerTest, ExtensionUnloadRemovesMenuItems) { |
- ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
NotificationService* notifier = NotificationService::current(); |
ASSERT_TRUE(notifier != NULL); |
// Create a test extension. |
- DictionaryValue extension_properties; |
- extension_properties.SetString(extension_manifest_keys::kVersion, "1"); |
- extension_properties.SetString(extension_manifest_keys::kName, "Test"); |
- Extension extension(temp_dir.path().AppendASCII("extension")); |
- std::string errors; |
- ASSERT_TRUE(extension.InitFromValue(extension_properties, |
- false, // No public key required. |
- &errors)) << errors; |
+ Extension* extension1 = AddExtension("1111"); |
// Create an ExtensionMenuItem and put it into the manager. |
- DictionaryValue item_properties; |
- item_properties.SetString(L"extension_id", extension.id()); |
- ExtensionMenuItem* item1 = CreateTestItem(&item_properties); |
- ASSERT_EQ(extension.id(), item1->extension_id()); |
- int id1 = manager_.AddContextItem(item1); // Ownership transferred. |
+ ExtensionMenuItem* item1 = CreateTestItem(extension1); |
+ ASSERT_EQ(extension1->id(), item1->extension_id()); |
+ int id1 = manager_.AddContextItem(extension1, item1); |
ASSERT_GT(id1, 0); |
- ASSERT_EQ(1u, manager_.MenuItems(extension.id())->size()); |
+ ASSERT_EQ(1u, manager_.MenuItems(extension1->id())->size()); |
// Create a menu item with a different extension id and add it to the manager. |
- std::string alternate_extension_id = "0000"; |
- item_properties.SetString(L"extension_id", alternate_extension_id); |
- ExtensionMenuItem* item2 = CreateTestItem(&item_properties); |
+ Extension* extension2 = AddExtension("2222"); |
+ ExtensionMenuItem* item2 = CreateTestItem(extension2); |
ASSERT_NE(item1->extension_id(), item2->extension_id()); |
- int id2 = manager_.AddContextItem(item2); // Ownership transferred. |
+ int id2 = manager_.AddContextItem(extension2, item2); |
ASSERT_GT(id2, 0); |
// Notify that the extension was unloaded, and make sure the right item is |
// gone. |
notifier->Notify(NotificationType::EXTENSION_UNLOADED, |
Source<Profile>(NULL), |
- Details<Extension>(&extension)); |
- ASSERT_EQ(NULL, manager_.MenuItems(extension.id())); |
- ASSERT_EQ(1u, manager_.MenuItems(alternate_extension_id)->size()); |
+ Details<Extension>(extension1)); |
+ ASSERT_EQ(NULL, manager_.MenuItems(extension1->id())); |
+ ASSERT_EQ(1u, manager_.MenuItems(extension2->id())->size()); |
ASSERT_TRUE(manager_.GetItemById(id1) == NULL); |
ASSERT_TRUE(manager_.GetItemById(id2) != NULL); |
} |
@@ -308,35 +297,34 @@ |
// Try removing all items for an extension id that doesn't have any items. |
manager_.RemoveAllContextItems("CCCC"); |
- // Add 2 top-level and one child item for extension id AAAA. |
- DictionaryValue properties; |
- properties.SetString(L"extension_id", "AAAA"); |
- ExtensionMenuItem* item1 = CreateTestItem(&properties); |
- ExtensionMenuItem* item2 = CreateTestItem(&properties); |
- ExtensionMenuItem* item3 = CreateTestItem(&properties); |
- int id1 = manager_.AddContextItem(item1); |
- int id2 = manager_.AddContextItem(item2); |
+ // Add 2 top-level and one child item for extension 1. |
+ Extension* extension1 = AddExtension("1111"); |
+ ExtensionMenuItem* item1 = CreateTestItem(extension1); |
+ ExtensionMenuItem* item2 = CreateTestItem(extension1); |
+ ExtensionMenuItem* item3 = CreateTestItem(extension1); |
+ int id1 = manager_.AddContextItem(extension1, item1); |
+ int id2 = manager_.AddContextItem(extension1, item2); |
EXPECT_GT(id1, 0); |
EXPECT_GT(id2, 0); |
int id3 = manager_.AddChildItem(id1, item3); |
EXPECT_GT(id3, 0); |
- // Add one top-level item for extension id BBBB. |
- properties.SetString(L"extension_id", "BBBB"); |
- ExtensionMenuItem* item4 = CreateTestItem(&properties); |
- manager_.AddContextItem(item4); |
+ // Add one top-level item for extension 2. |
+ Extension* extension2 = AddExtension("2222"); |
+ ExtensionMenuItem* item4 = CreateTestItem(extension2); |
+ manager_.AddContextItem(extension2, item4); |
- EXPECT_EQ(2u, manager_.MenuItems("AAAA")->size()); |
- EXPECT_EQ(1u, manager_.MenuItems("BBBB")->size()); |
+ EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); |
+ EXPECT_EQ(1u, manager_.MenuItems(extension2->id())->size()); |
- // Remove the BBBB item. |
- manager_.RemoveAllContextItems("BBBB"); |
- EXPECT_EQ(2u, manager_.MenuItems("AAAA")->size()); |
- EXPECT_EQ(NULL, manager_.MenuItems("BBBB")); |
+ // Remove extension2's item. |
+ manager_.RemoveAllContextItems(extension2->id()); |
+ EXPECT_EQ(2u, manager_.MenuItems(extension1->id())->size()); |
+ EXPECT_EQ(NULL, manager_.MenuItems(extension2->id())); |
- // Remove the AAAA items. |
- manager_.RemoveAllContextItems("AAAA"); |
- EXPECT_EQ(NULL, manager_.MenuItems("AAAA")); |
+ // Remove extension1's items. |
+ manager_.RemoveAllContextItems(extension1->id()); |
+ EXPECT_EQ(NULL, manager_.MenuItems(extension1->id())); |
} |
TEST_F(ExtensionMenuManagerTest, ExecuteCommand) { |
@@ -355,8 +343,9 @@ |
params.selection_text = L"Hello World"; |
params.is_editable = false; |
- ExtensionMenuItem* item = CreateTestItem(NULL); |
- int id = manager_.AddContextItem(item); // Ownership transferred. |
+ Extension* extension = AddExtension("test"); |
+ ExtensionMenuItem* item = CreateTestItem(extension); |
+ int id = manager_.AddContextItem(extension, item); |
ASSERT_GT(id, 0); |
EXPECT_CALL(profile, GetExtensionMessageService()) |