9e40a6590aca2ebb7049b15b84dcba2eda59fc20
[platform/framework/web/crosswalk.git] / src / chrome / test / base / chrome_unit_test_suite.cc
1 // Copyright 2013 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 "chrome/test/base/chrome_unit_test_suite.h"
6
7 #include "base/path_service.h"
8 #include "base/process/process_handle.h"
9 #include "base/metrics/stats_table.h"
10 #include "base/strings/stringprintf.h"
11 #include "chrome/browser/chrome_content_browser_client.h"
12 #include "chrome/common/chrome_content_client.h"
13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/test/base/testing_browser_process.h"
15 #include "chrome/utility/chrome_content_utility_client.h"
16 #include "content/public/common/content_paths.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "ui/base/resource/resource_bundle.h"
19 #include "ui/base/resource/resource_handle.h"
20 #include "ui/base/ui_base_paths.h"
21
22 #if defined(OS_CHROMEOS)
23 #include "chromeos/chromeos_paths.h"
24 #endif
25
26 #if !defined(OS_IOS)
27 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
28 #include "chrome/common/extensions/chrome_extensions_client.h"
29 #include "extensions/common/extension_paths.h"
30 #include "ui/gl/gl_surface.h"
31 #endif
32
33 #if defined(OS_POSIX)
34 #include "base/memory/shared_memory.h"
35 #endif
36
37 namespace {
38
39 // Creates a TestingBrowserProcess for each test.
40 class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener {
41  public:
42   ChromeUnitTestSuiteInitializer() {}
43   virtual ~ChromeUnitTestSuiteInitializer() {}
44
45   virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
46     content_client_.reset(new ChromeContentClient);
47     content::SetContentClient(content_client_.get());
48     // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
49 #if !defined(OS_IOS)
50     browser_content_client_.reset(new chrome::ChromeContentBrowserClient());
51     content::SetBrowserClientForTesting(browser_content_client_.get());
52     utility_content_client_.reset(new ChromeContentUtilityClient());
53     content::SetUtilityClientForTesting(utility_content_client_.get());
54 #endif
55
56     TestingBrowserProcess::CreateInstance();
57   }
58
59   virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
60     // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
61 #if !defined(OS_IOS)
62     browser_content_client_.reset();
63     utility_content_client_.reset();
64 #endif
65     content_client_.reset();
66     content::SetContentClient(NULL);
67
68     TestingBrowserProcess::DeleteInstance();
69   }
70
71  private:
72   // Client implementations for the content module.
73   scoped_ptr<ChromeContentClient> content_client_;
74   // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
75 #if !defined(OS_IOS)
76   scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_;
77   scoped_ptr<ChromeContentUtilityClient> utility_content_client_;
78 #endif
79
80   DISALLOW_COPY_AND_ASSIGN(ChromeUnitTestSuiteInitializer);
81 };
82
83 }  // namespace
84
85 ChromeUnitTestSuite::ChromeUnitTestSuite(int argc, char** argv)
86     : ChromeTestSuite(argc, argv) {}
87
88 ChromeUnitTestSuite::~ChromeUnitTestSuite() {}
89
90 void ChromeUnitTestSuite::Initialize() {
91   // Add an additional listener to do the extra initialization for unit tests.
92   // It will be started before the base class listeners and ended after the
93   // base class listeners.
94   testing::TestEventListeners& listeners =
95       testing::UnitTest::GetInstance()->listeners();
96   listeners.Append(new ChromeUnitTestSuiteInitializer);
97
98   InitializeProviders();
99   RegisterInProcessThreads();
100
101   // Create an anonymous stats table since we don't need to share between
102   // processes.
103   stats_table_.reset(
104       new base::StatsTable(base::StatsTable::TableIdentifier(), 20, 200));
105   base::StatsTable::set_current(stats_table_.get());
106
107   ChromeTestSuite::Initialize();
108
109   // This needs to run after ChromeTestSuite::Initialize which calls content's
110   // intialization which calls base's which initializes ICU.
111   InitializeResourceBundle();
112 }
113
114 void ChromeUnitTestSuite::Shutdown() {
115   ResourceBundle::CleanupSharedInstance();
116
117   base::StatsTable::set_current(NULL);
118   stats_table_.reset();
119
120   ChromeTestSuite::Shutdown();
121 }
122
123 void ChromeUnitTestSuite::InitializeProviders() {
124   {
125     ChromeContentClient content_client;
126     RegisterContentSchemes(&content_client);
127   }
128
129   chrome::RegisterPathProvider();
130   content::RegisterPathProvider();
131   ui::RegisterPathProvider();
132
133 #if defined(OS_CHROMEOS)
134   chromeos::RegisterPathProvider();
135 #endif
136
137 #if !defined(OS_IOS)
138   extensions::RegisterPathProvider();
139
140   extensions::ExtensionsClient::Set(
141       extensions::ChromeExtensionsClient::GetInstance());
142
143   content::WebUIControllerFactory::RegisterFactory(
144       ChromeWebUIControllerFactory::GetInstance());
145
146   gfx::GLSurface::InitializeOneOffForTests();
147 #endif
148 }
149
150 void ChromeUnitTestSuite::InitializeResourceBundle() {
151   // Force unittests to run using en-US so if we test against string
152   // output, it'll pass regardless of the system language.
153   ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
154   base::FilePath resources_pack_path;
155 #if defined(OS_MACOSX) && !defined(OS_IOS)
156   PathService::Get(base::DIR_MODULE, &resources_pack_path);
157   resources_pack_path =
158       resources_pack_path.Append(FILE_PATH_LITERAL("resources.pak"));
159 #else
160   PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
161 #endif
162   ResourceBundle::GetSharedInstance().AddDataPackFromPath(
163       resources_pack_path, ui::SCALE_FACTOR_NONE);
164 }