Mercurial > code
annotate C++/tests/Ini/main.cpp @ 396:30788c97c58c
Merge branch 'master' of malikania.fr:code
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 28 Sep 2015 19:40:26 +0200 |
parents | 0b576ee64d45 |
children | d5ec1174b707 |
rev | line source |
---|---|
325
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.cpp -- main test file for Ini |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <iostream> |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <gtest/gtest.h> |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <Ini.h> |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 class BasicTest : public testing::Test { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 protected: |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 Ini m_ini; |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 public: |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 BasicTest() |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
31 : m_ini("Ini/simple.conf") |
325
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 }; |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 TEST_F(BasicTest, simple) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 ASSERT_EQ(1, static_cast<int>(m_ini.size())); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 TEST_F(BasicTest, iniOperators) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 try { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 ASSERT_EQ(3, static_cast<int>(m_ini[0].size())); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 ASSERT_EQ("general", m_ini[0].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 ASSERT_EQ("general", m_ini["general"].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 } catch (const std::exception &ex) { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 FAIL() << ex.what(); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 TEST_F(BasicTest, iniSectionOperators) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 try { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 // option1=1 (indexes) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 ASSERT_EQ("option1", m_ini[0][0].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 ASSERT_EQ("1", m_ini[0][0].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 // option1=1 (keys) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 ASSERT_EQ("option1", m_ini["general"]["option1"].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 ASSERT_EQ("1", m_ini["general"]["option1"].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 // option2 =2 (indexes) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 ASSERT_EQ("option2", m_ini[0][1].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 ASSERT_EQ("2", m_ini[0][1].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 // option2 =2 (keys) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 ASSERT_EQ("option2", m_ini["general"]["option2"].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 ASSERT_EQ("2", m_ini["general"]["option2"].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 // option3 = 3 (indexes) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 ASSERT_EQ("option3", m_ini[0][2].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 ASSERT_EQ("3", m_ini[0][2].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 // option3 = 3 (keys) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 ASSERT_EQ("option3", m_ini["general"]["option3"].key()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 ASSERT_EQ("3", m_ini["general"]["option3"].value()); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 } catch (const std::exception &ex) { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 FAIL() << ex.what(); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 } |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 |
326 | 84 /* -------------------------------------------------------- |
329 | 85 * Reserved tokens in words |
86 * -------------------------------------------------------- */ | |
87 | |
88 TEST(Tokens, iniReserved) | |
89 { | |
90 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
91 Ini ini("Ini/tokens.conf"); |
329 | 92 |
93 ASSERT_EQ("I have [brackets]", ini["tokens"]["bracket"].value()); | |
94 ASSERT_EQ("I have foo@at", ini["tokens"]["at"].value()); | |
95 } catch (const std::exception &ex) { | |
96 FAIL() << ex.what(); | |
97 } | |
98 } | |
99 | |
100 /* -------------------------------------------------------- | |
326 | 101 * Multiple definition |
102 * -------------------------------------------------------- */ | |
103 | |
104 class MultiTest : public testing::Test { | |
105 protected: | |
106 Ini m_ini; | |
107 | |
108 public: | |
109 MultiTest() | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
110 : m_ini("Ini/multi.conf") |
326 | 111 { |
112 } | |
113 }; | |
114 | |
115 TEST_F(MultiTest, defined) | |
116 { | |
117 ASSERT_EQ(2, static_cast<int>(m_ini.size())); | |
118 ASSERT_EQ("name", m_ini[0]["name"].key()); | |
119 ASSERT_EQ("Player", m_ini[0]["name"].value()); | |
120 ASSERT_EQ("version", m_ini[0]["version"].key()); | |
121 ASSERT_EQ("1.0", m_ini[0]["version"].value()); | |
122 ASSERT_EQ("name", m_ini[1]["name"].key()); | |
123 ASSERT_EQ("Subwinner", m_ini[1]["name"].value()); | |
124 ASSERT_EQ("version", m_ini[1]["version"].key()); | |
125 ASSERT_EQ("2.0", m_ini[1]["version"].value()); | |
126 } | |
127 | |
128 /* -------------------------------------------------------- | |
129 * Option with no values | |
130 * -------------------------------------------------------- */ | |
131 | |
132 class NoValueTest : public testing::Test { | |
133 protected: | |
134 Ini m_ini; | |
135 | |
136 public: | |
137 NoValueTest() | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
138 : m_ini("Ini/novalue.conf") |
326 | 139 { |
140 } | |
141 }; | |
142 | |
143 TEST_F(NoValueTest, isDefined) | |
144 { | |
145 ASSERT_EQ("plugins", m_ini[0].key()); | |
146 ASSERT_EQ("", m_ini["plugins"]["histedit"].value()); | |
147 ASSERT_EQ("", m_ini["plugins"]["highlight"].value()); | |
148 ASSERT_EQ("", m_ini["plugins"]["general"].value()); | |
149 } | |
325
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 |
327 | 151 /* -------------------------------------------------------- |
152 * Include tests | |
153 * -------------------------------------------------------- */ | |
154 | |
155 class IncludeTest : public testing::Test { | |
156 protected: | |
157 Ini m_ini; | |
158 | |
159 public: | |
160 IncludeTest() | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
161 : m_ini("Ini/includes.conf") |
327 | 162 { |
163 } | |
164 }; | |
165 | |
166 TEST_F(IncludeTest, all) | |
167 { | |
168 ASSERT_EQ(2, static_cast<int>(m_ini.size())); | |
169 | |
170 // from include | |
171 ASSERT_EQ("1", m_ini[0][0].value()); | |
172 ASSERT_EQ("2", m_ini[0][1].value()); | |
173 ASSERT_EQ("3", m_ini[0][2].value()); | |
174 | |
175 // from standard | |
176 ASSERT_EQ("false", m_ini[1][0].value()); | |
177 } | |
178 | |
329 | 179 /* -------------------------------------------------------- |
180 * Compact | |
181 * -------------------------------------------------------- */ | |
182 | |
183 TEST(Compact, test) | |
184 { | |
185 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
186 Ini ini("Ini/compact.conf"); |
329 | 187 |
188 ASSERT_EQ(2, static_cast<int>(ini.size())); | |
189 ASSERT_EQ("true", ini["general"]["verbose"].value()); | |
190 ASSERT_EQ("false", ini["general"]["foreground"].value()); | |
191 ASSERT_EQ("google.fr", ini["server"]["host"].value()); | |
192 } catch (const std::exception &ex) { | |
193 FAIL() << ex.what(); | |
194 } | |
195 } | |
196 | |
197 /* -------------------------------------------------------- | |
198 * Errors | |
199 * -------------------------------------------------------- */ | |
200 | |
201 TEST(Errors, nosection) | |
202 { | |
203 // An option outside a section is not allowed | |
204 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
205 Ini ini("Ini/error-nosection.conf"); |
329 | 206 |
207 FAIL() << "Failure expected, got success"; | |
208 } catch (const std::exception &ex) { | |
209 } | |
210 } | |
211 | |
212 TEST(Errors, lineassigment) | |
213 { | |
214 // The = assignment must be on the same line as the option key | |
215 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
216 Ini ini("Ini/error-lineassigment.conf"); |
329 | 217 |
218 FAIL() << "Failure expected, got success"; | |
219 } catch (const std::exception &ex) { | |
220 } | |
221 } | |
222 | |
223 TEST(Errors, badcomment) | |
224 { | |
225 // Comment can't between option-key and = assigment | |
226 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
227 Ini ini("Ini/error-badcomment.conf"); |
329 | 228 |
229 FAIL() << "Failure expected, got success"; | |
230 } catch (const std::exception &ex) { | |
231 } | |
232 } | |
233 | |
234 TEST(Errors, badsection) | |
235 { | |
236 // Bad section naming | |
237 try { | |
334
0b576ee64d45
* Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
238 Ini ini("Ini/error-badsection.conf"); |
329 | 239 |
240 FAIL() << "Failure expected, got success"; | |
241 } catch (const std::exception &ex) { | |
242 } | |
243 } | |
244 | |
325
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 int main(int argc, char **argv) |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 { |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 testing::InitGoogleTest(&argc, argv); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 return RUN_ALL_TESTS(); |
d52a69f9f029
Add Ini, brand new replacement for Parser
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 } |