]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/libarchive/libarchive/test/test_archive_cmdline.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / libarchive / libarchive / test / test_archive_cmdline.c
1 /*-
2  * Copyright (c) 2012 Michihiro NAKAJIMA
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "test.h"
27 __FBSDID("$FreeBSD$");
28
29 #define __LIBARCHIVE_TEST
30 #include "archive_cmdline_private.h"
31
32 DEFINE_TEST(test_archive_cmdline)
33 {
34         struct archive_cmdline *cl;
35
36         /* Command name only. */
37         assert((cl = __archive_cmdline_allocate()) != NULL);
38         if (cl == NULL)
39                 return;
40         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "gzip"));
41         assertEqualInt(1, cl->argc);
42         assertEqualString("gzip", cl->path);
43         assertEqualString("gzip", cl->argv[0]);
44         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
45
46         assert((cl = __archive_cmdline_allocate()) != NULL);
47         if (cl == NULL)
48                 return;
49         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "gzip "));
50         assertEqualInt(1, cl->argc);
51         failure("path should not include a space character");
52         assertEqualString("gzip", cl->path);
53         failure("arg0 should not include a space character");
54         assertEqualString("gzip", cl->argv[0]);
55         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
56
57         assert((cl = __archive_cmdline_allocate()) != NULL);
58         if (cl == NULL)
59                 return;
60         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl,
61             "/usr/bin/gzip "));
62         assertEqualInt(1, cl->argc);
63         failure("path should be a full path");
64         assertEqualString("/usr/bin/gzip", cl->path);
65         failure("arg0 should not be a full path");
66         assertEqualString("gzip", cl->argv[0]);
67         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
68
69         /* A command line includes space characer. */
70         assert((cl = __archive_cmdline_allocate()) != NULL);
71         if (cl == NULL)
72                 return;
73         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "\"gzip \""));
74         assertEqualInt(1, cl->argc);
75         failure("path should include a space character");
76         assertEqualString("gzip ", cl->path);
77         failure("arg0 should include a space character");
78         assertEqualString("gzip ", cl->argv[0]);
79         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
80
81         /* A command line includes space characer: pattern 2.*/
82         assert((cl = __archive_cmdline_allocate()) != NULL);
83         if (cl == NULL)
84                 return;
85         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "\"gzip \"x"));
86         assertEqualInt(1, cl->argc);
87         failure("path should include a space character");
88         assertEqualString("gzip x", cl->path);
89         failure("arg0 should include a space character");
90         assertEqualString("gzip x", cl->argv[0]);
91         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
92
93         /* A command line includes space characer: pattern 3.*/
94         assert((cl = __archive_cmdline_allocate()) != NULL);
95         if (cl == NULL)
96                 return;
97         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl,
98             "\"gzip \"x\" s \""));
99         assertEqualInt(1, cl->argc);
100         failure("path should include a space character");
101         assertEqualString("gzip x s ", cl->path);
102         failure("arg0 should include a space character");
103         assertEqualString("gzip x s ", cl->argv[0]);
104         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
105
106         /* A command line includes space characer: pattern 4.*/
107         assert((cl = __archive_cmdline_allocate()) != NULL);
108         if (cl == NULL)
109                 return;
110         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl,
111             "\"gzip\\\" \""));
112         assertEqualInt(1, cl->argc);
113         failure("path should include a space character");
114         assertEqualString("gzip\" ", cl->path);
115         failure("arg0 should include a space character");
116         assertEqualString("gzip\" ", cl->argv[0]);
117         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
118
119         /* A command name with a argument. */
120         assert((cl = __archive_cmdline_allocate()) != NULL);
121         if (cl == NULL)
122                 return;
123         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "gzip -d"));
124         assertEqualInt(2, cl->argc);
125         assertEqualString("gzip", cl->path);
126         assertEqualString("gzip", cl->argv[0]);
127         assertEqualString("-d", cl->argv[1]);
128         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
129
130         /* A command name with two arguments. */
131         assert((cl = __archive_cmdline_allocate()) != NULL);
132         if (cl == NULL)
133                 return;
134         assertEqualInt(ARCHIVE_OK, __archive_cmdline_parse(cl, "gzip -d -q"));
135         assertEqualInt(3, cl->argc);
136         assertEqualString("gzip", cl->path);
137         assertEqualString("gzip", cl->argv[0]);
138         assertEqualString("-d", cl->argv[1]);
139         assertEqualString("-q", cl->argv[2]);
140         assertEqualInt(ARCHIVE_OK, __archive_cmdline_free(cl));
141 }