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