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
in_first_line(const char * p,const char * substring)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 
DEFINE_TEST(test_option_help)27 DEFINE_TEST(test_option_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 >= 7);
42           failure("First line of help output should contain string 'bsdcpio'");
43           assert(in_first_line(p, "bsdcpio"));
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