Tizen 2.1 base
[external/enchant.git] / unittests / broker / enchant_broker_set_ordering_tests.cpp
1 /* Copyright (c) 2007 Eric Scott Albright\r
2  * \r
3  * Permission is hereby granted, free of charge, to any person obtaining a copy\r
4  * of this software and associated documentation files (the "Software"), to deal\r
5  * in the Software without restriction, including without limitation the rights\r
6  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
7  * copies of the Software, and to permit persons to whom the Software is\r
8  * furnished to do so, subject to the following conditions:\r
9  * \r
10  * The above copyright notice and this permission notice shall be included in\r
11  * all copies or substantial portions of the Software.\r
12  * \r
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
19  * THE SOFTWARE.\r
20  */\r
21 \r
22 #include <UnitTest++.h>\r
23 #include <enchant.h>\r
24 #include <fstream>\r
25 #include "../EnchantBrokerTestFixture.h"\r
26 \r
27 static bool mock1ProviderRequestDictionaryCalled;\r
28 static bool mock2ProviderRequestDictionaryCalled;\r
29 \r
30 static EnchantDict * RequestDictionary1 (EnchantProvider *me, const char *tag)\r
31 {\r
32         mock1ProviderRequestDictionaryCalled = true;\r
33         return MockEnGbAndQaaProviderRequestDictionary(me, tag);\r
34 }\r
35 static EnchantDict * RequestDictionary2 (EnchantProvider *me, const char *tag)\r
36 {\r
37         mock2ProviderRequestDictionaryCalled = true;\r
38         return MockEnGbAndQaaProviderRequestDictionary(me, tag);\r
39 }\r
40 static const char *\r
41 MockProvider1Identify (EnchantProvider *)\r
42 {\r
43         return "mock1";\r
44 }\r
45 \r
46 static const char *\r
47 MockProvider2Identify (EnchantProvider *)\r
48 {\r
49         return "mock2";\r
50 }\r
51 static void Request_Dictionary_ProviderConfiguration1 (EnchantProvider * me, const char *)\r
52 {\r
53          me->request_dict = RequestDictionary1;\r
54          me->dispose_dict = MockProviderDisposeDictionary;\r
55          me->identify = MockProvider1Identify;\r
56 }\r
57 static void Request_Dictionary_ProviderConfiguration2 (EnchantProvider * me, const char *)\r
58 {\r
59          me->request_dict = RequestDictionary2;\r
60          me->dispose_dict = MockProviderDisposeDictionary;\r
61          me->identify = MockProvider2Identify;\r
62 }\r
63 \r
64 \r
65 enum ProviderOrder {\r
66         Mock1ThenMock2=1,\r
67         Mock2ThenMock1=2,\r
68         ErrorBothCalled=3,\r
69         ErrorNeitherCalled=4\r
70 };\r
71 \r
72 struct EnchantBrokerSetOrdering_TestFixture : EnchantBrokerTestFixture\r
73 {\r
74         //Setup\r
75         EnchantBrokerSetOrdering_TestFixture():\r
76                         EnchantBrokerTestFixture(Request_Dictionary_ProviderConfiguration1,Request_Dictionary_ProviderConfiguration2)\r
77 \r
78         {  \r
79                 mock1ProviderRequestDictionaryCalled = false;\r
80                 mock2ProviderRequestDictionaryCalled = false;\r
81         }\r
82 \r
83         ProviderOrder GetProviderOrder(const std::string & languageTag) \r
84         {\r
85                 ProviderOrder result = ErrorBothCalled;\r
86 \r
87                 EnchantDict* dict = enchant_broker_request_dict(_broker, languageTag.c_str());\r
88 \r
89                 if(mock2ProviderRequestDictionaryCalled && !mock1ProviderRequestDictionaryCalled)\r
90                 {\r
91                         result = Mock2ThenMock1;\r
92                 }\r
93                 else if(mock1ProviderRequestDictionaryCalled && !mock2ProviderRequestDictionaryCalled)\r
94                 {\r
95                         result = Mock1ThenMock2;\r
96                 }\r
97                 else if(!mock2ProviderRequestDictionaryCalled && !mock1ProviderRequestDictionaryCalled)\r
98                 {\r
99                         result = ErrorNeitherCalled;\r
100                 }\r
101                 \r
102                 FreeDictionary(dict);\r
103 \r
104                 mock1ProviderRequestDictionaryCalled = false;\r
105                 mock2ProviderRequestDictionaryCalled = false;\r
106 \r
107                 return result;\r
108         }\r
109 };\r
110 \r
111 struct EnchantBrokerFileSetOrdering_TestFixture: EnchantBrokerSetOrdering_TestFixture\r
112 {\r
113         std::string _tempPath;\r
114 \r
115         EnchantBrokerFileSetOrdering_TestFixture()\r
116         {\r
117                 if(_broker){ // this is now freed so that individual tests can set up the file state they\r
118                                          // need before calling         _broker = enchant_broker_init ();\r
119                         enchant_broker_free (_broker);\r
120                         _broker = NULL;\r
121                 }\r
122                 _tempPath = GetTemporaryFilename("");\r
123         }\r
124 \r
125         ~EnchantBrokerFileSetOrdering_TestFixture()\r
126         {\r
127                 DeleteDirAndFiles(_tempPath);\r
128         }\r
129 \r
130         static void WriteStringToOrderingFile(const std::string& path, const std::string& contents)\r
131         {\r
132                 CreateDirectory(path);\r
133                 std::ofstream file(AddToPath(path, "enchant.ordering").c_str());\r
134                 file << contents;\r
135         }\r
136 \r
137 };\r
138 \r
139 \r
140 /**\r
141  * enchant_broker_set_ordering\r
142  * @broker: A non-null #EnchantBroker\r
143  * @tag: A non-null language tag (en_US)\r
144  * @ordering: A non-null ordering (aspell,myspell,ispell,uspell,hspell)\r
145  *\r
146  * Declares a preference of dictionaries to use for the language\r
147  * described/referred to by @tag. The ordering is a comma delimited\r
148  * list of provider names. As a special exception, the "*" tag can\r
149  * be used as a language tag to declare a default ordering for any\r
150  * language that does not explictly declare an ordering.\r
151  */\r
152 \r
153 \r
154 /////////////////////////////////////////////////////////////////////////////\r
155 // Test Normal Operation\r
156 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
157                          EnchantBrokerSetOrdering_AsteriskForLanguage_SetsDefaultOrdering)\r
158 {\r
159         enchant_broker_set_ordering(_broker, "*", "mock2,mock1");\r
160         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
161 \r
162         enchant_broker_set_ordering(_broker, "*", "mock1,mock2");\r
163         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
164 }\r
165 \r
166 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
167                          EnchantBrokerSetOrdering_NoSpaces)\r
168 {\r
169         enchant_broker_set_ordering(_broker, "qaa", "mock2,mock1");\r
170         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
171 }\r
172 \r
173 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
174                          EnchantBrokerSetOrdering_WhitespaceAroundProvider)\r
175 {\r
176         enchant_broker_set_ordering(_broker, "qaa", "\n\f\t\r mock2\n \f\t\r,mock1");\r
177         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
178 }\r
179 \r
180 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
181                          EnchantBrokerSetOrdering_WhitespaceAroundProviderAfterComma)\r
182 {\r
183         enchant_broker_set_ordering(_broker, "qaa", "aspell,\n\f\t \rmock2\n\f \r\t,mock1");\r
184         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
185 }\r
186 \r
187 /* Vertical tab is not considered to be whitespace in glib!\r
188         See bug# 59388 http://bugzilla.gnome.org/show_bug.cgi?id=59388\r
189 */\r
190 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
191                          EnchantBrokerSetOrdering_VerticalTabSurroundingProvider_NotRemoved)\r
192 {\r
193   enchant_broker_set_ordering(_broker, "qaa", "\vmock2,mock1");\r
194   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
195 \r
196   enchant_broker_set_ordering(_broker, "qaa", "mock2\v,mock1");\r
197   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
198 \r
199   enchant_broker_set_ordering(_broker, "qaa", "aspell,\vmock2,mock1");\r
200   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
201 \r
202   enchant_broker_set_ordering(_broker, "qaa", "aspell,mock2\v,mock1");\r
203   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
204 \r
205 }\r
206 \r
207 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
208                          EnchantBrokerSetOrdering_SpecificLanguage_SetsOrderingForSpecific)\r
209 {\r
210         enchant_broker_set_ordering(_broker, "qaa", "mock2,mock1");\r
211         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
212 \r
213         enchant_broker_set_ordering(_broker, "qaa", "mock1,mock2");\r
214         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
215 }\r
216 \r
217 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
218                          EnchantBrokerSetOrdering_UnknownProvider_Ignored)\r
219 {\r
220         enchant_broker_set_ordering(_broker, "qaa", "unknown,mock2,mock1");\r
221         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
222 }\r
223 \r
224 \r
225 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
226                          EnchantBrokerSetOrdering_WhitespaceSurroundingLanguageTag_Removed)\r
227 {\r
228         enchant_broker_set_ordering(_broker, "\n\r qaa \t\f", "mock2,mock1");\r
229         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
230 }\r
231 \r
232 /* Vertical tab is not considered to be whitespace in glib!\r
233         See bug# 59388 http://bugzilla.gnome.org/show_bug.cgi?id=59388\r
234 */\r
235 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
236                          EnchantBrokerSetOrdering_VerticalTabPreceedingLanguageTag_NotRemoved)\r
237 {\r
238   enchant_broker_set_ordering(_broker, "*", "mock1,mock2");\r
239   enchant_broker_set_ordering(_broker, "\vqaa", "mock2,mock1");\r
240   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
241 }\r
242 \r
243 /* Vertical tab is not considered to be whitespace in glib!\r
244         See bug# 59388 http://bugzilla.gnome.org/show_bug.cgi?id=59388\r
245 */\r
246 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
247                          EnchantBrokerSetOrdering_VerticalTabFollowingLanguageTag_NotRemoved)\r
248 {\r
249   enchant_broker_set_ordering(_broker, "*", "mock1,mock2");\r
250   enchant_broker_set_ordering(_broker, "qaa\v", "mock2,mock1");\r
251   CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
252 }\r
253 \r
254 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
255                          EnchantBrokerSetOrdering_AtSignInLanguageTag_RemovesToTail)\r
256 {\r
257         enchant_broker_set_ordering(_broker, "en_GB@euro", "mock2,mock1");\r
258         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
259 }\r
260 \r
261 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
262                          EnchantBrokerDictExists_PeriodInLanguageTag_RemovesToTail)\r
263 {\r
264         enchant_broker_set_ordering(_broker, "en_GB.UTF-8", "unknown,mock2,mock1");\r
265         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
266 }\r
267 \r
268 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
269                          EnchantBrokerSetOrdering_HyphensInLanguageTag_SubstitutedWithUnderscore)\r
270 {\r
271         enchant_broker_set_ordering(_broker, "en-GB", "mock2,mock1");\r
272         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
273 }\r
274 \r
275 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
276                          EnchantBrokerSetOrdering_DifferentCaseInLanguageTag_SubstitutedWithCorrectCase)\r
277 {\r
278         enchant_broker_set_ordering(_broker, "EN-gb", "mock2,mock1");\r
279         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
280 }\r
281 \r
282 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
283                          EnchantBrokerSetOrdering_DifferentCaseInLanguageTagNoRegion_SubstitutedWithCorrectCase)\r
284 {\r
285         enchant_broker_set_ordering(_broker, "QAA", "mock2,mock1");\r
286         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
287 }\r
288 \r
289 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture, \r
290                          EnchantBrokerSetOrdering_HasPreviousError_ErrorCleared)\r
291 {\r
292   SetErrorOnMockProvider("something bad happened");\r
293 \r
294   enchant_broker_set_ordering(_broker, "qaa", "mock2,mock1");\r
295 \r
296   CHECK_EQUAL((void*)NULL, (void*)enchant_broker_get_error(_broker));\r
297 }\r
298 \r
299 /////////////////////////////////////////////////////////////////////////////\r
300 // Test Error Conditions\r
301 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
302                          EnchantBrokerSetOrdering_NullBroker_DoNothing)\r
303 {\r
304         enchant_broker_set_ordering(_broker, "qaa", "mock2,mock1");\r
305         enchant_broker_set_ordering(NULL, "qaa", "mock1,mock2");\r
306         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
307 }\r
308 \r
309 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
310                          EnchantBrokerSetOrdering_NullLanguageTag_DoNothing)\r
311 {\r
312         enchant_broker_set_ordering(_broker, "*", "mock2,mock1");\r
313         enchant_broker_set_ordering(_broker, NULL, "mock1,mock2");\r
314         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
315 }\r
316 \r
317 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
318                          EnchantBrokerSetOrdering_EmptyAfterNormalization_DoNothing)\r
319 {\r
320         testResults_;\r
321         enchant_broker_set_ordering(_broker, "  @  ", "mock1,mock2");\r
322 }\r
323 \r
324 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
325                          EnchantBrokerSetOrdering_EmptyLanguageTag_DoNothing)\r
326 {\r
327         testResults_;\r
328         enchant_broker_set_ordering(_broker, "", "aspell,myspell,ispell");\r
329 }\r
330 \r
331 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
332                          EnchantBrokerSetOrdering_NullOrdering_DoNothing)\r
333 {\r
334         testResults_;\r
335         enchant_broker_set_ordering(_broker, "en_GB", NULL);\r
336 }\r
337 \r
338 TEST_FIXTURE(EnchantBrokerSetOrdering_TestFixture,\r
339                          EnchantBrokerSetOrdering_EmptyOrdering_DoNothing)\r
340 {\r
341         testResults_;\r
342         enchant_broker_set_ordering(_broker, "en_GB", "");\r
343 }\r
344 \r
345 \r
346 /*\r
347  * Ordering can also be set in enchant.ordering file:\r
348  * Language_Tag : Provider1, Provider2, ProviderN\r
349  *\r
350  * The enchant.ordering file is discovered by first looking in the user's\r
351  * config directory, then in the .enchant directory in the user's home directory.\r
352  * \r
353  * The user's config directory is located at share/enchant \r
354  * in the module directory (that libenchant is in)\r
355  * but it can be overridden using the registry setting \r
356  *    HKEY_CURRENT_USER\Software\Enchant\Config\Data_Dir\r
357  * or HKEY_LOCAL_MACHINE\Software\Enchant\Config\Data_Dir\r
358  *\r
359  * The user's home directory on windows can be overridden using the registry\r
360  * setting HKEY_CURRENT_USER\Software\Enchant\Config\Home_Dir\r
361  * \r
362  * The module directory can be overridden using the registry setting\r
363  *    HKEY_CURRENT_USER\Software\Enchant\Config\Module_Dir\r
364  * or HKEY_LOCAL_MACHINE\Software\Enchant\Config\Module_Dir\r
365  */\r
366 \r
367 /////////////////////////////////////////////////////////////////////////////\r
368 // Test Normal Operation\r
369 \r
370 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
371 EnchantBrokerFileOrderingMock1ThenMock2_DefaultConfigDirectory)\r
372 {\r
373         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock1,mock2");\r
374          InitializeBroker();\r
375 \r
376          CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
377 }\r
378 \r
379 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
380 EnchantBrokerFileOrderingMock2ThenMock1_DefaultConfigDirectory)\r
381 {\r
382         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock2,mock1");\r
383          InitializeBroker();\r
384 \r
385          CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
386 }\r
387 \r
388 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
389 EnchantBrokerFileOrderingMock1ThenMock2_UserOverriddenConfigDirectory)\r
390 {\r
391         WriteStringToOrderingFile(_tempPath, "en_GB:mock1,mock2");\r
392         SetUserRegistryConfigDir(_tempPath);\r
393         InitializeBroker();\r
394 \r
395         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
396 }\r
397 \r
398 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
399  EnchantBrokerFileOrderingMock2ThenMock1_UserOverriddenConfigDirectory)\r
400 {\r
401         WriteStringToOrderingFile(_tempPath, "en_GB:mock2,mock1");\r
402         SetUserRegistryConfigDir(_tempPath);\r
403         InitializeBroker();\r
404 \r
405         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
406 }\r
407 \r
408 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
409  EnchantBrokerFileOrderingMock1ThenMock2_MachineOverriddenConfigDirectory)\r
410 {\r
411         WriteStringToOrderingFile(_tempPath, "en_GB:mock1,mock2");\r
412         SetMachineRegistryConfigDir(_tempPath);\r
413         InitializeBroker();\r
414         \r
415         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
416 }\r
417 \r
418 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
419  EnchantBrokerFileOrderingMock2ThenMock1_MachineOverriddenConfigDirectory)\r
420 {\r
421         WriteStringToOrderingFile(_tempPath, "en_GB:mock2,mock1");\r
422         SetMachineRegistryConfigDir(_tempPath);\r
423         InitializeBroker();\r
424         \r
425         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
426 }\r
427 \r
428 // if config registry "" global from share/enchant\r
429 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
430  EnchantBrokerFileOrdering_OverriddenConfigDirectoryIsBlank_UsesSettingsFromDefaultConfigDirectory_Mock1Then2)\r
431 {\r
432         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock1,mock2");\r
433         SetMachineRegistryConfigDir("");\r
434         InitializeBroker();\r
435         \r
436         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
437 }\r
438 \r
439 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
440  EnchantBrokerFileOrdering_OverriddenConfigDirectoryIsBlank_UsesSettingsFromDefaultConfigDirectory_Mock2Then1)\r
441 {\r
442         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock2,mock1");\r
443         SetMachineRegistryConfigDir("");\r
444         InitializeBroker();\r
445         \r
446         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
447 }\r
448 \r
449 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
450  EnchantBrokerFileOrdering_ExtraSpacesAndTabs_Mock1Then2)\r
451 {\r
452         WriteStringToOrderingFile(GetEnchantConfigDir(),"\t en_GB\f \t:\r\t mock1\t , \tmock2\t ");\r
453         InitializeBroker();\r
454         \r
455         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
456 }\r
457 \r
458 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
459  EnchantBrokerFileOrdering_ExtraSpaces_Mock2Then1)\r
460 {\r
461         WriteStringToOrderingFile(GetEnchantConfigDir()," \ten_GB\t \f:\r \tmock2 \t,\t mock1 \t");\r
462         InitializeBroker();\r
463         \r
464         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
465 }\r
466 \r
467 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
468  EnchantBrokerFileOrdering_ExtraNewLines_Mock1Then2)\r
469 {\r
470         WriteStringToOrderingFile(GetEnchantConfigDir(),"\nen_GB:mock1,mock2\n\nqaa:mock2,mock1\n*:mock2\n");\r
471         InitializeBroker();\r
472         \r
473         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
474 }\r
475 \r
476 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
477  EnchantBrokerFileOrdering_ExtraNewLines_Mock2Then1)\r
478 {\r
479         WriteStringToOrderingFile(GetEnchantConfigDir(),"\nen_GB:mock2,mock1\n\nqaa:mock2,mock1\n*:mock2\n");\r
480         InitializeBroker();\r
481         \r
482         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
483 }\r
484 \r
485 \r
486 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
487  EnchantBrokerFileOrdering_HomeAndGlobal_HomeMergedWithGlobal_HomeTakesPrecedence_Mock1Then2)\r
488 {\r
489         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock2,mock1\nqaa:mock1,mock2");\r
490         WriteStringToOrderingFile(_tempPath, "en_GB:mock1,mock2");\r
491         SetUserRegistryConfigDir(_tempPath);\r
492 \r
493         InitializeBroker();\r
494         \r
495         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
496         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("qaa"));\r
497 }\r
498 \r
499 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
500  EnchantBrokerFileOrdering_HomeAndGlobal_HomeMergedWithGlobal_HomeTakesPrecedence_Mock2Then1)\r
501 {\r
502         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock1,mock2\nqaa:mock2,mock1");\r
503         WriteStringToOrderingFile(_tempPath, "en_GB:mock2,mock1");\r
504         SetUserRegistryConfigDir(_tempPath);\r
505 \r
506         InitializeBroker();\r
507         \r
508         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
509         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("qaa"));\r
510 }\r
511 \r
512 /////////////////////////////////////////////////////////////////////////////\r
513 // Test Error Conditions\r
514 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
515  EnchantBrokerFileOrdering_EmptyFile)\r
516 {\r
517         WriteStringToOrderingFile(GetEnchantConfigDir(),"");\r
518 \r
519         InitializeBroker();\r
520 }\r
521 \r
522 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
523  EnchantBrokerFileOrdering_NoLanguageTag)\r
524 {\r
525         WriteStringToOrderingFile(GetEnchantConfigDir(),":mock1,mock2");\r
526 \r
527         InitializeBroker();\r
528 }\r
529 \r
530 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
531  EnchantBrokerFileOrdering_NoColon)\r
532 {\r
533         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB  mock1,mock2");\r
534 \r
535         InitializeBroker();\r
536 }\r
537 \r
538 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
539  EnchantBrokerFileOrdering_NoProviders_DoesNotOverridePreviousOrdering_Mock1Then2)\r
540 {\r
541         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:");\r
542         WriteStringToOrderingFile(_tempPath, "en_GB:mock1,mock2");\r
543         SetUserRegistryConfigDir(_tempPath);\r
544 \r
545         InitializeBroker();\r
546 \r
547         CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
548 }\r
549 \r
550 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
551  EnchantBrokerFileOrdering_NoProviders_DoesNotOverridePreviousOrdering_Mock2Then1)\r
552 {\r
553         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:");\r
554         WriteStringToOrderingFile(_tempPath, "en_GB:mock2,mock1");\r
555         SetUserRegistryConfigDir(_tempPath);\r
556 \r
557         InitializeBroker();\r
558         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
559 }\r
560 \r
561 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
562 EnchantBrokerFileOrdering_ListedTwice_LastTakesPrecedence_Mock1ThenMock2)\r
563 {\r
564         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock2,mock1\nen_GB:mock1,mock2");\r
565          InitializeBroker();\r
566 \r
567          CHECK_EQUAL(Mock1ThenMock2, GetProviderOrder("en_GB"));\r
568 }\r
569 \r
570 TEST_FIXTURE(EnchantBrokerFileSetOrdering_TestFixture,\r
571 EnchantBrokerFileOrdering_ListedTwice_LastTakesPrecedence_Mock2ThenMock1)\r
572 {\r
573         WriteStringToOrderingFile(GetEnchantConfigDir(),"en_GB:mock1,mock2\nen_GB:mock2,mock1");\r
574         InitializeBroker();\r
575 \r
576         CHECK_EQUAL(Mock2ThenMock1, GetProviderOrder("en_GB"));\r
577 }\r