aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src/tests/eina_test_strbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src/tests/eina_test_strbuf.c')
-rw-r--r--libraries/eina/src/tests/eina_test_strbuf.c449
1 files changed, 449 insertions, 0 deletions
diff --git a/libraries/eina/src/tests/eina_test_strbuf.c b/libraries/eina/src/tests/eina_test_strbuf.c
new file mode 100644
index 0000000..2205e3e
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_strbuf.c
@@ -0,0 +1,449 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Sebastian Dransfeld
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28START_TEST(strbuf_simple)
29{
30 Eina_Strbuf *buf;
31 char *txt;
32#define TEXT \
33 "This test should be so long that it is longer than the initial size of strbuf"
34
35 eina_init();
36
37 buf = eina_strbuf_new();
38 fail_if(!buf);
39
40 eina_strbuf_append(buf, TEXT);
41 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
42 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
43 eina_strbuf_append(buf, TEXT);
44 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
45 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
46 txt = eina_strbuf_string_steal(buf);
47 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
48 fail_if(strcmp(txt, TEXT TEXT));
49 free(txt);
50 fail_if(eina_strbuf_length_get(buf) != 0);
51 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
52 eina_strbuf_append(buf, TEXT);
53 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
54 eina_strbuf_reset(buf);
55 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
56 fail_if(eina_strbuf_length_get(buf) != 0);
57 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
58
59 eina_strbuf_free(buf);
60
61 eina_shutdown();
62#undef TEXT
63}
64END_TEST
65
66START_TEST(strbuf_manage_simple)
67{
68 Eina_Strbuf *buf;
69 char *txt;
70#define TEXT \
71 "This test should be so long that it is longer than the initial size of strbuf"
72
73 eina_init();
74
75 txt = strdup(TEXT);
76
77 buf = eina_strbuf_manage_new(txt);
78 fail_if(!buf);
79
80 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
81 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
82 eina_strbuf_append(buf, TEXT);
83 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
84 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
85 txt = eina_strbuf_string_steal(buf);
86 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
87 fail_if(strcmp(txt, TEXT TEXT));
88 free(txt);
89 fail_if(eina_strbuf_length_get(buf) != 0);
90 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
91 eina_strbuf_append(buf, TEXT);
92 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
93 eina_strbuf_reset(buf);
94 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
95 fail_if(eina_strbuf_length_get(buf) != 0);
96 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
97
98 eina_strbuf_free(buf);
99
100 eina_shutdown();
101#undef TEXT
102}
103END_TEST
104
105START_TEST(strbuf_remove)
106{
107 Eina_Strbuf *buf;
108
109 eina_init();
110
111 buf = eina_strbuf_new();
112 fail_if(!buf);
113
114 eina_strbuf_append(buf, "123 456 789 abc");
115 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
116 eina_strbuf_remove(buf, 0, 4);
117 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
118 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 abc"));
119 eina_strbuf_remove(buf, 8, 1000);
120 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
121 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 "));
122 eina_strbuf_remove(buf, 7, eina_strbuf_length_get(buf));
123 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
124 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789"));
125 eina_strbuf_remove(buf, 2, 4);
126 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
127 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
128 eina_strbuf_remove(buf, 4, 1);
129 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
130 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
131 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf));
132 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
133 fail_if(strcmp(eina_strbuf_string_get(buf), ""));
134
135#define TEXT \
136 "This test should be so long that it is longer than the initial size of strbuf"
137 eina_strbuf_append(buf, TEXT TEXT);
138 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
139 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf) - 1);
140 fail_if(strcmp(eina_strbuf_string_get(buf), "f"));
141#undef TEXT
142
143 eina_strbuf_free(buf);
144
145 eina_shutdown();
146}
147END_TEST
148
149START_TEST(strbuf_append)
150{
151 Eina_Strbuf *buf;
152
153 eina_init();
154
155 buf = eina_strbuf_new();
156 fail_if(!buf);
157
158 eina_strbuf_append(buf, "abc");
159 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
160 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
161 eina_strbuf_reset(buf);
162
163 eina_strbuf_append_escaped(buf, "abc");
164 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
165 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
166 eina_strbuf_reset(buf);
167
168 eina_strbuf_append_escaped(buf, "abc '\\");
169 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
170 fail_if(strcmp(eina_strbuf_string_get(buf), "abc\\ \\'\\\\"));
171 eina_strbuf_reset(buf);
172
173 eina_strbuf_append_n(buf, "abc", 2);
174 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
175 fail_if(strcmp(eina_strbuf_string_get(buf), "ab"));
176 eina_strbuf_reset(buf);
177
178 eina_strbuf_append_char(buf, 'a');
179 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
180 fail_if(strcmp(eina_strbuf_string_get(buf), "a"));
181 eina_strbuf_reset(buf);
182
183 eina_strbuf_append_length(buf, "something", strlen("something"));
184 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
185 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
186 eina_strbuf_reset(buf);
187
188 eina_strbuf_append_length(buf, "somethingELSE", strlen("something"));
189 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
190 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
191 eina_strbuf_reset(buf);
192
193 eina_strbuf_free(buf);
194
195 eina_shutdown();
196}
197END_TEST
198
199START_TEST(strbuf_insert)
200{
201 Eina_Strbuf *buf;
202
203 eina_init();
204
205 buf = eina_strbuf_new();
206 fail_if(!buf);
207
208 eina_strbuf_insert(buf, "abc", 10);
209 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
210 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
211
212 eina_strbuf_insert(buf, "123", 0);
213 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
214 fail_if(strcmp(eina_strbuf_string_get(buf), "123abc"));
215
216 eina_strbuf_insert(buf, "xyz", eina_strbuf_length_get(buf));
217 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
218 fail_if(strcmp(eina_strbuf_string_get(buf), "123abcxyz"));
219
220 eina_strbuf_insert(buf, "xyz", 1);
221 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
222 fail_if(strcmp(eina_strbuf_string_get(buf), "1xyz23abcxyz"));
223
224 eina_strbuf_insert_n(buf, "ABCDEF", 2, 1);
225 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
226 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABxyz23abcxyz"));
227
228 eina_strbuf_insert_n(buf, "EINA", 2, 3);
229 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
230 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABEIxyz23abcxyz"));
231
232 eina_strbuf_insert_escaped(buf, "678", 3);
233 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
234 fail_if(strncmp(eina_strbuf_string_get(buf) + 3, "678", 3));
235
236 eina_strbuf_insert_escaped(buf, "089 '\\", 9);
237 fail_if(strlen(eina_strbuf_string_get(
238 buf)) != eina_strbuf_length_get(buf));
239 fail_if(strncmp(eina_strbuf_string_get(buf) + 9,
240 "089\\ \\'\\\\",
241 strlen("089\\ \\'\\\\")));
242 eina_strbuf_reset(buf);
243
244 eina_strbuf_free(buf);
245
246 eina_shutdown();
247}
248END_TEST
249
250START_TEST(strbuf_replace)
251{
252 Eina_Strbuf *buf;
253
254 eina_init();
255
256 buf = eina_strbuf_new();
257 fail_if(!buf);
258
259 eina_strbuf_append(buf, "aaa");
260 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
261 fail_if(strcmp(eina_strbuf_string_get(buf), "aaa"));
262
263 fail_if(!eina_strbuf_replace(buf, "a", "b", 1));
264 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
265 fail_if(strcmp(eina_strbuf_string_get(buf), "baa"));
266
267 fail_if(eina_strbuf_replace_all(buf, "a", "b") != 2);
268 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
269 fail_if(strcmp(eina_strbuf_string_get(buf), "bbb"));
270
271 fail_if(!eina_strbuf_replace(buf, "b", "cc", 2));
272 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
273 fail_if(strcmp(eina_strbuf_string_get(buf), "bccb"));
274
275 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 2);
276 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
277 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
278
279 fail_if(eina_strbuf_replace(buf, "c", "aa", 0));
280 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
281 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
282
283 fail_if(eina_strbuf_replace(buf, "c", "aa", 2));
284 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
285 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
286
287 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 0);
288 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
289 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
290
291
292 eina_strbuf_free(buf);
293
294 eina_shutdown();
295}
296END_TEST
297
298START_TEST(strbuf_realloc)
299{
300 Eina_Strbuf *buf;
301 char pattern[1024 * 16];
302 unsigned int i;
303 size_t sz;
304
305 for (i = 0; i < sizeof(pattern) - 1; i++)
306 pattern[i] = 'a' + (i % 26);
307 pattern[i] = '\0';
308
309 eina_init();
310
311 buf = eina_strbuf_new();
312 fail_if(!buf);
313
314 sz = 0;
315
316 eina_strbuf_append_length(buf, pattern, 1);
317 fail_if(eina_strbuf_length_get(buf) != sz + 1);
318 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 1));
319 sz += 1;
320
321 eina_strbuf_append_length(buf, pattern, 32);
322 fail_if(eina_strbuf_length_get(buf) != sz + 32);
323 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 32));
324 sz += 32;
325
326 eina_strbuf_append_length(buf, pattern, 64);
327 fail_if(eina_strbuf_length_get(buf) != sz + 64);
328 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 64));
329 sz += 64;
330
331 eina_strbuf_append_length(buf, pattern, 128);
332 fail_if(eina_strbuf_length_get(buf) != sz + 128);
333 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 128));
334 sz += 128;
335
336 eina_strbuf_append_length(buf, pattern, 4096);
337 fail_if(eina_strbuf_length_get(buf) != sz + 4096);
338 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 4096));
339 sz += 4096;
340
341 eina_strbuf_append_length(buf, pattern, sizeof(pattern) - 1);
342 fail_if(eina_strbuf_length_get(buf) != sz + sizeof(pattern) - 1);
343 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, sizeof(pattern) -
344 1));
345 sz += sizeof(pattern) - 1;
346
347
348 eina_strbuf_remove(buf, 1024, 1024 + 1234);
349 fail_if(eina_strbuf_length_get(buf) != sz - 1234);
350 sz -= 1234;
351
352 eina_strbuf_remove(buf, 0, 0 + 8192);
353 fail_if(eina_strbuf_length_get(buf) != sz - 8192);
354 sz -= 8192;
355
356 eina_strbuf_remove(buf, 0, 0 + 32);
357 fail_if(eina_strbuf_length_get(buf) != sz - 32);
358 sz -= 32;
359
360
361 eina_strbuf_free(buf);
362
363 eina_shutdown();
364}
365END_TEST
366
367START_TEST(strbuf_append_realloc)
368{
369 Eina_Strbuf *buf;
370 const size_t runs = 40960;
371 const char target_pattern[] = "stringstrsstr";
372 const char *str;
373 size_t i, target_pattern_size;
374
375 eina_init();
376
377 buf = eina_strbuf_new();
378 fail_if(!buf);
379
380 for (i = 0; i < runs; i++)
381 {
382 fail_if(!eina_strbuf_append(buf, "string"));
383 fail_if(!eina_strbuf_append_n(buf, "string", 3));
384 fail_if(!eina_strbuf_append_char(buf, 's'));
385 fail_if(!eina_strbuf_append_length(buf, "string", 3));
386 }
387
388 target_pattern_size = strlen(target_pattern);
389 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
390
391 str = eina_strbuf_string_get(buf);
392 fail_if(str == NULL);
393 for (i = 0; i < runs; i++, str += target_pattern_size)
394 fail_if(memcmp(str, target_pattern, target_pattern_size));
395
396 eina_strbuf_free(buf);
397
398 eina_shutdown();
399}
400END_TEST
401
402START_TEST(strbuf_prepend_realloc)
403{
404 Eina_Strbuf *buf;
405 const size_t runs = 40960;
406 const char target_pattern[] = "strsstrstring";
407 const char *str;
408 size_t i, target_pattern_size;
409
410 eina_init();
411
412 buf = eina_strbuf_new();
413 fail_if(!buf);
414
415 for (i = 0; i < runs; i++)
416 {
417 fail_if(!eina_strbuf_prepend(buf, "string"));
418 fail_if(!eina_strbuf_prepend_n(buf, "string", 3));
419 fail_if(!eina_strbuf_prepend_char(buf, 's'));
420 fail_if(!eina_strbuf_prepend_length(buf, "string", 3));
421 }
422
423 target_pattern_size = strlen(target_pattern);
424 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
425
426 str = eina_strbuf_string_get(buf);
427 fail_if(str == NULL);
428 for (i = 0; i < runs; i++, str += target_pattern_size)
429 fail_if(memcmp(str, target_pattern, target_pattern_size));
430
431 eina_strbuf_free(buf);
432
433 eina_shutdown();
434}
435END_TEST
436
437void
438eina_test_strbuf(TCase *tc)
439{
440 tcase_add_test(tc, strbuf_simple);
441 tcase_add_test(tc, strbuf_remove);
442 tcase_add_test(tc, strbuf_append);
443 tcase_add_test(tc, strbuf_insert);
444 tcase_add_test(tc, strbuf_replace);
445 tcase_add_test(tc, strbuf_realloc);
446 tcase_add_test(tc, strbuf_append_realloc);
447 tcase_add_test(tc, strbuf_prepend_realloc);
448 tcase_add_test(tc, strbuf_manage_simple);
449}