test_archive_cmdline.c revision 311041
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
32DEFINE_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 character. */
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 character: 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 character: 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 character: 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}
142