xref: /freebsd/contrib/libarchive/tar/test/test_help.c (revision b1879975794772ee51f0b4865753364c7d7626c3)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2003-2007 Tim Kientzle
5  * All rights reserved.
6  */
7 #include "test.h"
8 
9 /*
10  * Test that "--help", "-h", and "-W help" options all work and
11  * generate reasonable output.
12  */
13 
14 static int
15 in_first_line(const char *p, const char *substring)
16 {
17 	size_t l = strlen(substring);
18 
19 	while (*p != '\0' && *p != '\n') {
20 		if (memcmp(p, substring, l) == 0)
21 			return (1);
22 		++p;
23 	}
24 	return (0);
25 }
26 
27 DEFINE_TEST(test_help)
28 {
29 	int r;
30 	char *p;
31 	size_t plen;
32 
33 	/* Exercise --help option. */
34 	r = systemf("%s --help >help.stdout 2>help.stderr", testprog);
35 	assertEqualInt(r, 0);
36 	failure("--help should generate nothing to stderr.");
37 	assertEmptyFile("help.stderr");
38 	/* Help message should start with name of program. */
39 	p = slurpfile(&plen, "help.stdout");
40 	failure("Help output should be long enough.");
41 	assert(plen >= 6);
42 	failure("First line of help output should contain 'bsdtar': %s", p);
43 	assert(in_first_line(p, "bsdtar"));
44 	/*
45 	 * TODO: Extend this check to further verify that --help output
46 	 * looks approximately right.
47 	 */
48 	free(p);
49 
50 	/* -h option should generate the same output. */
51 	r = systemf("%s -h >h.stdout 2>h.stderr", testprog);
52 	assertEqualInt(r, 0);
53 	failure("-h should generate nothing to stderr.");
54 	assertEmptyFile("h.stderr");
55 	failure("stdout should be same for -h and --help");
56 	assertEqualFile("h.stdout", "help.stdout");
57 
58 	/* -W help should be another synonym. */
59 	r = systemf("%s -W help >Whelp.stdout 2>Whelp.stderr", testprog);
60 	assertEqualInt(r, 0);
61 	failure("-W help should generate nothing to stderr.");
62 	assertEmptyFile("Whelp.stderr");
63 	failure("stdout should be same for -W help and --help");
64 	assertEqualFile("Whelp.stdout", "help.stdout");
65 }
66