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