50b02473960427514dae976f50e7a3107adf46c2
[platform/framework/web/crosswalk.git] / src / extensions / test / extensions_unittests_main.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/base_paths.h"
6 #include "base/bind.h"
7 #include "base/macros.h"
8 #include "base/path_service.h"
9 #include "base/test/launcher/unit_test_launcher.h"
10 #include "content/public/common/content_client.h"
11 #include "content/public/test/content_test_suite_base.h"
12 #include "content/public/test/unittest_test_suite.h"
13 #include "extensions/common/constants.h"
14 #include "extensions/common/extension_paths.h"
15 #include "extensions/test/test_extensions_client.h"
16 #include "mojo/embedder/embedder.h"
17 #include "ui/base/resource/resource_bundle.h"
18
19 namespace {
20
21 // Content client that exists only to register chrome-extension:// scheme with
22 // the url module.
23 // TODO(jamescook): Should this be merged with ShellContentClient? Should this
24 // be a persistent object available to tests?
25 class ExtensionsContentClient : public content::ContentClient {
26  public:
27   ExtensionsContentClient() {}
28   virtual ~ExtensionsContentClient() {}
29
30   // content::ContentClient overrides:
31   virtual void AddAdditionalSchemes(
32       std::vector<std::string>* standard_schemes,
33       std::vector<std::string>* savable_schemes) OVERRIDE {
34     standard_schemes->push_back(extensions::kExtensionScheme);
35     savable_schemes->push_back(extensions::kExtensionScheme);
36     standard_schemes->push_back(extensions::kExtensionResourceScheme);
37     savable_schemes->push_back(extensions::kExtensionResourceScheme);
38   }
39
40  private:
41   DISALLOW_COPY_AND_ASSIGN(ExtensionsContentClient);
42 };
43
44 // The test suite for extensions_unittests.
45 class ExtensionsTestSuite : public content::ContentTestSuiteBase {
46  public:
47   ExtensionsTestSuite(int argc, char** argv);
48   virtual ~ExtensionsTestSuite();
49
50  private:
51   // base::TestSuite:
52   virtual void Initialize() OVERRIDE;
53   virtual void Shutdown() OVERRIDE;
54
55   scoped_ptr<extensions::TestExtensionsClient> client_;
56
57   DISALLOW_COPY_AND_ASSIGN(ExtensionsTestSuite);
58 };
59
60 ExtensionsTestSuite::ExtensionsTestSuite(int argc, char** argv)
61     : content::ContentTestSuiteBase(argc, argv) {}
62
63 ExtensionsTestSuite::~ExtensionsTestSuite() {}
64
65 void ExtensionsTestSuite::Initialize() {
66   content::ContentTestSuiteBase::Initialize();
67
68   // Register the chrome-extension:// scheme via this circuitous path. Note
69   // that this does not persistently set up a ContentClient; individual tests
70   // must use content::SetContentClient().
71   {
72     ExtensionsContentClient content_client;
73     RegisterContentSchemes(&content_client);
74   }
75
76   extensions::RegisterPathProvider();
77
78   base::FilePath extensions_shell_and_test_pak_path;
79   PathService::Get(base::DIR_MODULE, &extensions_shell_and_test_pak_path);
80   ui::ResourceBundle::InitSharedInstanceWithPakPath(
81       extensions_shell_and_test_pak_path.AppendASCII(
82           "extensions_shell_and_test.pak"));
83
84   client_.reset(new extensions::TestExtensionsClient());
85   extensions::ExtensionsClient::Set(client_.get());
86 }
87
88 void ExtensionsTestSuite::Shutdown() {
89   extensions::ExtensionsClient::Set(NULL);
90   client_.reset();
91
92   ui::ResourceBundle::CleanupSharedInstance();
93   content::ContentTestSuiteBase::Shutdown();
94 }
95
96 }  // namespace
97
98 int main(int argc, char** argv) {
99   content::UnitTestTestSuite test_suite(new ExtensionsTestSuite(argc, argv));
100
101   mojo::embedder::Init();
102   return base::LaunchUnitTests(argc,
103                                argv,
104                                base::Bind(&content::UnitTestTestSuite::Run,
105                                           base::Unretained(&test_suite)));
106 }