efl

Форк
0
/
eina_test_str.c 
404 строки · 11.0 Кб
1
/* EINA - EFL data type library
2
 * Copyright (C) 2010 Gustavo Sverzut Barbieri
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.h>
26

27
#include "eina_suite.h"
28

29
EFL_START_TEST(str_simple)
30
{
31
   size_t i;
32
   char *str, *ret;
33
   const char *escape_ret = "\\ a\\\\x\\'";
34

35

36
   fail_if(!eina_str_has_prefix("", ""));
37

38
   fail_if(!eina_str_has_prefix("x", "x"));
39
   fail_if(!eina_str_has_prefix("xab", "x"));
40
   fail_if(!eina_str_has_prefix("xab", "xab"));
41

42
   fail_if(eina_str_has_prefix("x", "xab"));
43
   fail_if(eina_str_has_prefix("xab", "xyz"));
44
   fail_if(eina_str_has_prefix("", "x"));
45
   fail_if(eina_str_has_prefix("X", "x"));
46
   fail_if(eina_str_has_prefix("xAb", "X"));
47
   fail_if(eina_str_has_prefix("xAb", "xab"));
48

49

50
   fail_if(!eina_str_has_suffix("", ""));
51

52
   fail_if(!eina_str_has_suffix("x", "x"));
53
   fail_if(!eina_str_has_suffix("abx", "x"));
54
   fail_if(!eina_str_has_suffix("xab", "xab"));
55

56
   fail_if(eina_str_has_suffix("x", "xab"));
57
   fail_if(eina_str_has_suffix("xab", "xyz"));
58
   fail_if(eina_str_has_suffix("", "x"));
59
   fail_if(eina_str_has_suffix("X", "x"));
60
   fail_if(eina_str_has_suffix("aBx", "X"));
61
   fail_if(eina_str_has_suffix("xaB", "Xab"));
62

63

64
   fail_if(!eina_str_has_extension("", ""));
65

66
   fail_if(!eina_str_has_extension("x", "x"));
67
   fail_if(!eina_str_has_extension("abx", "x"));
68
   fail_if(!eina_str_has_extension("xab", "xab"));
69
   fail_if(!eina_str_has_extension("x", "X"));
70
   fail_if(!eina_str_has_extension("abx", "X"));
71
   fail_if(!eina_str_has_extension("xab", "Xab"));
72
   fail_if(!eina_str_has_extension("X", "X"));
73
   fail_if(!eina_str_has_extension("aBx", "X"));
74
   fail_if(!eina_str_has_extension("xaB", "Xab"));
75

76
   fail_if(eina_str_has_extension("x", "xab"));
77
   fail_if(eina_str_has_extension("xab", "xyz"));
78
   fail_if(eina_str_has_extension("", "x"));
79
   fail_if(eina_str_has_extension("x", "xAb"));
80
   fail_if(eina_str_has_extension("xab", "xYz"));
81
   fail_if(eina_str_has_extension("", "x"));
82

83
   fail_if(eina_streq("xab", NULL));
84
   fail_if(eina_streq(NULL, "xab"));
85
   fail_if(eina_streq("x", "xab"));
86
   fail_if(eina_streq("xab", "XAB"));
87
   fail_if(eina_streq("x", "x "));
88
   fail_if(!eina_streq("xab", "xab"));
89

90
   fail_if(eina_strlen_bounded("abc", 4) != strlen("abc"));
91
   fail_if(eina_strlen_bounded("abc", 2) != (size_t)-1);
92

93
   str = malloc(sizeof(char) * 4);
94
   strcpy(str, "bSd");
95
   eina_str_tolower(&str);
96
   fail_if(strcmp(str, "bsd") != 0);
97
   eina_str_toupper(&str);
98
   fail_if(strcmp(str, "BSD") != 0);
99
   free(str);
100

101
   str = malloc(sizeof(char) * 8);
102
   strcpy(str, " a\\x'");
103
   ret = eina_str_escape(str);
104
   fail_if(strlen(ret) != strlen(escape_ret));
105
   for (i = 0; i <= strlen(ret); i++)
106
     fail_if(ret[i] != escape_ret[i]);
107
   free(str);
108
   free(ret);
109

110
   str = malloc(sizeof(char) * 4);
111
   strcpy(str, "a\t ");
112
   ret = eina_str_escape(str);
113
   fail_if(!eina_streq(ret, "a\\t\\ "));
114
   free(str);
115
   free(ret);
116

117
}
118
EFL_END_TEST
119

120
EFL_START_TEST(str_split)
121
{
122
   char **result;
123
   unsigned int elements;
124
   char *str;
125

126

127
   result = eina_str_split_full(NULL, ":", 1, &elements);
128
        fail_if(result != NULL);
129
        fail_if(elements != 0);
130

131
   result = eina_str_split_full("nomatch", NULL, 1, &elements);
132
        fail_if(result != NULL);
133
        fail_if(elements != 0);
134

135
   result = eina_str_split_full("match:match", ":", 1, &elements);
136
        fail_if(result == NULL);
137
        fail_if(elements != 1);
138
        fail_if(strcmp(result[0], "match:match") != 0);
139
        free(result[0]);
140
        free(result);
141

142
   result = eina_str_split_full("match:match:nomatch:nomatch", ":", 3, &elements);
143
        fail_if(result == NULL);
144
        fail_if(elements != 3);
145
        fail_if(strcmp(result[0], "match") != 0);
146
        fail_if(strcmp(result[1], "match") != 0);
147
        fail_if(strcmp(result[2], "nomatch:nomatch") != 0);
148
        free(result[0]);
149
        free(result);
150

151
   result = eina_str_split_full("nomatch", "", -1, &elements);
152
        fail_if(result != NULL);
153
        fail_if(elements != 0);
154

155
   result = eina_str_split_full("nomatch", "x", -1, &elements);
156
        fail_if(result == NULL);
157
        fail_if(elements != 1);
158
        fail_if(strcmp(result[0], "nomatch") != 0);
159
        fail_if(result[1]);
160
        free(result[0]);
161
        free(result);
162

163
   result = eina_str_split_full("nomatch", "xyz", -1, &elements);
164
        fail_if(result == NULL);
165
        fail_if(elements != 1);
166
        fail_if(strcmp(result[0], "nomatch") != 0);
167
        fail_if(result[1]);
168
        free(result[0]);
169
        free(result);
170

171
   result = eina_str_split_full("match:match:match", ":", -1, &elements);
172
        fail_if(result == NULL);
173
        fail_if(elements != 3);
174
   for (elements = 0; elements < 3 - 1; elements++)
175
     fail_if(strcmp(result[elements], "match") != 0);
176
   fail_if(result[3]);
177
      free(result[0]);
178
      free(result);
179

180
   str = malloc(sizeof(char) * 1024);
181
   str[0] = 0;
182
   for (elements = 0; elements < 300; elements++)
183
     strcat(str, "ma:");
184
   strcat(str, "ma");
185
   result = eina_str_split_full(str, ":", -1, &elements);
186
        fail_if(result == NULL);
187
        fail_if(elements != 301);
188
        free(result[0]);
189
        free(result);
190
   free(str);
191

192
   result = eina_str_split_full("a:b:c", ":", -1, &elements);
193
        fail_if(result == NULL);
194
        fail_if(elements != 3);
195
        fail_if(strcmp(result[0], "a") != 0);
196
        fail_if(strcmp(result[1], "b") != 0);
197
        fail_if(strcmp(result[2], "c") != 0);
198
        fail_if(result[3]);
199
        free(result[0]);
200
        free(result);
201

202
   result = eina_str_split_full("a:b:", ":", -1, &elements);
203
        fail_if(result == NULL);
204
        fail_if(elements != 3);
205
        fail_if(strcmp(result[0], "a") != 0);
206
        fail_if(strcmp(result[1], "b") != 0);
207
        fail_if(strcmp(result[2], "") != 0);
208
        fail_if(result[3]);
209
        free(result[0]);
210
        free(result);
211

212
   result = eina_str_split_full(":b:c", ":", -1, &elements);
213
        fail_if(result == NULL);
214
        fail_if(elements != 3);
215
        fail_if(strcmp(result[0], "") != 0);
216
        fail_if(strcmp(result[1], "b") != 0);
217
        fail_if(strcmp(result[2], "c") != 0);
218
        fail_if(result[3]);
219
        free(result[0]);
220
        free(result);
221

222
   result = eina_str_split_full(":", ":", -1, &elements);
223
        fail_if(result == NULL);
224
        fail_if(elements != 2);
225
        fail_if(strcmp(result[0], "") != 0);
226
        fail_if(strcmp(result[1], "") != 0);
227
        fail_if(result[2]);
228
        free(result[0]);
229
        free(result);
230

231
   result = eina_str_split_full("a", "!!!!!!!!!", -1, &elements);
232
        fail_if(result == NULL);
233
        fail_if(elements != 1);
234
        fail_if(strcmp(result[0], "a") != 0);
235
        fail_if(result[1]);
236
        free(result[0]);
237
        free(result);
238

239
   result = eina_str_split_full("aaba", "ab", -1, &elements);
240
        fail_if(result == NULL);
241
        fail_if(elements != 2);
242
        fail_if(strcmp(result[0], "a") != 0);
243
        fail_if(strcmp(result[1], "a") != 0);
244
        fail_if(result[2]);
245
        free(result[0]);
246
        free(result);
247

248
}
249
EFL_END_TEST
250

251
EFL_START_TEST(str_lcat_lcpy)
252
{
253
   char dst[9];
254
   size_t ret;
255
   size_t ds = (sizeof(dst) / sizeof(char));
256

257

258
   dst[0] = '\0';
259

260
   ret = eina_strlcat(dst, "cat1", ds);
261
        fail_if(ret != 4);
262
        fail_if(strcmp(dst, "cat1") != 0);
263

264
   ret = eina_strlcat(dst, NULL, ds);
265
        fail_if(ret != 4);
266
        fail_if(strcmp(dst, "cat1") != 0);
267

268
   ret = eina_strlcat(dst, "cat234", ds);
269
        fail_if(ret != (ds - 1 + 2));
270
        fail_if(strcmp(dst, "cat1cat2") != 0);
271

272
   ret = eina_strlcat(dst, "cat3", ds);
273
        fail_if(ret != (ds - 1 + 4));
274
        fail_if(strcmp(dst, "cat1cat2") != 0);
275

276
   ret = eina_strlcat(dst, "cat3", ds - 1);
277
        fail_if(ret != (ds - 1 + 4));
278
        fail_if(strcmp(dst, "cat1cat2") != 0);
279

280
   ret = eina_strlcpy(dst, "copycopy", ds);
281
        fail_if(ret != 8);
282
        fail_if(strcmp(dst, "copycopy") != 0);
283

284
   ret = eina_strlcpy(dst, "copy2copy2", ds);
285
        fail_if(ret != 10);
286
        fail_if(strcmp(dst, "copy2cop") != 0);
287

288
}
289
EFL_END_TEST
290

291
EFL_START_TEST(str_join_len)
292
{
293
   char dst[9];
294
   size_t ret;
295
   size_t ds = (sizeof(dst) / sizeof(char));
296

297

298
   dst[0] = '\0';
299

300
   ret = eina_str_join_len(dst, ds, '#', "ab", 2, "cde", 3);
301
        fail_if(ret != 6);
302
        fail_if(strcmp(dst, "ab#cde") != 0);
303

304
   ret = eina_str_join_len(dst, ds, '#', "abcdefghi", 9, "cde", 3);
305
        fail_if(ret != 13);
306
        fail_if(strcmp(dst, "abcdefgh") != 0);
307

308
   ret = eina_str_join_len(dst, ds, '#', "abcdefgh", 8, "cde", 3);
309
        fail_if(ret != 12);
310
        fail_if(strcmp(dst, "abcdefgh") != 0);
311

312
   ret = eina_str_join_len(dst, ds, '#', "abcd", 4, "efgh", 4);
313
        fail_if(ret != 9);
314
        fail_if(strcmp(dst, "abcd#efg") != 0);
315

316
}
317
EFL_END_TEST
318

319
EFL_START_TEST(str_memdup)
320
{
321
   struct temp {
322
      int i;
323
      char *s;
324
      double d;
325
   } t1,*t2;
326
   unsigned char buf[7];
327
   unsigned char *temp_buf;
328

329

330
   t1.i = 1234;
331
   t1.s = "hello";
332
   t1.d = 123.456;
333

334
   t2 = (struct temp *)eina_memdup((unsigned char *)&t1, sizeof(struct temp), EINA_TRUE);
335
   fail_if(t2->i != t1.i);
336
   fail_if(strcmp(t2->s,t1.s) != 0);
337
   fail_if(!EINA_FLT_EQ(t2->d, t1.d));
338
   free(t2);
339

340
   memcpy(buf, "aaabbb", 6);
341
   temp_buf = eina_memdup(buf, 6, EINA_TRUE);
342
   fail_if(strcmp((char *) temp_buf, "aaabbb") != 0);
343
   free(temp_buf);
344

345
}
346
EFL_END_TEST
347

348
EFL_START_TEST(str_strftime)
349
{
350
   time_t curr_time;
351
   struct tm *info;
352
   char *buf;
353

354
   curr_time = time(NULL);
355
   info = localtime(&curr_time);
356

357
   buf = eina_strftime("%I:%M%p", info);
358
   fail_if(buf == NULL);
359
   free(buf);
360

361
}
362
EFL_END_TEST
363

364
#ifdef HAVE_ICONV
365
EFL_START_TEST(str_convert)
366
{
367
   char *utf8 = "\xc3\xa9\xc3\xa1\xc3\xba\xc3\xad\xc3\xa8\xc3\xa0\xc3\xb9\xc3\xac\xc3\xab\xc3\xa4\xc3\xbc\xc3\xaf";
368
   char *utf16 = "\xe9\x0\xe1\x0\xfa\x0\xed\x0\xe8\x0\xe0\x0\xf9\x0\xec\x0\xeb\x0\xe4\x0\xfc\x0\xef\x0";
369
   char *ret;
370
   size_t ret_sz;
371
   int i;
372

373

374
   ret = eina_str_convert("UTF-8", "UTF-16LE", utf8);
375
        fail_if(ret == NULL);
376
        for( i=0; i<24; i++)
377
          fail_if(ret[i] != utf16[i]);
378

379
   free(ret);
380

381
   ret = eina_str_convert_len("UTF-8", "UTF-16LE", utf8, 24, &ret_sz);
382
        fail_if(ret == NULL);
383
        fail_if(ret_sz != 24);
384
        for( i=0; i<24; i++)
385
          fail_if(ret[i] != utf16[i]);
386
   free(ret);
387

388
}
389
EFL_END_TEST
390
#endif
391

392
void
393
eina_test_str(TCase *tc)
394
{
395
   tcase_add_test(tc, str_simple);
396
   tcase_add_test(tc, str_split);
397
   tcase_add_test(tc, str_lcat_lcpy);
398
   tcase_add_test(tc, str_join_len);
399
   tcase_add_test(tc, str_memdup);
400
   tcase_add_test(tc, str_strftime);
401
#ifdef HAVE_ICONV
402
   tcase_add_test(tc, str_convert);
403
#endif
404
}
405

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.