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 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 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