1242b3fe8d668e6660de1aa583963f3a1e31f505
[ffmpeg.git] / libavutil / tests / avstring.c
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg 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  * FFmpeg 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 FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #include <stdio.h>
20
21 #include "libavutil/common.h"
22 #include "libavutil/mem.h"
23 #include "libavutil/avstring.h"
24
25 int main(void)
26 {
27     int i;
28     char *fullpath;
29     static const char * const strings[] = {
30         "''",
31         "",
32         ":",
33         "\\",
34         "'",
35         "    ''    :",
36         "    ''  ''  :",
37         "foo   '' :",
38         "'foo'",
39         "foo     ",
40         "  '  foo  '  ",
41         "foo\\",
42         "foo':  blah:blah",
43         "foo\\:  blah:blah",
44         "foo\'",
45         "'foo :  '  :blahblah",
46         "\\ :blah",
47         "     foo",
48         "      foo       ",
49         "      foo     \\ ",
50         "foo ':blah",
51         " foo   bar    :   blahblah",
52         "\\f\\o\\o",
53         "'foo : \\ \\  '   : blahblah",
54         "'\\fo\\o:': blahblah",
55         "\\'fo\\o\\:':  foo  '  :blahblah"
56     };
57
58     printf("Testing av_get_token()\n");
59     for (i = 0; i < FF_ARRAY_ELEMS(strings); i++) {
60         const char *p = strings[i];
61         char *q;
62         printf("|%s|", p);
63         q = av_get_token(&p, ":");
64         printf(" -> |%s|", q);
65         printf(" + |%s|\n", p);
66         av_free(q);
67     }
68
69     printf("Testing av_append_path_component()\n");
70     #define TEST_APPEND_PATH_COMPONENT(path, component, expected) \
71         fullpath = av_append_path_component((path), (component)); \
72         printf("%s = %s\n", fullpath ? fullpath : "(null)", expected); \
73         av_free(fullpath);
74     TEST_APPEND_PATH_COMPONENT(NULL, NULL, "(null)")
75     TEST_APPEND_PATH_COMPONENT("path", NULL, "path");
76     TEST_APPEND_PATH_COMPONENT(NULL, "comp", "comp");
77     TEST_APPEND_PATH_COMPONENT("path", "comp", "path/comp");
78     TEST_APPEND_PATH_COMPONENT("path/", "comp", "path/comp");
79     TEST_APPEND_PATH_COMPONENT("path", "/comp", "path/comp");
80     TEST_APPEND_PATH_COMPONENT("path/", "/comp", "path/comp");
81     TEST_APPEND_PATH_COMPONENT("path/path2/", "/comp/comp2", "path/path2/comp/comp2");
82     return 0;
83 }