Chromium Code Reviews| Index: chrome/browser/extensions/component_loader_unittest.cc |
| diff --git a/chrome/browser/extensions/component_loader_unittest.cc b/chrome/browser/extensions/component_loader_unittest.cc |
| index 3e3d8c81166f775f8e76461e27b5490e7b2fe4a0..415b67508ce7b9d60d50861378f7fa65dbd9015b 100644 |
| --- a/chrome/browser/extensions/component_loader_unittest.cc |
| +++ b/chrome/browser/extensions/component_loader_unittest.cc |
| @@ -19,14 +19,26 @@ namespace { |
| class MockExtensionService : public TestExtensionService { |
| private: |
| + bool find(std::string id) { |
|
Aaron Boodman
2011/12/06 19:43:35
There is already GetExtensionById in TestExtension
SeRya
2011/12/06 22:19:37
Irrelevant after merge.
Aaron Boodman
2011/12/07 00:09:02
What I mean is that the TestExtensionService base
|
| + for (ExtensionList::iterator it = extension_list_.begin(); |
| + it != extension_list_.end(); |
| + ++it) |
| + if ((*it)->id() == id) |
| + return true; |
| + |
| + return false; |
| + } |
| + |
| bool ready_; |
| ExtensionList extension_list_; |
| + size_t unloaded_count_; |
| public: |
| - MockExtensionService() : ready_(false) { |
| + MockExtensionService() : ready_(false), unloaded_count_(0) { |
| } |
| virtual void AddExtension(const Extension* extension) OVERRIDE { |
| + ASSERT_FALSE(find(extension->id())); |
| // ExtensionService must become the owner of the extension object. |
| extension_list_.push_back(extension); |
| } |
| @@ -34,12 +46,14 @@ class MockExtensionService : public TestExtensionService { |
| virtual void UnloadExtension( |
| const std::string& extension_id, |
| extension_misc::UnloadedExtensionReason reason) OVERRIDE { |
| + ASSERT_TRUE(find(extension_id)); |
| // Remove the extension with the matching id. |
| for (ExtensionList::iterator it = extension_list_.begin(); |
| it != extension_list_.end(); |
| ++it) { |
| if ((*it)->id() == extension_id) { |
| extension_list_.erase(it); |
| + unloaded_count_++; |
| return; |
| } |
| } |
| @@ -57,6 +71,10 @@ class MockExtensionService : public TestExtensionService { |
| ready_ = ready; |
| } |
| + size_t unloaded_count() const { |
| + return unloaded_count_; |
| + } |
| + |
| void clear_extension_list() { |
| extension_list_.clear(); |
| } |
| @@ -75,13 +93,8 @@ class ComponentLoaderTest : public testing::Test { |
| } |
| void SetUp() { |
| - FilePath test_data_dir; |
| - ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
| extension_path_ = |
| - test_data_dir.AppendASCII("extensions") |
| - .AppendASCII("good") |
| - .AppendASCII("Extensions") |
| - .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| + GetBasePath().AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| .AppendASCII("1.0.0.0"); |
| // Read in the extension manifest. |
| @@ -109,6 +122,14 @@ class ComponentLoaderTest : public testing::Test { |
| // The contents of the text extension's manifest file. |
| std::string manifest_contents_; |
| + |
| + FilePath GetBasePath() { |
| + FilePath test_data_dir; |
| + PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); |
| + return test_data_dir.AppendASCII("extensions") |
| + .AppendASCII("good") |
| + .AppendASCII("Extensions"); |
| + } |
| }; |
| TEST_F(ComponentLoaderTest, ParseManifest) { |
| @@ -166,7 +187,7 @@ TEST_F(ComponentLoaderTest, AddWhenNotReady) { |
| extension_service_.set_ready(false); |
| extension = component_loader_.Add(manifest_contents_, extension_path_); |
| ASSERT_EQ((Extension*)NULL, extension.get()); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
| } |
| // Test that it *is* loaded when the extension service *is* ready. |
| @@ -175,7 +196,7 @@ TEST_F(ComponentLoaderTest, AddWhenReady) { |
| extension_service_.set_ready(true); |
| extension = component_loader_.Add(manifest_contents_, extension_path_); |
| ASSERT_NE((Extension*)NULL, extension.get()); |
| - ASSERT_EQ(1U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(1u, extension_service_.extensions()->size()); |
| } |
| TEST_F(ComponentLoaderTest, Remove) { |
| @@ -183,13 +204,13 @@ TEST_F(ComponentLoaderTest, Remove) { |
| // Removing an extension that was never added should be ok. |
| component_loader_.Remove(extension_path_); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
| // Try adding and removing before LoadAll() is called. |
| component_loader_.Add(manifest_contents_, extension_path_); |
| component_loader_.Remove(extension_path_); |
| component_loader_.LoadAll(); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
| // Load an extension, and check that it's unloaded when Remove() is called. |
| scoped_refptr<const Extension> extension; |
| @@ -197,11 +218,11 @@ TEST_F(ComponentLoaderTest, Remove) { |
| extension = component_loader_.Add(manifest_contents_, extension_path_); |
| ASSERT_NE((Extension*)NULL, extension.get()); |
| component_loader_.Remove(extension_path_); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
| // And after calling LoadAll(), it shouldn't get loaded. |
| component_loader_.LoadAll(); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
| } |
| TEST_F(ComponentLoaderTest, LoadAll) { |
| @@ -209,7 +230,7 @@ TEST_F(ComponentLoaderTest, LoadAll) { |
| // No extensions should be loaded if none were added. |
| component_loader_.LoadAll(); |
| - ASSERT_EQ(0U, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.extensions()->size()); |
|
Aaron Boodman
2011/12/06 19:43:35
thank-you!
|
| // Use LoadAll() to load the default extensions. |
| component_loader_.AddDefaultComponentExtensions(); |
| @@ -249,4 +270,36 @@ TEST_F(ComponentLoaderTest, EnterpriseWebStore) { |
| ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| } |
| +TEST_F(ComponentLoaderTest, AddOrReplace) { |
| + ASSERT_EQ(0u, component_loader_.GetRegisteredExtensionsCount()); |
| + component_loader_.AddDefaultComponentExtensions(); |
| + size_t const default_count = component_loader_.GetRegisteredExtensionsCount(); |
| + FilePath known_extension = GetBasePath() |
| + .AppendASCII("mndnfokpggljbaajbnioimlmbfngpief"); |
| + FilePath unknow_extension = GetBasePath() |
| + .AppendASCII("hpiknbiabeeppbpihjehijgoemciehgk") |
| + .AppendASCII("2"); |
| + |
| + // Replace a default component extension. |
| + component_loader_.AddOrReplace(known_extension); |
| + ASSERT_EQ(default_count, |
| + component_loader_.GetRegisteredExtensionsCount()); |
| + |
| + // Add a new component extension. |
| + component_loader_.AddOrReplace(unknow_extension); |
| + ASSERT_EQ(default_count + 1, |
| + component_loader_.GetRegisteredExtensionsCount()); |
| + |
| + extension_service_.set_ready(true); |
| + component_loader_.LoadAll(); |
| + |
| + ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| + ASSERT_EQ(0u, extension_service_.unloaded_count()); |
| + |
| + // replace loaded component extension. |
| + component_loader_.AddOrReplace(known_extension); |
| + ASSERT_EQ(default_count + 1, extension_service_.extensions()->size()); |
| + ASSERT_EQ(1u, extension_service_.unloaded_count()); |
| +} |
| + |
| } // namespace extensions |