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