Tizen 2.1 base
[external/enchant.git] / unittests / provider / enchant_provider_get_registry_value_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-provider.h>\r
24 #include "../EnchantTestFixture.h"\r
25 \r
26 struct EnchantGetRegistryValue_TestFixture : EnchantTestFixture{\r
27     //Teardown\r
28     ~EnchantGetRegistryValue_TestFixture(){\r
29         ClearRegistryValue(HKEY_CURRENT_USER, L"Software\\Enchant\\Test", L"Value");\r
30         ClearRegistryValue(HKEY_LOCAL_MACHINE, L"Software\\Enchant\\Test", L"Value");\r
31     }\r
32 \r
33     void SetUserRegistryValue(const std::string& value)\r
34     {\r
35         SetRegistryValue(HKEY_CURRENT_USER, L"Software\\Enchant\\Test", L"Value", value);\r
36     }\r
37 \r
38     void SetMachineRegistryValue(const std::string& value)\r
39     {\r
40         SetRegistryValue(HKEY_LOCAL_MACHINE, L"Software\\Enchant\\Test", L"Value", value);\r
41     }\r
42 };\r
43 \r
44 \r
45 /**\r
46  * enchant_get_registry_value\r
47  * @prefix: Your category, such as "Ispell" or "Myspell"\r
48  * @key: The tag within your category that you're interested in\r
49  *\r
50  * Returns: the value if it exists and is not an empty string ("") or %null otherwise. Must be free'd.\r
51  *\r
52  * Choices:    User         Machine        Result\r
53  *             "hello"      "world"        "hello"\r
54  *             "hello"      NULL           "hello"\r
55  *             "hello"      ""             "hello"\r
56  *             ""           "world"        "world"\r
57  *             ""           NULL           ""\r
58  *             ""           ""             ""\r
59  *             NULL         "world"        "world"\r
60  *             NULL         NULL           NULL\r
61  *             NULL         ""             ""\r
62  *\r
63  * This API is private to the providers.\r
64  */\r
65 \r
66 /////////////////////////////////////////////////////////////////////////////\r
67 // Test Normal Operation\r
68 #ifdef _WIN32\r
69 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
70              GetRegistryValue_UserAndMachine_ValueFromUser)\r
71 {\r
72   SetUserRegistryValue("hello");\r
73   SetMachineRegistryValue("world");\r
74 \r
75   char * value = enchant_get_registry_value("Test", "Value");\r
76 \r
77   CHECK(value);\r
78   CHECK_EQUAL("hello", value);\r
79 \r
80   g_free(value);\r
81 }\r
82 \r
83 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
84              GetRegistryValue_UserOnly_ValueFromUser)\r
85 {\r
86   SetUserRegistryValue("hello");\r
87   char * value = enchant_get_registry_value("Test", "Value");\r
88 \r
89   CHECK(value);\r
90   CHECK_EQUAL("hello", value);\r
91 \r
92   g_free(value);\r
93 }\r
94 \r
95 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
96              GetRegistryValue_MachineOnly_ValueFromMachine)\r
97 {\r
98   SetMachineRegistryValue("world");\r
99   char * value = enchant_get_registry_value("Test", "Value");\r
100 \r
101   CHECK(value);\r
102   CHECK_EQUAL("world", value);\r
103 \r
104   g_free(value);\r
105 }\r
106 \r
107 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
108              GetRegistryValue_UserEmptyAndMachineSet_ValueFromMachine)\r
109 {\r
110   SetUserRegistryValue("");\r
111   SetMachineRegistryValue("world");\r
112 \r
113   char * value = enchant_get_registry_value("Test", "Value");\r
114 \r
115   CHECK(value);\r
116   CHECK_EQUAL("world", value);\r
117 \r
118   g_free(value);\r
119 }\r
120 \r
121 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
122              GetRegistryValue_UserEmptyAndMachineNotSet_Null)\r
123 {\r
124   SetUserRegistryValue("");\r
125 \r
126   char * value = enchant_get_registry_value("Test", "Value");\r
127 \r
128   CHECK(!value);\r
129 \r
130   g_free(value);\r
131 }\r
132 #endif\r
133 \r
134 \r
135 TEST(GetRegistryValue_None_NULL)\r
136 {\r
137   char * value = enchant_get_registry_value("Test", "Value");\r
138 \r
139   CHECK(value == NULL);\r
140 }\r
141 \r
142 \r
143 /////////////////////////////////////////////////////////////////////////////\r
144 // Test Error Conditions\r
145 TEST(GetRegistryValue_NullPrefix_NULL)\r
146 {\r
147   char * value = enchant_get_registry_value(NULL, "Value");\r
148 \r
149   CHECK(value == NULL);\r
150 }\r
151 \r
152 TEST(GetRegistryValue_NullKey_NULL)\r
153 {\r
154   char * value = enchant_get_registry_value("Test", NULL);\r
155 \r
156   CHECK(value == NULL);\r
157 }\r
158 \r
159 #ifdef _WIN32\r
160 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
161              GetRegistryValue_NullPrefix_Null)\r
162 {\r
163   SetUserRegistryValue("hello");\r
164 \r
165   char * value = enchant_get_registry_value(NULL, "Value");\r
166 \r
167   CHECK(value == NULL);\r
168 }\r
169 \r
170 TEST_FIXTURE(EnchantGetRegistryValue_TestFixture, \r
171              GetRegistryValue_NullKey_Null)\r
172 {\r
173   SetUserRegistryValue("hello");\r
174 \r
175   char * value = enchant_get_registry_value("Test", NULL);\r
176 \r
177   CHECK(value == NULL);\r
178 }\r
179 \r
180 #endif