OLD | NEW |
| (Empty) |
1 // Copyright 2007-2009 Google Inc. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 // ======================================================================== | |
15 // | |
16 // ResourceManager unit tests. | |
17 | |
18 #include <map> | |
19 #include <vector> | |
20 #include "omaha/base/app_util.h" | |
21 #include "omaha/base/constants.h" | |
22 #include "omaha/base/debug.h" | |
23 #include "omaha/base/file.h" | |
24 #include "omaha/base/path.h" | |
25 #include "omaha/base/string.h" | |
26 #include "omaha/common/lang.h" | |
27 #include "omaha/goopdate/resource_manager.h" | |
28 #include "omaha/goopdate/resources/goopdateres/goopdate.grh" | |
29 #include "omaha/testing/unit_test.h" | |
30 | |
31 namespace omaha { | |
32 | |
33 namespace { | |
34 | |
35 const int kNumberOfLanguageDlls = 55; | |
36 | |
37 } // namespace | |
38 | |
39 class ResourceManagerTest : public testing::Test { | |
40 protected: | |
41 virtual void SetUp() { | |
42 path_ = app_util::GetModuleDirectory(NULL); | |
43 EXPECT_HRESULT_SUCCEEDED( | |
44 ResourceManager::CreateForDefaultLanguage(false, path_)); | |
45 } | |
46 | |
47 virtual void TearDown() { | |
48 ResourceManager::Delete(); | |
49 } | |
50 | |
51 void SetMachine(bool is_machine) { | |
52 ResourceManager::instance_->is_machine_ = is_machine; | |
53 } | |
54 | |
55 void SetResourceDir(const CString& resource_dir) { | |
56 ResourceManager::instance_->resource_dir_ = resource_dir; | |
57 } | |
58 | |
59 CString GetResourceDir() const { | |
60 return ResourceManager::instance_->resource_dir_; | |
61 } | |
62 | |
63 CString GetLang(LANGID langid) { | |
64 return lang::GetLanguageForLangID(langid); | |
65 } | |
66 | |
67 void VerifyLoadingResourceDll(const CString& lang, bool is_success) { | |
68 ResourceManager::ResourceDllInfo dll_info; | |
69 | |
70 HRESULT hr = ResourceManager::Instance().GetResourceDllInfo(lang, | |
71 &dll_info); | |
72 if (is_success) { | |
73 EXPECT_HRESULT_SUCCEEDED(hr); | |
74 EXPECT_TRUE(dll_info.dll_handle != NULL); | |
75 EXPECT_STREQ(lang, dll_info.language); | |
76 | |
77 CString expected_file_name; | |
78 expected_file_name.Format(kOmahaResourceDllNameFormat, lang); | |
79 CString expected_path = ConcatenatePath(path_, expected_file_name); | |
80 EXPECT_STREQ(expected_path, dll_info.file_path); | |
81 } else { | |
82 EXPECT_HRESULT_FAILED(hr); | |
83 EXPECT_EQ(NULL, dll_info.dll_handle); | |
84 EXPECT_STREQ(_T(""), dll_info.language); | |
85 } | |
86 } | |
87 | |
88 static CString GetResourceDllName(const CString& language) { | |
89 return ResourceManager::GetResourceDllName(language); | |
90 } | |
91 | |
92 CString path_; | |
93 }; | |
94 | |
95 // Disables the default resources used for unit testing and restores them after | |
96 // the test. | |
97 // For some reason, the _AtlBaseModule.SetResourceInstance() call in | |
98 // ResourceManager does not replace the existing resources, so they must be | |
99 // unloaded first. | |
100 class ResourceManagerResourcesProtectedTest : public ResourceManagerTest { | |
101 protected: | |
102 // Assumes that the default resources are the first loaded at index 0. | |
103 virtual void SetUp() { | |
104 ResourceManagerTest::SetUp(); | |
105 | |
106 default_resources_ = _AtlBaseModule.GetHInstanceAt(0); | |
107 _AtlBaseModule.RemoveResourceInstance(default_resources_); | |
108 } | |
109 | |
110 virtual void TearDown() { | |
111 _AtlBaseModule.AddResourceInstance(default_resources_); | |
112 | |
113 ResourceManagerTest::TearDown(); | |
114 } | |
115 | |
116 private: | |
117 HINSTANCE default_resources_; | |
118 }; | |
119 | |
120 TEST_F(ResourceManagerTest, GetResourceDllName) { | |
121 const CString kLang(_T("en")); | |
122 CString ret = GetResourceDllName(kLang); | |
123 | |
124 CString expected_filename; | |
125 expected_filename.Format(kOmahaResourceDllNameFormat, kLang); | |
126 EXPECT_STREQ(expected_filename, ret); | |
127 } | |
128 | |
129 TEST_F(ResourceManagerTest, GetResourceDllName_SpecialCases) { | |
130 // zh-HK -> zh-TW | |
131 EXPECT_STREQ(_T("goopdateres_zh-TW.dll"), GetResourceDllName(_T("zh-TW"))); | |
132 EXPECT_STREQ(_T("goopdateres_zh-TW.dll"), GetResourceDllName(_T("zh-HK"))); | |
133 | |
134 // he -> iw | |
135 EXPECT_STREQ(_T("goopdateres_iw.dll"), GetResourceDllName(_T("iw"))); | |
136 EXPECT_STREQ(_T("goopdateres_iw.dll"), GetResourceDllName(_T("he"))); | |
137 } | |
138 | |
139 TEST_F(ResourceManagerTest, LoadResourceFail) { | |
140 SetMachine(false); | |
141 | |
142 CString original_resoruce_dir = GetResourceDir(); | |
143 SetResourceDir(_T("non_existing\\abcddir")); | |
144 | |
145 // Loading resource from a non-existing directory should fail. The language | |
146 // being loaded here should not be loaded previously. Otherwise the resource | |
147 // manager will return the cached value instead of doing actual load. | |
148 VerifyLoadingResourceDll(_T("ca"), false); | |
149 | |
150 SetResourceDir(original_resoruce_dir); | |
151 } | |
152 | |
153 TEST_F(ResourceManagerTest, LoadResourceDllCmdLine) { | |
154 SetMachine(false); | |
155 | |
156 CString lang = _T("ca"); | |
157 VerifyLoadingResourceDll(lang, true); | |
158 } | |
159 | |
160 TEST_F(ResourceManagerTest, LoadResourceDllCmdLineMachine) { | |
161 SetMachine(true); | |
162 | |
163 CString lang = _T("ca"); | |
164 VerifyLoadingResourceDll(lang, true); | |
165 } | |
166 | |
167 TEST_F(ResourceManagerTest, TestCountLanguageDlls) { | |
168 std::vector<CString> filenames; | |
169 ResourceManager::GetSupportedLanguageDllNames(&filenames); | |
170 EXPECT_EQ(kNumberOfLanguageDlls, filenames.size()); | |
171 } | |
172 | |
173 TEST_F(ResourceManagerTest, TestAppropriateLanguageDlls) { | |
174 std::vector<CString> filenames; | |
175 ResourceManager::GetSupportedLanguageDllNames(&filenames); | |
176 | |
177 std::vector<CString>::iterator iter = filenames.begin(); | |
178 | |
179 EXPECT_STREQ(_T("goopdateres_am.dll"), *iter++); | |
180 EXPECT_STREQ(_T("goopdateres_ar.dll"), *iter++); | |
181 EXPECT_STREQ(_T("goopdateres_bg.dll"), *iter++); | |
182 EXPECT_STREQ(_T("goopdateres_bn.dll"), *iter++); | |
183 EXPECT_STREQ(_T("goopdateres_ca.dll"), *iter++); | |
184 EXPECT_STREQ(_T("goopdateres_cs.dll"), *iter++); | |
185 EXPECT_STREQ(_T("goopdateres_da.dll"), *iter++); | |
186 EXPECT_STREQ(_T("goopdateres_de.dll"), *iter++); | |
187 EXPECT_STREQ(_T("goopdateres_el.dll"), *iter++); | |
188 EXPECT_STREQ(_T("goopdateres_en.dll"), *iter++); | |
189 EXPECT_STREQ(_T("goopdateres_en-GB.dll"), *iter++); | |
190 EXPECT_STREQ(_T("goopdateres_es.dll"), *iter++); | |
191 EXPECT_STREQ(_T("goopdateres_es-419.dll"), *iter++); | |
192 EXPECT_STREQ(_T("goopdateres_et.dll"), *iter++); | |
193 EXPECT_STREQ(_T("goopdateres_fa.dll"), *iter++); | |
194 EXPECT_STREQ(_T("goopdateres_fi.dll"), *iter++); | |
195 EXPECT_STREQ(_T("goopdateres_fil.dll"), *iter++); | |
196 EXPECT_STREQ(_T("goopdateres_fr.dll"), *iter++); | |
197 EXPECT_STREQ(_T("goopdateres_gu.dll"), *iter++); | |
198 EXPECT_STREQ(_T("goopdateres_hi.dll"), *iter++); | |
199 EXPECT_STREQ(_T("goopdateres_hr.dll"), *iter++); | |
200 EXPECT_STREQ(_T("goopdateres_hu.dll"), *iter++); | |
201 EXPECT_STREQ(_T("goopdateres_id.dll"), *iter++); | |
202 EXPECT_STREQ(_T("goopdateres_is.dll"), *iter++); | |
203 EXPECT_STREQ(_T("goopdateres_it.dll"), *iter++); | |
204 EXPECT_STREQ(_T("goopdateres_iw.dll"), *iter++); | |
205 EXPECT_STREQ(_T("goopdateres_ja.dll"), *iter++); | |
206 EXPECT_STREQ(_T("goopdateres_kn.dll"), *iter++); | |
207 EXPECT_STREQ(_T("goopdateres_ko.dll"), *iter++); | |
208 EXPECT_STREQ(_T("goopdateres_lt.dll"), *iter++); | |
209 EXPECT_STREQ(_T("goopdateres_lv.dll"), *iter++); | |
210 EXPECT_STREQ(_T("goopdateres_ml.dll"), *iter++); | |
211 EXPECT_STREQ(_T("goopdateres_mr.dll"), *iter++); | |
212 EXPECT_STREQ(_T("goopdateres_ms.dll"), *iter++); | |
213 EXPECT_STREQ(_T("goopdateres_nl.dll"), *iter++); | |
214 EXPECT_STREQ(_T("goopdateres_no.dll"), *iter++); | |
215 EXPECT_STREQ(_T("goopdateres_pl.dll"), *iter++); | |
216 EXPECT_STREQ(_T("goopdateres_pt-BR.dll"), *iter++); | |
217 EXPECT_STREQ(_T("goopdateres_pt-PT.dll"), *iter++); | |
218 EXPECT_STREQ(_T("goopdateres_ro.dll"), *iter++); | |
219 EXPECT_STREQ(_T("goopdateres_ru.dll"), *iter++); | |
220 EXPECT_STREQ(_T("goopdateres_sk.dll"), *iter++); | |
221 EXPECT_STREQ(_T("goopdateres_sl.dll"), *iter++); | |
222 EXPECT_STREQ(_T("goopdateres_sr.dll"), *iter++); | |
223 EXPECT_STREQ(_T("goopdateres_sv.dll"), *iter++); | |
224 EXPECT_STREQ(_T("goopdateres_sw.dll"), *iter++); | |
225 EXPECT_STREQ(_T("goopdateres_ta.dll"), *iter++); | |
226 EXPECT_STREQ(_T("goopdateres_te.dll"), *iter++); | |
227 EXPECT_STREQ(_T("goopdateres_th.dll"), *iter++); | |
228 EXPECT_STREQ(_T("goopdateres_tr.dll"), *iter++); | |
229 EXPECT_STREQ(_T("goopdateres_uk.dll"), *iter++); | |
230 EXPECT_STREQ(_T("goopdateres_ur.dll"), *iter++); | |
231 EXPECT_STREQ(_T("goopdateres_vi.dll"), *iter++); | |
232 EXPECT_STREQ(_T("goopdateres_zh-CN.dll"), *iter++); | |
233 // goopdateres_zh-HK.dll not present | |
234 EXPECT_STREQ(_T("goopdateres_zh-TW.dll"), *iter++); | |
235 } | |
236 | |
237 TEST_F(ResourceManagerResourcesProtectedTest, RussianResourcesValid) { | |
238 ResourceManager::Delete(); | |
239 | |
240 CString lang(_T("ru")); | |
241 EXPECT_HRESULT_SUCCEEDED(ResourceManager::Create(false, path_, lang)); | |
242 | |
243 CString install_success(FormatResourceMessage( | |
244 IDS_BUNDLE_INSTALLED_SUCCESSFULLY, _T("Google Gears"))); | |
245 | |
246 EXPECT_STREQ("Благодарим за установку Google Gears.", | |
247 WideToUtf8(install_success)); | |
248 | |
249 CString install_fail(FormatResourceMessage(IDS_INSTALLER_FAILED_WITH_MESSAGE, | |
250 _T("12345"), | |
251 _T("Action failed."))); | |
252 | |
253 EXPECT_STREQ("Ошибка установщика 12345: Action failed.", | |
254 WideToUtf8(install_fail)); | |
255 } | |
256 | |
257 } // namespace omaha | |
OLD | NEW |