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