|
ferencd@0
|
1 //
|
|
ferencd@0
|
2 // VMime library (http://www.vmime.org)
|
|
ferencd@0
|
3 // Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
|
|
ferencd@0
|
4 //
|
|
ferencd@0
|
5 // This program is free software; you can redistribute it and/or
|
|
ferencd@0
|
6 // modify it under the terms of the GNU General Public License as
|
|
ferencd@0
|
7 // published by the Free Software Foundation; either version 3 of
|
|
ferencd@0
|
8 // the License, or (at your option) any later version.
|
|
ferencd@0
|
9 //
|
|
ferencd@0
|
10 // This program is distributed in the hope that it will be useful,
|
|
ferencd@0
|
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
ferencd@0
|
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
ferencd@0
|
13 // General Public License for more details.
|
|
ferencd@0
|
14 //
|
|
ferencd@0
|
15 // You should have received a copy of the GNU General Public License along
|
|
ferencd@0
|
16 // with this program; if not, write to the Free Software Foundation, Inc.,
|
|
ferencd@0
|
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
ferencd@0
|
18 //
|
|
ferencd@0
|
19 // Linking this library statically or dynamically with other modules is making
|
|
ferencd@0
|
20 // a combined work based on this library. Thus, the terms and conditions of
|
|
ferencd@0
|
21 // the GNU General Public License cover the whole combination.
|
|
ferencd@0
|
22 //
|
|
ferencd@0
|
23
|
|
ferencd@0
|
24 #include "tests/testUtils.hpp"
|
|
ferencd@0
|
25
|
|
ferencd@0
|
26 #include "vmime/utility/path.hpp"
|
|
ferencd@0
|
27
|
|
ferencd@0
|
28
|
|
ferencd@0
|
29 VMIME_TEST_SUITE_BEGIN(utilityPathTest)
|
|
ferencd@0
|
30
|
|
ferencd@0
|
31 VMIME_TEST_LIST_BEGIN
|
|
ferencd@0
|
32 VMIME_TEST(testConstruct1)
|
|
ferencd@0
|
33 VMIME_TEST(testConstruct2)
|
|
ferencd@0
|
34 VMIME_TEST(testConstruct3)
|
|
ferencd@0
|
35 VMIME_TEST(testConstruct4)
|
|
ferencd@0
|
36
|
|
ferencd@0
|
37 VMIME_TEST(testAppendComponent)
|
|
ferencd@0
|
38
|
|
ferencd@0
|
39 VMIME_TEST(testOperatorDiv1)
|
|
ferencd@0
|
40 VMIME_TEST(testOperatorDiv2)
|
|
ferencd@0
|
41
|
|
ferencd@0
|
42 VMIME_TEST(testOperatorDivEqual1)
|
|
ferencd@0
|
43 VMIME_TEST(testOperatorDivEqual2)
|
|
ferencd@0
|
44
|
|
ferencd@0
|
45 VMIME_TEST(testGetParent)
|
|
ferencd@0
|
46
|
|
ferencd@0
|
47 VMIME_TEST(testComparison)
|
|
ferencd@0
|
48
|
|
ferencd@0
|
49 VMIME_TEST(testGetLastComponent)
|
|
ferencd@0
|
50
|
|
ferencd@0
|
51 VMIME_TEST(testIsDirectParentOf)
|
|
ferencd@0
|
52 VMIME_TEST(testIsParentOf)
|
|
ferencd@0
|
53 VMIME_TEST(testIsParentOf_EquivalentCharset)
|
|
ferencd@0
|
54
|
|
ferencd@0
|
55 VMIME_TEST(testRenameParent)
|
|
ferencd@0
|
56
|
|
ferencd@0
|
57 VMIME_TEST(testFromString)
|
|
ferencd@0
|
58 VMIME_TEST(testFromString_IgnoreLeadingOrTrailingSep)
|
|
ferencd@0
|
59 VMIME_TEST(testToString)
|
|
ferencd@0
|
60 VMIME_TEST_LIST_END
|
|
ferencd@0
|
61
|
|
ferencd@0
|
62
|
|
ferencd@0
|
63 typedef vmime::utility::path path;
|
|
ferencd@0
|
64 typedef vmime::utility::path::component comp;
|
|
ferencd@0
|
65
|
|
ferencd@0
|
66
|
|
ferencd@0
|
67 void testConstruct1()
|
|
ferencd@0
|
68 {
|
|
ferencd@0
|
69 VASSERT_EQ("1", true, path().isEmpty());
|
|
ferencd@0
|
70 VASSERT_EQ("2", 0, path().getSize());
|
|
ferencd@0
|
71 }
|
|
ferencd@0
|
72
|
|
ferencd@0
|
73 void testConstruct2()
|
|
ferencd@0
|
74 {
|
|
ferencd@0
|
75 path p(comp("foo"));
|
|
ferencd@0
|
76
|
|
ferencd@0
|
77 VASSERT_EQ("1", false, p.isEmpty());
|
|
ferencd@0
|
78 VASSERT_EQ("2", 1, p.getSize());
|
|
ferencd@0
|
79 VASSERT_EQ("3", "foo", p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
80 }
|
|
ferencd@0
|
81
|
|
ferencd@0
|
82 void testAppendComponent()
|
|
ferencd@0
|
83 {
|
|
ferencd@0
|
84 path p;
|
|
ferencd@0
|
85
|
|
ferencd@0
|
86 VASSERT_EQ("1", 0, p.getSize());
|
|
ferencd@0
|
87
|
|
ferencd@0
|
88 comp c("foo");
|
|
ferencd@0
|
89 p.appendComponent(c);
|
|
ferencd@0
|
90
|
|
ferencd@0
|
91 VASSERT_EQ("2", 1, p.getSize());
|
|
ferencd@0
|
92 VASSERT_EQ("3", c.getBuffer(), p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
93 }
|
|
ferencd@0
|
94
|
|
ferencd@0
|
95 void testConstruct3()
|
|
ferencd@0
|
96 {
|
|
ferencd@0
|
97 path p1;
|
|
ferencd@0
|
98 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
99 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
100
|
|
ferencd@0
|
101 path p2(p1);
|
|
ferencd@0
|
102
|
|
ferencd@0
|
103 VASSERT_EQ("1", 2, p2.getSize());
|
|
ferencd@0
|
104 VASSERT_EQ("2", "foo", p2.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
105 VASSERT_EQ("3", "bar", p2.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
106 }
|
|
ferencd@0
|
107
|
|
ferencd@0
|
108 void testConstruct4()
|
|
ferencd@0
|
109 {
|
|
ferencd@0
|
110 // Same as path::path(const component&)
|
|
ferencd@0
|
111 path p("foo");
|
|
ferencd@0
|
112
|
|
ferencd@0
|
113 VASSERT_EQ("1", false, p.isEmpty());
|
|
ferencd@0
|
114 VASSERT_EQ("2", 1, p.getSize());
|
|
ferencd@0
|
115 VASSERT_EQ("3", "foo", p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
116 }
|
|
ferencd@0
|
117
|
|
ferencd@0
|
118 void testOperatorDiv1()
|
|
ferencd@0
|
119 {
|
|
ferencd@0
|
120 path p1;
|
|
ferencd@0
|
121 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
122 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
123
|
|
ferencd@0
|
124 path p2;
|
|
ferencd@0
|
125 p2.appendComponent(comp("baz"));
|
|
ferencd@0
|
126
|
|
ferencd@0
|
127 path p3 = p1 / p2;
|
|
ferencd@0
|
128
|
|
ferencd@0
|
129 VASSERT_EQ("1", 3, p3.getSize());
|
|
ferencd@0
|
130 VASSERT_EQ("2", p1.getComponentAt(0).getBuffer(), p3.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
131 VASSERT_EQ("3", p1.getComponentAt(1).getBuffer(), p3.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
132 VASSERT_EQ("4", p2.getComponentAt(0).getBuffer(), p3.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
133 }
|
|
ferencd@0
|
134
|
|
ferencd@0
|
135 void testOperatorDiv2()
|
|
ferencd@0
|
136 {
|
|
ferencd@0
|
137 path p1;
|
|
ferencd@0
|
138 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
139 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
140
|
|
ferencd@0
|
141 comp c("baz");
|
|
ferencd@0
|
142
|
|
ferencd@0
|
143 path p2 = p1 / c;
|
|
ferencd@0
|
144
|
|
ferencd@0
|
145 VASSERT_EQ("1", 3, p2.getSize());
|
|
ferencd@0
|
146 VASSERT_EQ("2", p1.getComponentAt(0).getBuffer(), p2.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
147 VASSERT_EQ("3", p1.getComponentAt(1).getBuffer(), p2.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
148 VASSERT_EQ("4", c.getBuffer(), p2.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
149 }
|
|
ferencd@0
|
150
|
|
ferencd@0
|
151 void testOperatorDivEqual1()
|
|
ferencd@0
|
152 {
|
|
ferencd@0
|
153 path p1;
|
|
ferencd@0
|
154 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
155 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
156
|
|
ferencd@0
|
157 path p2;
|
|
ferencd@0
|
158 p2.appendComponent(comp("baz"));
|
|
ferencd@0
|
159
|
|
ferencd@0
|
160 path p3(p1);
|
|
ferencd@0
|
161 p3 /= p2;
|
|
ferencd@0
|
162
|
|
ferencd@0
|
163 VASSERT_EQ("1", 3, p3.getSize());
|
|
ferencd@0
|
164 VASSERT_EQ("2", p1.getComponentAt(0).getBuffer(), p3.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
165 VASSERT_EQ("3", p1.getComponentAt(1).getBuffer(), p3.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
166 VASSERT_EQ("4", p2.getComponentAt(0).getBuffer(), p3.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
167 }
|
|
ferencd@0
|
168
|
|
ferencd@0
|
169 void testOperatorDivEqual2()
|
|
ferencd@0
|
170 {
|
|
ferencd@0
|
171 path p1;
|
|
ferencd@0
|
172 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
173 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
174
|
|
ferencd@0
|
175 comp c("baz");
|
|
ferencd@0
|
176
|
|
ferencd@0
|
177 path p2(p1);
|
|
ferencd@0
|
178 p2 /= c;
|
|
ferencd@0
|
179
|
|
ferencd@0
|
180 VASSERT_EQ("1", 3, p2.getSize());
|
|
ferencd@0
|
181 VASSERT_EQ("2", p1.getComponentAt(0).getBuffer(), p2.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
182 VASSERT_EQ("3", p1.getComponentAt(1).getBuffer(), p2.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
183 VASSERT_EQ("4", c.getBuffer(), p2.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
184 }
|
|
ferencd@0
|
185
|
|
ferencd@0
|
186 void testGetParent()
|
|
ferencd@0
|
187 {
|
|
ferencd@0
|
188 path p1;
|
|
ferencd@0
|
189 path p1p = p1.getParent();
|
|
ferencd@0
|
190
|
|
ferencd@0
|
191 VASSERT_EQ("1", true, p1p.isEmpty());
|
|
ferencd@0
|
192
|
|
ferencd@0
|
193 path p2;
|
|
ferencd@0
|
194 p2.appendComponent(comp("foo"));
|
|
ferencd@0
|
195 p2.appendComponent(comp("bar"));
|
|
ferencd@0
|
196
|
|
ferencd@0
|
197 path p2p = p2.getParent();
|
|
ferencd@0
|
198
|
|
ferencd@0
|
199 VASSERT_EQ("2", 1, p2p.getSize());
|
|
ferencd@0
|
200 VASSERT_EQ("3", p2.getComponentAt(0).getBuffer(), p2p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
201 }
|
|
ferencd@0
|
202
|
|
ferencd@0
|
203 void testComparison()
|
|
ferencd@0
|
204 {
|
|
ferencd@0
|
205 path p1;
|
|
ferencd@0
|
206 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
207 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
208
|
|
ferencd@0
|
209 path p2;
|
|
ferencd@0
|
210 p2.appendComponent(comp("foo"));
|
|
ferencd@0
|
211 p2.appendComponent(comp("bar"));
|
|
ferencd@0
|
212
|
|
ferencd@0
|
213 path p3;
|
|
ferencd@0
|
214 p3.appendComponent(comp("foo"));
|
|
ferencd@0
|
215 p3.appendComponent(comp("bar"));
|
|
ferencd@0
|
216 p3.appendComponent(comp("baz"));
|
|
ferencd@0
|
217
|
|
ferencd@0
|
218 VASSERT_EQ("1", true, p1 == p2);
|
|
ferencd@0
|
219 VASSERT_EQ("2", false, p1 == p3);
|
|
ferencd@0
|
220
|
|
ferencd@0
|
221 VASSERT_EQ("3", false, p1 != p2);
|
|
ferencd@0
|
222 VASSERT_EQ("4", true, p1 != p3);
|
|
ferencd@0
|
223
|
|
ferencd@0
|
224 VASSERT_EQ("5", true, p3.getParent() == p1);
|
|
ferencd@0
|
225 }
|
|
ferencd@0
|
226
|
|
ferencd@0
|
227 void testGetLastComponent()
|
|
ferencd@0
|
228 {
|
|
ferencd@0
|
229 path p1;
|
|
ferencd@0
|
230 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
231 p1.appendComponent(comp("bar"));
|
|
ferencd@0
|
232 p1.appendComponent(comp("baz"));
|
|
ferencd@0
|
233
|
|
ferencd@0
|
234 VASSERT_EQ("1", "baz", p1.getLastComponent().getBuffer());
|
|
ferencd@0
|
235 VASSERT_EQ("2", "bar", p1.getParent().getLastComponent().getBuffer());
|
|
ferencd@0
|
236 VASSERT_EQ("3", "foo", p1.getParent().getParent().getLastComponent().getBuffer());
|
|
ferencd@0
|
237 }
|
|
ferencd@0
|
238
|
|
ferencd@0
|
239 void testIsDirectParentOf()
|
|
ferencd@0
|
240 {
|
|
ferencd@0
|
241 path p1;
|
|
ferencd@0
|
242 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
243
|
|
ferencd@0
|
244 path p2;
|
|
ferencd@0
|
245 p2.appendComponent(comp("foo"));
|
|
ferencd@0
|
246 p2.appendComponent(comp("bar"));
|
|
ferencd@0
|
247
|
|
ferencd@0
|
248 path p3;
|
|
ferencd@0
|
249 p3.appendComponent(comp("foo"));
|
|
ferencd@0
|
250 p3.appendComponent(comp("bar"));
|
|
ferencd@0
|
251 p3.appendComponent(comp("baz"));
|
|
ferencd@0
|
252
|
|
ferencd@0
|
253 VASSERT_EQ("1", true, p1.isDirectParentOf(p2));
|
|
ferencd@0
|
254 VASSERT_EQ("2", true, p2.isDirectParentOf(p3));
|
|
ferencd@0
|
255 VASSERT_EQ("3", false, p1.isDirectParentOf(p3));
|
|
ferencd@0
|
256 VASSERT_EQ("4", false, p2.isDirectParentOf(p1));
|
|
ferencd@0
|
257 }
|
|
ferencd@0
|
258
|
|
ferencd@0
|
259 void testIsParentOf()
|
|
ferencd@0
|
260 {
|
|
ferencd@0
|
261 path p1;
|
|
ferencd@0
|
262 p1.appendComponent(comp("foo"));
|
|
ferencd@0
|
263
|
|
ferencd@0
|
264 path p2;
|
|
ferencd@0
|
265 p2.appendComponent(comp("foo"));
|
|
ferencd@0
|
266 p2.appendComponent(comp("bar"));
|
|
ferencd@0
|
267
|
|
ferencd@0
|
268 path p3;
|
|
ferencd@0
|
269 p3.appendComponent(comp("foo"));
|
|
ferencd@0
|
270 p3.appendComponent(comp("bar"));
|
|
ferencd@0
|
271 p3.appendComponent(comp("baz"));
|
|
ferencd@0
|
272
|
|
ferencd@0
|
273 VASSERT_EQ("1", true, p1.isParentOf(p2));
|
|
ferencd@0
|
274 VASSERT_EQ("2", true, p2.isParentOf(p3));
|
|
ferencd@0
|
275 VASSERT_EQ("3", true, p1.isParentOf(p3));
|
|
ferencd@0
|
276 VASSERT_EQ("4", false, p2.isParentOf(p1));
|
|
ferencd@0
|
277 }
|
|
ferencd@0
|
278
|
|
ferencd@0
|
279 void testIsParentOf_EquivalentCharset()
|
|
ferencd@0
|
280 {
|
|
ferencd@0
|
281 path p1;
|
|
ferencd@0
|
282 p1.appendComponent(comp("foo", "us-ascii"));
|
|
ferencd@0
|
283
|
|
ferencd@0
|
284 path p2;
|
|
ferencd@0
|
285 p2.appendComponent(comp("foo", "utf-8"));
|
|
ferencd@0
|
286 p2.appendComponent(comp("bar"));
|
|
ferencd@0
|
287 p2.appendComponent(comp("baz"));
|
|
ferencd@0
|
288
|
|
ferencd@0
|
289 VASSERT_EQ("1", true, p1.isParentOf(p2));
|
|
ferencd@0
|
290 }
|
|
ferencd@0
|
291
|
|
ferencd@0
|
292 void testRenameParent()
|
|
ferencd@0
|
293 {
|
|
ferencd@0
|
294 path p1;
|
|
ferencd@0
|
295 p1.appendComponent(comp("a"));
|
|
ferencd@0
|
296 p1.appendComponent(comp("b"));
|
|
ferencd@0
|
297 p1.appendComponent(comp("c"));
|
|
ferencd@0
|
298 p1.appendComponent(comp("d"));
|
|
ferencd@0
|
299
|
|
ferencd@0
|
300 path p2;
|
|
ferencd@0
|
301 p2.appendComponent(comp("a"));
|
|
ferencd@0
|
302 p2.appendComponent(comp("b"));
|
|
ferencd@0
|
303
|
|
ferencd@0
|
304 path p3;
|
|
ferencd@0
|
305 p3.appendComponent(comp("x"));
|
|
ferencd@0
|
306 p3.appendComponent(comp("y"));
|
|
ferencd@0
|
307 p3.appendComponent(comp("z"));
|
|
ferencd@0
|
308
|
|
ferencd@0
|
309 path p(p1);
|
|
ferencd@0
|
310 p.renameParent(p2, p3);
|
|
ferencd@0
|
311
|
|
ferencd@0
|
312 VASSERT_EQ("1", 5, p.getSize());
|
|
ferencd@0
|
313 VASSERT_EQ("2", "x", p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
314 VASSERT_EQ("3", "y", p.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
315 VASSERT_EQ("4", "z", p.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
316 VASSERT_EQ("5", "c", p.getComponentAt(3).getBuffer());
|
|
ferencd@0
|
317 VASSERT_EQ("6", "d", p.getComponentAt(4).getBuffer());
|
|
ferencd@0
|
318 }
|
|
ferencd@0
|
319
|
|
ferencd@0
|
320 void testFromString()
|
|
ferencd@0
|
321 {
|
|
ferencd@0
|
322 path p = path::fromString("ab/cde/f", "/", vmime::charset("my-charset"));
|
|
ferencd@0
|
323
|
|
ferencd@0
|
324 VASSERT_EQ("count", 3, p.getSize());
|
|
ferencd@0
|
325 VASSERT_EQ("buffer1", "ab", p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
326 VASSERT_EQ("charset1", "my-charset", p.getComponentAt(0).getCharset().getName());
|
|
ferencd@0
|
327 VASSERT_EQ("buffer2", "cde", p.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
328 VASSERT_EQ("charset2", "my-charset", p.getComponentAt(1).getCharset().getName());
|
|
ferencd@0
|
329 VASSERT_EQ("buffer3", "f", p.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
330 VASSERT_EQ("charset3", "my-charset", p.getComponentAt(2).getCharset().getName());
|
|
ferencd@0
|
331 }
|
|
ferencd@0
|
332
|
|
ferencd@0
|
333 void testFromString_IgnoreLeadingOrTrailingSep()
|
|
ferencd@0
|
334 {
|
|
ferencd@0
|
335 path p = path::fromString("//ab/cde/f////", "/", vmime::charset("my-charset"));
|
|
ferencd@0
|
336
|
|
ferencd@0
|
337 VASSERT_EQ("count", 3, p.getSize());
|
|
ferencd@0
|
338 VASSERT_EQ("buffer1", "ab", p.getComponentAt(0).getBuffer());
|
|
ferencd@0
|
339 VASSERT_EQ("charset1", "my-charset", p.getComponentAt(0).getCharset().getName());
|
|
ferencd@0
|
340 VASSERT_EQ("buffer2", "cde", p.getComponentAt(1).getBuffer());
|
|
ferencd@0
|
341 VASSERT_EQ("charset2", "my-charset", p.getComponentAt(1).getCharset().getName());
|
|
ferencd@0
|
342 VASSERT_EQ("buffer3", "f", p.getComponentAt(2).getBuffer());
|
|
ferencd@0
|
343 VASSERT_EQ("charset3", "my-charset", p.getComponentAt(2).getCharset().getName());
|
|
ferencd@0
|
344 }
|
|
ferencd@0
|
345
|
|
ferencd@0
|
346 void testToString()
|
|
ferencd@0
|
347 {
|
|
ferencd@0
|
348 path p;
|
|
ferencd@0
|
349 p.appendComponent(comp("ab"));
|
|
ferencd@0
|
350 p.appendComponent(comp("cde"));
|
|
ferencd@0
|
351 p.appendComponent(comp("f"));
|
|
ferencd@0
|
352
|
|
ferencd@0
|
353 VASSERT_EQ("string", "ab/cde/f", p.toString("/", vmime::charset("us-ascii")));
|
|
ferencd@0
|
354 }
|
|
ferencd@0
|
355
|
|
ferencd@0
|
356 VMIME_TEST_SUITE_END
|
|
ferencd@0
|
357
|